"""Unified configuration manager for Graphiti MCP Server.""" import argparse from embedder_config import GraphitiEmbedderConfig from llm_config import GraphitiLLMConfig from neo4j_config import Neo4jConfig from pydantic import BaseModel, Field class GraphitiConfig(BaseModel): """Configuration for Graphiti client. Centralizes all configuration parameters for the Graphiti client. """ llm: GraphitiLLMConfig = Field(default_factory=GraphitiLLMConfig) embedder: GraphitiEmbedderConfig = Field(default_factory=GraphitiEmbedderConfig) neo4j: Neo4jConfig = Field(default_factory=Neo4jConfig) group_id: str | None = None use_custom_entities: bool = False destroy_graph: bool = False @classmethod def from_env(cls) -> 'GraphitiConfig': """Create a configuration instance from environment variables.""" return cls( llm=GraphitiLLMConfig.from_env(), embedder=GraphitiEmbedderConfig.from_env(), neo4j=Neo4jConfig.from_env(), ) @classmethod def from_cli_and_env(cls, args: argparse.Namespace) -> 'GraphitiConfig': """Create configuration from CLI arguments, falling back to environment variables.""" # Start with environment configuration config = cls.from_env() # Apply CLI overrides if args.group_id: config.group_id = args.group_id else: config.group_id = 'default' config.use_custom_entities = args.use_custom_entities config.destroy_graph = args.destroy_graph # Update LLM config using CLI args config.llm = GraphitiLLMConfig.from_cli_and_env(args) return config