> ## Documentation Index
> Fetch the complete documentation index at: https://friendli.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# FriendliAI + Weaviate (Python)

> Build RAG apps with FriendliAI and Weaviate in Python. Combine vector search with Friendli Engine inference for context-aware, grounded responses.

Integration with [**Weaviate**](https://github.com/weaviate/weaviate) enables performing Retrieval Augmented Generation (RAG) directly within the Weaviate database.
This combines the power of [**Friendli Engine**](https://friendli.ai/why-friendliai) and Weaviate's efficient storage and fast retrieval capabilities to generate personalized and context-aware responses.

## How to Use

Before you start, ensure you've already obtained the `API_KEY` from the [Friendli Suite > Personal Settings > API Keys](https://friendli.ai/suite/~/setting/keys).
Also, set up your Weaviate instance following this [guide](https://weaviate.io/developers/weaviate/starter-guides/which-weaviate).
Your Weaviate instance must be configured with the FriendliAI generative AI integration (`generative-friendliai`) module.

```bash theme={null}
pip install -qU weaviate-client
```

### Instantiation

Now you can instantiate a [Weaviate collection](https://weaviate.io/developers/weaviate/manage-data/collections) using the model.
Choose the example for your endpoint type:

You can specify one of the [available models](https://friendli.ai/models?products=SERVERLESS) for the Model APIs.
The default model (i.e. `zai-org/GLM-5.2`) will be used if no model is specified.

<CodeGroup>
  ```python Model APIs theme={null}
  import weaviate
  import os
  from weaviate.classes.init import Auth
  from weaviate.classes.config import Configure

  headers = {
      "X-Friendli-Api-Key": os.getenv("API_KEY"),
  }

  client = weaviate.connect_to_weaviate_cloud(
      cluster_url=weaviate_url,                     # `weaviate_url`: your Weaviate URL
      auth_credentials=Auth.api_key(weaviate_key),  # `weaviate_key`: your Weaviate API key
      headers=headers
  )

  client.collections.create(
      "DemoCollection",
      generative_config=Configure.Generative.friendliai(
          model = "zai-org/GLM-5.2",
      )
      # Additional parameters not shown
  )

  client.close()
  ```

  ```python Dedicated Endpoints theme={null}
  import weaviate
  import os
  from weaviate.classes.init import Auth
  from weaviate.classes.config import Configure

  headers = {
      "X-Friendli-Api-Key": os.getenv("API_KEY"),
      "X-Friendli-Baseurl": "https://api.friendli.ai/dedicated",
  }

  client = weaviate.connect_to_weaviate_cloud(
      cluster_url=weaviate_url,                     # `weaviate_url`: your Weaviate URL
      auth_credentials=Auth.api_key(weaviate_key),  # `weaviate_key`: your Weaviate API key
      headers=headers
  )

  client.collections.create(
      "DemoCollection",
      generative_config=Configure.Generative.friendliai(
          model = "YOUR_ENDPOINT_ID",
      )
      # Additional parameters not shown
  )

  client.close()
  ```

  ```python Fine-tuned Dedicated Endpoints theme={null}
  import weaviate
  import os
  from weaviate.classes.init import Auth
  from weaviate.classes.config import Configure

  headers = {
      "X-Friendli-Api-Key": os.getenv("API_KEY"),
      "X-Friendli-Baseurl": "https://api.friendli.ai/dedicated",
  }

  client = weaviate.connect_to_weaviate_cloud(
      cluster_url=weaviate_url,                     # `weaviate_url`: your Weaviate URL
      auth_credentials=Auth.api_key(weaviate_key),  # `weaviate_key`: your Weaviate API key
      headers=headers
  )

  client.collections.create(
      "DemoCollection",
      generative_config=Configure.Generative.friendliai(
          model = "YOUR_ENDPOINT_ID:YOUR_ADAPTER_ROUTE",
      )
      # Additional parameters not shown
  )

  client.close()
  ```
</CodeGroup>

#### Configurable Parameters

Configure the following generative parameters to customize the model behavior.

```python theme={null}
from weaviate.classes.config import Configure

client.collections.create(
    "DemoCollection",
    generative_config=Configure.Generative.friendliai(
        # These parameters are optional
        model = "zai-org/GLM-5.2",
        max_tokens = 500,
        temperature = 0.7,
    )
)
```

### Retrieval Augmented Generation

After configuring Weaviate, perform RAG operations, either with the single prompt or grouped task method.

#### Single Prompt

To generate text for each object in the search results, use the single prompt method.
The example below generates outputs for each of the n search results, where n is specified by the limit parameter.

When creating a single prompt query, use braces `{}` to interpolate the object properties you want Weaviate to pass on to the language model.
For example, to pass on the object's title property, include `{title}` in the query.

```python theme={null}
collection = client.collections.get("DemoCollection")

response = collection.generate.near_text(
    query="A holiday film",  # The model provider integration will automatically vectorize the query
    single_prompt="Translate this into French: {title}",
    limit=2
)

for obj in response.objects:
    print(obj.properties["title"])
    print(f"Generated output: {obj.generated}")  # Note that the generated output is per object
```

#### Grouped Task

To generate one text for the entire set of search results, use the grouped task method.
In other words, when you have n search results, the generative model generates one output for the entire group.

```python theme={null}
collection = client.collections.get("DemoCollection")

response = collection.generate.near_text(
    query="A holiday film",  # The model provider integration will automatically vectorize the query
    grouped_task="Write a fun tweet to encourage readers to check out these films.",
    limit=2
)

print(f"Generated output: {response.generated}")  # Note that the generated output is per query
for obj in response.objects:
    print(obj.properties["title"])
```

### Further Resources

Once the integrations are configured at the collection, the data management and search operations in Weaviate work identically to any other collection.
See the following model-agnostic examples:

* [How-to manage data guides show how to perform data operations](https://weaviate.io/developers/weaviate/manage-data/create).
* [How-to search guides show how to perform search operations](https://weaviate.io/developers/weaviate/search/basics).
