{"repo": "atsepkov/agentic-doc-system", "files": {"config.py": {"d8f3711b8185d9a6adb65e4ea83bf864b2de587e": {"t": 1785745414.0837584, "n": 1723, "h": "f8e2af4a20087b35", "c": "\"\"\"\nconfig.py: central settings, loaded from environment variables.\n\"\"\"\nimport os\nfrom dataclasses import dataclass\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\n@dataclass\nclass Config:\n # LLM provider: \"deepseek\" | \"gemini\" | \"groq\"\n llm_provider: str = os.getenv(\"LLM_PROVIDER\", \"deepseek\")\n\n # API keys (only the active provider's key is required)\n deepseek_api_key: str = os.getenv(\"DEEPSEEK_API_KEY\", \"\")\n gemini_api_key: str = os.getenv(\"GEMINI_API_KEY\", \"\")\n groq_api_key: str = os.getenv(\"GROQ_API_KEY\", \"\")\n openai_api_key: str = os.getenv(\"OPENAI_API_KEY\", \"\")\n\n # Model to use — falls back to the provider's default if not set\n model: str = os.getenv(\"MODEL\", \"\")\n\n # ChromaDB\n chroma_persist_dir: str = os.getenv(\"CHROMA_PERSIST_DIR\", \"./.chroma_db\")\n chroma_collection: str = os.getenv(\"CHROMA_COLLECTION\", \"documents\")\n\n # Embedding model (local, no API key needed)\n embedding_model: str = os.getenv(\"EMBEDDING_MODEL\", \"all-MiniLM-L6-v2\")\n\n # Chunking (characters, not tokens — ~100–150 tokens per 512 chars)\n chunk_size: int = int(os.getenv(\"CHUNK_SIZE\", \"512\"))\n chunk_overlap: int = int(os.getenv(\"CHUNK_OVERLAP\", \"64\"))\n\n # Max chunks returned per summarize_document() call when summarizing\n # multiple documents in one response (prevents context overflow)\n max_chunks_multi_doc: int = int(os.getenv(\"MAX_CHUNKS_MULTI_DOC\", \"8\"))\n\n # Source documents directory (used by query_csv to locate files on disk)\n docs_dir: str = os.getenv(\"DOCS_DIR\", \"./docs\")\n\n # Retrieval\n top_k: int = int(os.getenv(\"TOP_K\", \"5\"))\n\n # Agent loop guard\n max_iterations: int = int(os.getenv(\"MAX_ITERATIONS\", \"12\"))\n\n\ncfg = Config()\n"}, "aa48a72b29fd3e7550aa3620b588efed74802061": {"t": 1785752954.5256176, "n": 1722, "h": "446308db8abff8d7", "c": "\"\"\"\nconfig.py: central settings, loaded from environment variables.\n\"\"\"\nimport os\nfrom dataclasses import dataclass\nfrom dotenv import load_dotenv\n\nload_dotenv()\n\n@dataclass\nclass Config:\n # LLM provider: \"deepseek\" | \"gemini\" | \"groq\"\n llm_provider: str = os.getenv(\"LLM_PROVIDER\", \"deepseek\")\n\n # API keys (only the active provider's key is required)\n deepseek_api_key: str = os.getenv(\"DEEPSEEK_API_KEY\", \"\")\n gemini_api_key: str = os.getenv(\"GEMINI_API_KEY\", \"\")\n groq_api_key: str = os.getenv(\"GROQ_API_KEY\", \"\")\n openai_api_key: str = os.getenv(\"OPENAI_API_KEY\", \"\")\n\n # Model to use — falls back to the provider's default if not set\n model: str = os.getenv(\"MODEL\", \"\")\n\n # ChromaDB\n chroma_persist_dir: str = os.getenv(\"CHROMA_PERSIST_DIR\", \"./.chroma_db\")\n chroma_collection: str = os.getenv(\"CHROMA_COLLECTION\", \"documents\")\n\n # Embedding model (local, no API key needed)\n embedding_model: str = os.getenv(\"EMBEDDING_MODEL\", \"all-MiniLM-L6-v2\")\n\n # Chunking (characters, not tokens — ~100–150 tokens per 512 chars)\n chunk_size: int = int(os.getenv(\"CHUNK_SIZE\", \"512\"))\n chunk_overlap: int = int(os.getenv(\"CHUNK_OVERLAP\", \"64\"))\n\n # Max chunks returned per summarize_document() call when summarizing\n # multiple documents in one response (prevents context overflow)\n max_chunks_multi_doc: int = int(os.getenv(\"MAX_CHUNKS_MULTI_DOC\", \"8\"))\n\n # Source documents directory (used by query_csv to locate files on disk)\n docs_dir: str = os.getenv(\"DOCS_DIR\", \"./docs\")\n\n # Retrieval\n top_k: int = int(os.getenv(\"TOP_K\", \"5\"))\n\n # Agent loop guard\n max_iterations: int = int(os.getenv(\"MAX_ITERATIONS\", \"8\"))\n\n\ncfg = Config()\n"}}}}