1 line
18 KiB
JSON
1 line
18 KiB
JSON
{"repo": "camellialilium/finacumen", "files": {"configs/config.example.toml": {"16246593c75e81fac0b57c05e739761dae3e6fe9": {"t": 1785745329.1204603, "n": 7486, "h": "e03df28cb4a33c50", "c": "# =============================================================================\n# FinAcumen Configuration\n# Copy this file to config.toml (or set FINACUMEN_CONFIG_PATH env var).\n# =============================================================================\n\n# ---------------------------------------------------------------------------\n# Global LLM configuration (primary reasoning model)\n# ---------------------------------------------------------------------------\n# Models used in paper experiments:\n# - Qwen3-VL-8B-Instruct (via DashScope) — primary solver\n# - Claude 3.7 Sonnet (via Anthropic) — alternative solver\n# - GLM-4.6V-Flash (via Zhipu AI) — alternative solver\n# - Claude Sonnet 4.6 — alternative solver\n# The `api_type` key is optional; defaults to \"openai\" (OpenAI-compatible endpoint).\n# Set api_type = \"aws\" for Amazon Bedrock, \"azure\" for Azure OpenAI, \"ollama\" for local.\n# ---------------------------------------------------------------------------\n[llm]\nmodel = \"qwen3-vl-8b-instruct\" # Primary solver model from experiments\nbase_url = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\napi_key = \"YOUR_DASHSCOPE_API_KEY\"\nmax_tokens = 8192\ntemperature = 0.0\n\n# Alternative: Anthropic Claude\n# [llm]\n# model = \"claude-3-7-sonnet-20250219\"\n# base_url = \"https://api.anthropic.com/v1/\"\n# api_key = \"YOUR_ANTHROPIC_API_KEY\"\n# max_tokens = 8192\n# temperature = 0.0\n\n# Alternative: Amazon Bedrock\n# [llm]\n# api_type = \"aws\"\n# model = \"us.anthropic.claude-3-7-sonnet-20250219-v1:0\"\n# base_url = \"bedrock-runtime.us-west-2.amazonaws.com\"\n# max_tokens = 8192\n# temperature = 1.0\n# api_key = \"bear\"\n\n# Alternative: Azure OpenAI\n# [llm]\n# api_type = \"azure\"\n# model = \"YOUR_MODEL_NAME\"\n# base_url = \"{YOUR_AZURE_ENDPOINT}/openai/deployments/{AZURE_DEPLOYMENT_ID}\"\n# api_key = \"YOUR_AZURE_API_KEY\"\n# max_tokens = 8096\n# temperature = 0.0\n# api_version = \"2024-08-01-preview\"\n\n# Alternative: Ollama (local)\n# [llm]\n# api_type = \"ollama\"\n# model = \"llama3.2\"\n# base_url = \"http://localhost:11434/v1\"\n# api_key = \"ollama\"\n# max_tokens = 4096\n# temperature = 0.0\n\n# ---------------------------------------------------------------------------\n# Vision / Multimodal LLM (for image-text tasks, used by MultimodalAgent)\n# ---------------------------------------------------------------------------\n[llm.vision]\nmodel = \"Qwen/Qwen3-VL-8B-Instruct\" # Vision model from experiments\nbase_url = \"https://api.siliconflow.cn/v1\" # Or your provider's endpoint\napi_key = \"YOUR_VISION_API_KEY\"\nmax_tokens = 8192\ntemperature = 0.0\n\n# ---------------------------------------------------------------------------\n# DSER (Deep Structured Experience Reasoning) solver profile\n# This is the reasoning engine for benchmark evaluation.\n# In experiments, the paper used Qwen3-VL-8B-Instruct as the solver.\n# ---------------------------------------------------------------------------\n[llm.dser]\napi_type = \"openai\"\nmodel = \"qwen3-vl-8b-instruct\" # Solver model from experiments\nbase_url = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\napi_key = \"YOUR_DASHSCOPE_API_KEY\"\nmax_tokens = 1024\ntemperature = 0.6\n\n# ---------------------------------------------------------------------------\n# LLM-as-Judge for evaluation (FinTMMBench correctness judgment)\n# Paper used gpt-4o-mini per the original FinTMMBench eval protocol (arXiv 2503.05185)\n# ---------------------------------------------------------------------------\n[llm.judge]\napi_type = \"openai\"\nmodel = \"gpt-4o-mini\" # Judge model from paper\nbase_url = \"https://api.openai.com/v1\"\napi_key = \"YOUR_OPENAI_API_KEY\"\nmax_tokens = 16\ntemperature = 0.0\n\n# ---------------------------------------------------------------------------\n# Memory quality evaluation judge\n# Used to cross-verify the quality of collected and retrieved experience entries.\n# ---------------------------------------------------------------------------\n[llm.memory_judge]\napi_type = \"openai\"\nbase_url = \"https://api.deepseek.com\"\napi_key = \"YOUR_DEEPSEEK_API_KEY\"\nmodel = \"deepseek-v4-pro\" # Or another capable model for quality assessment\nmax_tokens = 2048\ntemperature = 0.3\n\n# ---------------------------------------------------------------------------\n# OCR (Optical Character Recognition for chart/table extraction)\n# Used by the OcrExtract tool to re-read charts when vision-read values are unreliable.\n# ---------------------------------------------------------------------------\n[ocr]\nmodel = \"qwen3-vl-8b-instruct\" # OCR model from experiments\nbase_url = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\napi_key = \"YOUR_OCR_API_KEY\" # Or reuse DASHSCOPE key above\n\n# ---------------------------------------------------------------------------\n# Semantic Embedding (for FM experience retrieval)\n# Required for embed_text — no OCR/LLM fallback.\n# ---------------------------------------------------------------------------\n# Option 1: DashScope text-embedding-v3 (aliyun, recommended)\n[embedding]\nprovider = \"dashscope\"\nmodel = \"text-embedding-v3\"\nbase_url = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\napi_key = \"YOUR_DASHSCOPE_API_KEY\"\n\n# Option 2: NVIDIA NV-Embed-v2\n# [embedding]\n# provider = \"nv_embed_v2\"\n# model = \"nvidia/NV-Embed-v2\"\n# base_url = \"https://integrate.api.nvidia.com/v1\"\n# api_key = \"YOUR_NVIDIA_API_KEY\"\n\n# ---------------------------------------------------------------------------\n# Sandbox (Docker-based code execution)\n# ---------------------------------------------------------------------------\n[sandbox]\nuse_sandbox = false\nimage = \"python:3.12-slim\"\nwork_dir = \"/workspace\"\nmemory_limit = \"1g\"\ncpu_limit = 2.0\ntimeout = 300\nnetwork_enabled = true\n\n# ---------------------------------------------------------------------------\n# Daytona sandbox (placeholder — required by config loader; set unused if not using)\n# ---------------------------------------------------------------------------\n[daytona]\ndaytona_api_key = \"unused\"\n\n# ---------------------------------------------------------------------------\n# MCP (Model Context Protocol) server reference\n# ---------------------------------------------------------------------------\n[mcp]\nserver_reference = \"app.mcp.server\"\n\n# ---------------------------------------------------------------------------\n# Runflow: agent orchestration configuration\n# ---------------------------------------------------------------------------\n[runflow]\nuse_planning_agent = true # Enable PlanningAgent as planner/coordinator\nuse_multimodal_agent = false # Enable MultimodalAgent for image-text tasks\n\n# ---------------------------------------------------------------------------\n# Browser (optional — for web-browsing tasks)\n# ---------------------------------------------------------------------------\n# [browser]\n# headless = false\n# disable_security = true\n# extra_chromium_args = []\n# chrome_instance_path = \"\"\n# wss_url = \"\"\n# cdp_url = \"\"\n\n# [browser.proxy]\n# server = \"http://proxy-server:port\"\n# username = \"proxy-username\"\n# password = \"proxy-password\"\n\n# ---------------------------------------------------------------------------\n# Search (optional — for web-search tasks)\n# ---------------------------------------------------------------------------\n# [search]\n# engine = \"Google\"\n# fallback_engines = [\"DuckDuckGo\", \"Baidu\", \"Bing\"]\n# retry_delay = 60\n# max_retries = 3\n# lang = \"en\"\n# country = \"us\"\n"}, "aaa4a657fb549b43935355513c97fdf57e2976a2": {"t": 1785750247.6098762, "n": 7486, "h": "e03df28cb4a33c50", "c": "# =============================================================================\n# FinAcumen Configuration\n# Copy this file to config.toml (or set FINACUMEN_CONFIG_PATH env var).\n# =============================================================================\n\n# ---------------------------------------------------------------------------\n# Global LLM configuration (primary reasoning model)\n# ---------------------------------------------------------------------------\n# Models used in paper experiments:\n# - Qwen3-VL-8B-Instruct (via DashScope) — primary solver\n# - Claude 3.7 Sonnet (via Anthropic) — alternative solver\n# - GLM-4.6V-Flash (via Zhipu AI) — alternative solver\n# - Claude Sonnet 4.6 — alternative solver\n# The `api_type` key is optional; defaults to \"openai\" (OpenAI-compatible endpoint).\n# Set api_type = \"aws\" for Amazon Bedrock, \"azure\" for Azure OpenAI, \"ollama\" for local.\n# ---------------------------------------------------------------------------\n[llm]\nmodel = \"qwen3-vl-8b-instruct\" # Primary solver model from experiments\nbase_url = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\napi_key = \"YOUR_DASHSCOPE_API_KEY\"\nmax_tokens = 8192\ntemperature = 0.0\n\n# Alternative: Anthropic Claude\n# [llm]\n# model = \"claude-3-7-sonnet-20250219\"\n# base_url = \"https://api.anthropic.com/v1/\"\n# api_key = \"YOUR_ANTHROPIC_API_KEY\"\n# max_tokens = 8192\n# temperature = 0.0\n\n# Alternative: Amazon Bedrock\n# [llm]\n# api_type = \"aws\"\n# model = \"us.anthropic.claude-3-7-sonnet-20250219-v1:0\"\n# base_url = \"bedrock-runtime.us-west-2.amazonaws.com\"\n# max_tokens = 8192\n# temperature = 1.0\n# api_key = \"bear\"\n\n# Alternative: Azure OpenAI\n# [llm]\n# api_type = \"azure\"\n# model = \"YOUR_MODEL_NAME\"\n# base_url = \"{YOUR_AZURE_ENDPOINT}/openai/deployments/{AZURE_DEPLOYMENT_ID}\"\n# api_key = \"YOUR_AZURE_API_KEY\"\n# max_tokens = 8096\n# temperature = 0.0\n# api_version = \"2024-08-01-preview\"\n\n# Alternative: Ollama (local)\n# [llm]\n# api_type = \"ollama\"\n# model = \"llama3.2\"\n# base_url = \"http://localhost:11434/v1\"\n# api_key = \"ollama\"\n# max_tokens = 4096\n# temperature = 0.0\n\n# ---------------------------------------------------------------------------\n# Vision / Multimodal LLM (for image-text tasks, used by MultimodalAgent)\n# ---------------------------------------------------------------------------\n[llm.vision]\nmodel = \"Qwen/Qwen3-VL-8B-Instruct\" # Vision model from experiments\nbase_url = \"https://api.siliconflow.cn/v1\" # Or your provider's endpoint\napi_key = \"YOUR_VISION_API_KEY\"\nmax_tokens = 8192\ntemperature = 0.0\n\n# ---------------------------------------------------------------------------\n# DSER (Deep Structured Experience Reasoning) solver profile\n# This is the reasoning engine for benchmark evaluation.\n# In experiments, the paper used Qwen3-VL-8B-Instruct as the solver.\n# ---------------------------------------------------------------------------\n[llm.dser]\napi_type = \"openai\"\nmodel = \"qwen3-vl-8b-instruct\" # Solver model from experiments\nbase_url = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\napi_key = \"YOUR_DASHSCOPE_API_KEY\"\nmax_tokens = 1024\ntemperature = 0.6\n\n# ---------------------------------------------------------------------------\n# LLM-as-Judge for evaluation (FinTMMBench correctness judgment)\n# Paper used gpt-4o-mini per the original FinTMMBench eval protocol (arXiv 2503.05185)\n# ---------------------------------------------------------------------------\n[llm.judge]\napi_type = \"openai\"\nmodel = \"gpt-4o-mini\" # Judge model from paper\nbase_url = \"https://api.openai.com/v1\"\napi_key = \"YOUR_OPENAI_API_KEY\"\nmax_tokens = 16\ntemperature = 0.0\n\n# ---------------------------------------------------------------------------\n# Memory quality evaluation judge\n# Used to cross-verify the quality of collected and retrieved experience entries.\n# ---------------------------------------------------------------------------\n[llm.memory_judge]\napi_type = \"openai\"\nbase_url = \"https://api.deepseek.com\"\napi_key = \"YOUR_DEEPSEEK_API_KEY\"\nmodel = \"deepseek-v4-pro\" # Or another capable model for quality assessment\nmax_tokens = 2048\ntemperature = 0.3\n\n# ---------------------------------------------------------------------------\n# OCR (Optical Character Recognition for chart/table extraction)\n# Used by the OcrExtract tool to re-read charts when vision-read values are unreliable.\n# ---------------------------------------------------------------------------\n[ocr]\nmodel = \"qwen3-vl-8b-instruct\" # OCR model from experiments\nbase_url = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\napi_key = \"YOUR_OCR_API_KEY\" # Or reuse DASHSCOPE key above\n\n# ---------------------------------------------------------------------------\n# Semantic Embedding (for FM experience retrieval)\n# Required for embed_text — no OCR/LLM fallback.\n# ---------------------------------------------------------------------------\n# Option 1: DashScope text-embedding-v3 (aliyun, recommended)\n[embedding]\nprovider = \"dashscope\"\nmodel = \"text-embedding-v3\"\nbase_url = \"https://dashscope.aliyuncs.com/compatible-mode/v1\"\napi_key = \"YOUR_DASHSCOPE_API_KEY\"\n\n# Option 2: NVIDIA NV-Embed-v2\n# [embedding]\n# provider = \"nv_embed_v2\"\n# model = \"nvidia/NV-Embed-v2\"\n# base_url = \"https://integrate.api.nvidia.com/v1\"\n# api_key = \"YOUR_NVIDIA_API_KEY\"\n\n# ---------------------------------------------------------------------------\n# Sandbox (Docker-based code execution)\n# ---------------------------------------------------------------------------\n[sandbox]\nuse_sandbox = false\nimage = \"python:3.12-slim\"\nwork_dir = \"/workspace\"\nmemory_limit = \"1g\"\ncpu_limit = 2.0\ntimeout = 300\nnetwork_enabled = true\n\n# ---------------------------------------------------------------------------\n# Daytona sandbox (placeholder — required by config loader; set unused if not using)\n# ---------------------------------------------------------------------------\n[daytona]\ndaytona_api_key = \"unused\"\n\n# ---------------------------------------------------------------------------\n# MCP (Model Context Protocol) server reference\n# ---------------------------------------------------------------------------\n[mcp]\nserver_reference = \"app.mcp.server\"\n\n# ---------------------------------------------------------------------------\n# Runflow: agent orchestration configuration\n# ---------------------------------------------------------------------------\n[runflow]\nuse_planning_agent = true # Enable PlanningAgent as planner/coordinator\nuse_multimodal_agent = false # Enable MultimodalAgent for image-text tasks\n\n# ---------------------------------------------------------------------------\n# Browser (optional — for web-browsing tasks)\n# ---------------------------------------------------------------------------\n# [browser]\n# headless = false\n# disable_security = true\n# extra_chromium_args = []\n# chrome_instance_path = \"\"\n# wss_url = \"\"\n# cdp_url = \"\"\n\n# [browser.proxy]\n# server = \"http://proxy-server:port\"\n# username = \"proxy-username\"\n# password = \"proxy-password\"\n\n# ---------------------------------------------------------------------------\n# Search (optional — for web-search tasks)\n# ---------------------------------------------------------------------------\n# [search]\n# engine = \"Google\"\n# fallback_engines = [\"DuckDuckGo\", \"Baidu\", \"Bing\"]\n# retry_delay = 60\n# max_retries = 3\n# lang = \"en\"\n# country = \"us\"\n"}}, "finacumen/ft/llm_adapters/glm_thinking.py": {"16246593c75e81fac0b57c05e739761dae3e6fe9": {"t": 1785809880.7803938, "n": 2188, "h": "381ffb99adbb2e32", "c": "\"\"\"GLM-4.1V-9B-Thinking — AIHubMix OpenAI-compatible gateway.\n\nCritical quirks (observed via empirical testing 2026-04-29):\n - Does NOT support OpenAI function-calling tools API\n (returns 400 'Function call is not supported for this model').\n → supports_function_calling = False; falls back to prompt-based dispatch.\n - **Rejects temperature=0.0** with 400 'parameter invalid' (Thinking models\n require sampling). Use T ≥ 0.3; we recommend 0.6 for stability.\n → min_temperature = 0.3; callers should use the adapter helper to clamp.\n - Output includes <|begin_of_box|>...<|end_of_box|> thinking markers\n (model-specific reasoning trace; the variant should strip them when\n extracting the final_answer).\n\"\"\"\nfrom __future__ import annotations\n\nimport os\n\nfrom .default import DefaultAdapter\n\n\nclass GLMThinkingAdapter(DefaultAdapter):\n name = \"glm-4.1v-thinking\"\n\n def matches(self, model_id: str) -> bool:\n m = model_id.lower()\n return \"glm-4.1v\" in m or \"glm-4.1v-9b-thinking\" in m\n\n @property\n def supports_function_calling(self) -> bool:\n return False # AIHubMix gateway returns 400 on tools=...\n\n # GLM Thinking models reject T=0; clamp to >= 0.3 in clamp_temperature.\n min_temperature: float = 0.3\n supports_images: bool = True\n use_max_completion_tokens: bool = False\n\n def resolve_api_key(self, settings_api_key: str) -> str:\n \"\"\"Prefer settings.api_key when sk-prefixed; fall back to OPENAI_API_KEY env (AIHubMix uses OpenAI-compatible auth).\"\"\"\n cfg = settings_api_key or \"\"\n if cfg.startswith(\"sk-\"):\n return cfg\n return os.environ.get(\"OPENAI_API_KEY\", \"\") or cfg\n\n def prepare_content(self, text: str, images=None):\n \"\"\"When no image, return plain string (avoid 400 'parameter invalid' on empty multimodal list).\"\"\"\n if not images:\n return text # plain string for text-only queries\n return super().prepare_content(text, images)\n\n def prepare_tools(self, tools):\n # GLM-4.1V-Thinking via AIHubMix rejects tools=. Always omit; caller\n # should fall back to inject_tool_prompt + parse_tool_calls.\n return None\n"}}}} |