meeting_memory/config.py

52 lines
1.9 KiB
Python

import os
from dotenv import load_dotenv
from pydantic import BaseModel, Field
load_dotenv()
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
class LLMConfig(BaseModel):
api_key: str = Field(default=os.getenv("LLM_API_KEY", ""))
base_url: str = Field(default=os.getenv("LLM_BASE_URL", "https://api.deepseek.com/v1"))
model: str = Field(default=os.getenv("LLM_MODEL", "deepseek-chat"))
max_tokens: int = Field(default=64000)
temperature: float = Field(default=0.95)
class EmbeddingConfig(BaseModel):
api_key: str = Field(default=os.getenv("EMBEDDING_API_KEY", ""))
api_base: str = Field(default=os.getenv("EMBEDDING_BASE_URL", "https://api.openai.com/v1"))
model: str = Field(default=os.getenv("EMBEDDING_MODEL", "text-embedding-3-small"))
class StorageConfig(BaseModel):
data_dir: str = Field(default=os.path.join(PROJECT_ROOT, "data"))
raw_dir: str = Field(default=os.path.join(PROJECT_ROOT, "data", "raw"))
class VectorStoreConfig(BaseModel):
persist_dir: str = Field(default=os.path.join(PROJECT_ROOT, "vector_store_data"))
class Neo4jConfig(BaseModel):
enabled: bool = Field(default=os.getenv("NEO4J_ENABLED", "false").lower() == "true")
uri: str = Field(default=os.getenv("NEO4J_URI", "bolt://localhost:7687"))
user: str = Field(default=os.getenv("NEO4J_USER", "neo4j"))
password: str = Field(default=os.getenv("NEO4J_PASSWORD", ""))
database: str = Field(default=os.getenv("NEO4J_DATABASE", "neo4j"))
class ProjectConfig(BaseModel):
llm: LLMConfig = Field(default_factory=LLMConfig)
embedding: EmbeddingConfig = Field(default_factory=EmbeddingConfig)
storage: StorageConfig = Field(default_factory=StorageConfig)
vector_store: VectorStoreConfig = Field(default_factory=VectorStoreConfig)
neo4j: Neo4jConfig = Field(default_factory=Neo4jConfig)
state_path: str = Field(default=os.path.join(PROJECT_ROOT, "data", "meeting_state.json"))
config = ProjectConfig()