feat: Add KuzuDB support to MCP server and make it default
- Add KuzuProviderConfig to schema for KuzuDB configuration - Update DatabaseDriverFactory to support KuzuDB initialization - Modify GraphitiService to handle KuzuDB driver instantiation - Update CLI argument parser to include 'kuzu' option - Make KuzuDB the default database provider (in-memory by default) - Add docker-compose-kuzu.yml for standalone KuzuDB deployment - Fix FalkorDB factory to parse URI into host/port parameters - Fix EntityNode type access (use labels[0] instead of type) - Add kuzu dependency to MCP server pyproject.toml 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f41a1e7ce3
commit
2e345698e4
7 changed files with 237 additions and 23 deletions
|
|
@ -68,7 +68,7 @@ embedder:
|
|||
model: "voyage-3"
|
||||
|
||||
database:
|
||||
provider: "neo4j" # Options: neo4j, falkordb
|
||||
provider: "kuzu" # Options: neo4j, falkordb, kuzu
|
||||
|
||||
providers:
|
||||
neo4j:
|
||||
|
|
@ -82,6 +82,10 @@ database:
|
|||
uri: ${FALKORDB_URI:redis://localhost:6379}
|
||||
password: ${FALKORDB_PASSWORD:}
|
||||
database: ${FALKORDB_DATABASE:default_db}
|
||||
|
||||
kuzu:
|
||||
db: ${KUZU_DB::memory:}
|
||||
max_concurrent_queries: ${KUZU_MAX_CONCURRENT_QUERIES:1}
|
||||
|
||||
graphiti:
|
||||
group_id: ${GRAPHITI_GROUP_ID:main}
|
||||
|
|
|
|||
42
mcp_server/docker/docker-compose-kuzu.yml
Normal file
42
mcp_server/docker/docker-compose-kuzu.yml
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
services:
|
||||
graphiti-mcp:
|
||||
image: zepai/knowledge-graph-mcp:latest
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
env_file:
|
||||
- path: .env
|
||||
required: false # Makes the file optional. Default value is 'true'
|
||||
environment:
|
||||
# Database configuration for KuzuDB
|
||||
- KUZU_DB=${KUZU_DB:-:memory:}
|
||||
- KUZU_MAX_CONCURRENT_QUERIES=${KUZU_MAX_CONCURRENT_QUERIES:-1}
|
||||
# LLM provider configurations
|
||||
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
||||
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
|
||||
- GOOGLE_API_KEY=${GOOGLE_API_KEY}
|
||||
- GROQ_API_KEY=${GROQ_API_KEY}
|
||||
- AZURE_OPENAI_API_KEY=${AZURE_OPENAI_API_KEY}
|
||||
- AZURE_OPENAI_ENDPOINT=${AZURE_OPENAI_ENDPOINT}
|
||||
- AZURE_OPENAI_DEPLOYMENT=${AZURE_OPENAI_DEPLOYMENT}
|
||||
# Embedder provider configurations
|
||||
- VOYAGE_API_KEY=${VOYAGE_API_KEY}
|
||||
- AZURE_OPENAI_EMBEDDINGS_ENDPOINT=${AZURE_OPENAI_EMBEDDINGS_ENDPOINT}
|
||||
- AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT=${AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT}
|
||||
# Application configuration
|
||||
- GRAPHITI_GROUP_ID=${GRAPHITI_GROUP_ID:-main}
|
||||
- SEMAPHORE_LIMIT=${SEMAPHORE_LIMIT:-10}
|
||||
- CONFIG_PATH=/app/config/config.yaml
|
||||
- PATH=/root/.local/bin:${PATH}
|
||||
volumes:
|
||||
- ./config.yaml:/app/config/config.yaml:ro
|
||||
# Optional: If you want to persist KuzuDB data, uncomment the following line
|
||||
# and change KUZU_DB to /data/kuzu.db
|
||||
# - kuzu_data:/data
|
||||
ports:
|
||||
- "8000:8000" # Expose the MCP server via HTTP for SSE transport
|
||||
command: ["uv", "run", "graphiti_mcp_server.py", "--transport", "sse", "--config", "/app/config/config.yaml"]
|
||||
|
||||
# Optional: Volume for persistent KuzuDB storage
|
||||
# volumes:
|
||||
# kuzu_data:
|
||||
|
|
@ -12,6 +12,7 @@ dependencies = [
|
|||
"pydantic-settings>=2.0.0",
|
||||
"pyyaml>=6.0",
|
||||
"pytest>=8.4.1",
|
||||
"kuzu>=0.11.2",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
|
|
@ -63,3 +64,6 @@ ignore = ["E501"]
|
|||
quote-style = "single"
|
||||
indent-style = "space"
|
||||
docstring-code-format = true
|
||||
|
||||
[tool.uv.sources]
|
||||
graphiti-core = { path = "../", editable = true }
|
||||
|
|
|
|||
|
|
@ -171,17 +171,25 @@ class FalkorDBProviderConfig(BaseModel):
|
|||
database: str = 'default_db'
|
||||
|
||||
|
||||
class KuzuProviderConfig(BaseModel):
|
||||
"""KuzuDB provider configuration."""
|
||||
|
||||
db: str = ':memory:'
|
||||
max_concurrent_queries: int = 1
|
||||
|
||||
|
||||
class DatabaseProvidersConfig(BaseModel):
|
||||
"""Database providers configuration."""
|
||||
|
||||
neo4j: Neo4jProviderConfig | None = None
|
||||
falkordb: FalkorDBProviderConfig | None = None
|
||||
kuzu: KuzuProviderConfig | None = None
|
||||
|
||||
|
||||
class DatabaseConfig(BaseModel):
|
||||
"""Database configuration."""
|
||||
|
||||
provider: str = Field(default='neo4j', description='Database provider')
|
||||
provider: str = Field(default='kuzu', description='Database provider')
|
||||
providers: DatabaseProvidersConfig = Field(default_factory=DatabaseProvidersConfig)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -154,18 +154,53 @@ class GraphitiService:
|
|||
# Store entity types for later use
|
||||
self.entity_types = custom_types
|
||||
|
||||
# Initialize Graphiti client with database connection params
|
||||
self.client = Graphiti(
|
||||
uri=db_config['uri'],
|
||||
user=db_config['user'],
|
||||
password=db_config['password'],
|
||||
llm_client=llm_client,
|
||||
embedder=embedder_client,
|
||||
max_coroutines=self.semaphore_limit,
|
||||
)
|
||||
# Initialize Graphiti client with appropriate driver
|
||||
if self.config.database.provider.lower() == 'kuzu':
|
||||
# For KuzuDB, create a KuzuDriver instance directly
|
||||
from graphiti_core.driver.kuzu_driver import KuzuDriver
|
||||
|
||||
# Test connection
|
||||
await self.client.driver.client.verify_connectivity() # type: ignore
|
||||
kuzu_driver = KuzuDriver(
|
||||
db=db_config['db'],
|
||||
max_concurrent_queries=db_config['max_concurrent_queries'],
|
||||
)
|
||||
|
||||
self.client = Graphiti(
|
||||
graph_driver=kuzu_driver,
|
||||
llm_client=llm_client,
|
||||
embedder=embedder_client,
|
||||
max_coroutines=self.semaphore_limit,
|
||||
)
|
||||
elif self.config.database.provider.lower() == 'falkordb':
|
||||
# For FalkorDB, create a FalkorDriver instance directly
|
||||
from graphiti_core.driver.falkordb_driver import FalkorDriver
|
||||
|
||||
falkor_driver = FalkorDriver(
|
||||
host=db_config['host'],
|
||||
port=db_config['port'],
|
||||
password=db_config['password'],
|
||||
database=db_config['database'],
|
||||
)
|
||||
|
||||
self.client = Graphiti(
|
||||
graph_driver=falkor_driver,
|
||||
llm_client=llm_client,
|
||||
embedder=embedder_client,
|
||||
max_coroutines=self.semaphore_limit,
|
||||
)
|
||||
else:
|
||||
# For Neo4j (default), use the original approach
|
||||
self.client = Graphiti(
|
||||
uri=db_config['uri'],
|
||||
user=db_config['user'],
|
||||
password=db_config['password'],
|
||||
llm_client=llm_client,
|
||||
embedder=embedder_client,
|
||||
max_coroutines=self.semaphore_limit,
|
||||
)
|
||||
|
||||
# Test connection (Neo4j and FalkorDB have verify_connectivity, KuzuDB doesn't need it)
|
||||
if self.config.database.provider.lower() != 'kuzu':
|
||||
await self.client.driver.client.verify_connectivity() # type: ignore
|
||||
|
||||
# Build indices
|
||||
await self.client.build_indices_and_constraints()
|
||||
|
|
@ -345,7 +380,7 @@ async def search_nodes(
|
|||
NodeResult(
|
||||
uuid=node.uuid,
|
||||
name=node.name,
|
||||
type=node.type or 'Unknown',
|
||||
type=node.labels[0] if node.labels else 'Unknown',
|
||||
created_at=node.created_at.isoformat() if node.created_at else None,
|
||||
summary=node.summary,
|
||||
)
|
||||
|
|
@ -667,7 +702,7 @@ async def initialize_server() -> ServerConfig:
|
|||
)
|
||||
parser.add_argument(
|
||||
'--database-provider',
|
||||
choices=['neo4j', 'falkordb'],
|
||||
choices=['neo4j', 'falkordb', 'kuzu'],
|
||||
help='Database provider to use',
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,14 @@ try:
|
|||
HAS_FALKOR = True
|
||||
except ImportError:
|
||||
HAS_FALKOR = False
|
||||
|
||||
# Try to import KuzuDriver if available
|
||||
try:
|
||||
from graphiti_core.driver.kuzu_driver import KuzuDriver # noqa: F401
|
||||
|
||||
HAS_KUZU = True
|
||||
except ImportError:
|
||||
HAS_KUZU = False
|
||||
from graphiti_core.embedder import EmbedderClient, OpenAIEmbedder
|
||||
from graphiti_core.llm_client import LLMClient, OpenAIClient
|
||||
from graphiti_core.llm_client.config import LLMConfig as GraphitiLLMConfig
|
||||
|
|
@ -327,16 +335,52 @@ class DatabaseDriverFactory:
|
|||
|
||||
# Check for environment variable overrides (for CI/CD compatibility)
|
||||
import os
|
||||
from urllib.parse import urlparse
|
||||
|
||||
uri = os.environ.get('FALKORDB_URI', falkor_config.uri)
|
||||
password = os.environ.get('FALKORDB_PASSWORD', falkor_config.password)
|
||||
|
||||
# Parse the URI to extract host and port
|
||||
parsed = urlparse(uri)
|
||||
host = parsed.hostname or 'localhost'
|
||||
port = parsed.port or 6379
|
||||
|
||||
return {
|
||||
'driver': 'falkordb',
|
||||
'uri': uri,
|
||||
'host': host,
|
||||
'port': port,
|
||||
'password': password,
|
||||
'database': falkor_config.database,
|
||||
}
|
||||
|
||||
case 'kuzu':
|
||||
if not HAS_KUZU:
|
||||
raise ValueError('KuzuDB driver not available in current graphiti-core version')
|
||||
|
||||
# Use KuzuDB config if provided, otherwise use defaults
|
||||
if config.providers.kuzu:
|
||||
kuzu_config = config.providers.kuzu
|
||||
else:
|
||||
# Create default KuzuDB configuration
|
||||
from config.schema import KuzuProviderConfig
|
||||
|
||||
kuzu_config = KuzuProviderConfig()
|
||||
|
||||
# Check for environment variable overrides (for CI/CD compatibility)
|
||||
import os
|
||||
|
||||
db = os.environ.get('KUZU_DB', kuzu_config.db)
|
||||
max_concurrent_queries = int(
|
||||
os.environ.get(
|
||||
'KUZU_MAX_CONCURRENT_QUERIES', kuzu_config.max_concurrent_queries
|
||||
)
|
||||
)
|
||||
|
||||
return {
|
||||
'driver': 'kuzu',
|
||||
'db': db,
|
||||
'max_concurrent_queries': max_concurrent_queries,
|
||||
}
|
||||
|
||||
case _:
|
||||
raise ValueError(f'Unsupported Database provider: {provider}')
|
||||
|
|
|
|||
91
mcp_server/uv.lock
generated
91
mcp_server/uv.lock
generated
|
|
@ -613,8 +613,8 @@ wheels = [
|
|||
|
||||
[[package]]
|
||||
name = "graphiti-core"
|
||||
version = "0.18.9"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
version = "0.19.0rc3"
|
||||
source = { editable = "../" }
|
||||
dependencies = [
|
||||
{ name = "diskcache" },
|
||||
{ name = "neo4j" },
|
||||
|
|
@ -623,11 +623,52 @@ dependencies = [
|
|||
{ name = "posthog" },
|
||||
{ name = "pydantic" },
|
||||
{ name = "python-dotenv" },
|
||||
{ name = "pyyaml" },
|
||||
{ name = "tenacity" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/2c/c5/b4480b44d40cc6031cc74fb703a36f1d81e03672f330c0e81ebfa7bda6ad/graphiti_core-0.18.9.tar.gz", hash = "sha256:00bce4693fe78f9484d46f54df34a086b35b6dda9bd07a8b09126e9e57c06f2c", size = 6467404 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/2d/e91698f78c8752b7ad960990584a984eabebc2d73fd5f401bbf28bc22224/graphiti_core-0.18.9-py3-none-any.whl", hash = "sha256:30bbaef5558596ffcec09a9ef7747921a95631c67c5f5a4e2c06eef982c3554a", size = 139857 },
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "anthropic", marker = "extra == 'anthropic'", specifier = ">=0.49.0" },
|
||||
{ name = "anthropic", marker = "extra == 'dev'", specifier = ">=0.49.0" },
|
||||
{ name = "boto3", marker = "extra == 'neptune'", specifier = ">=1.39.16" },
|
||||
{ name = "diskcache", specifier = ">=5.6.3" },
|
||||
{ name = "diskcache-stubs", marker = "extra == 'dev'", specifier = ">=5.6.3.6.20240818" },
|
||||
{ name = "falkordb", marker = "extra == 'dev'", specifier = ">=1.1.2,<2.0.0" },
|
||||
{ name = "falkordb", marker = "extra == 'falkordb'", specifier = ">=1.1.2,<2.0.0" },
|
||||
{ name = "google-genai", marker = "extra == 'dev'", specifier = ">=1.8.0" },
|
||||
{ name = "google-genai", marker = "extra == 'google-genai'", specifier = ">=1.8.0" },
|
||||
{ name = "groq", marker = "extra == 'dev'", specifier = ">=0.2.0" },
|
||||
{ name = "groq", marker = "extra == 'groq'", specifier = ">=0.2.0" },
|
||||
{ name = "ipykernel", marker = "extra == 'dev'", specifier = ">=6.29.5" },
|
||||
{ name = "jupyterlab", marker = "extra == 'dev'", specifier = ">=4.2.4" },
|
||||
{ name = "kuzu", marker = "extra == 'dev'", specifier = ">=0.11.2" },
|
||||
{ name = "kuzu", marker = "extra == 'kuzu'", specifier = ">=0.11.2" },
|
||||
{ name = "langchain-anthropic", marker = "extra == 'dev'", specifier = ">=0.2.4" },
|
||||
{ name = "langchain-aws", marker = "extra == 'neptune'", specifier = ">=0.2.29" },
|
||||
{ name = "langchain-openai", marker = "extra == 'dev'", specifier = ">=0.2.6" },
|
||||
{ name = "langgraph", marker = "extra == 'dev'", specifier = ">=0.2.15" },
|
||||
{ name = "langsmith", marker = "extra == 'dev'", specifier = ">=0.1.108" },
|
||||
{ name = "mcp", marker = "extra == 'dev'", specifier = ">=1.9.4" },
|
||||
{ name = "neo4j", specifier = ">=5.26.0" },
|
||||
{ name = "numpy", specifier = ">=1.0.0" },
|
||||
{ name = "openai", specifier = ">=1.91.0" },
|
||||
{ name = "opensearch-py", marker = "extra == 'neptune'", specifier = ">=3.0.0" },
|
||||
{ name = "posthog", specifier = ">=3.0.0" },
|
||||
{ name = "pydantic", specifier = ">=2.11.5" },
|
||||
{ name = "pyright", marker = "extra == 'dev'", specifier = ">=1.1.404" },
|
||||
{ name = "pytest", marker = "extra == 'dev'", specifier = ">=8.3.3" },
|
||||
{ name = "pytest-asyncio", marker = "extra == 'dev'", specifier = ">=0.24.0" },
|
||||
{ name = "pytest-xdist", marker = "extra == 'dev'", specifier = ">=3.6.1" },
|
||||
{ name = "python-dotenv", specifier = ">=1.0.1" },
|
||||
{ name = "pyyaml", specifier = ">=6.0.2" },
|
||||
{ name = "ruff", marker = "extra == 'dev'", specifier = ">=0.7.1" },
|
||||
{ name = "sentence-transformers", marker = "extra == 'dev'", specifier = ">=3.2.1" },
|
||||
{ name = "sentence-transformers", marker = "extra == 'sentence-transformers'", specifier = ">=3.2.1" },
|
||||
{ name = "tenacity", specifier = ">=9.0.0" },
|
||||
{ name = "transformers", marker = "extra == 'dev'", specifier = ">=4.45.2" },
|
||||
{ name = "voyageai", marker = "extra == 'dev'", specifier = ">=0.2.3" },
|
||||
{ name = "voyageai", marker = "extra == 'voyageai'", specifier = ">=0.2.3" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -859,6 +900,40 @@ wheels = [
|
|||
{ url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "kuzu"
|
||||
version = "0.11.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/66/fd/adbd05ccf81e6ad2674fcd3849d5d6ffeaf2141a9b8d1c1c4e282e923e1f/kuzu-0.11.2.tar.gz", hash = "sha256:9f224ec218ab165a18acaea903695779780d70335baf402d9b7f59ba389db0bd", size = 4902887 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/0e/91/bed837f5f49220a9f869da8a078b34a3484f210f7b57b267177821545c03/kuzu-0.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b25174cdb721aae47896ed62842d3859679607b493a9a6bbbcd9fb7fb3707", size = 3702618 },
|
||||
{ url = "https://files.pythonhosted.org/packages/72/8a/fd5e053b0055718afe00b6a99393a835c6254354128fbb7f66a35fd76089/kuzu-0.11.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:9a8567c53bfe282f4727782471ff718842ffead8c48c1762c1df9197408fc986", size = 4101371 },
|
||||
{ url = "https://files.pythonhosted.org/packages/ad/4b/e45cadc85bdc5079f432675bbe8d557600f0d4ab46fe24ef218374419902/kuzu-0.11.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d793bb5a0a14ada730a697eccac2a4c68b434b82692d985942900ef2003e099e", size = 6211974 },
|
||||
{ url = "https://files.pythonhosted.org/packages/10/ca/92d6a1e6452fcf06bfc423ce2cde819ace6b6e47921921cc8fae87c27780/kuzu-0.11.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1be4e9b6c93ca8591b1fb165f9b9a27d70a56af061831afcdfe7aebb89ee6ff", size = 6992196 },
|
||||
{ url = "https://files.pythonhosted.org/packages/49/6c/983fc6265dfc1169c87c4a0722f36ee665c5688e1166faeb4cd85e6af078/kuzu-0.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0ec7a304c746a2a98ecfd7e7c3f6fe92c4dfee2e2565c0b7cb4cffd0c2e374a", size = 4303517 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/14/8ae2c52657b93715052ecf47d70232f2c8d9ffe2d1ec3527c8e9c3cb2df5/kuzu-0.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf53b4f321a4c05882b14cef96d39a1e90fa993bab88a1554fb1565367553b8c", size = 3704177 },
|
||||
{ url = "https://files.pythonhosted.org/packages/2d/7a/bce7bb755e16f9ca855f76a3acc6cfa9fae88c4d6af9df3784c50b2120a5/kuzu-0.11.2-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:2d749883b74f5da5ff4a4b0635a98f6cc5165743995828924321d2ca797317cb", size = 4102372 },
|
||||
{ url = "https://files.pythonhosted.org/packages/c8/12/f5b1d51fcb78a86c078fb85cc53184ce962a3e86852d47d30e287a932e3f/kuzu-0.11.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:632507e5982928ed24fbb5e70ad143d7970bc4059046e77e0522707efbad303b", size = 6212492 },
|
||||
{ url = "https://files.pythonhosted.org/packages/81/96/d6e57af6ccf9e0697812ad3039c80b87b768cf2674833b0b23d317ea3427/kuzu-0.11.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5211884601f8f08ae97ba25006d0facde24077c5333411d944282b8a2068ab4", size = 6992888 },
|
||||
{ url = "https://files.pythonhosted.org/packages/40/ee/1f275ac5679a3f615ce0d9cf8c79001fdb535ccc8bc344e49b14484c7cd7/kuzu-0.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:82a6c8bfe1278dc1010790e398bf772683797ef5c16052fa0f6f78bacbc59aa3", size = 4304064 },
|
||||
{ url = "https://files.pythonhosted.org/packages/73/ba/9f20d9e83681a0ddae8ec13046b116c34745fa0e66862d4e2d8414734ce0/kuzu-0.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aed88ffa695d07289a3d8557bd8f9e743298a4f4349208a60bbb06f4ebf15c26", size = 3703781 },
|
||||
{ url = "https://files.pythonhosted.org/packages/53/a0/bb815c0490f3d4d30389156369b9fe641e154f0d4b1e8340f09a76021922/kuzu-0.11.2-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:595824b03248af928e3faee57f6825d3a46920f2d3b9bd0c0bb7fc3fa097fce9", size = 4103990 },
|
||||
{ url = "https://files.pythonhosted.org/packages/a5/6f/97b647c0547a634a669055ff4cfd21a92ea3999aedc6a7fe9004f03f25e3/kuzu-0.11.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5674c6d9d26f5caa0c7ce6f34c02e4411894879aa5b2ce174fad576fa898523", size = 6211947 },
|
||||
{ url = "https://files.pythonhosted.org/packages/42/74/c7f1a1cfb08c05c91c5a94483be387e80fafab8923c4243a22e9cced5c1b/kuzu-0.11.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c61daf02da35b671f4c6f3c17105725c399a5e14b7349b00eafbcd24ac90034a", size = 6991879 },
|
||||
{ url = "https://files.pythonhosted.org/packages/54/9e/50d67d7bc08faed95ede6de1a6aa0d81079c98028ca99e32d09c2ab1aead/kuzu-0.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:682096cd87dcbb8257f933ea4172d9dc5617a8d0a5bdd19cd66cf05b68881afd", size = 4305706 },
|
||||
{ url = "https://files.pythonhosted.org/packages/65/f0/5649a01af37def50293cd7c194afc19f09b343fd2b7f2b28e021a207f8ce/kuzu-0.11.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:17a11b67652e8b331c85cd1a1a30b32ee6783750084473abbab2aa1963ee2a3b", size = 3703740 },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/e2/e0beb9080911fc1689899a42da0f83534949f43169fb80197def3ec1223f/kuzu-0.11.2-cp313-cp313-macosx_11_0_x86_64.whl", hash = "sha256:bdded35426210faeca8da11e8b4a54e60ccc0c1a832660d76587b5be133b0f55", size = 4104073 },
|
||||
{ url = "https://files.pythonhosted.org/packages/f2/4c/7a831c9c6e609692953db677f54788bd1dde4c9d34e6ba91f1e153d2e7fe/kuzu-0.11.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6116b609aac153f3523130b31295643d34a6c9509914c0fa9d804b26b23eee73", size = 6212263 },
|
||||
{ url = "https://files.pythonhosted.org/packages/47/95/615ef10b46b22ec1d33fdbba795e6e79733d9a244aabdeeb910f267ab36c/kuzu-0.11.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09da5b8cb24dc6b281a6e4ac0f7f24226eb9909803b187e02d014da13ba57bcf", size = 6992492 },
|
||||
{ url = "https://files.pythonhosted.org/packages/a7/dd/2c905575913c743e6c67a5ca89a6b4ea9d9737238966d85d7e710f0d3e60/kuzu-0.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:c663fb84682f8ebffbe7447a4e552a0e03bd29097d319084a2c53c2e032a780e", size = 4305267 },
|
||||
{ url = "https://files.pythonhosted.org/packages/89/05/44fbfc9055dba3f472ea4aaa8110635864d3441eede987526ef401680765/kuzu-0.11.2-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c03fb95ffb9185c1519333f8ee92b7a9695aa7aa9a179e868a7d7bd13d10a16", size = 6216795 },
|
||||
{ url = "https://files.pythonhosted.org/packages/4f/ca/16c81dc68cc1e8918f8481e7ee89c28aa665c5cb36be7ad0fc1d0d295760/kuzu-0.11.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d857f0efddf26d5e2dc189facb84bf04a997e395972486669b418a470cc76034", size = 6996333 },
|
||||
{ url = "https://files.pythonhosted.org/packages/48/d8/9275c7e6312bd76dc670e8e2da68639757c22cf2c366e96527595a1d881c/kuzu-0.11.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb9e4641867c35b98ceaa604aa79832c0eeed41f5fd1b6da22b1c217b2f1b8ea", size = 6212202 },
|
||||
{ url = "https://files.pythonhosted.org/packages/88/89/67a977493c60bca3610845df13020711f357a5d80bf91549e4b48d877c2f/kuzu-0.11.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:553408d76a0b4fdecc1338b69b71d7bde42f6936d3b99d9852b30d33bda15978", size = 6992264 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b6/49/869ceceb1d8a5ea032a35c734e55cfee919340889973623096da7eb94f6b/kuzu-0.11.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989a87fa13ffa39ab7773d968fe739ac4f8faf9ddb5dad72ced2eeef12180293", size = 6216814 },
|
||||
{ url = "https://files.pythonhosted.org/packages/bc/cd/933b34a246edb882a042eb402747167719222c05149b73b48ba7d310d554/kuzu-0.11.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e67420d04a9643fd6376a23b17b398a3e32bb0c2bd8abbf8d1e4697056596c7e", size = 6996343 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "langchain-core"
|
||||
version = "0.3.74"
|
||||
|
|
@ -992,6 +1067,7 @@ source = { virtual = "." }
|
|||
dependencies = [
|
||||
{ name = "azure-identity" },
|
||||
{ name = "graphiti-core" },
|
||||
{ name = "kuzu" },
|
||||
{ name = "mcp" },
|
||||
{ name = "openai" },
|
||||
{ name = "pydantic-settings" },
|
||||
|
|
@ -1024,8 +1100,9 @@ requires-dist = [
|
|||
{ name = "anthropic", marker = "extra == 'providers'", specifier = ">=0.49.0" },
|
||||
{ name = "azure-identity", specifier = ">=1.21.0" },
|
||||
{ name = "google-genai", marker = "extra == 'providers'", specifier = ">=1.8.0" },
|
||||
{ name = "graphiti-core", specifier = ">=0.16.0" },
|
||||
{ name = "graphiti-core", editable = "../" },
|
||||
{ name = "groq", marker = "extra == 'providers'", specifier = ">=0.2.0" },
|
||||
{ name = "kuzu", specifier = ">=0.11.2" },
|
||||
{ name = "mcp", specifier = ">=1.9.4" },
|
||||
{ name = "openai", specifier = ">=1.91.0" },
|
||||
{ name = "pydantic-settings", specifier = ">=2.0.0" },
|
||||
|
|
@ -1037,7 +1114,7 @@ requires-dist = [
|
|||
|
||||
[package.metadata.requires-dev]
|
||||
dev = [
|
||||
{ name = "graphiti-core", specifier = ">=0.16.0" },
|
||||
{ name = "graphiti-core", editable = "../" },
|
||||
{ name = "httpx", specifier = ">=0.28.1" },
|
||||
{ name = "mcp", specifier = ">=1.9.4" },
|
||||
{ name = "pyright", specifier = ">=1.1.404" },
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue