This package provides an idiomatic Python interface to the VikingDB v2 data-plane APIs. The SDK mirrors the behaviour and API surface of the official Java and Go clients while embracing Python conventions (dataclasses/pydantic models, requests-based transport, and pytest-driven examples).
- Simple client configuration with AK/SK signing (Volcano Engine V4) or API-key authentication.
- Vector Database: Request envelope handling with typed request/response models covering collection, index, and embedding workflows.
- Memory Management: Conversational memory APIs for managing user profiles, events, and session messages with semantic search capabilities.
- Pluggable retry strategy (exponential backoff with jitter) and per-request overrides (
RequestOptions). - Executable example guides (
pytestintegration tests and standalone scripts) that demonstrate connectivity, CRUD, search, analytics, embedding, and memory management scenarios against a real VikingDB environment.
Clone the repository and install the SDK in editable mode:
uv add vikingdb-python-sdkDependencies: The SDK relies on
requests,pydantic>=2.5, and the Volcano Engine base SDK (volcengine) for request signing.
import os from vikingdb import IAM from vikingdb.vector import SearchByRandomRequest, VikingVector auth = IAM(ak=os.environ["VIKINGDB_AK"], sk=os.environ["VIKINGDB_SK"]) client = VikingVector( host=os.environ["VIKINGDB_HOST"], region=os.environ["VIKINGDB_REGION"], auth=auth, scheme="https", timeout=30, ) index = client.index( collection_name=os.environ["VIKINGDB_COLLECTION"], index_name=os.environ["VIKINGDB_INDEX"], ) resp = index.search_by_random(SearchByRandomRequest(limit=1)) print(f"request_id={resp.request_id} hits={len(resp.result.data or [])}")from vikingdb import IAM from vikingdb.memory import VikingMem auth = IAM(ak="<AK>", sk="<SK>") client = VikingMem( host="api-knowledgebase.mlp.cn-beijing.volces.com", region="cn-beijing", auth=auth, scheme="http", ) # Get collection collection = client.get_collection( collection_name="demo_collection", project_name="default" ) # Add session messages collection.add_session( session_id="session_001", messages=[ {"role": "user", "content": "Hello, how is the weather today?"}, {"role": "assistant", "content": "Today is sunny, perfect for going out."} ], metadata={ "default_user_id": "user_001", "default_assistant_id": "assistant_001", } ) # Search memories result = collection.search_memory( query="weather today", filter={"user_id": "user_001", "memory_type": ["event_v1"]}, limit=10 ) print("search results:", result)The integration guides under examples/vector mirror the Go SDK walkthroughs (1–6). Each test connects to a live VikingDB environment and exercises a specific workflow.
-
Set the required environment variables (or create a
.envfile in the project root):VIKINGDB_AK=your-access-key VIKINGDB_SK=your-secret-key VIKINGDB_COLLECTION=demo_collection VIKINGDB_INDEX=demo_index # Optional: # VIKINGDB_PROJECT=project-name # VIKINGDB_RESOURCE_ID=resource-idThe pytest guides themselves lock to the ap-southeast-1 public datasets:
- host:
api-vikingdb.vikingdb.ap-southeast-1.volces.com - region:
ap-southeast-1 - text walkthroughs use
collection=text,index=text_index - vector walkthroughs use
collection=vector,index=vector_index
- host:
-
Install pytest (if not already available):
uv add --dev pytest
-
Execute the guides:
uv run pytest examples/vector -k scenario
Each scenario writes temporary documents using unique session tags and cleans them up afterwards.
The memory examples under examples/memory demonstrate the core workflows for managing conversational memories:
-
01_init_client_and_collection.py: Initialize the VikingMem client and get collection instances using either collection name + project name or resource ID.
-
02_add_session.py: Add session messages (user-assistant conversations) to the memory collection with metadata such as user ID, assistant ID, and timestamps.
-
03_search_memory.py: Search memories with various filters including:
- User profile search
- Event search by semantic query
- Time range filtering for recent events
To run the memory examples:
# Set environment variables export VIKINGDB_AK=your-access-key export VIKINGDB_SK=your-secret-key # Run individual examples python examples/memory/01_init_client_and_collection.py python examples/memory/02_add_session.py python examples/memory/03_search_memory.pyvikingdb._client,vikingdb.auth,vikingdb.request_options, andvikingdb.vector.exceptionsform the shared runtime used by all present and future SDK domains (vector, memory, knowledge).- Domain-specific features live under dedicated namespaces such as
vikingdb.vectorandvikingdb.memory, where the high-level clients (VikingVector,VikingMem) compose the shared auth stack atop the shared client. - Vector request/response models now surface directly from
vikingdb.vector(backed internally byvikingdb/vector/models). - Memory APIs return plain dictionaries without object encapsulation, providing a lightweight interface for conversational memory management (session, profile, event operations).
- Imports from the root package now focus on cross-cutting utilities (auth, config, request options), while application code should pull domain-specific functionality from
vikingdb.vectororvikingdb.memoryexplicitly.
vikingdb/ ├── _client.py # Shared base client built on volcengine Service ├── auth.py # Shared auth providers (IAM, API key) ├── request_options.py # Per-request overrides shared by all services ├── version.py # Package metadata ├── vector/ # Vector-specific clients and models │ ├── __init__.py # High-level vector client and namespace exports │ ├── base.py # Shared helpers for vector clients │ ├── collection.py # Collection operations │ ├── embedding.py # Embedding operations │ ├── index.py # Index/search operations │ ├── client.py # Vector service wrapper and high-level client │ ├── exceptions.py # Vector-specific exceptions │ └── models/ # Vector request/response models (pydantic) ├── memory/ # Memory-specific clients and models │ ├── __init__.py # High-level memory client and namespace exports │ ├── client.py # VikingMem service client │ ├── collection.py # Memory collection operations │ ├── types.py # Type definitions for memory operations │ └── exceptions.py # Memory-specific exceptions examples/ ├── vector/ # Vector integration guides (pytest) │ ├── 1_connectivity_test.py │ ├── 2_collection_lifecycle_test.py │ ├── 3_*_test.py # Search and indexing examples │ └── ... └── memory/ # Memory usage examples ├── 01_init_client_and_collection.py ├── 02_add_session.py └── 03_search_memory.py Contributions and feedback are welcome. Please ensure any new APIs match the OpenAPI specification and include accompanying example coverage.