Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
1 line
4.3 KiB
JSON
1 line
4.3 KiB
JSON
{"repo": "cao-r/wanjie-manyou", "files": {"app/config.py": {"9af9ee2cee2da28ea5695dbc4ea6bfa4c5f3fae6": {"t": 1786068483.1463318, "n": 3607, "h": "0c28528bfed4e6b5", "c": "\"\"\"应用配置管理\"\"\"\nfrom pydantic_settings import BaseSettings, SettingsConfigDict\nfrom pydantic import Field\nfrom typing import Optional\nimport os\n\n\nclass Settings(BaseSettings):\n \"\"\"应用配置\"\"\"\n \n model_config = SettingsConfigDict(\n env_file=\".env\",\n env_file_encoding=\"utf-8\",\n case_sensitive=False,\n extra=\"ignore\"\n )\n \n # 应用配置\n APP_NAME: str = \"万界漫游:小说潜入者\"\n APP_VERSION: str = \"1.0.0\"\n DEBUG: bool = False\n \n # LLM配置\n LLM_PROVIDER: str = Field(default=\"deepseek\", description=\"LLM提供商: deepseek/openai/ollama\")\n LLM_MODEL: str = Field(default=\"deepseek-chat\", description=\"LLM模型名称\")\n LLM_BASE_URL: str = Field(default=\"https://api.deepseek.com\", description=\"LLM服务地址\")\n LLM_API_KEY: Optional[str] = Field(default=None, description=\"API密钥\")\n LLM_TEMPERATURE: float = Field(default=0.7, ge=0.0, le=2.0)\n LLM_MAX_TOKENS: int = Field(default=4096, ge=100, le=128000)\n \n # Embedding配置\n EMBEDDING_PROVIDER: str = Field(default=\"sentence-transformers\", description=\"Embedding提供商\")\n EMBEDDING_MODEL: str = Field(default=\"paraphrase-multilingual-MiniLM-L12-v2\", description=\"Embedding模型\")\n EMBEDDING_DIMENSION: int = Field(default=384, description=\"Embedding维度\")\n \n # 向量数据库配置\n CHROMA_PERSIST_DIR: str = Field(default=\"./data/chroma\", description=\"Chroma数据目录\")\n \n # Redis配置\n REDIS_HOST: str = Field(default=\"localhost\")\n REDIS_PORT: int = Field(default=6379)\n REDIS_DB: int = Field(default=0)\n \n # 游戏配置\n MAX_CONTEXT_TOKENS: int = Field(default=32000, description=\"最大上下文Token数\")\n SUMMARY_THRESHOLD: int = Field(default=24000, description=\"摘要触发阈值\")\n MAX_RETRIES: int = Field(default=3, description=\"LLM调用最大重试次数\")\n DEFAULT_CHUNK_SIZE: int = Field(default=4000, description=\"默认切片大小\")\n DEFAULT_CHUNK_OVERLAP: int = Field(default=400, description=\"默认切片重叠\")\n \n # 世界观概要配置\n WORLD_SUMMARY_MAX_TOKENS: int = Field(default=500, description=\"世界观概要最大Token数\")\n EXTRACT_LOCATIONS: bool = Field(default=True)\n EXTRACT_FACTIONS: bool = Field(default=True)\n EXTRACT_CHARACTERS: bool = Field(default=True)\n EXTRACT_RULES: bool = Field(default=True)\n \n # NPC配置\n NPC_MIN_TRAITS: int = Field(default=2, ge=1, le=5, description=\"NPC最少性格标签数\")\n NPC_MAX_TRAITS: int = Field(default=3, ge=1, le=5, description=\"NPC最多性格标签数\")\n \n # DM配置\n DM_ACTION_TIMEOUT: int = Field(default=120, description=\"DM行动判定超时(秒)\")\n DM_RECOMMENDED_OPTIONS: int = Field(default=3, description=\"DM推荐选项数量\")\n \n # 对话配置\n DIALOGUE_MAX_TURNS: int = Field(default=20, description=\"单次对话最大轮次\")\n SENTIMENT_EVAL_INTERVAL: int = Field(default=1, description=\"情感评估间隔\")\n \n # 数据库配置\n SQLITE_PATH: str = Field(default=\"./data/wanjie.db\")\n \n # 日志配置\n LOG_LEVEL: str = Field(default=\"INFO\")\n LOG_DIR: str = Field(default=\"./logs\")\n \n def get_llm_config(self) -> dict:\n \"\"\"获取LLM配置\"\"\"\n return {\n \"provider\": self.LLM_PROVIDER,\n \"model\": self.LLM_MODEL,\n \"base_url\": self.LLM_BASE_URL,\n \"api_key\": self.LLM_API_KEY,\n \"temperature\": self.LLM_TEMPERATURE,\n \"max_tokens\": self.LLM_MAX_TOKENS,\n }\n \n def ensure_directories(self):\n \"\"\"确保必要目录存在\"\"\"\n dirs = [\n self.CHROMA_PERSIST_DIR,\n os.path.dirname(self.SQLITE_PATH) if os.path.dirname(self.SQLITE_PATH) else \"./data\",\n self.LOG_DIR,\n ]\n for d in dirs:\n if d:\n os.makedirs(d, exist_ok=True)\n\n\n# 全局配置实例\nsettings = Settings()\nsettings.ensure_directories()\n"}}}} |