meeting_memory/config.py

44 lines
1.6 KiB
Python

import os
from pydantic import BaseModel, Field
from dotenv import load_dotenv
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 ObsidianConfig(BaseModel):
vault_path: str = Field(default=os.path.join(PROJECT_ROOT, "obsidian_vault"))
meetings_dir: str = Field(default="Meetings")
entities_dir: str = Field(default="Entities")
graphs_dir: str = Field(default="Graphs")
raw_dir: str = Field(default="Raw")
class VectorStoreConfig(BaseModel):
persist_dir: str = Field(default=os.path.join(PROJECT_ROOT, "vector_store_data"))
class ProjectConfig(BaseModel):
llm: LLMConfig = Field(default_factory=LLMConfig)
embedding: EmbeddingConfig = Field(default_factory=EmbeddingConfig)
obsidian: ObsidianConfig = Field(default_factory=ObsidianConfig)
vector_store: VectorStoreConfig = Field(default_factory=VectorStoreConfig)
state_path: str = Field(default=os.path.join(PROJECT_ROOT, "obsidian_vault", "meeting_state.json"))
config = ProjectConfig()