parent
8fc19ace18
commit
830c7bf651
@ -0,0 +1,215 @@
|
|||||||
|
# Weaviate API Client Documentation
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The Weaviate API Client is an interface to Weaviate, a vector database with a GraphQL API. This client allows you to interact with Weaviate programmatically, making it easier to create collections, add objects, query data, update objects, and delete objects within your Weaviate instance.
|
||||||
|
|
||||||
|
This documentation provides a comprehensive guide on how to use the Weaviate API Client, including its initialization, methods, and usage examples.
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
- [Installation](#installation)
|
||||||
|
- [Initialization](#initialization)
|
||||||
|
- [Methods](#methods)
|
||||||
|
- [create_collection](#create-collection)
|
||||||
|
- [add](#add)
|
||||||
|
- [query](#query)
|
||||||
|
- [update](#update)
|
||||||
|
- [delete](#delete)
|
||||||
|
- [Examples](#examples)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Before using the Weaviate API Client, make sure to install the `weaviate-client` library. You can install it using pip:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install weaviate-client
|
||||||
|
```
|
||||||
|
|
||||||
|
## Initialization
|
||||||
|
|
||||||
|
To use the Weaviate API Client, you need to initialize an instance of the `WeaviateClient` class. Here are the parameters you can pass to the constructor:
|
||||||
|
|
||||||
|
| Parameter | Type | Description |
|
||||||
|
|----------------------|----------------|----------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| `http_host` | str | The HTTP host of the Weaviate server. |
|
||||||
|
| `http_port` | str | The HTTP port of the Weaviate server. |
|
||||||
|
| `http_secure` | bool | Whether to use HTTPS. |
|
||||||
|
| `grpc_host` | Optional[str] | The gRPC host of the Weaviate server. (Optional) |
|
||||||
|
| `grpc_port` | Optional[str] | The gRPC port of the Weaviate server. (Optional) |
|
||||||
|
| `grpc_secure` | Optional[bool] | Whether to use gRPC over TLS. (Optional) |
|
||||||
|
| `auth_client_secret` | Optional[Any] | The authentication client secret. (Optional) |
|
||||||
|
| `additional_headers` | Optional[Dict[str, str]] | Additional headers to send with requests. (Optional) |
|
||||||
|
| `additional_config` | Optional[weaviate.AdditionalConfig] | Additional configuration for the client. (Optional) |
|
||||||
|
| `connection_params` | Dict[str, Any] | Dictionary containing connection parameters. This parameter is used internally and can be ignored in most cases. |
|
||||||
|
|
||||||
|
Here's an example of how to initialize a WeaviateClient:
|
||||||
|
|
||||||
|
```python
|
||||||
|
from weaviate_client import WeaviateClient
|
||||||
|
|
||||||
|
weaviate_client = WeaviateClient(
|
||||||
|
http_host="YOUR_HTTP_HOST",
|
||||||
|
http_port="YOUR_HTTP_PORT",
|
||||||
|
http_secure=True,
|
||||||
|
grpc_host="YOUR_gRPC_HOST",
|
||||||
|
grpc_port="YOUR_gRPC_PORT",
|
||||||
|
grpc_secure=True,
|
||||||
|
auth_client_secret="YOUR_APIKEY",
|
||||||
|
additional_headers={"X-OpenAI-Api-Key": "YOUR_OPENAI_APIKEY"},
|
||||||
|
additional_config=None, # You can pass additional configuration here
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Methods
|
||||||
|
|
||||||
|
### `create_collection`
|
||||||
|
|
||||||
|
The `create_collection` method allows you to create a new collection in Weaviate. A collection is a container for storing objects with specific properties.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- `name` (str): The name of the collection.
|
||||||
|
- `properties` (List[Dict[str, Any]]): A list of dictionaries specifying the properties of objects to be stored in the collection.
|
||||||
|
- `vectorizer_config` (Any, optional): Additional vectorizer configuration for the collection. (Optional)
|
||||||
|
|
||||||
|
#### Usage
|
||||||
|
|
||||||
|
```python
|
||||||
|
weaviate_client.create_collection(
|
||||||
|
name="my_collection",
|
||||||
|
properties=[
|
||||||
|
{"name": "property1", "dataType": ["string"]},
|
||||||
|
{"name": "property2", "dataType": ["int"]},
|
||||||
|
],
|
||||||
|
vectorizer_config=None # Optional vectorizer configuration
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### `add`
|
||||||
|
|
||||||
|
The `add` method allows you to add an object to a specified collection in Weaviate.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- `collection_name` (str): The name of the collection where the object will be added.
|
||||||
|
- `properties` (Dict[str, Any]): A dictionary specifying the properties of the object to be added.
|
||||||
|
|
||||||
|
#### Usage
|
||||||
|
|
||||||
|
```python
|
||||||
|
weaviate_client.add(
|
||||||
|
collection_name="my_collection",
|
||||||
|
properties={"property1": "value1", "property2": 42}
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### `query`
|
||||||
|
|
||||||
|
The `query` method allows you to query objects from a specified collection in Weaviate.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- `collection_name` (str): The name of the collection to query.
|
||||||
|
- `query` (str): The query string specifying the search criteria.
|
||||||
|
- `limit` (int, optional): The maximum number of results to return. (Default: 10)
|
||||||
|
|
||||||
|
#### Usage
|
||||||
|
|
||||||
|
```python
|
||||||
|
results = weaviate_client.query(
|
||||||
|
collection_name="my_collection",
|
||||||
|
query="property1:value1",
|
||||||
|
limit=20 # Optional, specify the limit
|
||||||
|
|
||||||
|
if needed
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### `update`
|
||||||
|
|
||||||
|
The `update` method allows you to update an object in a specified collection in Weaviate.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- `collection_name` (str): The name of the collection where the object exists.
|
||||||
|
- `object_id` (str): The ID of the object to be updated.
|
||||||
|
- `properties` (Dict[str, Any]): A dictionary specifying the properties to update.
|
||||||
|
|
||||||
|
#### Usage
|
||||||
|
|
||||||
|
```python
|
||||||
|
weaviate_client.update(
|
||||||
|
collection_name="my_collection",
|
||||||
|
object_id="object123",
|
||||||
|
properties={"property1": "new_value", "property2": 99}
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### `delete`
|
||||||
|
|
||||||
|
The `delete` method allows you to delete an object from a specified collection in Weaviate.
|
||||||
|
|
||||||
|
#### Parameters
|
||||||
|
|
||||||
|
- `collection_name` (str): The name of the collection from which to delete the object.
|
||||||
|
- `object_id` (str): The ID of the object to delete.
|
||||||
|
|
||||||
|
#### Usage
|
||||||
|
|
||||||
|
```python
|
||||||
|
weaviate_client.delete(
|
||||||
|
collection_name="my_collection",
|
||||||
|
object_id="object123"
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
Here are three examples demonstrating how to use the Weaviate API Client for common tasks:
|
||||||
|
|
||||||
|
### Example 1: Creating a Collection
|
||||||
|
|
||||||
|
```python
|
||||||
|
weaviate_client.create_collection(
|
||||||
|
name="people",
|
||||||
|
properties=[
|
||||||
|
{"name": "name", "dataType": ["string"]},
|
||||||
|
{"name": "age", "dataType": ["int"]}
|
||||||
|
]
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 2: Adding an Object
|
||||||
|
|
||||||
|
```python
|
||||||
|
weaviate_client.add(
|
||||||
|
collection_name="people",
|
||||||
|
properties={"name": "John", "age": 30}
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example 3: Querying Objects
|
||||||
|
|
||||||
|
```python
|
||||||
|
results = weaviate_client.query(
|
||||||
|
collection_name="people",
|
||||||
|
query="name:John",
|
||||||
|
limit=5
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
These examples cover the basic operations of creating collections, adding objects, and querying objects using the Weaviate API Client.
|
||||||
|
|
||||||
|
## Additional Information and Tips
|
||||||
|
|
||||||
|
- If you encounter any errors during the operations, the client will raise exceptions with informative error messages.
|
||||||
|
- You can explore more advanced features and configurations in the Weaviate documentation.
|
||||||
|
- Make sure to handle authentication and security appropriately when using the client in production environments.
|
||||||
|
|
||||||
|
## References and Resources
|
||||||
|
|
||||||
|
- [Weaviate Documentation](https://weaviate.readthedocs.io/en/latest/): Official documentation for Weaviate.
|
||||||
|
- [Weaviate GitHub Repository](https://github.com/semi-technologies/weaviate): The source code and issue tracker for Weaviate.
|
||||||
|
|
||||||
|
This documentation provides a comprehensive guide on using the Weaviate API Client to interact with Weaviate, making it easier to manage and query your data.
|
@ -1,4 +1,216 @@
|
|||||||
"""
|
"""
|
||||||
Weaviate API Client
|
Weaviate API Client
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
|
from swarms.memory.base_vectordb import VectorDatabase
|
||||||
|
|
||||||
|
try:
|
||||||
|
import weaviate
|
||||||
|
except ImportError as error:
|
||||||
|
print("pip install weaviate-client")
|
||||||
|
subprocess.run(["pip", "install", "weaviate-client"])
|
||||||
|
|
||||||
|
|
||||||
|
class WeaviateClient(VectorDatabase):
|
||||||
|
"""
|
||||||
|
|
||||||
|
Weaviate API Client
|
||||||
|
Interface to Weaviate, a vector database with a GraphQL API.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
http_host (str): The HTTP host of the Weaviate server.
|
||||||
|
http_port (str): The HTTP port of the Weaviate server.
|
||||||
|
http_secure (bool): Whether to use HTTPS.
|
||||||
|
grpc_host (Optional[str]): The gRPC host of the Weaviate server.
|
||||||
|
grpc_port (Optional[str]): The gRPC port of the Weaviate server.
|
||||||
|
grpc_secure (Optional[bool]): Whether to use gRPC over TLS.
|
||||||
|
auth_client_secret (Optional[Any]): The authentication client secret.
|
||||||
|
additional_headers (Optional[Dict[str, str]]): Additional headers to send with requests.
|
||||||
|
additional_config (Optional[weaviate.AdditionalConfig]): Additional configuration for the client.
|
||||||
|
|
||||||
|
Methods:
|
||||||
|
create_collection: Create a new collection in Weaviate.
|
||||||
|
add: Add an object to a specified collection.
|
||||||
|
query: Query objects from a specified collection.
|
||||||
|
update: Update an object in a specified collection.
|
||||||
|
delete: Delete an object from a specified collection.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
>>> from swarms.memory import WeaviateClient
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
http_host: str,
|
||||||
|
http_port: str,
|
||||||
|
http_secure: bool,
|
||||||
|
grpc_host: Optional[str] = None,
|
||||||
|
grpc_port: Optional[str] = None,
|
||||||
|
grpc_secure: Optional[bool] = None,
|
||||||
|
auth_client_secret: Optional[Any] = None,
|
||||||
|
additional_headers: Optional[Dict[str, str]] = None,
|
||||||
|
additional_config: Optional[weaviate.AdditionalConfig] = None,
|
||||||
|
connection_params: Dict[str, Any] = None,
|
||||||
|
*args,
|
||||||
|
**kwargs,
|
||||||
|
):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.http_host = http_host
|
||||||
|
self.http_port = http_port
|
||||||
|
self.http_secure = http_secure
|
||||||
|
self.grpc_host = grpc_host
|
||||||
|
self.grpc_port = grpc_port
|
||||||
|
self.grpc_secure = grpc_secure
|
||||||
|
self.auth_client_secret = auth_client_secret
|
||||||
|
self.additional_headers = additional_headers
|
||||||
|
self.additional_config = additional_config
|
||||||
|
self.connection_params = connection_params
|
||||||
|
|
||||||
|
# If connection_params are provided, use them to initialize the client.
|
||||||
|
connection_params = weaviate.ConnectionParams.from_params(
|
||||||
|
http_host=http_host,
|
||||||
|
http_port=http_port,
|
||||||
|
http_secure=http_secure,
|
||||||
|
grpc_host=grpc_host,
|
||||||
|
grpc_port=grpc_port,
|
||||||
|
grpc_secure=grpc_secure,
|
||||||
|
)
|
||||||
|
|
||||||
|
# If additional headers are provided, add them to the connection params.
|
||||||
|
self.client = weaviate.WeaviateClient(
|
||||||
|
connection_params=connection_params,
|
||||||
|
auth_client_secret=auth_client_secret,
|
||||||
|
additional_headers=additional_headers,
|
||||||
|
additional_config=additional_config,
|
||||||
|
)
|
||||||
|
|
||||||
|
def create_collection(
|
||||||
|
self,
|
||||||
|
name: str,
|
||||||
|
properties: List[Dict[str, Any]],
|
||||||
|
vectorizer_config: Any = None,
|
||||||
|
):
|
||||||
|
"""Create a new collection in Weaviate.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
name (str): _description_
|
||||||
|
properties (List[Dict[str, Any]]): _description_
|
||||||
|
vectorizer_config (Any, optional): _description_. Defaults to None.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
out = self.client.collections.create(
|
||||||
|
name=name,
|
||||||
|
vectorizer_config=vectorizer_config,
|
||||||
|
properties=properties,
|
||||||
|
)
|
||||||
|
print(out)
|
||||||
|
except Exception as error:
|
||||||
|
print(f"Error creating collection: {error}")
|
||||||
|
raise
|
||||||
|
|
||||||
|
def add(self, collection_name: str, properties: Dict[str, Any]):
|
||||||
|
"""Add an object to a specified collection.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
collection_name (str): _description_
|
||||||
|
properties (Dict[str, Any]): _description_
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
_type_: _description_
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
collection = self.client.collections.get(collection_name)
|
||||||
|
return collection.data.insert(properties)
|
||||||
|
except Exception as error:
|
||||||
|
print(f"Error adding object: {error}")
|
||||||
|
raise
|
||||||
|
|
||||||
|
def query(
|
||||||
|
self, collection_name: str, query: str, limit: int = 10
|
||||||
|
):
|
||||||
|
"""Query objects from a specified collection.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
collection_name (str): _description_
|
||||||
|
query (str): _description_
|
||||||
|
limit (int, optional): _description_. Defaults to 10.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
_type_: _description_
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
collection = self.client.collections.get(collection_name)
|
||||||
|
response = collection.query.bm25(query=query, limit=limit)
|
||||||
|
return [o.properties for o in response.objects]
|
||||||
|
except Exception as error:
|
||||||
|
print(f"Error querying objects: {error}")
|
||||||
|
raise
|
||||||
|
|
||||||
|
def update(
|
||||||
|
self,
|
||||||
|
collection_name: str,
|
||||||
|
object_id: str,
|
||||||
|
properties: Dict[str, Any],
|
||||||
|
):
|
||||||
|
"""UPdate an object in a specified collection.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
collection_name (str): _description_
|
||||||
|
object_id (str): _description_
|
||||||
|
properties (Dict[str, Any]): _description_
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
collection = self.client.collections.get(collection_name)
|
||||||
|
collection.data.update(object_id, properties)
|
||||||
|
except Exception as error:
|
||||||
|
print(f"Error updating object: {error}")
|
||||||
|
raise
|
||||||
|
|
||||||
|
def delete(self, collection_name: str, object_id: str):
|
||||||
|
"""Delete an object from a specified collection.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
collection_name (str): _description_
|
||||||
|
object_id (str): _description_
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
collection = self.client.collections.get(collection_name)
|
||||||
|
collection.data.delete_by_id(object_id)
|
||||||
|
except Exception as error:
|
||||||
|
print(f"Error deleting object: {error}")
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
|
# # Example usage
|
||||||
|
# connection_params = {
|
||||||
|
# "http_host": "YOUR_HTTP_HOST",
|
||||||
|
# "http_port": "YOUR_HTTP_PORT",
|
||||||
|
# "http_secure": True,
|
||||||
|
# "grpc_host": "YOUR_gRPC_HOST",
|
||||||
|
# "grpc_port": "YOUR_gRPC_PORT",
|
||||||
|
# "grpc_secure": True,
|
||||||
|
# "auth_client_secret": weaviate.AuthApiKey("YOUR_APIKEY"),
|
||||||
|
# "additional_headers": {"X-OpenAI-Api-Key": "YOUR_OPENAI_APIKEY"},
|
||||||
|
# "additional_config": weaviate.AdditionalConfig(
|
||||||
|
# startup_period=10, timeout=(5, 15)
|
||||||
|
# ),
|
||||||
|
# }
|
||||||
|
|
||||||
|
# weaviate_client = WeaviateClient(connection_params)
|
||||||
|
|
||||||
|
|
||||||
|
# # Example usage
|
||||||
|
# weaviate_client = WeaviateClient(
|
||||||
|
# http_host="YOUR_HTTP_HOST",
|
||||||
|
# http_port="YOUR_HTTP_PORT",
|
||||||
|
# http_secure=True,
|
||||||
|
# grpc_host="YOUR_gRPC_HOST",
|
||||||
|
# grpc_port="YOUR_gRPC_PORT",
|
||||||
|
# grpc_secure=True,
|
||||||
|
# auth_client_secret=weaviate.AuthApiKey("YOUR_APIKEY"),
|
||||||
|
# additional_headers={"X-OpenAI-Api-Key": "YOUR_OPENAI_APIKEY"},
|
||||||
|
# additional_config=weaviate.AdditionalConfig(startup_period=10, timeout=(5, 15))
|
||||||
|
# )
|
||||||
|
@ -0,0 +1,196 @@
|
|||||||
|
import pytest
|
||||||
|
from unittest.mock import Mock, patch
|
||||||
|
from swarms.memory.weaviate import WeaviateClient
|
||||||
|
|
||||||
|
|
||||||
|
# Define fixture for a WeaviateClient instance with mocked methods
|
||||||
|
@pytest.fixture
|
||||||
|
def weaviate_client_mock():
|
||||||
|
client = WeaviateClient(
|
||||||
|
http_host="mock_host",
|
||||||
|
http_port="mock_port",
|
||||||
|
http_secure=False,
|
||||||
|
grpc_host="mock_grpc_host",
|
||||||
|
grpc_port="mock_grpc_port",
|
||||||
|
grpc_secure=False,
|
||||||
|
auth_client_secret="mock_api_key",
|
||||||
|
additional_headers={
|
||||||
|
"X-OpenAI-Api-Key": "mock_openai_api_key"
|
||||||
|
},
|
||||||
|
additional_config=Mock(),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Mock the methods
|
||||||
|
client.client.collections.create = Mock()
|
||||||
|
client.client.collections.get = Mock()
|
||||||
|
client.client.collections.query = Mock()
|
||||||
|
client.client.collections.data.insert = Mock()
|
||||||
|
client.client.collections.data.update = Mock()
|
||||||
|
client.client.collections.data.delete_by_id = Mock()
|
||||||
|
|
||||||
|
return client
|
||||||
|
|
||||||
|
|
||||||
|
# Define tests for the WeaviateClient class
|
||||||
|
def test_create_collection(weaviate_client_mock):
|
||||||
|
# Test creating a collection
|
||||||
|
weaviate_client_mock.create_collection(
|
||||||
|
"test_collection", [{"name": "property"}]
|
||||||
|
)
|
||||||
|
weaviate_client_mock.client.collections.create.assert_called_with(
|
||||||
|
name="test_collection",
|
||||||
|
vectorizer_config=None,
|
||||||
|
properties=[{"name": "property"}],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_object(weaviate_client_mock):
|
||||||
|
# Test adding an object
|
||||||
|
properties = {"name": "John"}
|
||||||
|
weaviate_client_mock.add("test_collection", properties)
|
||||||
|
weaviate_client_mock.client.collections.get.assert_called_with(
|
||||||
|
"test_collection"
|
||||||
|
)
|
||||||
|
weaviate_client_mock.client.collections.data.insert.assert_called_with(
|
||||||
|
properties
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_query_objects(weaviate_client_mock):
|
||||||
|
# Test querying objects
|
||||||
|
query = "name:John"
|
||||||
|
weaviate_client_mock.query("test_collection", query)
|
||||||
|
weaviate_client_mock.client.collections.get.assert_called_with(
|
||||||
|
"test_collection"
|
||||||
|
)
|
||||||
|
weaviate_client_mock.client.collections.query.bm25.assert_called_with(
|
||||||
|
query=query, limit=10
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_object(weaviate_client_mock):
|
||||||
|
# Test updating an object
|
||||||
|
object_id = "12345"
|
||||||
|
properties = {"name": "Jane"}
|
||||||
|
weaviate_client_mock.update(
|
||||||
|
"test_collection", object_id, properties
|
||||||
|
)
|
||||||
|
weaviate_client_mock.client.collections.get.assert_called_with(
|
||||||
|
"test_collection"
|
||||||
|
)
|
||||||
|
weaviate_client_mock.client.collections.data.update.assert_called_with(
|
||||||
|
object_id, properties
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_delete_object(weaviate_client_mock):
|
||||||
|
# Test deleting an object
|
||||||
|
object_id = "12345"
|
||||||
|
weaviate_client_mock.delete("test_collection", object_id)
|
||||||
|
weaviate_client_mock.client.collections.get.assert_called_with(
|
||||||
|
"test_collection"
|
||||||
|
)
|
||||||
|
weaviate_client_mock.client.collections.data.delete_by_id.assert_called_with(
|
||||||
|
object_id
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_collection_with_vectorizer_config(
|
||||||
|
weaviate_client_mock,
|
||||||
|
):
|
||||||
|
# Test creating a collection with vectorizer configuration
|
||||||
|
vectorizer_config = {"config_key": "config_value"}
|
||||||
|
weaviate_client_mock.create_collection(
|
||||||
|
"test_collection", [{"name": "property"}], vectorizer_config
|
||||||
|
)
|
||||||
|
weaviate_client_mock.client.collections.create.assert_called_with(
|
||||||
|
name="test_collection",
|
||||||
|
vectorizer_config=vectorizer_config,
|
||||||
|
properties=[{"name": "property"}],
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_query_objects_with_limit(weaviate_client_mock):
|
||||||
|
# Test querying objects with a specified limit
|
||||||
|
query = "name:John"
|
||||||
|
limit = 20
|
||||||
|
weaviate_client_mock.query("test_collection", query, limit)
|
||||||
|
weaviate_client_mock.client.collections.get.assert_called_with(
|
||||||
|
"test_collection"
|
||||||
|
)
|
||||||
|
weaviate_client_mock.client.collections.query.bm25.assert_called_with(
|
||||||
|
query=query, limit=limit
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_query_objects_without_limit(weaviate_client_mock):
|
||||||
|
# Test querying objects without specifying a limit
|
||||||
|
query = "name:John"
|
||||||
|
weaviate_client_mock.query("test_collection", query)
|
||||||
|
weaviate_client_mock.client.collections.get.assert_called_with(
|
||||||
|
"test_collection"
|
||||||
|
)
|
||||||
|
weaviate_client_mock.client.collections.query.bm25.assert_called_with(
|
||||||
|
query=query, limit=10
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_collection_failure(weaviate_client_mock):
|
||||||
|
# Test failure when creating a collection
|
||||||
|
with patch(
|
||||||
|
"weaviate_client.weaviate.collections.create",
|
||||||
|
side_effect=Exception("Create error"),
|
||||||
|
):
|
||||||
|
with pytest.raises(
|
||||||
|
Exception, match="Error creating collection"
|
||||||
|
):
|
||||||
|
weaviate_client_mock.create_collection(
|
||||||
|
"test_collection", [{"name": "property"}]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_object_failure(weaviate_client_mock):
|
||||||
|
# Test failure when adding an object
|
||||||
|
properties = {"name": "John"}
|
||||||
|
with patch(
|
||||||
|
"weaviate_client.weaviate.collections.data.insert",
|
||||||
|
side_effect=Exception("Insert error"),
|
||||||
|
):
|
||||||
|
with pytest.raises(Exception, match="Error adding object"):
|
||||||
|
weaviate_client_mock.add("test_collection", properties)
|
||||||
|
|
||||||
|
|
||||||
|
def test_query_objects_failure(weaviate_client_mock):
|
||||||
|
# Test failure when querying objects
|
||||||
|
query = "name:John"
|
||||||
|
with patch(
|
||||||
|
"weaviate_client.weaviate.collections.query.bm25",
|
||||||
|
side_effect=Exception("Query error"),
|
||||||
|
):
|
||||||
|
with pytest.raises(Exception, match="Error querying objects"):
|
||||||
|
weaviate_client_mock.query("test_collection", query)
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_object_failure(weaviate_client_mock):
|
||||||
|
# Test failure when updating an object
|
||||||
|
object_id = "12345"
|
||||||
|
properties = {"name": "Jane"}
|
||||||
|
with patch(
|
||||||
|
"weaviate_client.weaviate.collections.data.update",
|
||||||
|
side_effect=Exception("Update error"),
|
||||||
|
):
|
||||||
|
with pytest.raises(Exception, match="Error updating object"):
|
||||||
|
weaviate_client_mock.update(
|
||||||
|
"test_collection", object_id, properties
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_delete_object_failure(weaviate_client_mock):
|
||||||
|
# Test failure when deleting an object
|
||||||
|
object_id = "12345"
|
||||||
|
with patch(
|
||||||
|
"weaviate_client.weaviate.collections.data.delete_by_id",
|
||||||
|
side_effect=Exception("Delete error"),
|
||||||
|
):
|
||||||
|
with pytest.raises(Exception, match="Error deleting object"):
|
||||||
|
weaviate_client_mock.delete("test_collection", object_id)
|
Loading…
Reference in new issue