aria-code 0.167.0__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aria_bots/__init__.py +7 -0
- aria_bots/channels/README.md +97 -0
- aria_bots/channels/__init__.py +1 -0
- aria_bots/channels/approvals.py +263 -0
- aria_bots/channels/conversation.py +280 -0
- aria_bots/channels/digest.py +186 -0
- aria_bots/channels/registry.py +95 -0
- aria_bots/engine.py +144 -0
- aria_bots/feishu_bot.py +1385 -0
- aria_bots/logistics/__init__.py +1 -0
- aria_bots/logistics/carriers.py +253 -0
- aria_bots/logistics/freight.py +154 -0
- aria_bots/logistics/inventory.py +242 -0
- aria_bots/logistics/mcp_server.py +156 -0
- aria_bots/logistics/records.py +119 -0
- aria_bots/logistics/tenancy.py +152 -0
- aria_bots/market.py +91 -0
- aria_bots/relay_client.py +326 -0
- aria_bots/telegram_bot.py +299 -0
- aria_code/__init__.py +111 -0
- aria_code/_bin/aria-native.exe +0 -0
- aria_code/_bin/aria-runtime.exe +0 -0
- aria_code/_version.py +20 -0
- aria_code/account_memory.py +296 -0
- aria_code/account_session.py +166 -0
- aria_code/adk_apps/__init__.py +1 -0
- aria_code/adk_apps/aria_code_review/__init__.py +1 -0
- aria_code/adk_apps/aria_code_review/agent.py +32 -0
- aria_code/adk_apps/aria_research/__init__.py +1 -0
- aria_code/adk_apps/aria_research/agent.py +31 -0
- aria_code/agents/__init__.py +49 -0
- aria_code/agents/base.py +329 -0
- aria_code/agents/code_review.py +200 -0
- aria_code/agents/deep/__init__.py +37 -0
- aria_code/agents/deep/calibration_loop.py +144 -0
- aria_code/agents/deep/critic.py +125 -0
- aria_code/agents/deep/deepen.py +193 -0
- aria_code/agents/deep/models.py +149 -0
- aria_code/agents/deep/pipeline.py +164 -0
- aria_code/agents/deep/quant_fusion.py +192 -0
- aria_code/agents/deep/themes.py +95 -0
- aria_code/agents/deep/tiers.py +106 -0
- aria_code/agents/engineering/__init__.py +14 -0
- aria_code/agents/engineering/coder.py +222 -0
- aria_code/agents/engineering/tester.py +145 -0
- aria_code/agents/financial/__init__.py +21 -0
- aria_code/agents/financial/cashflow_burn.py +119 -0
- aria_code/agents/financial/catalyst.py +279 -0
- aria_code/agents/financial/corporate_finance.py +175 -0
- aria_code/agents/financial/debate.py +224 -0
- aria_code/agents/financial/earnings.py +315 -0
- aria_code/agents/financial/fundamental.py +178 -0
- aria_code/agents/financial/macro.py +111 -0
- aria_code/agents/financial/news.py +231 -0
- aria_code/agents/financial/risk.py +146 -0
- aria_code/agents/financial/sector.py +279 -0
- aria_code/agents/financial/strategist.py +121 -0
- aria_code/agents/financial/stripe_revenue.py +127 -0
- aria_code/agents/financial/synthesis.py +274 -0
- aria_code/agents/financial/technical.py +277 -0
- aria_code/agents/orchestrator.py +44 -0
- aria_code/agents/portfolio_agent.py +392 -0
- aria_code/agents/realty/__init__.py +62 -0
- aria_code/agents/realty/asset_diagnosis.py +152 -0
- aria_code/agents/realty/business_match.py +166 -0
- aria_code/agents/realty/cashflow_verify.py +209 -0
- aria_code/agents/realty/contract_rules.py +210 -0
- aria_code/agents/realty/energy_anomaly.py +189 -0
- aria_code/agents/realty/exit_settlement.py +208 -0
- aria_code/agents/realty/fulfillment_risk.py +206 -0
- aria_code/agents/realty/ops_optimize.py +160 -0
- aria_code/agents/realty/revenue_share.py +215 -0
- aria_code/agents/registry.py +168 -0
- aria_code/agents/signal_scheme.py +111 -0
- aria_code/agents/sports/__init__.py +0 -0
- aria_code/agents/sports/football_agent.py +197 -0
- aria_code/agents/supervisor.py +113 -0
- aria_code/agents/team.py +500 -0
- aria_code/agents/video/__init__.py +16 -0
- aria_code/agents/video/director.py +376 -0
- aria_code/agents/video/qa_agent.py +143 -0
- aria_code/agents/video/script_doctor.py +112 -0
- aria_code/agents/warehouse/__init__.py +25 -0
- aria_code/agents/warehouse/contracts.py +26 -0
- aria_code/agents/warehouse/dashboard.py +155 -0
- aria_code/agents/warehouse/fulfillment_leadtime.py +95 -0
- aria_code/agents/warehouse/inbound_exceptions.py +25 -0
- aria_code/agents/warehouse/inventory_health.py +24 -0
- aria_code/agents/warehouse/local_run.py +71 -0
- aria_code/agents/warehouse/local_snapshot.py +132 -0
- aria_code/agents/warehouse/logistics_cost.py +84 -0
- aria_code/agents/warehouse/logistics_sync.py +21 -0
- aria_code/agents/warehouse/navigation.schema.json +110 -0
- aria_code/agents/warehouse/task_agent.py +172 -0
- aria_code/agents/warehouse/workflow.py +31 -0
- aria_code/aliyun_data_client.py +4 -0
- aria_code/apps/README.md +12 -0
- aria_code/apps/__init__.py +2 -0
- aria_code/apps/channels/README.md +9 -0
- aria_code/apps/channels/__init__.py +17 -0
- aria_code/apps/channels/approvals.py +11 -0
- aria_code/apps/channels/conversation.py +11 -0
- aria_code/apps/channels/digest.py +11 -0
- aria_code/apps/channels/intake.py +92 -0
- aria_code/apps/channels/registry.py +11 -0
- aria_code/apps/channels/tradingview.py +94 -0
- aria_code/apps/cli/README.md +13 -0
- aria_code/apps/cli/__init__.py +2 -0
- aria_code/apps/cli/_optional.py +120 -0
- aria_code/apps/cli/app_server.py +656 -0
- aria_code/apps/cli/auto_update.py +125 -0
- aria_code/apps/cli/bootstrap.py +206 -0
- aria_code/apps/cli/broker_render.py +206 -0
- aria_code/apps/cli/chat_turn.py +1327 -0
- aria_code/apps/cli/cloud_models.py +231 -0
- aria_code/apps/cli/codegen_paths.py +29 -0
- aria_code/apps/cli/commands/__init__.py +34 -0
- aria_code/apps/cli/commands/_business_render.py +78 -0
- aria_code/apps/cli/commands/_ui.py +71 -0
- aria_code/apps/cli/commands/analysis_cmds.py +378 -0
- aria_code/apps/cli/commands/ashare_prediction_cmds.py +327 -0
- aria_code/apps/cli/commands/auth_cmds.py +215 -0
- aria_code/apps/cli/commands/backtest_cmds.py +2518 -0
- aria_code/apps/cli/commands/broker_cmds.py +1236 -0
- aria_code/apps/cli/commands/business_workflow_cmds.py +379 -0
- aria_code/apps/cli/commands/canvas_cmds.py +77 -0
- aria_code/apps/cli/commands/catalog.py +189 -0
- aria_code/apps/cli/commands/core_cmds.py +2748 -0
- aria_code/apps/cli/commands/data_cmds.py +521 -0
- aria_code/apps/cli/commands/diagnostic_cmds.py +285 -0
- aria_code/apps/cli/commands/diagnostic_ops_cmds.py +813 -0
- aria_code/apps/cli/commands/engineering_cmds.py +399 -0
- aria_code/apps/cli/commands/file_cmds.py +312 -0
- aria_code/apps/cli/commands/finance_service_cmds.py +60 -0
- aria_code/apps/cli/commands/fx_commodity_cmds.py +123 -0
- aria_code/apps/cli/commands/market.py +544 -0
- aria_code/apps/cli/commands/market_cmds.py +1419 -0
- aria_code/apps/cli/commands/market_context.py +432 -0
- aria_code/apps/cli/commands/market_render.py +7 -0
- aria_code/apps/cli/commands/model_cmds.py +2374 -0
- aria_code/apps/cli/commands/ops_cmds.py +721 -0
- aria_code/apps/cli/commands/orchestrator_cmds.py +181 -0
- aria_code/apps/cli/commands/pdf_export_cmds.py +125 -0
- aria_code/apps/cli/commands/portfolio_cmds.py +1316 -0
- aria_code/apps/cli/commands/report.py +476 -0
- aria_code/apps/cli/commands/scaffold_templates.py +617 -0
- aria_code/apps/cli/commands/session_cmds.py +236 -0
- aria_code/apps/cli/commands/session_ux_cmds.py +359 -0
- aria_code/apps/cli/commands/team.py +723 -0
- aria_code/apps/cli/commands/team_render.py +8 -0
- aria_code/apps/cli/commands/ui_cmds.py +401 -0
- aria_code/apps/cli/commands/warehouse_cmds.py +297 -0
- aria_code/apps/cli/commands/workflow_cmds.py +629 -0
- aria_code/apps/cli/commands/workspace_cmds.py +1543 -0
- aria_code/apps/cli/config_paths.py +73 -0
- aria_code/apps/cli/config_store.py +158 -0
- aria_code/apps/cli/constants.py +88 -0
- aria_code/apps/cli/context.py +34 -0
- aria_code/apps/cli/conversation_policy.py +53 -0
- aria_code/apps/cli/deterministic.py +200 -0
- aria_code/apps/cli/direct.py +48 -0
- aria_code/apps/cli/earnings_view.py +172 -0
- aria_code/apps/cli/endpoint_migration.py +64 -0
- aria_code/apps/cli/exec_events.py +255 -0
- aria_code/apps/cli/file_references.py +155 -0
- aria_code/apps/cli/finance_service_catalog.py +111 -0
- aria_code/apps/cli/football_reports.py +231 -0
- aria_code/apps/cli/github_app_auth.py +135 -0
- aria_code/apps/cli/google_login.py +239 -0
- aria_code/apps/cli/handlers/__init__.py +11 -0
- aria_code/apps/cli/handlers/broker_handlers.py +122 -0
- aria_code/apps/cli/handlers/chart_handlers.py +1314 -0
- aria_code/apps/cli/handlers/market_handlers.py +2570 -0
- aria_code/apps/cli/handlers/realty_handlers.py +114 -0
- aria_code/apps/cli/handlers/sports_handlers.py +22 -0
- aria_code/apps/cli/handlers/strategy_advice.py +82 -0
- aria_code/apps/cli/headless.py +352 -0
- aria_code/apps/cli/helpers.py +326 -0
- aria_code/apps/cli/hooks.py +180 -0
- aria_code/apps/cli/i18n.py +310 -0
- aria_code/apps/cli/intent.py +136 -0
- aria_code/apps/cli/intent_router.py +305 -0
- aria_code/apps/cli/intent_shadow.py +72 -0
- aria_code/apps/cli/intent_signals.py +347 -0
- aria_code/apps/cli/lifecycle_hooks.py +48 -0
- aria_code/apps/cli/local_tool_schemas.py +550 -0
- aria_code/apps/cli/main.py +39 -0
- aria_code/apps/cli/market_hours.py +100 -0
- aria_code/apps/cli/market_metadata.py +135 -0
- aria_code/apps/cli/market_universe.py +487 -0
- aria_code/apps/cli/message_processing.py +310 -0
- aria_code/apps/cli/mixin_binding.py +32 -0
- aria_code/apps/cli/model_catalog.py +652 -0
- aria_code/apps/cli/model_probe.py +169 -0
- aria_code/apps/cli/model_retirement.py +65 -0
- aria_code/apps/cli/native_branding.py +12 -0
- aria_code/apps/cli/native_bridge.py +118 -0
- aria_code/apps/cli/native_entry.py +58 -0
- aria_code/apps/cli/pdf_report.py +977 -0
- aria_code/apps/cli/plan_mode.py +139 -0
- aria_code/apps/cli/plotly_html.py +15 -0
- aria_code/apps/cli/prediction_feedback.py +202 -0
- aria_code/apps/cli/preflight.py +502 -0
- aria_code/apps/cli/project_aria.py +60 -0
- aria_code/apps/cli/prompt_assembly.py +78 -0
- aria_code/apps/cli/prompts/__init__.py +0 -0
- aria_code/apps/cli/prompts/coding.py +71 -0
- aria_code/apps/cli/prompts/select.py +193 -0
- aria_code/apps/cli/prompts/system_prompts.py +562 -0
- aria_code/apps/cli/prompts/ui.py +436 -0
- aria_code/apps/cli/provider_endpoints.py +237 -0
- aria_code/apps/cli/provider_keys.py +73 -0
- aria_code/apps/cli/providers/__init__.py +1 -0
- aria_code/apps/cli/providers/base.py +775 -0
- aria_code/apps/cli/providers/chat_routing.py +139 -0
- aria_code/apps/cli/providers/collaboration.py +98 -0
- aria_code/apps/cli/providers/llm/__init__.py +1 -0
- aria_code/apps/cli/providers/llm/offline_responses.py +68 -0
- aria_code/apps/cli/providers/llm/ollama_stream.py +1574 -0
- aria_code/apps/cli/providers/llm/response_cache.py +60 -0
- aria_code/apps/cli/providers/llm/sse_stream.py +298 -0
- aria_code/apps/cli/providers/runtime_bridge.py +586 -0
- aria_code/apps/cli/providers/vertexai_stream.py +592 -0
- aria_code/apps/cli/release_download.py +159 -0
- aria_code/apps/cli/review_runner.py +111 -0
- aria_code/apps/cli/runtime_consumer.py +769 -0
- aria_code/apps/cli/sandbox.py +32 -0
- aria_code/apps/cli/session_export.py +120 -0
- aria_code/apps/cli/session_jsonl.py +208 -0
- aria_code/apps/cli/session_refresh.py +123 -0
- aria_code/apps/cli/session_store.py +125 -0
- aria_code/apps/cli/skills_catalog.py +273 -0
- aria_code/apps/cli/task_isolation.py +211 -0
- aria_code/apps/cli/terminal_chrome.py +412 -0
- aria_code/apps/cli/todo_tracker.py +190 -0
- aria_code/apps/cli/tool_executor.py +932 -0
- aria_code/apps/cli/tool_registry.py +34 -0
- aria_code/apps/cli/tool_scope.py +113 -0
- aria_code/apps/cli/tools/__init__.py +40 -0
- aria_code/apps/cli/tools/context.py +46 -0
- aria_code/apps/cli/tools/file_tools.py +181 -0
- aria_code/apps/cli/tools/market_tools.py +626 -0
- aria_code/apps/cli/tools/notebook_tools.py +111 -0
- aria_code/apps/cli/tools/system_tools.py +656 -0
- aria_code/apps/cli/tools/write_tools.py +961 -0
- aria_code/apps/cli/tradingview_bridge.py +529 -0
- aria_code/apps/cli/transactions.py +269 -0
- aria_code/apps/cli/turn_planning.py +137 -0
- aria_code/apps/cli/update_check.py +257 -0
- aria_code/apps/cli/updater.py +373 -0
- aria_code/apps/cli/utils/__init__.py +0 -0
- aria_code/apps/cli/utils/market_detect.py +1663 -0
- aria_code/apps/cli/web_login.py +136 -0
- aria_code/apps/cli/workflow_runner.py +127 -0
- aria_code/apps/cli/workspace_route.py +121 -0
- aria_code/apps/daemon/README.md +14 -0
- aria_code/apps/vscode/README.md +115 -0
- aria_code/apps/vscode/package.json +70 -0
- aria_code/aria_cli.py +5244 -0
- aria_code/aria_daemon.py +1372 -0
- aria_code/aria_feishu_bot.py +16 -0
- aria_code/aria_mcp_server.py +61 -0
- aria_code/aria_relay_client.py +4 -0
- aria_code/aria_telegram_bot.py +11 -0
- aria_code/ariarc.py +385 -0
- aria_code/artifacts.py +581 -0
- aria_code/backtest_engine.py +4 -0
- aria_code/backtest_report.py +4 -0
- aria_code/brokers/__init__.py +78 -0
- aria_code/brokers/automation.py +193 -0
- aria_code/brokers/base.py +231 -0
- aria_code/brokers/capabilities.py +264 -0
- aria_code/brokers/cn/__init__.py +10 -0
- aria_code/brokers/cn/easytrader_broker.py +193 -0
- aria_code/brokers/cn/futu_broker.py +194 -0
- aria_code/brokers/cn/longbridge_broker.py +190 -0
- aria_code/brokers/cn/tiger_broker.py +196 -0
- aria_code/brokers/cn/xtquant_broker.py +225 -0
- aria_code/brokers/config.py +414 -0
- aria_code/brokers/intl/__init__.py +5 -0
- aria_code/brokers/intl/alpaca_broker.py +183 -0
- aria_code/brokers/intl/ibkr_broker.py +215 -0
- aria_code/brokers/intl/trading212_broker.py +183 -0
- aria_code/brokers/intl/webull_broker.py +156 -0
- aria_code/brokers/paper_broker.py +266 -0
- aria_code/brokers/planning.py +296 -0
- aria_code/brokers/registry.py +213 -0
- aria_code/brokers/trading.py +267 -0
- aria_code/canva_client.py +4 -0
- aria_code/change_store.py +127 -0
- aria_code/clients/__init__.py +0 -0
- aria_code/clients/aliyun_data_client.py +660 -0
- aria_code/clients/aria_relay_client.py +16 -0
- aria_code/clients/canva_client.py +284 -0
- aria_code/clients/figma_client.py +100 -0
- aria_code/clients/football_data_client.py +1671 -0
- aria_code/clients/kling_video_client.py +182 -0
- aria_code/clients/market_data_client.py +1985 -0
- aria_code/clients/openai_image_client.py +242 -0
- aria_code/clients/runway_video_client.py +157 -0
- aria_code/clients/warehouse_erp_client.py +105 -0
- aria_code/cloud_memory.py +190 -0
- aria_code/command_safety.py +19 -0
- aria_code/computer_use_server.py +276 -0
- aria_code/computer_use_tools.py +4 -0
- aria_code/dashboard_generator.py +579 -0
- aria_code/data_analysis_tools.py +4 -0
- aria_code/data_cleaner.py +483 -0
- aria_code/data_service.py +513 -0
- aria_code/datasources/__init__.py +23 -0
- aria_code/datasources/base.py +166 -0
- aria_code/datasources/router.py +253 -0
- aria_code/datasources/sec_statements.py +217 -0
- aria_code/datasources/sources/__init__.py +15 -0
- aria_code/datasources/sources/akshare_source.py +269 -0
- aria_code/datasources/sources/alpha_vantage_source.py +203 -0
- aria_code/datasources/sources/edgar_source.py +219 -0
- aria_code/datasources/sources/finnhub_source.py +198 -0
- aria_code/datasources/sources/fred_source.py +223 -0
- aria_code/datasources/sources/tushare_source.py +143 -0
- aria_code/datasources/sources/web_scraper_source.py +278 -0
- aria_code/datasources/sources/world_bank_source.py +206 -0
- aria_code/datasources/sources/yfinance_source.py +152 -0
- aria_code/doctor.py +860 -0
- aria_code/domain/__init__.py +0 -0
- aria_code/domain/_finance_core/__init__.py +5 -0
- aria_code/domain/_finance_core/backtest_engine.py +325 -0
- aria_code/domain/_finance_core/performance_stats.py +101 -0
- aria_code/domain/backtest_engine.py +75 -0
- aria_code/domain/backtest_report.py +488 -0
- aria_code/domain/finance_formulas.py +389 -0
- aria_code/domain/performance_stats.py +6 -0
- aria_code/domain/portfolio_ledger.py +307 -0
- aria_code/domain/strategy_vault.py +421 -0
- aria_code/evals/__init__.py +37 -0
- aria_code/evals/behavior.py +113 -0
- aria_code/evals/gap.py +93 -0
- aria_code/evals/harness.py +949 -0
- aria_code/evals/review_probe.py +132 -0
- aria_code/evals/runner.py +425 -0
- aria_code/evals/scorecard.py +322 -0
- aria_code/evals/summary.py +125 -0
- aria_code/external_agent_runner.py +115 -0
- aria_code/figma_client.py +4 -0
- aria_code/file_analysis_tools.py +4 -0
- aria_code/finance_formulas.py +4 -0
- aria_code/football_data_client.py +4 -0
- aria_code/image_gen_tools.py +4 -0
- aria_code/intent_classifier.py +459 -0
- aria_code/kling_video_client.py +4 -0
- aria_code/licensing.py +151 -0
- aria_code/local_finance_tools.py +4 -0
- aria_code/local_image_provider.py +4 -0
- aria_code/local_llm_provider.py +4 -0
- aria_code/macro_tools.py +4 -0
- aria_code/markdown_pdf.py +289 -0
- aria_code/market_data_client.py +4 -0
- aria_code/mcp_client.py +744 -0
- aria_code/memory_manager.py +273 -0
- aria_code/model_capability.py +512 -0
- aria_code/notification_tools.py +4 -0
- aria_code/openai_image_client.py +4 -0
- aria_code/packages/__init__.py +26 -0
- aria_code/packages/adk_bridge/__init__.py +11 -0
- aria_code/packages/adk_bridge/code_review_tools.py +49 -0
- aria_code/packages/adk_bridge/market_tools.py +125 -0
- aria_code/packages/aria_agents/__init__.py +5 -0
- aria_code/packages/aria_agents/manifest.py +78 -0
- aria_code/packages/aria_core/__init__.py +34 -0
- aria_code/packages/aria_core/architecture.py +269 -0
- aria_code/packages/aria_core/export.py +147 -0
- aria_code/packages/aria_core/manifest.py +65 -0
- aria_code/packages/aria_core/paths.py +57 -0
- aria_code/packages/aria_core/secure_file.py +68 -0
- aria_code/packages/aria_infra/__init__.py +15 -0
- aria_code/packages/aria_infra/arthera.py +58 -0
- aria_code/packages/aria_infra/doctor.py +246 -0
- aria_code/packages/aria_infra/product.py +40 -0
- aria_code/packages/aria_mcp/__init__.py +25 -0
- aria_code/packages/aria_mcp/bridge.py +232 -0
- aria_code/packages/aria_mcp/circuit.py +82 -0
- aria_code/packages/aria_mcp/config.py +162 -0
- aria_code/packages/aria_mcp/installer.py +95 -0
- aria_code/packages/aria_mcp/server.py +1705 -0
- aria_code/packages/aria_mcp/tools.py +81 -0
- aria_code/packages/aria_sdk/__init__.py +19 -0
- aria_code/packages/aria_sdk/client.py +393 -0
- aria_code/packages/aria_sdk/providers.py +70 -0
- aria_code/packages/aria_sdk/streaming.py +75 -0
- aria_code/packages/aria_sdk/types.py +86 -0
- aria_code/packages/aria_services/__init__.py +92 -0
- aria_code/packages/aria_services/cache.py +60 -0
- aria_code/packages/aria_services/context.py +356 -0
- aria_code/packages/aria_services/context_checkpoints.py +157 -0
- aria_code/packages/aria_services/data.py +11 -0
- aria_code/packages/aria_services/provider_health.py +304 -0
- aria_code/packages/aria_services/references.py +247 -0
- aria_code/packages/aria_services/registry.py +249 -0
- aria_code/packages/aria_services/research_protocol.py +137 -0
- aria_code/packages/aria_services/research_quality.py +186 -0
- aria_code/packages/aria_services/settings.py +160 -0
- aria_code/packages/aria_services/usage.py +151 -0
- aria_code/packages/aria_skills/__init__.py +46 -0
- aria_code/packages/aria_skills/catalog.py +149 -0
- aria_code/packages/aria_skills/loader.py +455 -0
- aria_code/packages/aria_skills/registry.py +84 -0
- aria_code/packages/aria_tools/__init__.py +5 -0
- aria_code/packages/aria_tools/financial/__init__.py +5 -0
- aria_code/packages/aria_tools/financial/_paths.py +92 -0
- aria_code/packages/aria_tools/registry.py +129 -0
- aria_code/packages/quant_engine/__init__.py +33 -0
- aria_code/packages/quant_engine/_namespace.py +24 -0
- aria_code/packages/quant_engine/backtest/__init__.py +10 -0
- aria_code/packages/quant_engine/backtest/core.py +53 -0
- aria_code/packages/quant_engine/backtest/engine.py +102 -0
- aria_code/packages/quant_engine/portfolio/__init__.py +9 -0
- aria_code/packages/quant_engine/portfolio/optimizer.py +85 -0
- aria_code/packages/quant_engine/sports/__init__.py +76 -0
- aria_code/packages/quant_engine/sports/calibrator.py +354 -0
- aria_code/packages/quant_engine/sports/dixon_coles.py +234 -0
- aria_code/packages/quant_engine/sports/elo.py +300 -0
- aria_code/packages/quant_engine/sports/form.py +188 -0
- aria_code/packages/quant_engine/sports/h2h.py +195 -0
- aria_code/packages/quant_engine/sports/predictor.py +312 -0
- aria_code/packages/quant_engine/sports/tracker.py +665 -0
- aria_code/packages/quant_engine/stochastic/__init__.py +31 -0
- aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +195 -0
- aria_code/packages/quant_engine/stochastic/ito_calculus.py +477 -0
- aria_code/packages/quant_engine/stochastic/kelly_criterion.py +181 -0
- aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +95 -0
- aria_code/packages/quant_engine/stochastic/options_pricing.py +576 -0
- aria_code/packages/quant_engine/stochastic/stochastic_processes.py +90 -0
- aria_code/packs/__init__.py +85 -0
- aria_code/packs/base.py +168 -0
- aria_code/packs/finance/__init__.py +250 -0
- aria_code/packs/healthcare/__init__.py +40 -0
- aria_code/packs/logistics/__init__.py +171 -0
- aria_code/packs/payments/__init__.py +139 -0
- aria_code/packs/realty/__init__.py +190 -0
- aria_code/packs/registry.py +202 -0
- aria_code/packs/rules.py +90 -0
- aria_code/plan_utils.py +194 -0
- aria_code/plugin_loader.py +328 -0
- aria_code/portfolio_ledger.py +4 -0
- aria_code/preview_server.py +449 -0
- aria_code/privacy/__init__.py +5 -0
- aria_code/privacy/feedback.py +123 -0
- aria_code/project_review.py +278 -0
- aria_code/project_review_api.py +235 -0
- aria_code/project_review_server.py +18 -0
- aria_code/project_tools.py +4 -0
- aria_code/providers/__init__.py +30 -0
- aria_code/providers/google_video_provider.py +256 -0
- aria_code/providers/llm/__init__.py +19 -0
- aria_code/providers/llm/anthropic.py +184 -0
- aria_code/providers/llm/arthera_gateway.py +90 -0
- aria_code/providers/llm/autoconfig.py +213 -0
- aria_code/providers/llm/base.py +139 -0
- aria_code/providers/llm/custom.py +158 -0
- aria_code/providers/llm/ollama.py +137 -0
- aria_code/providers/llm/openai_compat.py +350 -0
- aria_code/providers/llm/registry.py +457 -0
- aria_code/providers/local_image_provider.py +202 -0
- aria_code/providers/local_llm_provider.py +549 -0
- aria_code/providers/ollama_models.py +79 -0
- aria_code/providers/openai_params.py +32 -0
- aria_code/providers/tool_messages.py +100 -0
- aria_code/realty_data_tools.py +4 -0
- aria_code/report_exporters.py +150 -0
- aria_code/report_generator.py +1764 -0
- aria_code/review_service.py +497 -0
- aria_code/runtime/__init__.py +176 -0
- aria_code/runtime/acceptance.py +632 -0
- aria_code/runtime/agent_loop.py +1851 -0
- aria_code/runtime/agent_profiles.py +75 -0
- aria_code/runtime/approval.py +71 -0
- aria_code/runtime/baseline.py +219 -0
- aria_code/runtime/budget.py +232 -0
- aria_code/runtime/checkpoints.py +481 -0
- aria_code/runtime/consult.py +65 -0
- aria_code/runtime/contract.py +282 -0
- aria_code/runtime/delivery.py +432 -0
- aria_code/runtime/events.py +113 -0
- aria_code/runtime/gateway.py +167 -0
- aria_code/runtime/lsp.py +484 -0
- aria_code/runtime/native_index.py +153 -0
- aria_code/runtime/orchestrator.py +55 -0
- aria_code/runtime/processes.py +343 -0
- aria_code/runtime/project_graph.py +614 -0
- aria_code/runtime/repo_map.py +712 -0
- aria_code/runtime/research_bundle.py +105 -0
- aria_code/runtime/review.py +269 -0
- aria_code/runtime/run_state.py +127 -0
- aria_code/runtime/run_store.py +522 -0
- aria_code/runtime/scoped_runs.py +113 -0
- aria_code/runtime/self_healing.py +422 -0
- aria_code/runtime/semantic_diff.py +171 -0
- aria_code/runtime/subagent.py +721 -0
- aria_code/runtime/symbol_edit.py +117 -0
- aria_code/runtime/task_brief.py +46 -0
- aria_code/runtime/task_context.py +145 -0
- aria_code/runtime/task_ledger.py +108 -0
- aria_code/runtime/task_orchestrator.py +90 -0
- aria_code/runtime/task_outcome.py +33 -0
- aria_code/runtime/task_verification.py +266 -0
- aria_code/runtime/task_worktree.py +448 -0
- aria_code/runtime/tool_executor.py +329 -0
- aria_code/runtime/tool_policy.py +107 -0
- aria_code/runtime/transactions.py +216 -0
- aria_code/runtime/windows_job.py +115 -0
- aria_code/runtime/workflows.py +222 -0
- aria_code/runtime/worktrees.py +215 -0
- aria_code/runway_video_client.py +4 -0
- aria_code/safety/__init__.py +27 -0
- aria_code/safety/client_isolation.py +178 -0
- aria_code/safety/permissions.py +339 -0
- aria_code/safety/risk.py +699 -0
- aria_code/safety/sandbox.py +148 -0
- aria_code/safety/service.py +102 -0
- aria_code/service_endpoints.py +14 -0
- aria_code/setup_wizard.py +684 -0
- aria_code/spreadsheet_tools.py +4 -0
- aria_code/strategy_vault.py +4 -0
- aria_code/tools/__init__.py +0 -0
- aria_code/tools/artifact_tools.py +252 -0
- aria_code/tools/broker_tools.py +92 -0
- aria_code/tools/build_quant_engine.py +97 -0
- aria_code/tools/code_audit_tools.py +192 -0
- aria_code/tools/computer_use_tools.py +509 -0
- aria_code/tools/data_analysis_tools.py +831 -0
- aria_code/tools/enterprise_finance_tools.py +202 -0
- aria_code/tools/extended_tools.py +240 -0
- aria_code/tools/file_analysis_tools.py +880 -0
- aria_code/tools/image_gen_tools.py +114 -0
- aria_code/tools/local_finance_tools.py +3488 -0
- aria_code/tools/logistics_carriers.py +11 -0
- aria_code/tools/logistics_inventory.py +11 -0
- aria_code/tools/logistics_io.py +11 -0
- aria_code/tools/logistics_tenancy.py +11 -0
- aria_code/tools/logistics_tools.py +11 -0
- aria_code/tools/macro_tools.py +412 -0
- aria_code/tools/notification_tools.py +249 -0
- aria_code/tools/project_tools.py +525 -0
- aria_code/tools/realty_data_tools.py +662 -0
- aria_code/tools/spreadsheet_tools.py +399 -0
- aria_code/tools/stripe_tools.py +115 -0
- aria_code/tools/video_tools.py +500 -0
- aria_code/training/__init__.py +1 -0
- aria_code/training/compare.py +117 -0
- aria_code/training/prelude_commands.py +111 -0
- aria_code/training/prelude_eval.py +390 -0
- aria_code/training/prelude_real.py +183 -0
- aria_code/training/prelude_train.py +248 -0
- aria_code/training/sft_dataset.py +230 -0
- aria_code/training/trajectory_dataset.py +263 -0
- aria_code/ui/__init__.py +105 -0
- aria_code/ui/banner.py +404 -0
- aria_code/ui/completer.py +571 -0
- aria_code/ui/console.py +285 -0
- aria_code/ui/input_box.py +505 -0
- aria_code/ui/mentions.py +206 -0
- aria_code/ui/picker.py +248 -0
- aria_code/ui/render/__init__.py +11 -0
- aria_code/ui/render/actions.py +297 -0
- aria_code/ui/render/finance.py +1732 -0
- aria_code/ui/render/market.py +253 -0
- aria_code/ui/render/output.py +954 -0
- aria_code/ui/render/responsive.py +75 -0
- aria_code/ui/render/team.py +367 -0
- aria_code/ui/robot.py +239 -0
- aria_code/ui/startup_dashboard.py +110 -0
- aria_code/video_analysis.py +147 -0
- aria_code/video_editor.py +518 -0
- aria_code/video_workflow/__init__.py +8 -0
- aria_code/video_workflow/__main__.py +61 -0
- aria_code/video_workflow/engines/__init__.py +18 -0
- aria_code/video_workflow/engines/base.py +69 -0
- aria_code/video_workflow/engines/custom_model.py +204 -0
- aria_code/video_workflow/engines/google_veo.py +94 -0
- aria_code/video_workflow/engines/local_engine.py +71 -0
- aria_code/video_workflow/engines/registry.py +98 -0
- aria_code/video_workflow/google_models.py +278 -0
- aria_code/video_workflow/music/__init__.py +5 -0
- aria_code/video_workflow/music/foley_service.py +132 -0
- aria_code/video_workflow/music/service.py +212 -0
- aria_code/video_workflow/pipeline.py +620 -0
- aria_code/video_workflow/plan.py +202 -0
- aria_code/video_workflow/session.py +297 -0
- aria_code/workspace/__init__.py +6 -0
- aria_code/workspace/files.py +219 -0
- aria_code/workspace/verify.py +167 -0
- aria_code/workspace_changes.py +199 -0
- aria_code/workspace_service.py +196 -0
- aria_code/workspace_tools.py +150 -0
- aria_code-0.167.0.dist-info/METADATA +330 -0
- aria_code-0.167.0.dist-info/RECORD +601 -0
- aria_code-0.167.0.dist-info/WHEEL +5 -0
- aria_code-0.167.0.dist-info/entry_points.txt +5 -0
- aria_code-0.167.0.dist-info/licenses/LICENSE +201 -0
- aria_code-0.167.0.dist-info/licenses/NOTICE +49 -0
- aria_code-0.167.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
"""i18n.py — System language detection and UI string translations for Aria Code.
|
|
2
|
+
|
|
3
|
+
Priority order for UI language:
|
|
4
|
+
1. config["ui_lang"] (user explicitly set via /config set ui_lang=zh)
|
|
5
|
+
2. OS locale at first-run (written into config automatically)
|
|
6
|
+
3. Fallback: "en"
|
|
7
|
+
|
|
8
|
+
Supported languages: "zh" (Simplified Chinese), "en" (English)
|
|
9
|
+
Future: "ja", "ko" — extend STRINGS dict below.
|
|
10
|
+
"""
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import os
|
|
14
|
+
from typing import Optional
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# ---------------------------------------------------------------------------
|
|
18
|
+
# String catalogue
|
|
19
|
+
# ---------------------------------------------------------------------------
|
|
20
|
+
|
|
21
|
+
STRINGS: dict[str, dict[str, str]] = {
|
|
22
|
+
# Banner labels
|
|
23
|
+
"local_first_agent": {
|
|
24
|
+
"zh": "本地优先智能体",
|
|
25
|
+
"en": "local-first agent",
|
|
26
|
+
},
|
|
27
|
+
"model": {
|
|
28
|
+
"zh": "模型",
|
|
29
|
+
"en": "model",
|
|
30
|
+
},
|
|
31
|
+
"workspace": {
|
|
32
|
+
"zh": "工作区",
|
|
33
|
+
"en": "workspace",
|
|
34
|
+
},
|
|
35
|
+
"mode": {
|
|
36
|
+
"zh": "模式",
|
|
37
|
+
"en": "mode",
|
|
38
|
+
},
|
|
39
|
+
"status": {
|
|
40
|
+
"zh": "状态",
|
|
41
|
+
"en": "status",
|
|
42
|
+
},
|
|
43
|
+
"tools": {
|
|
44
|
+
"zh": "工具",
|
|
45
|
+
"en": "tools",
|
|
46
|
+
},
|
|
47
|
+
"skills": {
|
|
48
|
+
"zh": "技能",
|
|
49
|
+
"en": "skills",
|
|
50
|
+
},
|
|
51
|
+
"quant": {
|
|
52
|
+
"zh": "量化",
|
|
53
|
+
"en": "quant",
|
|
54
|
+
},
|
|
55
|
+
# Status labels
|
|
56
|
+
"sharing_on": {
|
|
57
|
+
"zh": "数据共享",
|
|
58
|
+
"en": "sharing on",
|
|
59
|
+
},
|
|
60
|
+
"local_only": {
|
|
61
|
+
"zh": "纯本地",
|
|
62
|
+
"en": "local-only",
|
|
63
|
+
},
|
|
64
|
+
"local_retention": {
|
|
65
|
+
"zh": "本地留存",
|
|
66
|
+
"en": "local retention",
|
|
67
|
+
},
|
|
68
|
+
"cloud": {
|
|
69
|
+
"zh": "云端",
|
|
70
|
+
"en": "cloud",
|
|
71
|
+
},
|
|
72
|
+
"local": {
|
|
73
|
+
"zh": "本地",
|
|
74
|
+
"en": "local",
|
|
75
|
+
},
|
|
76
|
+
"lite": {
|
|
77
|
+
"zh": "轻量",
|
|
78
|
+
"en": "lite",
|
|
79
|
+
},
|
|
80
|
+
"ollama_online": {
|
|
81
|
+
"zh": "Ollama 在线",
|
|
82
|
+
"en": "Ollama online",
|
|
83
|
+
},
|
|
84
|
+
"ollama_offline": {
|
|
85
|
+
"zh": "Ollama 离线",
|
|
86
|
+
"en": "Ollama offline",
|
|
87
|
+
},
|
|
88
|
+
"cloud_connected": {
|
|
89
|
+
"zh": "云端已连接",
|
|
90
|
+
"en": "cloud ✓",
|
|
91
|
+
},
|
|
92
|
+
"model_singular": {
|
|
93
|
+
"zh": "个模型",
|
|
94
|
+
"en": "model",
|
|
95
|
+
},
|
|
96
|
+
"model_plural": {
|
|
97
|
+
"zh": "个模型",
|
|
98
|
+
"en": "models",
|
|
99
|
+
},
|
|
100
|
+
# Hint line
|
|
101
|
+
"try": {
|
|
102
|
+
"zh": "试试",
|
|
103
|
+
"en": "try",
|
|
104
|
+
},
|
|
105
|
+
# Model picker
|
|
106
|
+
"select_model": {
|
|
107
|
+
"zh": "选择模型",
|
|
108
|
+
"en": "Select Model",
|
|
109
|
+
},
|
|
110
|
+
"installed": {
|
|
111
|
+
"zh": "已安装",
|
|
112
|
+
"en": "installed",
|
|
113
|
+
},
|
|
114
|
+
"not_installed": {
|
|
115
|
+
"zh": "未安装",
|
|
116
|
+
"en": "not installed",
|
|
117
|
+
},
|
|
118
|
+
"cancelled": {
|
|
119
|
+
"zh": "已取消",
|
|
120
|
+
"en": "Cancelled",
|
|
121
|
+
},
|
|
122
|
+
"no_change": {
|
|
123
|
+
"zh": "未更改",
|
|
124
|
+
"en": "No change",
|
|
125
|
+
},
|
|
126
|
+
"community_models": {
|
|
127
|
+
"zh": "社区模型 (Ollama)",
|
|
128
|
+
"en": "Community (Ollama)",
|
|
129
|
+
},
|
|
130
|
+
"ollama_unreachable": {
|
|
131
|
+
"zh": "Ollama 无法连接",
|
|
132
|
+
"en": "Ollama unreachable",
|
|
133
|
+
},
|
|
134
|
+
"switch_model_hint": {
|
|
135
|
+
"zh": "使用 /model <id> 切换模型",
|
|
136
|
+
"en": "Use /model <id> to switch",
|
|
137
|
+
},
|
|
138
|
+
"current": {
|
|
139
|
+
"zh": "当前",
|
|
140
|
+
"en": "current",
|
|
141
|
+
},
|
|
142
|
+
# Permission / mode labels
|
|
143
|
+
"network_on": {
|
|
144
|
+
"zh": "网络开",
|
|
145
|
+
"en": "network on",
|
|
146
|
+
},
|
|
147
|
+
"network_off": {
|
|
148
|
+
"zh": "网络关",
|
|
149
|
+
"en": "network off",
|
|
150
|
+
},
|
|
151
|
+
"privacy": {
|
|
152
|
+
"zh": "隐私",
|
|
153
|
+
"en": "privacy",
|
|
154
|
+
},
|
|
155
|
+
# Setup wizard
|
|
156
|
+
"detecting_lang": {
|
|
157
|
+
"zh": "检测到系统语言:中文",
|
|
158
|
+
"en": "Detected system language: English",
|
|
159
|
+
},
|
|
160
|
+
"first_run_welcome": {
|
|
161
|
+
"zh": "欢迎使用 Aria Code!首次运行,正在自动配置...",
|
|
162
|
+
"en": "Welcome to Aria Code! First run — auto-configuring...",
|
|
163
|
+
},
|
|
164
|
+
"auto_model_selected": {
|
|
165
|
+
"zh": "已自动选择本地模型:",
|
|
166
|
+
"en": "Auto-selected local model: ",
|
|
167
|
+
},
|
|
168
|
+
"no_ollama_models": {
|
|
169
|
+
"zh": "未发现本地模型,使用默认配置",
|
|
170
|
+
"en": "No local models found, using default config",
|
|
171
|
+
},
|
|
172
|
+
# Thinking mode
|
|
173
|
+
"thinking_mode": {
|
|
174
|
+
"zh": "思考模式",
|
|
175
|
+
"en": "Thinking Mode",
|
|
176
|
+
},
|
|
177
|
+
# Misc
|
|
178
|
+
"tip": {
|
|
179
|
+
"zh": "提示",
|
|
180
|
+
"en": "tip",
|
|
181
|
+
},
|
|
182
|
+
"auto_matched": {
|
|
183
|
+
"zh": "自动匹配",
|
|
184
|
+
"en": "auto-matched",
|
|
185
|
+
},
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
# ---------------------------------------------------------------------------
|
|
190
|
+
# Detection
|
|
191
|
+
# ---------------------------------------------------------------------------
|
|
192
|
+
|
|
193
|
+
def detect_system_lang() -> str:
|
|
194
|
+
"""Detect OS language. Returns 'zh' for Chinese systems, 'en' for everything else.
|
|
195
|
+
|
|
196
|
+
Checks (in order): $LANGUAGE, $LANG, $LC_ALL, $LC_MESSAGES, Python locale module.
|
|
197
|
+
Treats zh_CN, zh_TW, zh_HK, zh_SG as 'zh'.
|
|
198
|
+
"""
|
|
199
|
+
for var in ("LANGUAGE", "LANG", "LC_ALL", "LC_MESSAGES"):
|
|
200
|
+
raw = os.environ.get(var, "").strip()
|
|
201
|
+
if not raw or raw in ("C", "POSIX", "C.UTF-8"):
|
|
202
|
+
continue
|
|
203
|
+
# LANGUAGE may be colon-separated list: zh_CN:en
|
|
204
|
+
code = raw.split(":")[0].split(".")[0].split("_")[0].lower()
|
|
205
|
+
if code == "zh":
|
|
206
|
+
return "zh"
|
|
207
|
+
if code in ("en", "fr", "de", "es", "pt", "ja", "ko", "ru", "ar"):
|
|
208
|
+
return code if code in ("ja", "ko") else "en"
|
|
209
|
+
|
|
210
|
+
# Fallback: Python locale module (works on macOS/Windows when env vars absent)
|
|
211
|
+
try:
|
|
212
|
+
import locale as _locale
|
|
213
|
+
# getlocale(), not getdefaultlocale(): the latter is deprecated and
|
|
214
|
+
# removed in Python 3.15, where this fallback would stop working.
|
|
215
|
+
lang_code, _ = _locale.getlocale()
|
|
216
|
+
if lang_code:
|
|
217
|
+
prefix = lang_code.split("_")[0].lower()
|
|
218
|
+
if prefix == "zh":
|
|
219
|
+
return "zh"
|
|
220
|
+
if prefix in ("ja", "ko"):
|
|
221
|
+
return prefix
|
|
222
|
+
except Exception:
|
|
223
|
+
pass
|
|
224
|
+
|
|
225
|
+
return "en"
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def get_ui_lang(config: Optional[dict] = None) -> str:
|
|
229
|
+
"""Return effective UI language.
|
|
230
|
+
|
|
231
|
+
1. config["ui_lang"] if explicitly set
|
|
232
|
+
2. detect_system_lang()
|
|
233
|
+
"""
|
|
234
|
+
if config:
|
|
235
|
+
saved = config.get("ui_lang", "")
|
|
236
|
+
if saved in STRINGS.get("model", {}): # valid lang code
|
|
237
|
+
return saved
|
|
238
|
+
return detect_system_lang()
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def ui_text(owner, zh_text: str, en_text: str) -> str:
|
|
242
|
+
"""The text for the configured UI language; English unless ui_lang is zh.
|
|
243
|
+
|
|
244
|
+
``owner`` is a command object (its ``terminal.config``), a terminal (its
|
|
245
|
+
``config``) or a config dict.
|
|
246
|
+
"""
|
|
247
|
+
config = owner if isinstance(owner, dict) else (
|
|
248
|
+
getattr(owner, "config", None) or getattr(getattr(owner, "terminal", None), "config", None) or {})
|
|
249
|
+
return zh_text if str(config.get("ui_lang", "en")).lower().startswith("zh") else en_text
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def t(key: str, lang: Optional[str] = None, config: Optional[dict] = None) -> str:
|
|
253
|
+
"""Translate a UI key to the given language (or auto-detect).
|
|
254
|
+
|
|
255
|
+
Falls back to 'en' if key/lang not found.
|
|
256
|
+
"""
|
|
257
|
+
if lang is None:
|
|
258
|
+
lang = get_ui_lang(config)
|
|
259
|
+
entry = STRINGS.get(key, {})
|
|
260
|
+
return entry.get(lang) or entry.get("en") or key
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
# ---------------------------------------------------------------------------
|
|
264
|
+
# Ollama model helpers. No longer called during config load — see
|
|
265
|
+
# SettingsService.load(), which no longer overrides the configured model.
|
|
266
|
+
# ---------------------------------------------------------------------------
|
|
267
|
+
|
|
268
|
+
_MODEL_PRIORITY = [
|
|
269
|
+
"qwen2.5:7b",
|
|
270
|
+
"qwen2.5-coder:7b",
|
|
271
|
+
"deepseek-r1:7b",
|
|
272
|
+
"qwen2.5:3b",
|
|
273
|
+
"qwen2.5-coder:3b",
|
|
274
|
+
"llama3.2:3b",
|
|
275
|
+
"mistral:7b",
|
|
276
|
+
"qwen2.5-coder:1.5b",
|
|
277
|
+
"qwen2.5:1.5b",
|
|
278
|
+
"llama3.2:1b",
|
|
279
|
+
]
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def installed_ollama_models(ollama_url: str = "http://localhost:11434") -> set[str]:
|
|
283
|
+
"""The model names Ollama reports, or an empty set if it cannot be reached."""
|
|
284
|
+
try:
|
|
285
|
+
import urllib.request as _ur
|
|
286
|
+
import json as _json
|
|
287
|
+
with _ur.urlopen(f"{ollama_url}/api/tags", timeout=3) as resp:
|
|
288
|
+
data = _json.loads(resp.read())
|
|
289
|
+
return {m["name"] for m in data.get("models", [])}
|
|
290
|
+
except Exception:
|
|
291
|
+
return set()
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def preferred_installed_model(installed: set[str]) -> Optional[str]:
|
|
295
|
+
"""The best model from *installed* that this list vouches for, else None.
|
|
296
|
+
|
|
297
|
+
Pure, so it is testable without a running Ollama.
|
|
298
|
+
|
|
299
|
+
Note what this does NOT do: there is no alphabetical last resort. The
|
|
300
|
+
function it replaced (``auto_select_model``) ended with
|
|
301
|
+
``sorted(installed)[0]``, and it was called during config load to overwrite
|
|
302
|
+
the caller's default model. A machine with one stray 0.5B model got that
|
|
303
|
+
model as its agent. Declining to answer is the correct answer when nothing
|
|
304
|
+
on the curated list is present; ``model_catalog.pick_best_installed_model``
|
|
305
|
+
is the richer version that also consults the capability registry.
|
|
306
|
+
"""
|
|
307
|
+
for pref in _MODEL_PRIORITY:
|
|
308
|
+
if pref in installed:
|
|
309
|
+
return pref
|
|
310
|
+
return None
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""Intent classification helpers extracted from aria_cli.py.
|
|
2
|
+
|
|
3
|
+
All functions are pure — no I/O, no globals, fully unit-testable.
|
|
4
|
+
"""
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
# ── Keyword lists ─────────────────────────────────────────────────────────────
|
|
8
|
+
|
|
9
|
+
CODING_KEYWORDS = (
|
|
10
|
+
"write", "generate", "create", "script", "code", "plot", "backtest",
|
|
11
|
+
"策略", "代码", "回测", "编写", "生成", "k线", "k-line", "kline",
|
|
12
|
+
"analyze and save", "analysis script", "python", "dashboard",
|
|
13
|
+
"写一个", "生成代码", "写代码", "编写代码",
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
VISUAL_ARTIFACT_KEYWORDS = (
|
|
17
|
+
"图表", "走势图", "k线图", "k线", "k-line", "kline", "candlestick",
|
|
18
|
+
"chart", "plot", "dashboard", "看板", "晨报", "日报", "周报", "月报",
|
|
19
|
+
"report", "热力图", "heatmap",
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
ANALYSIS_KEYWORDS = (
|
|
23
|
+
"analyze", "analysis", "分析", "研究", "评估", "研判",
|
|
24
|
+
"技术面", "基本面", "走势", "趋势", "行情",
|
|
25
|
+
"技术分析", "技术指标", "支撑", "阻力", "支撑位", "阻力位",
|
|
26
|
+
"rsi", "macd", "bollinger", "布林", "均线", "kdj", "kdj指标",
|
|
27
|
+
"stock analysis", "technical analysis", "fundamental",
|
|
28
|
+
"valuation", "estimate", "outlook", "投资建议", "买入", "卖出",
|
|
29
|
+
"看多", "看空", "多头", "空头", "金叉", "死叉",
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
ANALYSIS_NON_STOCK_TOPICS = (
|
|
33
|
+
"房价", "楼市", "房产", "房地产", "租金", "二手房", "新房", "商铺", "折旧",
|
|
34
|
+
"宏观", "宏观经济", "宏观政策", "宏观角度", "经济政策", "货币政策",
|
|
35
|
+
"财政政策", "gdp", "通胀", "通货膨胀", "cpi", "ppi", "利率政策",
|
|
36
|
+
"黄金", "原油", "大宗商品", "汇率", "外汇", "美元指数",
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
GENERAL_KNOWLEDGE_KEYWORDS = (
|
|
40
|
+
"什么是", "what is", "what are", "how does", "explain", "define",
|
|
41
|
+
"解释", "定义", "概念", "原理", "介绍", "步骤", "流程", "怎么",
|
|
42
|
+
"如何理解", "是什么", "为什么", "区别", "difference between",
|
|
43
|
+
"tell me about", "describe", "how to", "注册", "成立", "公司",
|
|
44
|
+
"基本概念", "简介", "举例", "example", "例子",
|
|
45
|
+
"足球", "篮球", "网球", "棒球", "橄榄球", "排球", "乒乓球", "羽毛球",
|
|
46
|
+
"世界杯", "欧冠", "英超", "德甲", "西甲", "意甲", "法甲", "bundesliga",
|
|
47
|
+
"比赛", "赛事", "比分", "进球", "射门", "门将", "球队", "球员", "教练",
|
|
48
|
+
"联赛", "积分榜", "赛程", "晋级", "淘汰赛", "决赛", "半决赛",
|
|
49
|
+
"football", "soccer", "match", "goal", "league", "champion",
|
|
50
|
+
"nba", "nfl", "mlb", "f1", "赛车", "奥运", "olympic",
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
FINANCE_CONCEPT_TERMS = (
|
|
54
|
+
"dcf", "pe", "pb", "ps", "ev", "ebitda", "ebit", "wacc", "capm",
|
|
55
|
+
"beta", "alpha", "sharpe", "sortino", "var", "cvar", "drawdown",
|
|
56
|
+
"black-scholes", "bs模型", "期权", "期货", "衍生品", "套利",
|
|
57
|
+
"量化", "quant", "回测", "factor", "因子", "ic值", "ir值",
|
|
58
|
+
"市盈率", "市净率", "净利润", "营业收入", "自由现金流", "贴现",
|
|
59
|
+
"折现", "估值", "valuation", "ipo", "etf", "reits", "债券",
|
|
60
|
+
"利率", "收益率", "久期", "凸性", "信用利差", "风险溢价",
|
|
61
|
+
"动量", "均值回归", "布林带", "macd", "rsi", "kdj", "技术指标",
|
|
62
|
+
"北向资金", "融资融券", "股指期货", "沪深300", "中证500",
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
SPORTS_KEYWORDS = (
|
|
66
|
+
"足球", "世界杯", "欧冠", "英超", "德甲", "西甲", "意甲", "法甲",
|
|
67
|
+
"篮球", "nba", "网球", "f1", "赛车", "奥运", "olympic",
|
|
68
|
+
"比赛", "赛事", "比分", "进球", "球队", "球员", "联赛",
|
|
69
|
+
"football", "soccer", "world cup", "champions league",
|
|
70
|
+
"match", "score", "league", "premier league", "bundesliga",
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# ── Classifier functions ──────────────────────────────────────────────────────
|
|
75
|
+
|
|
76
|
+
def is_coding_request(message: str) -> bool:
|
|
77
|
+
"""Return True if message looks like a coding/file-generation task."""
|
|
78
|
+
low = message.lower()
|
|
79
|
+
if any(k in low for k in VISUAL_ARTIFACT_KEYWORDS):
|
|
80
|
+
return True
|
|
81
|
+
if any(k in low for k in CODING_KEYWORDS):
|
|
82
|
+
return True
|
|
83
|
+
if low.startswith("/code") or low.startswith("/gen-"):
|
|
84
|
+
return True
|
|
85
|
+
return False
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def is_sports_query(message: str) -> bool:
|
|
89
|
+
"""Return True if the message is about sports/football."""
|
|
90
|
+
low = message.lower()
|
|
91
|
+
return any(k in low for k in SPORTS_KEYWORDS)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def is_analysis_request(message: str) -> bool:
|
|
95
|
+
"""Return True if message is a stock/crypto technical analysis request (not coding).
|
|
96
|
+
|
|
97
|
+
Excludes real-estate, pure macro, and sports questions: those match keywords
|
|
98
|
+
like '分析'/'走势' but should NOT use the stock technical-analysis template
|
|
99
|
+
(which requires injected market data to be useful).
|
|
100
|
+
"""
|
|
101
|
+
if is_coding_request(message):
|
|
102
|
+
return False
|
|
103
|
+
low = message.lower()
|
|
104
|
+
if any(k in low for k in ANALYSIS_NON_STOCK_TOPICS):
|
|
105
|
+
return False
|
|
106
|
+
if is_sports_query(message):
|
|
107
|
+
return False
|
|
108
|
+
return any(k in low for k in ANALYSIS_KEYWORDS)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def is_general_knowledge(message: str) -> bool:
|
|
112
|
+
"""Return True for pure knowledge/explanation questions that don't need tools.
|
|
113
|
+
|
|
114
|
+
Finance/quant terms are excluded so they keep the full FINANCE_CHAT_PROMPT
|
|
115
|
+
even when phrased as "X是什么" explanatory questions.
|
|
116
|
+
|
|
117
|
+
Pure macro/conceptual analysis questions are treated as general knowledge:
|
|
118
|
+
routing them to the finance prompt with tools causes the model to fetch live
|
|
119
|
+
prices and output the stock-analysis template instead of thoughtful commentary.
|
|
120
|
+
"""
|
|
121
|
+
if is_coding_request(message) or is_analysis_request(message):
|
|
122
|
+
return False
|
|
123
|
+
low = message.lower().strip()
|
|
124
|
+
if any(term in low for term in FINANCE_CONCEPT_TERMS):
|
|
125
|
+
return False
|
|
126
|
+
_macro_conceptual = (
|
|
127
|
+
"宏观", "宏观经济", "宏观政策", "宏观角度", "宏观分析",
|
|
128
|
+
"货币政策", "财政政策", "值得投资吗", "应该投资吗", "是否值得",
|
|
129
|
+
"投资逻辑", "长期展望", "未来前景",
|
|
130
|
+
)
|
|
131
|
+
if (any(k in low for k in _macro_conceptual)
|
|
132
|
+
and not any(c.isdigit() for c in low)):
|
|
133
|
+
return True
|
|
134
|
+
if len(low) < 30 and not any(c.isdigit() for c in low):
|
|
135
|
+
return True
|
|
136
|
+
return any(k in low for k in GENERAL_KNOWLEDGE_KEYWORDS)
|