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,139 @@
|
|
|
1
|
+
"""Provider routing + fallback DECISIONS for the chat loop (pure, testable).
|
|
2
|
+
|
|
3
|
+
Extracted from ``aria_cli.send_message`` as the keystone for the documented
|
|
4
|
+
runtime next step ("route the whole CLI tool loop through run_agent"). The
|
|
5
|
+
*decision* of which provider a round uses, and whether to fall back, is pure
|
|
6
|
+
logic; pulling it out of the streaming machinery lets it be unit-tested and
|
|
7
|
+
reused as a ``provider_fn`` selector without touching the live REPL path.
|
|
8
|
+
|
|
9
|
+
Routing rules (mirrors send_message):
|
|
10
|
+
• backend_chat → Aria SSE backend
|
|
11
|
+
• local_provider=ollama → Ollama (local or Ollama Cloud)
|
|
12
|
+
• any other explicit provider → configured local/API provider
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import Callable, Optional
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
PROVIDER_ALIASES = {
|
|
21
|
+
"lm-studio": "lmstudio",
|
|
22
|
+
"llama.cpp": "llamacpp",
|
|
23
|
+
"llama-cpp": "llamacpp",
|
|
24
|
+
"claude": "anthropic",
|
|
25
|
+
"chatgpt": "openai",
|
|
26
|
+
"openai-chatgpt": "openai",
|
|
27
|
+
"gemini": "google",
|
|
28
|
+
"grok": "xai",
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def normalize_provider_name(provider: str) -> str:
|
|
33
|
+
normalized = str(provider or "").strip().lower()
|
|
34
|
+
return PROVIDER_ALIASES.get(normalized, normalized)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def is_cloud_model(model: str) -> bool:
|
|
38
|
+
"""Cloud models are provider-prefixed, e.g. ``openai/gpt-4.5``, ``anthropic/…``."""
|
|
39
|
+
return "/" in (model or "")
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def is_ollama_model(model: str) -> bool:
|
|
43
|
+
"""Ollama models have no ``/`` (``gpt-oss:120b-cloud``, ``deepseek-r1:14b``)."""
|
|
44
|
+
return "/" not in (model or "")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def force_backend(config: dict, api_url: Optional[str]) -> bool:
|
|
48
|
+
"""backend_chat=True routes ALL chat through the self-hosted backend (which
|
|
49
|
+
proxies to its own Ollama + collects training data), requiring an api_url."""
|
|
50
|
+
return bool(config.get("backend_chat")) and bool(api_url)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# Prefixes that genuinely name a provider. Checked explicitly because a slash
|
|
54
|
+
# in a model id does not always mean a provider: Ollama serves namespaced
|
|
55
|
+
# community models such as "hf.co/someone/qwen", whose first segment is a host,
|
|
56
|
+
# not a backend to route to.
|
|
57
|
+
KNOWN_MODEL_PROVIDERS = frozenset({
|
|
58
|
+
"ollama", "openai", "anthropic", "google", "xai", "deepseek", "groq",
|
|
59
|
+
"together", "dashscope", "lmstudio", "siliconflow", "moonshot", "zhipu",
|
|
60
|
+
"mistral", "cohere", "perplexity", "baidu", "ernie", "qianfan",
|
|
61
|
+
"bytedance", "doubao", "ark", "minimax", "stepfun", "01ai", "yi",
|
|
62
|
+
"vertexai", "vertex-ai", "google-genai",
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def model_provider(model: str) -> str:
|
|
67
|
+
"""Provider named by the model id itself, or "" when it names none.
|
|
68
|
+
|
|
69
|
+
Returns "" for bare Ollama names ("qwen2.5:7b") and for namespaced Ollama
|
|
70
|
+
models whose prefix is not a known provider ("hf.co/someone/qwen").
|
|
71
|
+
"""
|
|
72
|
+
if not is_cloud_model(model):
|
|
73
|
+
return ""
|
|
74
|
+
candidate = normalize_provider_name(model.split("/", 1)[0])
|
|
75
|
+
return candidate if candidate in KNOWN_MODEL_PROVIDERS else ""
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def first_round_route(model: str, config: dict, api_url: Optional[str]) -> str:
|
|
79
|
+
"""Return ``ollama`` | ``configured`` | ``cloud`` for the first round.
|
|
80
|
+
|
|
81
|
+
A provider-qualified model id ("google/gemini-2.5-pro") names its own
|
|
82
|
+
provider, and that wins over ``local_provider``. It used to lose: the
|
|
83
|
+
default config ships ``model="gemini-pro"`` together with
|
|
84
|
+
``local_provider="ollama"``, so every request for the flagship default
|
|
85
|
+
model was routed to Ollama instead — the status line reading "ollama"
|
|
86
|
+
beside a Gemini model name was reporting this honestly.
|
|
87
|
+
|
|
88
|
+
``local_provider`` still decides for bare Ollama-style names
|
|
89
|
+
("qwen2.5:7b", "gpt-oss:120b-cloud"), which is what it is there for.
|
|
90
|
+
"""
|
|
91
|
+
if force_backend(config, api_url):
|
|
92
|
+
return "cloud"
|
|
93
|
+
provider = model_provider(model)
|
|
94
|
+
if not provider:
|
|
95
|
+
provider = normalize_provider_name(config.get("local_provider") or "") or "ollama"
|
|
96
|
+
return "ollama" if provider == "ollama" else "configured"
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def model_receives_local_tools(model: str, config: dict, api_url: Optional[str]) -> bool:
|
|
100
|
+
"""Legacy chat has no local tools; client execution requires an opt-in
|
|
101
|
+
protocol acknowledgement. Direct inference carries the local schemas."""
|
|
102
|
+
return first_round_route(model, config, api_url) != "cloud" or bool(config.get("backend_local_tools"))
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def is_placeholder_response(
|
|
106
|
+
response: str,
|
|
107
|
+
token_count: int,
|
|
108
|
+
stub_detector: Optional[Callable[[str], bool]] = None,
|
|
109
|
+
) -> bool:
|
|
110
|
+
"""Detect empty or explicitly recognized stubs, never infer from length.
|
|
111
|
+
|
|
112
|
+
``token_count`` remains in the signature for existing callers, but an SSE
|
|
113
|
+
final event can contain a valid answer without any streamed token events.
|
|
114
|
+
"""
|
|
115
|
+
resp = response or ""
|
|
116
|
+
if not resp.strip():
|
|
117
|
+
return True
|
|
118
|
+
if stub_detector is not None and stub_detector(resp):
|
|
119
|
+
return True
|
|
120
|
+
# A short answer ("OK") or a long answer in one SSE final event is valid.
|
|
121
|
+
# Token counts describe transport chunking, not answer quality.
|
|
122
|
+
return False
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def should_fallback(route: str, result: dict, *, is_placeholder: bool) -> bool:
|
|
126
|
+
"""Whether to run the local/cloud fallback chain after the primary round.
|
|
127
|
+
|
|
128
|
+
Keyed on the *route* (not the model name), so a forced-backend round that
|
|
129
|
+
genuinely succeeded does NOT fall back — which is the bug-free version of the
|
|
130
|
+
old ``_should_fallback`` that keyed on ``is_ollama_model`` and could discard a
|
|
131
|
+
good backend answer (causing a re-run / hang).
|
|
132
|
+
"""
|
|
133
|
+
if result.get("fallback_allowed") is False or "ollama_model_unavailable:" in str(result.get("error", "")):
|
|
134
|
+
return False
|
|
135
|
+
if route in ("skip", "configured"):
|
|
136
|
+
return route == "skip"
|
|
137
|
+
if not result.get("success") and not result.get("cancelled"):
|
|
138
|
+
return True
|
|
139
|
+
return is_placeholder
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"""Small, explicit multi-provider consultation helpers for the terminal.
|
|
2
|
+
|
|
3
|
+
This module deliberately talks to provider *APIs*, not consumer desktop apps.
|
|
4
|
+
ChatGPT Plus and Claude Pro sessions cannot safely be reused as API credentials.
|
|
5
|
+
Keeping this boundary explicit prevents a CLI command from accidentally scraping
|
|
6
|
+
browser sessions or consuming a provider that the user did not configure.
|
|
7
|
+
"""
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import asyncio
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from typing import Any, Callable, Iterable
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@dataclass(frozen=True)
|
|
16
|
+
class Collaborator:
|
|
17
|
+
alias: str
|
|
18
|
+
provider: str
|
|
19
|
+
default_model: str
|
|
20
|
+
label: str
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
COLLABORATORS: dict[str, Collaborator] = {
|
|
24
|
+
"chatgpt": Collaborator("chatgpt", "openai", "gpt-4o-mini", "ChatGPT / OpenAI"),
|
|
25
|
+
"openai": Collaborator("chatgpt", "openai", "gpt-4o-mini", "ChatGPT / OpenAI"),
|
|
26
|
+
"claude": Collaborator("claude", "anthropic", "claude-3-5-haiku-latest", "Claude / Anthropic"),
|
|
27
|
+
"anthropic": Collaborator("claude", "anthropic", "claude-3-5-haiku-latest", "Claude / Anthropic"),
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def resolve_collaborator(name: str, config: dict | None = None) -> Collaborator | None:
|
|
32
|
+
"""Resolve user-friendly names and apply an optional configured model."""
|
|
33
|
+
target = COLLABORATORS.get(str(name or "").strip().lower())
|
|
34
|
+
if not target:
|
|
35
|
+
return None
|
|
36
|
+
configured_model = (config or {}).get(f"collab_{target.alias}_model")
|
|
37
|
+
if configured_model and str(configured_model).strip():
|
|
38
|
+
return Collaborator(target.alias, target.provider, str(configured_model).strip(), target.label)
|
|
39
|
+
return target
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def collaboration_readiness(config: dict, key_available: Callable[[str], bool]) -> list[dict[str, Any]]:
|
|
43
|
+
"""Return deterministic readiness rows for the UI and tests."""
|
|
44
|
+
rows = []
|
|
45
|
+
for alias in ("chatgpt", "claude"):
|
|
46
|
+
target = resolve_collaborator(alias, config)
|
|
47
|
+
assert target is not None
|
|
48
|
+
rows.append({
|
|
49
|
+
"alias": target.alias,
|
|
50
|
+
"provider": target.provider,
|
|
51
|
+
"label": target.label,
|
|
52
|
+
"model": target.default_model,
|
|
53
|
+
"configured": bool(key_available(target.provider)),
|
|
54
|
+
})
|
|
55
|
+
return rows
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
async def consult(
|
|
59
|
+
prompt: str,
|
|
60
|
+
targets: Iterable[Collaborator],
|
|
61
|
+
*,
|
|
62
|
+
get_provider: Callable[[str], Any],
|
|
63
|
+
message_factory: Callable[..., Any],
|
|
64
|
+
timeout: float = 60.0,
|
|
65
|
+
) -> list[dict[str, str | bool]]:
|
|
66
|
+
"""Ask configured collaborators concurrently without tools or chat history.
|
|
67
|
+
|
|
68
|
+
The caller decides which providers are configured. Each response is kept
|
|
69
|
+
separate: this command is a transparent second-opinion panel, not a hidden
|
|
70
|
+
synthesis that could blur source attribution.
|
|
71
|
+
"""
|
|
72
|
+
safe_prompt = str(prompt or "").strip()
|
|
73
|
+
if not safe_prompt:
|
|
74
|
+
return []
|
|
75
|
+
|
|
76
|
+
async def _one(target: Collaborator) -> dict[str, str | bool]:
|
|
77
|
+
try:
|
|
78
|
+
provider = get_provider(f"{target.provider}/{target.default_model}")
|
|
79
|
+
result = await asyncio.wait_for(
|
|
80
|
+
provider.complete([message_factory(role="user", content=safe_prompt)]),
|
|
81
|
+
timeout=timeout,
|
|
82
|
+
)
|
|
83
|
+
return {
|
|
84
|
+
"alias": target.alias,
|
|
85
|
+
"label": target.label,
|
|
86
|
+
"model": target.default_model,
|
|
87
|
+
"success": bool(result.get("success")),
|
|
88
|
+
"response": str(result.get("response") or ""),
|
|
89
|
+
"error": str(result.get("error") or ""),
|
|
90
|
+
}
|
|
91
|
+
except asyncio.TimeoutError:
|
|
92
|
+
return {"alias": target.alias, "label": target.label, "model": target.default_model,
|
|
93
|
+
"success": False, "response": "", "error": f"timed out after {timeout:g}s"}
|
|
94
|
+
except Exception as exc:
|
|
95
|
+
return {"alias": target.alias, "label": target.label, "model": target.default_model,
|
|
96
|
+
"success": False, "response": "", "error": str(exc)}
|
|
97
|
+
|
|
98
|
+
return await asyncio.gather(*(_one(target) for target in targets))
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""LLM streaming providers."""
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Canned responses for when no model backend is reachable.
|
|
2
|
+
|
|
3
|
+
These three lived in aria_cli's module globals and were borrowed by
|
|
4
|
+
stream_ollama through the import-time rebind, so the fallback path — the SDK
|
|
5
|
+
and the daemon, which never import aria_cli — died on them precisely when it
|
|
6
|
+
needed them most: the Ollama-unavailable branch could not build its own
|
|
7
|
+
"Ollama is unavailable" message.
|
|
8
|
+
|
|
9
|
+
They are pure string/dict builders with no dependencies, and they belong with
|
|
10
|
+
the provider whose failure mode they describe. aria_cli re-exports them under
|
|
11
|
+
its original private names so nothing that borrows those names changes.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
DEFAULT_OLLAMA_URL = "http://localhost:11434"
|
|
17
|
+
|
|
18
|
+
GREETINGS = frozenset({
|
|
19
|
+
"hi", "hello", "hey", "你好", "您好", "嗨", "哈喽", "在吗",
|
|
20
|
+
"早上好", "下午好", "晚上好",
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def is_simple_greeting(message: str) -> bool:
|
|
25
|
+
"""True for a bare greeting that can be answered without a model."""
|
|
26
|
+
text = (message or "").strip().lower()
|
|
27
|
+
return text in GREETINGS or (
|
|
28
|
+
len(text) <= 8 and any(g in text for g in GREETINGS)
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def offline_greeting_response() -> dict:
|
|
33
|
+
"""Answer a greeting when neither cloud nor local backend is reachable."""
|
|
34
|
+
return {
|
|
35
|
+
"success": True,
|
|
36
|
+
"response": (
|
|
37
|
+
"你好,我是 Aria Code。\n\n"
|
|
38
|
+
"当前云端模型不可用,且本地 Ollama 服务没有启动;简单问候可以直接响应。"
|
|
39
|
+
"如果要进行代码修改、市场分析或长文本推理,请先启动本地模型:\n\n"
|
|
40
|
+
"```bash\n"
|
|
41
|
+
"ollama serve\n"
|
|
42
|
+
"```\n\n"
|
|
43
|
+
"然后可用 `ollama list` 检查已安装模型,或运行 `/health` 查看 Aria Code 状态。"
|
|
44
|
+
),
|
|
45
|
+
"provider": "builtin",
|
|
46
|
+
"usage": {"prompt_tokens": 0, "completion_tokens": 0, "thinking_tokens": 0},
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def ollama_unavailable_result(ollama_url: str, err: str = "") -> dict:
|
|
51
|
+
"""The failure result for an unreachable local Ollama, with recovery steps."""
|
|
52
|
+
host = ollama_url or DEFAULT_OLLAMA_URL
|
|
53
|
+
detail = f"\n\nDetail: {err}" if err else ""
|
|
54
|
+
return {
|
|
55
|
+
"success": False,
|
|
56
|
+
"provider": "ollama",
|
|
57
|
+
"error": (
|
|
58
|
+
"Local Ollama is not reachable.\n\n"
|
|
59
|
+
f"Host: {host}\n"
|
|
60
|
+
"Start it in another terminal:\n\n"
|
|
61
|
+
" ollama serve\n\n"
|
|
62
|
+
"Then verify:\n\n"
|
|
63
|
+
" curl http://127.0.0.1:11434/api/tags\n"
|
|
64
|
+
" ollama list\n\n"
|
|
65
|
+
"If you do not want local fallback, use a working cloud/API provider or disable local mode."
|
|
66
|
+
f"{detail}"
|
|
67
|
+
),
|
|
68
|
+
}
|