Files

1 line
188 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "aegeaner/ai-codebench", "files": {"ai_codebench/settings.py": {"2139f0b0a5c40a7d2d7785d4071915b0a8bbb78a": {"t": 1785746923.0968785, "n": 14202, "h": "5a994e0a0eca6334", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n HUNYUAN = \"hunyuan\"\n IMAGEN = \"imagen\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n# Image generation specific configuration\nIMAGE_GENERATION_CONFIG = {\n \"image_size\": \"2K\",\n \"aspect_ratio\": \"3:4\",\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"Adaptive Logic Flow: Outline the Step-by-step Logical Flow. Scale the structural detail to the \"\n \"problem's complexity:\\n\\n\"\n \"For straightforward algorithms, provide a streamlined sequential breakdown;\\n\"\n \"Only introduce Modular Decomposition if the problem involves multiple distinct responsibilities or high \"\n \"architectural complexity. Avoid unnecessary abstraction for simple tasks.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-v4-flash\",\n Provider.GEMINI: \"gemini-3-flash-preview\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n Provider.IMAGEN: \"imagen-4.0-generate-001\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3.1-flash-image-preview\",\n Provider.HUNYUAN: \"hunyuan-3.0\",\n}\n\n# Supported Imagen models for Gemini\nGEMINI_IMAGEN_MODELS = [\n \"imagen-4.0-generate-001\",\n \"imagen-4.0-ultra-generate-001\",\n \"imagen-4.0-fast-generate-001\",\n]\n\n# Patterns to identify provider by model name\nPROVIDER_MODEL_PATTERNS = {\n Provider.CLAUDE: [\"claude-\"],\n Provider.DEEPSEEK: [\"deepseek-\"],\n Provider.GEMINI: [\"gemini-\"],\n Provider.IMAGEN: [\"imagen-\"],\n Provider.KIMI: [\"moonshot-\"],\n Provider.HUNYUAN: [\"hunyuan-\"],\n}\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n tencent_secret_id: Optional[str] = None\n tencent_secret_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n image_provider: Provider = Provider.GEMINI\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Storage settings\n max_stored_history_turns: int = 1000\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n self.tencent_secret_id = os.getenv(\"TENCENTCLOUD_SECRET_ID\")\n self.tencent_secret_key = os.getenv(\"TENCENTCLOUD_SECRET_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n max_stored_history = os.getenv(\"MAX_STORED_HISTORY_TURNS\")\n if max_stored_history and max_stored_history.isdigit():\n try:\n self.max_stored_history_turns = int(max_stored_history)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n if \"max_stored_history_turns\" in conv_config:\n self.max_stored_history_turns = conv_config[\"max_stored_history_turns\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"image_provider\" in routing_config:\n try:\n self.image_provider = Provider(routing_config[\"image_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown image provider: {routing_config['image_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "9c6d7d8bebebd7eabcbe21ddbfbbe0ca9d493fc6": {"t": 1785769047.222428, "n": 14198, "h": "295b0d0c41992ec8", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n HUNYUAN = \"hunyuan\"\n IMAGEN = \"imagen\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n# Image generation specific configuration\nIMAGE_GENERATION_CONFIG = {\n \"image_size\": \"2K\",\n \"aspect_ratio\": \"3:4\",\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"Adaptive Logic Flow: Outline the Step-by-step Logical Flow. Scale the structural detail to the \"\n \"problem's complexity:\\n\\n\"\n \"For straightforward algorithms, provide a streamlined sequential breakdown;\\n\"\n \"Only introduce Modular Decomposition if the problem involves multiple distinct responsibilities or high \"\n \"architectural complexity. Avoid unnecessary abstraction for simple tasks.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-3-flash-preview\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n Provider.IMAGEN: \"imagen-4.0-generate-001\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3.1-flash-image-preview\",\n Provider.HUNYUAN: \"hunyuan-3.0\",\n}\n\n# Supported Imagen models for Gemini\nGEMINI_IMAGEN_MODELS = [\n \"imagen-4.0-generate-001\",\n \"imagen-4.0-ultra-generate-001\",\n \"imagen-4.0-fast-generate-001\",\n]\n\n# Patterns to identify provider by model name\nPROVIDER_MODEL_PATTERNS = {\n Provider.CLAUDE: [\"claude-\"],\n Provider.DEEPSEEK: [\"deepseek-\"],\n Provider.GEMINI: [\"gemini-\"],\n Provider.IMAGEN: [\"imagen-\"],\n Provider.KIMI: [\"moonshot-\"],\n Provider.HUNYUAN: [\"hunyuan-\"],\n}\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n tencent_secret_id: Optional[str] = None\n tencent_secret_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n image_provider: Provider = Provider.GEMINI\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Storage settings\n max_stored_history_turns: int = 1000\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n self.tencent_secret_id = os.getenv(\"TENCENTCLOUD_SECRET_ID\")\n self.tencent_secret_key = os.getenv(\"TENCENTCLOUD_SECRET_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n max_stored_history = os.getenv(\"MAX_STORED_HISTORY_TURNS\")\n if max_stored_history and max_stored_history.isdigit():\n try:\n self.max_stored_history_turns = int(max_stored_history)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n if \"max_stored_history_turns\" in conv_config:\n self.max_stored_history_turns = conv_config[\"max_stored_history_turns\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"image_provider\" in routing_config:\n try:\n self.image_provider = Provider(routing_config[\"image_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown image provider: {routing_config['image_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "8d51ec0629140ca7825dfb69b1a642b5b1943c2b": {"t": 1785769049.2183664, "n": 13650, "h": "aad4868f62cf33b0", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n HUNYUAN = \"hunyuan\"\n IMAGEN = \"imagen\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n# Image generation specific configuration\nIMAGE_GENERATION_CONFIG = {\n \"image_size\": \"2K\",\n \"aspect_ratio\": \"3:4\",\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"Adaptive Logic Flow: Outline the Step-by-step Logical Flow. Scale the structural detail to the \"\n \"problem's complexity:\\n\\n\"\n \"For straightforward algorithms, provide a streamlined sequential breakdown;\\n\"\n \"Only introduce Modular Decomposition if the problem involves multiple distinct responsibilities or high \"\n \"architectural complexity. Avoid unnecessary abstraction for simple tasks.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-3-flash-preview\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n Provider.IMAGEN: \"imagen-4.0-generate-001\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3.1-flash-image-preview\",\n Provider.HUNYUAN: \"hunyuan-3.0\",\n}\n\n# Supported Imagen models for Gemini\nGEMINI_IMAGEN_MODELS = [\n \"imagen-4.0-generate-001\",\n \"imagen-4.0-ultra-generate-001\",\n \"imagen-4.0-fast-generate-001\",\n]\n\n# Patterns to identify provider by model name\nPROVIDER_MODEL_PATTERNS = {\n Provider.CLAUDE: [\"claude-\"],\n Provider.DEEPSEEK: [\"deepseek-\"],\n Provider.GEMINI: [\"gemini-\"],\n Provider.IMAGEN: [\"imagen-\"],\n Provider.KIMI: [\"moonshot-\"],\n Provider.HUNYUAN: [\"hunyuan-\"],\n}\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n tencent_secret_id: Optional[str] = None\n tencent_secret_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n image_provider: Provider = Provider.GEMINI\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n self.tencent_secret_id = os.getenv(\"TENCENTCLOUD_SECRET_ID\")\n self.tencent_secret_key = os.getenv(\"TENCENTCLOUD_SECRET_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"image_provider\" in routing_config:\n try:\n self.image_provider = Provider(routing_config[\"image_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown image provider: {routing_config['image_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "7b058f23edc65c17589ec2e1e0956d612bdbc5f6": {"t": 1785769050.9120984, "n": 13647, "h": "ad8c39ff4ac23fc8", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n HUNYUAN = \"hunyuan\"\n IMAGEN = \"imagen\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n# Image generation specific configuration\nIMAGE_GENERATION_CONFIG = {\n \"image_size\": \"2K\",\n \"aspect_ratio\": \"3:4\",\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"Adaptive Logic Flow: Outline the Step-by-step Logical Flow. Scale the structural detail to the \"\n \"problem's complexity:\\n\\n\"\n \"For straightforward algorithms, provide a streamlined sequential breakdown;\\n\"\n \"Only introduce Modular Decomposition if the problem involves multiple distinct responsibilities or high \"\n \"architectural complexity. Avoid unnecessary abstraction for simple tasks.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n Provider.IMAGEN: \"imagen-4.0-generate-001\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3.1-flash-image-preview\",\n Provider.HUNYUAN: \"hunyuan-3.0\",\n}\n\n# Supported Imagen models for Gemini\nGEMINI_IMAGEN_MODELS = [\n \"imagen-4.0-generate-001\",\n \"imagen-4.0-ultra-generate-001\",\n \"imagen-4.0-fast-generate-001\",\n]\n\n# Patterns to identify provider by model name\nPROVIDER_MODEL_PATTERNS = {\n Provider.CLAUDE: [\"claude-\"],\n Provider.DEEPSEEK: [\"deepseek-\"],\n Provider.GEMINI: [\"gemini-\"],\n Provider.IMAGEN: [\"imagen-\"],\n Provider.KIMI: [\"moonshot-\"],\n Provider.HUNYUAN: [\"hunyuan-\"],\n}\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n tencent_secret_id: Optional[str] = None\n tencent_secret_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n image_provider: Provider = Provider.GEMINI\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n self.tencent_secret_id = os.getenv(\"TENCENTCLOUD_SECRET_ID\")\n self.tencent_secret_key = os.getenv(\"TENCENTCLOUD_SECRET_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"image_provider\" in routing_config:\n try:\n self.image_provider = Provider(routing_config[\"image_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown image provider: {routing_config['image_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "4cf8dbec4fc060d155c96a14b8e344504243dfea": {"t": 1785769052.2243998, "n": 13643, "h": "ffb5cf82b7f85bfa", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n HUNYUAN = \"hunyuan\"\n IMAGEN = \"imagen\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n# Image generation specific configuration\nIMAGE_GENERATION_CONFIG = {\n \"image_size\": \"2K\",\n \"aspect_ratio\": \"3:4\",\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"Adaptive Logic Flow: Outline the Step-by-step Logical Flow. Scale the structural detail to the \"\n \"problem's complexity:\\n\\n\"\n \"For straightforward algorithms, provide a streamlined sequential breakdown;\\n\"\n \"Only introduce Modular Decomposition if the problem involves multiple distinct responsibilities or high \"\n \"architectural complexity. Avoid unnecessary abstraction for simple tasks.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n Provider.IMAGEN: \"imagen-4.0-generate-001\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3-pro-image-preview\",\n Provider.HUNYUAN: \"hunyuan-3.0\",\n}\n\n# Supported Imagen models for Gemini\nGEMINI_IMAGEN_MODELS = [\n \"imagen-4.0-generate-001\",\n \"imagen-4.0-ultra-generate-001\",\n \"imagen-4.0-fast-generate-001\",\n]\n\n# Patterns to identify provider by model name\nPROVIDER_MODEL_PATTERNS = {\n Provider.CLAUDE: [\"claude-\"],\n Provider.DEEPSEEK: [\"deepseek-\"],\n Provider.GEMINI: [\"gemini-\"],\n Provider.IMAGEN: [\"imagen-\"],\n Provider.KIMI: [\"moonshot-\"],\n Provider.HUNYUAN: [\"hunyuan-\"],\n}\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n tencent_secret_id: Optional[str] = None\n tencent_secret_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n image_provider: Provider = Provider.GEMINI\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n self.tencent_secret_id = os.getenv(\"TENCENTCLOUD_SECRET_ID\")\n self.tencent_secret_key = os.getenv(\"TENCENTCLOUD_SECRET_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"image_provider\" in routing_config:\n try:\n self.image_provider = Provider(routing_config[\"image_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown image provider: {routing_config['image_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "820f8a02d790fc92083c255c5fd17fc42feb39b8": {"t": 1785769054.8865066, "n": 13546, "h": "486a147328d4fad8", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n HUNYUAN = \"hunyuan\"\n IMAGEN = \"imagen\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n# Image generation specific configuration\nIMAGE_GENERATION_CONFIG = {\n \"image_size\": \"2K\",\n \"aspect_ratio\": \"3:4\",\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"Adaptive Logic Flow: Outline the Step-by-step Logical Flow. Scale the structural detail to the \"\n \"problem's complexity:\\n\\n\"\n \"For straightforward algorithms, provide a streamlined sequential breakdown;\\n\"\n \"Only introduce Modular Decomposition if the problem involves multiple distinct responsibilities or high \"\n \"architectural complexity. Avoid unnecessary abstraction for simple tasks.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n Provider.IMAGEN: \"imagen-4.0-generate-001\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3-pro-image-preview\",\n Provider.HUNYUAN: \"hunyuan-3.0\",\n}\n\n# Supported Imagen models for Gemini\nGEMINI_IMAGEN_MODELS = [\n \"imagen-4.0-generate-001\",\n \"imagen-4.0-ultra-generate-001\",\n \"imagen-4.0-fast-generate-001\",\n]\n\n# Patterns to identify provider by model name\nPROVIDER_MODEL_PATTERNS = {\n Provider.CLAUDE: [\"claude-\"],\n Provider.DEEPSEEK: [\"deepseek-\"],\n Provider.GEMINI: [\"gemini-\"],\n Provider.IMAGEN: [\"imagen-\"],\n Provider.KIMI: [\"moonshot-\"],\n Provider.HUNYUAN: [\"hunyuan-\"],\n}\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n tencent_secret_id: Optional[str] = None\n tencent_secret_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n image_provider: Provider = Provider.GEMINI\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n self.tencent_secret_id = os.getenv(\"TENCENTCLOUD_SECRET_ID\")\n self.tencent_secret_key = os.getenv(\"TENCENTCLOUD_SECRET_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"image_provider\" in routing_config:\n try:\n self.image_provider = Provider(routing_config[\"image_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown image provider: {routing_config['image_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "6a5bc0c2b0bd95e66cf9ced7a795b3a5dba5f6a6": {"t": 1785769057.8130639, "n": 13066, "h": "f6a34ed18c22a73a", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n HUNYUAN = \"hunyuan\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"Adaptive Logic Flow: Outline the Step-by-step Logical Flow. Scale the structural detail to the \"\n \"problem's complexity:\\n\\n\"\n \"For straightforward algorithms, provide a streamlined sequential breakdown;\\n\"\n \"Only introduce Modular Decomposition if the problem involves multiple distinct responsibilities or high \"\n \"architectural complexity. Avoid unnecessary abstraction for simple tasks.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3-pro-image-preview\",\n Provider.HUNYUAN: \"hunyuan-3.0\",\n}\n\n# Supported Imagen models for Gemini\nGEMINI_IMAGEN_MODELS = [\n \"imagen-4.0-generate-001\",\n \"imagen-4.0-ultra-generate-001\",\n \"imagen-4.0-fast-generate-001\",\n]\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n tencent_secret_id: Optional[str] = None\n tencent_secret_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n image_provider: Provider = Provider.GEMINI\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n self.tencent_secret_id = os.getenv(\"TENCENTCLOUD_SECRET_ID\")\n self.tencent_secret_key = os.getenv(\"TENCENTCLOUD_SECRET_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"image_provider\" in routing_config:\n try:\n self.image_provider = Provider(routing_config[\"image_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown image provider: {routing_config['image_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "4addb77a993d7bfd6ec409c60b1f9127d5d36c02": {"t": 1785769059.3603253, "n": 12897, "h": "86a746bea70859f3", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n HUNYUAN = \"hunyuan\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"Adaptive Logic Flow: Outline the Step-by-step Logical Flow. Scale the structural detail to the \"\n \"problem's complexity:\\n\\n\"\n \"For straightforward algorithms, provide a streamlined sequential breakdown;\\n\"\n \"Only introduce Modular Decomposition if the problem involves multiple distinct responsibilities or high \"\n \"architectural complexity. Avoid unnecessary abstraction for simple tasks.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3-pro-image-preview\",\n Provider.HUNYUAN: \"hunyuan-3.0\",\n}\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n tencent_secret_id: Optional[str] = None\n tencent_secret_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n image_provider: Provider = Provider.GEMINI\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n self.tencent_secret_id = os.getenv(\"TENCENTCLOUD_SECRET_ID\")\n self.tencent_secret_key = os.getenv(\"TENCENTCLOUD_SECRET_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"image_provider\" in routing_config:\n try:\n self.image_provider = Provider(routing_config[\"image_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown image provider: {routing_config['image_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "683623cf5313946bbeb68d6fb90e6f6dd1b0d187": {"t": 1785769060.6941683, "n": 12826, "h": "7bb69f2ef0aa6108", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n HUNYUAN = \"hunyuan\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"The Blueprint: Provide a Step-by-step Logical Flow and Component Decomposition. Instead of code or pseudocode, \"\n \"use a structured list to outline the sequence of operations and the specific responsibilities of each module or \"\n \"function. This should serve as a conceptual 'map' that the user can implement in any language.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3-pro-image-preview\",\n Provider.HUNYUAN: \"hunyuan-3.0\",\n}\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n tencent_secret_id: Optional[str] = None\n tencent_secret_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n image_provider: Provider = Provider.GEMINI\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n self.tencent_secret_id = os.getenv(\"TENCENTCLOUD_SECRET_ID\")\n self.tencent_secret_key = os.getenv(\"TENCENTCLOUD_SECRET_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"image_provider\" in routing_config:\n try:\n self.image_provider = Provider(routing_config[\"image_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown image provider: {routing_config['image_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "b99d213bb51be3b6be9f0160a79f21e8d36e1438": {"t": 1785769062.131733, "n": 12152, "h": "498eb3c57576e1fe", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.3, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n\n# Task-specific system prompts\nKNOWLEDGE_PROMPT = (\n \"You are an expert polymath and tutor dedicated to deep conceptual mastery. Your goal is to guide the user toward a \"\n \"'First Principles' understanding. When explaining concepts, go beyond surface-level steps.\\n\\n\"\n \"1. Start with the theoretical foundation and the 'why' behind the concept.\\n\"\n \"2. Use heuristics, analogies, and mental models to build intuition.\\n\"\n \"3. Break down the process step-by-step with clear reasoning.\\n\"\n \"4. Discuss edge cases, implications, or deeper connections to other fields to foster comprehensive understanding.\\n\\n\"\n \"5. Objective Voice: Maintain an authoritative, analytical tone. Strictly avoid self-introductions, conversational \"\n \"fillers, or first-person pronouns.\"\n)\n\nCODE_PROMPT = (\n \"You are a Principal Software Engineer and Algorithm Specialist. Your approach is 'Architecture First.'\\n\\n\"\n \"No Persona: Do not introduce yourself or use phrases like \\\"As an engineer\\\" or \\\"I suggest.\\\" Start directly with \"\n \"the problem analysis.\\n\\n\"\n \"Deep Analysis: Before proposing solutions, analyze the problem's constraints and potential pitfalls.\\n\\n\"\n \"Algorithmic Strategy: Deeply analyze the core algorithmic idea. Explain the choice of paradigm and why this \"\n \"specific approach is optimal for the given constraints.\\n\\n\"\n \"Complexity & Trade-offs: Provide a clear breakdown of Big O time and space complexity. Compare the chosen \"\n \"strategy against potential alternatives.\\n\\n\"\n \"The Blueprint: Provide a Step-by-step Logical Flow and Component Decomposition. Instead of code or pseudocode, \"\n \"use a structured list to outline the sequence of operations and the specific responsibilities of each module or \"\n \"function. This should serve as a conceptual 'map' that the user can implement in any language.\\n\\n\"\n \"Response Language: Please provide all explanations and analysis in Simplified Chinese.\\n\\n\"\n \"Professionalism: The response should be formatted as a publication-ready technical article using standard \"\n \"industry terminology.\"\n)\n\nWRITE_PROMPT = (\n \"You are a high-end developmental editor. Your mission is to transform drafts into polished, high-impact prose.\\n\\n\"\n \"Precision & Flow: Enhance vocabulary and sentence rhythm while maintaining a natural, sophisticated tone.\\n\\n\"\n \"Voice Preservation: You are a silent partner; strictly preserve the author’s original intent, 'soul,' and unique \"\n \"voice. Do not over-sanitize.\\n\\n\"\n \"Structural Insight: If the narrative logic or impact can be improved by reordering or cutting, provide a \"\n \"'Rationale' section explaining your editorial choices.\\n\\n\"\n \"Correction: Fix all grammatical errors and subtle linguistic nuances without being pedantic.\"\n)\n\nIMAGE_PROMPT = (\n \"You are an image generation model specialized in creating visually striking, social-media-ready images.\\n\\n\"\n \"Generate a high-fidelity scene optimized for social media platforms.\\n\\n\"\n \"The visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\\n\\n\"\n \"Composition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual \"\n \"hierarchy that reads well on small screens.\\n\\n\"\n \"Technical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of \"\n \"field where appropriate, and professional cinematic color grading.\\n\\n\"\n \"CRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, \"\n \"no symbols, no logos, no captions, no watermarks, and no UI elements.\\n\\n\"\n \"Ensure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of \"\n \"any typography, signage, branding, or readable characters.\"\n)\n\nDEFAULT_PROMPT = (\n \"You are a versatile AI assistant dedicated to deep conceptual mastery, \"\n \"technical excellence, and refined creative impact.\"\n)\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: KNOWLEDGE_PROMPT,\n TaskType.CODE: CODE_PROMPT,\n TaskType.WRITE: WRITE_PROMPT,\n TaskType.IMAGE: IMAGE_PROMPT,\n \"default\": DEFAULT_PROMPT,\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3-pro-image-preview\",\n}\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "bf1eaa97a5e7e33c933e86e1835e4deef04ce8ac": {"t": 1785769063.5289872, "n": 9750, "h": "3ff751da4d5fd2f6", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n IMAGE = \"image\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.4, \"top_p\": 0.95, \"top_k\": 50},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n TaskType.IMAGE: {\"temperature\": 1.0, \"top_p\": 0.95, \"top_k\": 40},\n}\n\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: \"You are a helpful AI assistant for knowledge learning. Teach the concept step by step.\",\n TaskType.CODE: \"You are a helpful AI assistant for code tasks. Analyze the algorithm ideas, algorithm steps and computational complexity, but don't write specific code. Please respond in Simplified Chinese.\",\n TaskType.WRITE: \"You are a helpful AI assistant for writing instruction, who polishes English drafts for clarity, grammar, and natural tone. Keep the author's voice as much as possible.\",\n TaskType.IMAGE: \"\"\"You are an image generation model specialized in creating visually striking, social-media-ready images.\nGenerate a high-fidelity scene optimized for social media platforms.\nThe visual style should be cinematic photography, with a natural, premium aesthetic and a sense of realism.\nComposition: clean, balanced, and immediately eye-catching, with a clear focal point and strong visual hierarchy that reads well on small screens.\nTechnical quality: ultra-high detail equivalent to 2K resolution, natural high-end lighting, shallow depth of field where appropriate, and professional cinematic color grading.\nCRUCIAL CONSTRAINT: The image must contain absolutely NO text of any kind — no letters, no words, no numbers, no symbols, no logos, no captions, no watermarks, and no UI elements.\nEnsure that all surfaces, backgrounds, clothing, props, and objects are purely visual and completely free of any typography, signage, branding, or readable characters.\"\"\",\n \"default\": \"You are a helpful AI assistant for both knowledge learning and code tasks. For the knowledge learning task, teach the concept step by step. For the code tasks, you only need to analyze the algorithm ideas, algorithm steps and computational complexity, but don't write specific code.\",\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n# Image models for each provider (if supported)\nIMAGE_MODELS = {\n Provider.GEMINI: \"gemini-3-pro-image-preview\",\n}\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n image_model: str = \"\"\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n image_model=provider_data.get(\"image_model\", \"\"),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "6e2d943c69be3d5bc3d331dda7b05400e13794a2": {"t": 1785769065.203164, "n": 8461, "h": "23d09aab1db1938e", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.4, \"top_p\": 0.95, \"top_k\": 50},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n}\n\n\n# System prompts for different task types\nSYSTEM_PROMPTS = {\n TaskType.KNOWLEDGE: \"You are a helpful AI assistant for knowledge learning. Teach the concept step by step.\",\n TaskType.CODE: \"You are a helpful AI assistant for code tasks. Analyze the algorithm ideas, algorithm steps and computational complexity, but don't write specific code. Please respond in Simplified Chinese.\",\n TaskType.WRITE: \"You are a helpful AI assistant for writing instruction, who polishes English drafts for clarity, grammar, and natural tone. Keep the author's voice as much as possible.\",\n \"default\": \"You are a helpful AI assistant for both knowledge learning and code tasks. For the knowledge learning task, teach the concept step by step. For the code tasks, you only need to analyze the algorithm ideas, algorithm steps and computational complexity, but don't write specific code.\",\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "b30527dd1805b44f9a919a721745ce54aea2b5fd": {"t": 1785769066.5841048, "n": 7581, "h": "2c39666d3d0f296e", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List, Any\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n\n\n# Task-specific generation parameters\nTASK_GENERATION_CONFIG = {\n TaskType.CODE: {\"temperature\": 0.0, \"top_p\": 1.0, \"top_k\": 50},\n TaskType.KNOWLEDGE: {\"temperature\": 0.4, \"top_p\": 0.95, \"top_k\": 50},\n TaskType.WRITE: {\"temperature\": 0.2, \"top_p\": 0.9, \"top_k\": 40},\n}\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list"}, "396b83fd85998d3b6e32ce12135addf4b2376dfd": {"t": 1785769067.9767299, "n": 7297, "h": "60071c3c72dc72c2", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n max_tokens: Optional[int] = None\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n base_url=provider_data[\"base_url\"],\n max_tokens=provider_data.get(\"max_tokens\"),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list\n"}, "35b8645cc1161c45cea5f2882250070ec359f6b7": {"t": 1785769069.3537354, "n": 7192, "h": "ec6fc1cde1139c15", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-5-20250929\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n base_url: str\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n base_url=provider_data[\"base_url\"],\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list\n"}, "210e50f201af70f41173cd44de48c9a47b994d63": {"t": 1785769070.5217996, "n": 7112, "h": "f9abc8691babff29", "c": "\"\"\"Configuration management for AI Chat Assistant\"\"\"\n\nimport os\nimport yaml\nfrom dataclasses import dataclass, field\nfrom typing import Optional, Dict, List\nfrom pathlib import Path\nfrom enum import Enum\n\n\nclass TaskType(Enum):\n KNOWLEDGE = \"knowledge\"\n CODE = \"code\"\n WRITE = \"write\"\n\n\nclass Provider(Enum):\n CLAUDE = \"claude\"\n DEEPSEEK = \"deepseek\"\n GEMINI = \"gemini\"\n OPENROUTER = \"openrouter\"\n KIMI = \"kimi\"\n\n\n# Default models for each provider\nDEFAULT_MODELS = {\n Provider.CLAUDE: \"claude-sonnet-4-20250514\",\n Provider.DEEPSEEK: \"deepseek-chat\",\n Provider.GEMINI: \"gemini-flash-latest\",\n Provider.OPENROUTER: \"openai/gpt-4o\",\n Provider.KIMI: \"kimi-k2-thinking\",\n}\n\n\n@dataclass\nclass ProviderConfig:\n \"\"\"Configuration for a specific provider\"\"\"\n\n default_model: str\n knowledge_model: str\n code_model: str\n models: List[Dict] = field(default_factory=list)\n\n\n@dataclass\nclass Settings:\n \"\"\"Application settings loaded from environment variables and config file\"\"\"\n\n # API Keys from environment\n ANTHROPIC_API_KEY: Optional[str] = None\n deepseek_api_key: Optional[str] = None\n gemini_api_key: Optional[str] = None\n kimi_api_key: Optional[str] = None\n openrouter_api_key: Optional[str] = None\n\n # Chat history settings\n history_window_size: int = 3\n\n # Model selection preferences\n knowledge_provider: Provider = Provider.CLAUDE\n code_provider: Provider = Provider.DEEPSEEK\n fallback_order: List[Provider] = field(\n default_factory=lambda: [\n Provider.CLAUDE,\n Provider.DEEPSEEK,\n Provider.GEMINI,\n Provider.KIMI,\n ]\n )\n\n # Performance settings\n enable_context_caching: bool = True\n enable_async_calls: bool = True\n enable_async_answers: bool = False\n\n # Provider configurations\n provider_configs: Dict[Provider, ProviderConfig] = field(default_factory=dict)\n\n def __post_init__(self):\n \"\"\"Load configuration from environment variables and config file\"\"\"\n self._load_api_keys()\n self._load_from_env()\n\n def _load_api_keys(self):\n \"\"\"Load API keys from environment variables\"\"\"\n self.ANTHROPIC_API_KEY = os.getenv(\"ANTHROPIC_API_KEY\")\n self.deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n self.gemini_api_key = os.getenv(\"GEMINI_API_KEY\")\n self.openrouter_api_key = os.getenv(\"OPENROUTER_API_KEY\")\n self.kimi_api_key = os.getenv(\"MOONSHOT_API_KEY\")\n\n def _load_from_env(self):\n \"\"\"Override defaults from environment variables\"\"\"\n history_size = os.getenv(\"HISTORY_WINDOW_SIZE\")\n if history_size and history_size.isdigit():\n try:\n self.history_window_size = int(history_size)\n except (TypeError, ValueError):\n # Handle invalid values gracefully\n pass\n\n @classmethod\n def from_file(cls, config_path: Optional[Path] = None) -> \"Settings\":\n \"\"\"Load configuration from YAML file\"\"\"\n if config_path is None:\n # Try default locations\n default_paths = [\n Path.cwd() / \"config.yaml\",\n Path.cwd() / \"config.yml\",\n Path.home() / \".ai_codebench_config.yaml\",\n Path.home() / \".ai_codebench_config.yml\",\n ]\n\n config_path = None\n for path in default_paths:\n if path.exists():\n config_path = path\n break\n\n settings = cls()\n\n if config_path and config_path.exists():\n try:\n with open(config_path, \"r\", encoding=\"utf-8\") as f:\n yaml_config = yaml.safe_load(f)\n\n settings._load_from_yaml(yaml_config)\n except Exception as e:\n print(f\"Warning: Could not load config file {config_path}: {e}\")\n\n return settings\n\n def _load_from_yaml(self, yaml_config: Dict):\n \"\"\"Load configuration from parsed YAML\"\"\"\n\n # Conversation settings\n if \"conversation\" in yaml_config:\n conv_config = yaml_config[\"conversation\"]\n if \"history_window_size\" in conv_config:\n self.history_window_size = conv_config[\"history_window_size\"]\n\n # Performance settings\n if \"performance\" in yaml_config:\n perf_config = yaml_config[\"performance\"]\n if \"enable_context_caching\" in perf_config:\n self.enable_context_caching = perf_config[\"enable_context_caching\"]\n if \"enable_async_calls\" in perf_config:\n self.enable_async_calls = perf_config[\"enable_async_calls\"]\n if \"enable_async_answers\" in perf_config:\n self.enable_async_answers = perf_config[\"enable_async_answers\"]\n\n # Provider configurations\n if \"providers\" in yaml_config:\n providers_config = yaml_config[\"providers\"]\n\n for provider_name, provider_data in providers_config.items():\n try:\n provider = Provider(provider_name)\n self.provider_configs[provider] = ProviderConfig(\n default_model=provider_data.get(\"default_model\", \"\"),\n knowledge_model=provider_data.get(\n \"knowledge_model\", provider_data.get(\"default_model\", \"\")\n ),\n code_model=provider_data.get(\n \"code_model\", provider_data.get(\"default_model\", \"\")\n ),\n models=provider_data.get(\"models\", []),\n )\n except ValueError:\n print(f\"Warning: Unknown provider in config: {provider_name}\")\n\n # Task routing preferences\n if \"task_routing\" in yaml_config:\n routing_config = yaml_config[\"task_routing\"]\n\n if \"knowledge_provider\" in routing_config:\n try:\n self.knowledge_provider = Provider(\n routing_config[\"knowledge_provider\"]\n )\n except ValueError:\n print(\n f\"Warning: Unknown knowledge provider: {routing_config['knowledge_provider']}\"\n )\n\n if \"code_provider\" in routing_config:\n try:\n self.code_provider = Provider(routing_config[\"code_provider\"])\n except ValueError:\n print(\n f\"Warning: Unknown code provider: {routing_config['code_provider']}\"\n )\n\n if \"fallback_order\" in routing_config:\n fallback_list = []\n for provider_name in routing_config[\"fallback_order\"]:\n try:\n fallback_list.append(Provider(provider_name))\n except ValueError:\n print(f\"Warning: Unknown fallback provider: {provider_name}\")\n if fallback_list:\n self.fallback_order = fallback_list\n"}}}}