ciris-agent 1.7.7__py3-none-any.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.
- ciris_adapters/README.md +113 -0
- ciris_adapters/__init__.py +30 -0
- ciris_adapters/ciris_covenant_metrics/README.md +144 -0
- ciris_adapters/ciris_covenant_metrics/__init__.py +36 -0
- ciris_adapters/ciris_covenant_metrics/adapter.py +249 -0
- ciris_adapters/ciris_covenant_metrics/manifest.json +152 -0
- ciris_adapters/ciris_covenant_metrics/services.py +403 -0
- ciris_adapters/ciris_hosted_tools/__init__.py +24 -0
- ciris_adapters/ciris_hosted_tools/adapter.py +169 -0
- ciris_adapters/ciris_hosted_tools/manifest.json +94 -0
- ciris_adapters/ciris_hosted_tools/services.py +744 -0
- ciris_adapters/external_data_sql/README.md +559 -0
- ciris_adapters/external_data_sql/__init__.py +43 -0
- ciris_adapters/external_data_sql/adapter.py +144 -0
- ciris_adapters/external_data_sql/configurable.py +315 -0
- ciris_adapters/external_data_sql/dialects/__init__.py +37 -0
- ciris_adapters/external_data_sql/dialects/base.py +133 -0
- ciris_adapters/external_data_sql/dialects/mysql.py +63 -0
- ciris_adapters/external_data_sql/dialects/postgresql.py +59 -0
- ciris_adapters/external_data_sql/dialects/sqlite.py +62 -0
- ciris_adapters/external_data_sql/example_config.json +88 -0
- ciris_adapters/external_data_sql/example_privacy_schema.yaml +127 -0
- ciris_adapters/external_data_sql/manifest.json +195 -0
- ciris_adapters/external_data_sql/privacy_schema_loader.py +189 -0
- ciris_adapters/external_data_sql/protocol.py +101 -0
- ciris_adapters/external_data_sql/schemas.py +146 -0
- ciris_adapters/external_data_sql/service.py +1547 -0
- ciris_adapters/external_data_sql/service_old.py +492 -0
- ciris_adapters/home_assistant/__init__.py +63 -0
- ciris_adapters/home_assistant/adapter.py +201 -0
- ciris_adapters/home_assistant/communication_service.py +347 -0
- ciris_adapters/home_assistant/configurable.py +667 -0
- ciris_adapters/home_assistant/manifest.json +203 -0
- ciris_adapters/home_assistant/schemas.py +129 -0
- ciris_adapters/home_assistant/service.py +751 -0
- ciris_adapters/home_assistant/tool_service.py +441 -0
- ciris_adapters/mcp_client/__init__.py +82 -0
- ciris_adapters/mcp_client/adapter.py +847 -0
- ciris_adapters/mcp_client/config.py +280 -0
- ciris_adapters/mcp_client/configurable.py +422 -0
- ciris_adapters/mcp_client/manifest.json +185 -0
- ciris_adapters/mcp_client/mcp_communication_service.py +393 -0
- ciris_adapters/mcp_client/mcp_tool_service.py +463 -0
- ciris_adapters/mcp_client/mcp_wise_service.py +394 -0
- ciris_adapters/mcp_client/schemas.py +149 -0
- ciris_adapters/mcp_client/security.py +592 -0
- ciris_adapters/mcp_common/__init__.py +44 -0
- ciris_adapters/mcp_common/manifest.json +25 -0
- ciris_adapters/mcp_common/protocol.py +315 -0
- ciris_adapters/mcp_common/schemas.py +225 -0
- ciris_adapters/mcp_server/__init__.py +47 -0
- ciris_adapters/mcp_server/adapter.py +581 -0
- ciris_adapters/mcp_server/config.py +260 -0
- ciris_adapters/mcp_server/configurable.py +393 -0
- ciris_adapters/mcp_server/handlers.py +663 -0
- ciris_adapters/mcp_server/manifest.json +211 -0
- ciris_adapters/mcp_server/security.py +500 -0
- ciris_adapters/mock_llm/README.md +117 -0
- ciris_adapters/mock_llm/__init__.py +21 -0
- ciris_adapters/mock_llm/adapter.py +131 -0
- ciris_adapters/mock_llm/configurable.py +237 -0
- ciris_adapters/mock_llm/manifest.json +106 -0
- ciris_adapters/mock_llm/protocol.py +37 -0
- ciris_adapters/mock_llm/responses.py +520 -0
- ciris_adapters/mock_llm/responses_action_selection.py +1041 -0
- ciris_adapters/mock_llm/responses_epistemic.py +17 -0
- ciris_adapters/mock_llm/responses_feedback.py +27 -0
- ciris_adapters/mock_llm/schemas.py +35 -0
- ciris_adapters/mock_llm/service.py +294 -0
- ciris_adapters/navigation/__init__.py +21 -0
- ciris_adapters/navigation/adapter.py +129 -0
- ciris_adapters/navigation/configurable.py +239 -0
- ciris_adapters/navigation/manifest.json +104 -0
- ciris_adapters/navigation/service.py +487 -0
- ciris_adapters/reddit/README.md +132 -0
- ciris_adapters/reddit/REDDIT_ADAPTER_ANALYSIS.md +715 -0
- ciris_adapters/reddit/REDDIT_ADAPTER_SUMMARY.txt +278 -0
- ciris_adapters/reddit/REDDIT_ANALYSIS_INDEX.md +307 -0
- ciris_adapters/reddit/REDDIT_PRODUCTION_READINESS_PLAN.md +518 -0
- ciris_adapters/reddit/__init__.py +15 -0
- ciris_adapters/reddit/adapter.py +189 -0
- ciris_adapters/reddit/configurable.py +274 -0
- ciris_adapters/reddit/error_handler.py +307 -0
- ciris_adapters/reddit/manifest.json +218 -0
- ciris_adapters/reddit/observer.py +532 -0
- ciris_adapters/reddit/protocol.py +34 -0
- ciris_adapters/reddit/schemas.py +433 -0
- ciris_adapters/reddit/service.py +1471 -0
- ciris_adapters/sample_adapter/README.md +474 -0
- ciris_adapters/sample_adapter/__init__.py +45 -0
- ciris_adapters/sample_adapter/adapter.py +208 -0
- ciris_adapters/sample_adapter/configurable.py +469 -0
- ciris_adapters/sample_adapter/manifest.json +247 -0
- ciris_adapters/sample_adapter/services.py +486 -0
- ciris_adapters/weather/__init__.py +16 -0
- ciris_adapters/weather/adapter.py +130 -0
- ciris_adapters/weather/configurable.py +240 -0
- ciris_adapters/weather/manifest.json +156 -0
- ciris_adapters/weather/service.py +600 -0
- ciris_agent-1.7.7.dist-info/METADATA +284 -0
- ciris_agent-1.7.7.dist-info/RECORD +986 -0
- ciris_agent-1.7.7.dist-info/WHEEL +5 -0
- ciris_agent-1.7.7.dist-info/entry_points.txt +15 -0
- ciris_agent-1.7.7.dist-info/licenses/LICENSE +205 -0
- ciris_agent-1.7.7.dist-info/licenses/NOTICE +82 -0
- ciris_agent-1.7.7.dist-info/top_level.txt +4 -0
- ciris_engine/__init__.py +15 -0
- ciris_engine/ciris_templates/ally.yaml +632 -0
- ciris_engine/ciris_templates/default.yaml +411 -0
- ciris_engine/ciris_templates/echo-core.yaml +629 -0
- ciris_engine/ciris_templates/echo-speculative.yaml +764 -0
- ciris_engine/ciris_templates/echo.yaml +647 -0
- ciris_engine/ciris_templates/sage.yaml +332 -0
- ciris_engine/ciris_templates/scout.yaml +338 -0
- ciris_engine/ciris_templates/test.yaml +168 -0
- ciris_engine/cli.py +42 -0
- ciris_engine/config/CIRIS_SERVICES.json +19 -0
- ciris_engine/config/MODEL_CAPABILITIES.json +419 -0
- ciris_engine/config/PRICING_DATA.json +179 -0
- ciris_engine/config/__init__.py +50 -0
- ciris_engine/config/ciris_services.py +113 -0
- ciris_engine/config/model_capabilities.py +388 -0
- ciris_engine/config/pricing_models.py +276 -0
- ciris_engine/constants.py +35 -0
- ciris_engine/data/__init__.py +1 -0
- ciris_engine/data/covenant_1.0b.txt +978 -0
- ciris_engine/gui_static/11steps.svg +107 -0
- ciris_engine/gui_static/2x-schematics.png +0 -0
- ciris_engine/gui_static/404/index.html +1 -0
- ciris_engine/gui_static/404.html +1 -0
- ciris_engine/gui_static/_next/static/0edhkwDxd5UccTsCmtaBi/_buildManifest.js +1 -0
- ciris_engine/gui_static/_next/static/0edhkwDxd5UccTsCmtaBi/_ssgManifest.js +1 -0
- ciris_engine/gui_static/_next/static/U-3xTQao7hc2wnAi-Uekm/_buildManifest.js +1 -0
- ciris_engine/gui_static/_next/static/U-3xTQao7hc2wnAi-Uekm/_ssgManifest.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/3297-60e86ba0f8a7b040.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/3835-2aad4b7f5f8e4643.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/4499-99a0bc47de0b8975.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/4534-af88cd4ba6e99bff.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/4541-84b455f9e0dc4cfe.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/4789-61412711484754bb.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/6539-c6398bc9d7018430.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/704-8e827b26cc8c2d32.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/704-fb45d630f3192c6f.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/8072-de4952a2e6d2b33f.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/8315-b91d03a3949db0af.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/8386-f93a83ccbd789bd9.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/87c73c54-781a7f35148d5433.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/8903-fefea3339a02d41b.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/9090-e66485adf8d9d990.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/_not-found/page-a67d9808462c23b1.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/api-keys/page-2d7ee1583bbbd02e.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/api-keys/page-6a3c2bae6fe92b7b.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/consent/page-2ed3a035136bc4e8.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/consent/page-b2f5c91844a32422.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/page-25b90f89af3ea58c.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/page-b65d16c94ecaf69c.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/privacy/page-675b6d05c8f9184f.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/privacy/page-cbee2e1c8ab52145.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/settings/page-0f44da06697cf9f0.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/account/settings/page-563420253577edbf.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/adapters/page-1854631018bc32be.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/agents/page-8353752c176a7c70.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/agents/page-f61a529f110a6040.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/api-demo/page-7f19b9d20d39be28.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/api-demo/page-d1063938f249b8bd.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/audit/page-321b6728b8fff0bb.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/audit/page-ebac35ca961a1277.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/billing/page-6f3dc3bd02924f8e.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/billing/page-fa4a469f814c821a.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/comms/page-0d4f734269addd8f.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/comms/page-79227d426050089c.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/config/page-018d21d683b6e5bc.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/config/page-2aa5a5363ca2a371.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/consent/page-198373205fd316e2.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/consent/page-f2ca39e7713b13f8.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/dashboard/page-1dd5a196f643c60d.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/dashboard/page-530a04d3abbb8cda.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/docs/page-3193b06d094ab654.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/docs/page-330e996dedb87aba.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/layout-0a70f5fc460298b1.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/layout-21f2f99dd5b336e9.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/login/page-33240e6c6034a49d.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/login/page-68ffab6d54a7fdcd.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/logs/page-8a6167aecc4a475c.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/memory/page-9ca8c5d0056de3ff.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/memory/page-e961226941c18f81.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/page-6fdb065a787a4974.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/page-89f87d431be6064a.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/runtime/page-2e728b9c43aa164d.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/runtime/page-c7dd033dc40a72f0.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/services/page-ae9f0bdf11d01a95.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/services/page-b10feb79ca5d75e5.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/sessions/page-13ebe7ef1c16ae11.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/sessions/page-e6c82b16d617f785.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/setup/page-0beb5f5b5a5c20fc.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/setup/page-2595e729eae30c0e.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/status-dashboard/page-1037c987aecc3653.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/status-dashboard/page-2ffd147f6d3162ff.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/system/page-2c5798d58cafcd91.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/system/page-505b1ba4eceb01c3.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-auth/page-b0cad31d5cb1b2fa.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-auth/page-f3ecd7a8012df230.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-login/page-f35117fdc4105801.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-login/page-fb583a7924114906.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-sdk/page-50f116fd76935563.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/test-sdk/page-c37d8aa5ba623a44.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/tools/page-429aec7a707777ef.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/tools/page-5f705aad60e0c04e.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/users/page-13476b8b0f3808cc.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/users/page-7e500d154ed5bba4.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/wa/page-cc4a9d8a5cb44d08.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/app/wa/page-ec3e429efbc79230.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/framework-9d29490f5ba089ba.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/main-1f554952e47a82c4.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/main-app-26fa8aed029082e5.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/main-app-97b0486ef6bcef25.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/pages/_app-6ce685456e616eb2.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/pages/_error-d4bce98d93fe21e7.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- ciris_engine/gui_static/_next/static/chunks/webpack-fcebd240b7f8477d.js +1 -0
- ciris_engine/gui_static/_next/static/css/16b94b1fe0cc6e37.css +3 -0
- ciris_engine/gui_static/_next/static/css/77a24ceaae86deff.css +3 -0
- ciris_engine/gui_static/_next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/747892c23ea88013-s.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/8d697b304b401681-s.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/9610d9e46709d722-s.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
- ciris_engine/gui_static/_next/static/media/d8298875641ec7d4-s.p.woff2 +0 -0
- ciris_engine/gui_static/account/api-keys/index.html +1 -0
- ciris_engine/gui_static/account/api-keys/index.txt +27 -0
- ciris_engine/gui_static/account/consent/index.html +1 -0
- ciris_engine/gui_static/account/consent/index.txt +27 -0
- ciris_engine/gui_static/account/index.html +1 -0
- ciris_engine/gui_static/account/index.txt +27 -0
- ciris_engine/gui_static/account/privacy/index.html +1 -0
- ciris_engine/gui_static/account/privacy/index.txt +27 -0
- ciris_engine/gui_static/account/settings/index.html +1 -0
- ciris_engine/gui_static/account/settings/index.txt +27 -0
- ciris_engine/gui_static/adapters/index.html +1 -0
- ciris_engine/gui_static/adapters/index.txt +27 -0
- ciris_engine/gui_static/agents/index.html +1 -0
- ciris_engine/gui_static/agents/index.txt +27 -0
- ciris_engine/gui_static/andrew-roberts-euBRXcx57T4-unsplash.jpg +0 -0
- ciris_engine/gui_static/api-demo/index.html +1 -0
- ciris_engine/gui_static/api-demo/index.txt +27 -0
- ciris_engine/gui_static/audit/index.html +1 -0
- ciris_engine/gui_static/audit/index.txt +27 -0
- ciris_engine/gui_static/billing/index.html +1 -0
- ciris_engine/gui_static/billing/index.txt +27 -0
- ciris_engine/gui_static/blurryinfo.png +0 -0
- ciris_engine/gui_static/chip-vincent-PkQDwfl9Flc-unsplash.jpg +0 -0
- ciris_engine/gui_static/ciris-architecture.svg +338 -0
- ciris_engine/gui_static/comms/index.html +1 -0
- ciris_engine/gui_static/comms/index.txt +27 -0
- ciris_engine/gui_static/config/index.html +1 -0
- ciris_engine/gui_static/config/index.txt +27 -0
- ciris_engine/gui_static/consent/index.html +1 -0
- ciris_engine/gui_static/consent/index.txt +27 -0
- ciris_engine/gui_static/dashboard/index.html +1 -0
- ciris_engine/gui_static/dashboard/index.txt +27 -0
- ciris_engine/gui_static/docs/index.html +1 -0
- ciris_engine/gui_static/docs/index.txt +27 -0
- ciris_engine/gui_static/eric.png +0 -0
- ciris_engine/gui_static/file.svg +1 -0
- ciris_engine/gui_static/globe.svg +1 -0
- ciris_engine/gui_static/index.html +1 -0
- ciris_engine/gui_static/index.txt +27 -0
- ciris_engine/gui_static/infogfx-1@2x.png +0 -0
- ciris_engine/gui_static/infogfx-2.png +0 -0
- ciris_engine/gui_static/infogfx-dark-1.png +0 -0
- ciris_engine/gui_static/kelly-vohs-soSTXmIxTDU-unsplash.jpg +0 -0
- ciris_engine/gui_static/login/index.html +1 -0
- ciris_engine/gui_static/login/index.txt +27 -0
- ciris_engine/gui_static/logs/index.html +1 -0
- ciris_engine/gui_static/logs/index.txt +27 -0
- ciris_engine/gui_static/memory/index.html +1 -0
- ciris_engine/gui_static/memory/index.txt +27 -0
- ciris_engine/gui_static/nathan-farrish-ArcTfEoBgzs-unsplash.jpg +0 -0
- ciris_engine/gui_static/next.svg +1 -0
- ciris_engine/gui_static/overview.svg +512 -0
- ciris_engine/gui_static/overview1.svg +407 -0
- ciris_engine/gui_static/overview2.svg +370 -0
- ciris_engine/gui_static/pipeline-visualization.svg +278 -0
- ciris_engine/gui_static/privacy-policy.html +160 -0
- ciris_engine/gui_static/runtime/index.html +8 -0
- ciris_engine/gui_static/runtime/index.txt +27 -0
- ciris_engine/gui_static/services/index.html +1 -0
- ciris_engine/gui_static/services/index.txt +27 -0
- ciris_engine/gui_static/sessions/index.html +1 -0
- ciris_engine/gui_static/sessions/index.txt +27 -0
- ciris_engine/gui_static/setup/index.html +1 -0
- ciris_engine/gui_static/setup/index.txt +27 -0
- ciris_engine/gui_static/status-dashboard/index.html +1 -0
- ciris_engine/gui_static/status-dashboard/index.txt +27 -0
- ciris_engine/gui_static/system/index.html +1 -0
- ciris_engine/gui_static/system/index.txt +27 -0
- ciris_engine/gui_static/terms-of-service.html +174 -0
- ciris_engine/gui_static/test-auth/index.html +1 -0
- ciris_engine/gui_static/test-auth/index.txt +27 -0
- ciris_engine/gui_static/test-login/index.html +1 -0
- ciris_engine/gui_static/test-login/index.txt +27 -0
- ciris_engine/gui_static/test-sdk/index.html +1 -0
- ciris_engine/gui_static/test-sdk/index.txt +27 -0
- ciris_engine/gui_static/tools/index.html +1 -0
- ciris_engine/gui_static/tools/index.txt +27 -0
- ciris_engine/gui_static/users/index.html +1 -0
- ciris_engine/gui_static/users/index.txt +27 -0
- ciris_engine/gui_static/vercel.svg +1 -0
- ciris_engine/gui_static/videos/video1.mp4 +0 -0
- ciris_engine/gui_static/videos/video3.mp4 +0 -0
- ciris_engine/gui_static/wa/index.html +1 -0
- ciris_engine/gui_static/wa/index.txt +27 -0
- ciris_engine/gui_static/window.svg +1 -0
- ciris_engine/logic/__init__.py +8 -0
- ciris_engine/logic/adapters/__init__.py +74 -0
- ciris_engine/logic/adapters/api/__init__.py +5 -0
- ciris_engine/logic/adapters/api/adapter.py +1037 -0
- ciris_engine/logic/adapters/api/api_communication.py +370 -0
- ciris_engine/logic/adapters/api/api_document.py +330 -0
- ciris_engine/logic/adapters/api/api_observer.py +24 -0
- ciris_engine/logic/adapters/api/api_runtime_control.py +388 -0
- ciris_engine/logic/adapters/api/api_tools.py +299 -0
- ciris_engine/logic/adapters/api/api_vision.py +215 -0
- ciris_engine/logic/adapters/api/app.py +272 -0
- ciris_engine/logic/adapters/api/auth.py +159 -0
- ciris_engine/logic/adapters/api/config.py +101 -0
- ciris_engine/logic/adapters/api/constants.py +55 -0
- ciris_engine/logic/adapters/api/dependencies/__init__.py +1 -0
- ciris_engine/logic/adapters/api/dependencies/auth.py +260 -0
- ciris_engine/logic/adapters/api/endpoints/__init__.py +1 -0
- ciris_engine/logic/adapters/api/endpoints/emergency.py +86 -0
- ciris_engine/logic/adapters/api/middleware/__init__.py +1 -0
- ciris_engine/logic/adapters/api/middleware/rate_limiter.py +302 -0
- ciris_engine/logic/adapters/api/models.py +29 -0
- ciris_engine/logic/adapters/api/routes/__init__.py +52 -0
- ciris_engine/logic/adapters/api/routes/agent.py +1762 -0
- ciris_engine/logic/adapters/api/routes/audit.py +707 -0
- ciris_engine/logic/adapters/api/routes/auth.py +1745 -0
- ciris_engine/logic/adapters/api/routes/billing.py +895 -0
- ciris_engine/logic/adapters/api/routes/config.py +329 -0
- ciris_engine/logic/adapters/api/routes/connectors.py +534 -0
- ciris_engine/logic/adapters/api/routes/consent.py +637 -0
- ciris_engine/logic/adapters/api/routes/dsar.py +637 -0
- ciris_engine/logic/adapters/api/routes/dsar_multi_source.py +484 -0
- ciris_engine/logic/adapters/api/routes/emergency.py +302 -0
- ciris_engine/logic/adapters/api/routes/memory.py +733 -0
- ciris_engine/logic/adapters/api/routes/memory_filters.py +230 -0
- ciris_engine/logic/adapters/api/routes/memory_models.py +112 -0
- ciris_engine/logic/adapters/api/routes/memory_queries.py +236 -0
- ciris_engine/logic/adapters/api/routes/memory_query_helpers.py +394 -0
- ciris_engine/logic/adapters/api/routes/memory_visualization.py +359 -0
- ciris_engine/logic/adapters/api/routes/memory_visualization_helpers.py +110 -0
- ciris_engine/logic/adapters/api/routes/partnership.py +541 -0
- ciris_engine/logic/adapters/api/routes/setup.py +1374 -0
- ciris_engine/logic/adapters/api/routes/system.py +3049 -0
- ciris_engine/logic/adapters/api/routes/system_extensions.py +952 -0
- ciris_engine/logic/adapters/api/routes/telemetry.py +1987 -0
- ciris_engine/logic/adapters/api/routes/telemetry_converters.py +141 -0
- ciris_engine/logic/adapters/api/routes/telemetry_helpers.py +111 -0
- ciris_engine/logic/adapters/api/routes/telemetry_logs_reader.py +280 -0
- ciris_engine/logic/adapters/api/routes/telemetry_metrics.py +131 -0
- ciris_engine/logic/adapters/api/routes/telemetry_models.py +190 -0
- ciris_engine/logic/adapters/api/routes/telemetry_otlp.py +878 -0
- ciris_engine/logic/adapters/api/routes/telemetry_resource_helpers.py +191 -0
- ciris_engine/logic/adapters/api/routes/tickets.py +541 -0
- ciris_engine/logic/adapters/api/routes/tools.py +556 -0
- ciris_engine/logic/adapters/api/routes/transparency.py +281 -0
- ciris_engine/logic/adapters/api/routes/users.py +981 -0
- ciris_engine/logic/adapters/api/routes/verification.py +373 -0
- ciris_engine/logic/adapters/api/routes/wa.py +369 -0
- ciris_engine/logic/adapters/api/service_configuration.py +177 -0
- ciris_engine/logic/adapters/api/services/__init__.py +1 -0
- ciris_engine/logic/adapters/api/services/auth_service.py +1417 -0
- ciris_engine/logic/adapters/api/services/oauth_security.py +68 -0
- ciris_engine/logic/adapters/base.py +141 -0
- ciris_engine/logic/adapters/base_adapter.py +73 -0
- ciris_engine/logic/adapters/base_observer.py +1141 -0
- ciris_engine/logic/adapters/base_vision.py +312 -0
- ciris_engine/logic/adapters/cirisnode_client.py +307 -0
- ciris_engine/logic/adapters/cli/__init__.py +3 -0
- ciris_engine/logic/adapters/cli/adapter.py +207 -0
- ciris_engine/logic/adapters/cli/cli_adapter.py +902 -0
- ciris_engine/logic/adapters/cli/cli_observer.py +268 -0
- ciris_engine/logic/adapters/cli/cli_tools.py +427 -0
- ciris_engine/logic/adapters/cli/cli_wa_service.py +134 -0
- ciris_engine/logic/adapters/cli/config.py +73 -0
- ciris_engine/logic/adapters/discord/__init__.py +3 -0
- ciris_engine/logic/adapters/discord/adapter.py +783 -0
- ciris_engine/logic/adapters/discord/ciris_discord_client.py +159 -0
- ciris_engine/logic/adapters/discord/config.py +177 -0
- ciris_engine/logic/adapters/discord/constants.py +185 -0
- ciris_engine/logic/adapters/discord/discord-stubs.pyi +50 -0
- ciris_engine/logic/adapters/discord/discord_adapter.py +1584 -0
- ciris_engine/logic/adapters/discord/discord_audit.py +150 -0
- ciris_engine/logic/adapters/discord/discord_channel_manager.py +351 -0
- ciris_engine/logic/adapters/discord/discord_connection_manager.py +313 -0
- ciris_engine/logic/adapters/discord/discord_embed_formatter.py +369 -0
- ciris_engine/logic/adapters/discord/discord_error_classifier.py +302 -0
- ciris_engine/logic/adapters/discord/discord_error_handler.py +316 -0
- ciris_engine/logic/adapters/discord/discord_guidance_handler.py +460 -0
- ciris_engine/logic/adapters/discord/discord_message_handler.py +207 -0
- ciris_engine/logic/adapters/discord/discord_observer.py +670 -0
- ciris_engine/logic/adapters/discord/discord_rate_limiter.py +249 -0
- ciris_engine/logic/adapters/discord/discord_reaction_handler.py +278 -0
- ciris_engine/logic/adapters/discord/discord_tool_handler.py +465 -0
- ciris_engine/logic/adapters/discord/discord_tool_service.py +790 -0
- ciris_engine/logic/adapters/discord/discord_tools.py +90 -0
- ciris_engine/logic/adapters/discord/discord_vision_helper.py +148 -0
- ciris_engine/logic/adapters/discord/py.typed +0 -0
- ciris_engine/logic/adapters/document_parser.py +320 -0
- ciris_engine/logic/audit/__init__.py +10 -0
- ciris_engine/logic/audit/hash_chain.py +313 -0
- ciris_engine/logic/audit/signature_manager.py +352 -0
- ciris_engine/logic/audit/verifier.py +408 -0
- ciris_engine/logic/buses/__init__.py +21 -0
- ciris_engine/logic/buses/base_bus.py +178 -0
- ciris_engine/logic/buses/bus_manager.py +121 -0
- ciris_engine/logic/buses/communication_bus.py +387 -0
- ciris_engine/logic/buses/llm_bus.py +722 -0
- ciris_engine/logic/buses/memory_bus.py +577 -0
- ciris_engine/logic/buses/prohibitions.py +502 -0
- ciris_engine/logic/buses/runtime_control_bus.py +539 -0
- ciris_engine/logic/buses/tool_bus.py +482 -0
- ciris_engine/logic/buses/wise_bus.py +684 -0
- ciris_engine/logic/config/__init__.py +25 -0
- ciris_engine/logic/config/bootstrap.py +255 -0
- ciris_engine/logic/config/config_accessor.py +202 -0
- ciris_engine/logic/config/db_paths.py +194 -0
- ciris_engine/logic/config/env_utils.py +39 -0
- ciris_engine/logic/conscience/__init__.py +16 -0
- ciris_engine/logic/conscience/build_deferral_package.py +0 -0
- ciris_engine/logic/conscience/core.py +688 -0
- ciris_engine/logic/conscience/interface.py +33 -0
- ciris_engine/logic/conscience/registry.py +76 -0
- ciris_engine/logic/conscience/thought_depth_guardrail.py +231 -0
- ciris_engine/logic/conscience/updated_status_conscience.py +156 -0
- ciris_engine/logic/context/__init__.py +10 -0
- ciris_engine/logic/context/batch_context.py +550 -0
- ciris_engine/logic/context/builder.py +149 -0
- ciris_engine/logic/context/channel_resolution.py +136 -0
- ciris_engine/logic/context/secrets_snapshot.py +52 -0
- ciris_engine/logic/context/system_snapshot.py +116 -0
- ciris_engine/logic/context/system_snapshot_helpers.py +1651 -0
- ciris_engine/logic/covenant/__init__.py +33 -0
- ciris_engine/logic/covenant/executor.py +303 -0
- ciris_engine/logic/covenant/extractor.py +382 -0
- ciris_engine/logic/covenant/handler.py +241 -0
- ciris_engine/logic/covenant/verifier.py +383 -0
- ciris_engine/logic/dma/__init__.py +15 -0
- ciris_engine/logic/dma/action_selection/__init__.py +11 -0
- ciris_engine/logic/dma/action_selection/action_instruction_generator.py +444 -0
- ciris_engine/logic/dma/action_selection/context_builder.py +508 -0
- ciris_engine/logic/dma/action_selection/faculty_integration.py +193 -0
- ciris_engine/logic/dma/action_selection/special_cases.py +132 -0
- ciris_engine/logic/dma/action_selection_pdma.py +365 -0
- ciris_engine/logic/dma/base_dma.py +335 -0
- ciris_engine/logic/dma/csdma.py +239 -0
- ciris_engine/logic/dma/dma_executor.py +575 -0
- ciris_engine/logic/dma/dsdma_base.py +410 -0
- ciris_engine/logic/dma/exceptions.py +4 -0
- ciris_engine/logic/dma/factory.py +150 -0
- ciris_engine/logic/dma/pdma.py +120 -0
- ciris_engine/logic/dma/prompt_loader.py +189 -0
- ciris_engine/logic/dma/prompts/action_selection_pdma.yml +58 -0
- ciris_engine/logic/dma/prompts/csdma_common_sense.yml +28 -0
- ciris_engine/logic/dma/prompts/dsdma_base.yml +17 -0
- ciris_engine/logic/dma/prompts/pdma_ethical.yml +42 -0
- ciris_engine/logic/formatters/__init__.py +26 -0
- ciris_engine/logic/formatters/crisis_resources.py +80 -0
- ciris_engine/logic/formatters/escalation.py +21 -0
- ciris_engine/logic/formatters/identity.py +224 -0
- ciris_engine/logic/formatters/prompt_blocks.py +64 -0
- ciris_engine/logic/formatters/system_snapshot.py +193 -0
- ciris_engine/logic/formatters/user_profiles.py +108 -0
- ciris_engine/logic/handlers/__init__.py +1 -0
- ciris_engine/logic/handlers/control/__init__.py +1 -0
- ciris_engine/logic/handlers/control/defer_handler.py +195 -0
- ciris_engine/logic/handlers/control/ponder_handler.py +154 -0
- ciris_engine/logic/handlers/control/reject_handler.py +81 -0
- ciris_engine/logic/handlers/external/__init__.py +1 -0
- ciris_engine/logic/handlers/external/observe_handler.py +154 -0
- ciris_engine/logic/handlers/external/speak_handler.py +250 -0
- ciris_engine/logic/handlers/external/tool_handler.py +148 -0
- ciris_engine/logic/handlers/memory/__init__.py +1 -0
- ciris_engine/logic/handlers/memory/forget_handler.py +107 -0
- ciris_engine/logic/handlers/memory/memorize_handler.py +391 -0
- ciris_engine/logic/handlers/memory/recall_handler.py +213 -0
- ciris_engine/logic/handlers/terminal/__init__.py +1 -0
- ciris_engine/logic/handlers/terminal/task_complete_handler.py +299 -0
- ciris_engine/logic/infrastructure/__init__.py +1 -0
- ciris_engine/logic/infrastructure/handlers/__init__.py +8 -0
- ciris_engine/logic/infrastructure/handlers/action_dispatcher.py +382 -0
- ciris_engine/logic/infrastructure/handlers/base_handler.py +450 -0
- ciris_engine/logic/infrastructure/handlers/exceptions.py +2 -0
- ciris_engine/logic/infrastructure/handlers/handler_registry.py +59 -0
- ciris_engine/logic/infrastructure/handlers/helpers.py +55 -0
- ciris_engine/logic/infrastructure/step_streaming.py +149 -0
- ciris_engine/logic/infrastructure/sub_services/__init__.py +1 -0
- ciris_engine/logic/infrastructure/sub_services/identity_variance_monitor.py +1035 -0
- ciris_engine/logic/infrastructure/sub_services/pattern_analysis_loop.py +758 -0
- ciris_engine/logic/infrastructure/sub_services/wa_cli_bootstrap.py +229 -0
- ciris_engine/logic/infrastructure/sub_services/wa_cli_display.py +176 -0
- ciris_engine/logic/infrastructure/sub_services/wa_cli_oauth.py +404 -0
- ciris_engine/logic/infrastructure/sub_services/wa_cli_wizard.py +181 -0
- ciris_engine/logic/persistence/__init__.py +130 -0
- ciris_engine/logic/persistence/analytics.py +97 -0
- ciris_engine/logic/persistence/db/__init__.py +28 -0
- ciris_engine/logic/persistence/db/core.py +520 -0
- ciris_engine/logic/persistence/db/dialect.py +380 -0
- ciris_engine/logic/persistence/db/execution_helpers.py +216 -0
- ciris_engine/logic/persistence/db/migration_runner.py +191 -0
- ciris_engine/logic/persistence/db/operations.py +313 -0
- ciris_engine/logic/persistence/db/query_builder.py +232 -0
- ciris_engine/logic/persistence/db/retry.py +154 -0
- ciris_engine/logic/persistence/db/setup.py +18 -0
- ciris_engine/logic/persistence/migrations/postgres/001_initial_schema.sql +4 -0
- ciris_engine/logic/persistence/migrations/postgres/002_add_retry_status.sql +3 -0
- ciris_engine/logic/persistence/migrations/postgres/003_add_task_update_tracking.sql +8 -0
- ciris_engine/logic/persistence/migrations/postgres/004_add_occurrence_id.sql +54 -0
- ciris_engine/logic/persistence/migrations/postgres/005_add_consolidation_locks.sql +22 -0
- ciris_engine/logic/persistence/migrations/postgres/006_add_correlation_id_unique_index.sql +16 -0
- ciris_engine/logic/persistence/migrations/postgres/007_add_dsar_tickets.sql +39 -0
- ciris_engine/logic/persistence/migrations/postgres/008_rename_to_tickets_add_sop.sql +123 -0
- ciris_engine/logic/persistence/migrations/postgres/009_add_ticket_status_columns.sql +39 -0
- ciris_engine/logic/persistence/migrations/postgres/010_add_images_to_tasks.sql +5 -0
- ciris_engine/logic/persistence/migrations/sqlite/001_initial_schema.sql +357 -0
- ciris_engine/logic/persistence/migrations/sqlite/002_add_retry_status.sql +3 -0
- ciris_engine/logic/persistence/migrations/sqlite/003_add_task_update_tracking.sql +8 -0
- ciris_engine/logic/persistence/migrations/sqlite/004_add_occurrence_id.sql +45 -0
- ciris_engine/logic/persistence/migrations/sqlite/005_add_consolidation_locks.sql +22 -0
- ciris_engine/logic/persistence/migrations/sqlite/006_add_correlation_id_unique_index.sql +16 -0
- ciris_engine/logic/persistence/migrations/sqlite/007_add_dsar_tickets.sql +39 -0
- ciris_engine/logic/persistence/migrations/sqlite/008_rename_to_tickets_add_sop.sql +120 -0
- ciris_engine/logic/persistence/migrations/sqlite/009_add_ticket_status_columns.sql +129 -0
- ciris_engine/logic/persistence/migrations/sqlite/010_add_images_to_tasks.sql +17 -0
- ciris_engine/logic/persistence/models/__init__.py +141 -0
- ciris_engine/logic/persistence/models/correlations.py +881 -0
- ciris_engine/logic/persistence/models/deferral.py +68 -0
- ciris_engine/logic/persistence/models/dsar.py +286 -0
- ciris_engine/logic/persistence/models/graph.py +362 -0
- ciris_engine/logic/persistence/models/identity.py +264 -0
- ciris_engine/logic/persistence/models/queue_status.py +139 -0
- ciris_engine/logic/persistence/models/tasks.py +1043 -0
- ciris_engine/logic/persistence/models/thoughts.py +400 -0
- ciris_engine/logic/persistence/models/tickets.py +518 -0
- ciris_engine/logic/persistence/stores/__init__.py +13 -0
- ciris_engine/logic/persistence/stores/auth_helpers.py +117 -0
- ciris_engine/logic/persistence/stores/authentication_store.py +414 -0
- ciris_engine/logic/persistence/utils.py +212 -0
- ciris_engine/logic/processors/__init__.py +30 -0
- ciris_engine/logic/processors/core/__init__.py +1 -0
- ciris_engine/logic/processors/core/base_processor.py +280 -0
- ciris_engine/logic/processors/core/main_processor.py +1777 -0
- ciris_engine/logic/processors/core/step_decorators.py +1583 -0
- ciris_engine/logic/processors/core/thought_processor/__init__.py +20 -0
- ciris_engine/logic/processors/core/thought_processor/action_execution.py +49 -0
- ciris_engine/logic/processors/core/thought_processor/conscience_execution.py +382 -0
- ciris_engine/logic/processors/core/thought_processor/finalize_action.py +66 -0
- ciris_engine/logic/processors/core/thought_processor/gather_context.py +120 -0
- ciris_engine/logic/processors/core/thought_processor/main.py +920 -0
- ciris_engine/logic/processors/core/thought_processor/perform_aspdma.py +86 -0
- ciris_engine/logic/processors/core/thought_processor/perform_dmas.py +106 -0
- ciris_engine/logic/processors/core/thought_processor/recursive_processing.py +237 -0
- ciris_engine/logic/processors/core/thought_processor/round_complete.py +52 -0
- ciris_engine/logic/processors/core/thought_processor/start_round.py +64 -0
- ciris_engine/logic/processors/exceptions.py +59 -0
- ciris_engine/logic/processors/states/__init__.py +1 -0
- ciris_engine/logic/processors/states/dream_processor.py +1381 -0
- ciris_engine/logic/processors/states/play_processor.py +141 -0
- ciris_engine/logic/processors/states/shutdown_processor.py +623 -0
- ciris_engine/logic/processors/states/solitude_processor.py +305 -0
- ciris_engine/logic/processors/states/wakeup_processor.py +802 -0
- ciris_engine/logic/processors/states/work_processor.py +742 -0
- ciris_engine/logic/processors/support/__init__.py +1 -0
- ciris_engine/logic/processors/support/dma_orchestrator.py +336 -0
- ciris_engine/logic/processors/support/processing_queue.py +133 -0
- ciris_engine/logic/processors/support/shutdown_condition_evaluator.py +294 -0
- ciris_engine/logic/processors/support/state_manager.py +358 -0
- ciris_engine/logic/processors/support/task_manager.py +303 -0
- ciris_engine/logic/processors/support/thought_escalation.py +116 -0
- ciris_engine/logic/processors/support/thought_manager.py +328 -0
- ciris_engine/logic/processors/support/thought_manager_enhanced.py +105 -0
- ciris_engine/logic/registries/__init__.py +34 -0
- ciris_engine/logic/registries/base.py +653 -0
- ciris_engine/logic/registries/circuit_breaker.py +275 -0
- ciris_engine/logic/registries/typed_registries.py +184 -0
- ciris_engine/logic/runtime/__init__.py +7 -0
- ciris_engine/logic/runtime/adapter_loader.py +261 -0
- ciris_engine/logic/runtime/adapter_manager.py +1053 -0
- ciris_engine/logic/runtime/ciris_runtime.py +2342 -0
- ciris_engine/logic/runtime/ciris_runtime_helpers.py +923 -0
- ciris_engine/logic/runtime/component_builder.py +361 -0
- ciris_engine/logic/runtime/identity_manager.py +219 -0
- ciris_engine/logic/runtime/module_loader.py +207 -0
- ciris_engine/logic/runtime/prevent_sideeffects.py +30 -0
- ciris_engine/logic/runtime/runtime_interface.py +23 -0
- ciris_engine/logic/runtime/service_initializer.py +1623 -0
- ciris_engine/logic/secrets/__init__.py +30 -0
- ciris_engine/logic/secrets/encryption.py +175 -0
- ciris_engine/logic/secrets/filter.py +295 -0
- ciris_engine/logic/secrets/service.py +652 -0
- ciris_engine/logic/secrets/store.py +669 -0
- ciris_engine/logic/services/__init__.py +1 -0
- ciris_engine/logic/services/adaptation/__init__.py +3 -0
- ciris_engine/logic/services/base_graph_service.py +142 -0
- ciris_engine/logic/services/base_infrastructure_service.py +69 -0
- ciris_engine/logic/services/base_scheduled_service.py +136 -0
- ciris_engine/logic/services/base_service.py +247 -0
- ciris_engine/logic/services/governance/__init__.py +3 -0
- ciris_engine/logic/services/governance/adaptive_filter/__init__.py +14 -0
- ciris_engine/logic/services/governance/adaptive_filter/service.py +818 -0
- ciris_engine/logic/services/governance/consent/__init__.py +53 -0
- ciris_engine/logic/services/governance/consent/air.py +403 -0
- ciris_engine/logic/services/governance/consent/decay.py +324 -0
- ciris_engine/logic/services/governance/consent/dsar_automation.py +589 -0
- ciris_engine/logic/services/governance/consent/exceptions.py +106 -0
- ciris_engine/logic/services/governance/consent/metrics.py +270 -0
- ciris_engine/logic/services/governance/consent/partnership.py +533 -0
- ciris_engine/logic/services/governance/consent/service.py +1256 -0
- ciris_engine/logic/services/governance/dsar/__init__.py +29 -0
- ciris_engine/logic/services/governance/dsar/orchestrator.py +977 -0
- ciris_engine/logic/services/governance/dsar/schemas.py +141 -0
- ciris_engine/logic/services/governance/dsar/signature_service.py +283 -0
- ciris_engine/logic/services/governance/self_observation/__init__.py +20 -0
- ciris_engine/logic/services/governance/self_observation/service.py +1153 -0
- ciris_engine/logic/services/governance/visibility/__init__.py +17 -0
- ciris_engine/logic/services/governance/visibility/service.py +512 -0
- ciris_engine/logic/services/governance/wise_authority/__init__.py +15 -0
- ciris_engine/logic/services/governance/wise_authority/service.py +827 -0
- ciris_engine/logic/services/graph/__init__.py +5 -0
- ciris_engine/logic/services/graph/audit_service/__init__.py +5 -0
- ciris_engine/logic/services/graph/audit_service/service.py +1675 -0
- ciris_engine/logic/services/graph/base.py +208 -0
- ciris_engine/logic/services/graph/config_service/__init__.py +5 -0
- ciris_engine/logic/services/graph/config_service/service.py +372 -0
- ciris_engine/logic/services/graph/incident_service/__init__.py +5 -0
- ciris_engine/logic/services/graph/incident_service/service.py +803 -0
- ciris_engine/logic/services/graph/memory_service.py +1120 -0
- ciris_engine/logic/services/graph/telemetry_service/__init__.py +5 -0
- ciris_engine/logic/services/graph/telemetry_service/exceptions.py +104 -0
- ciris_engine/logic/services/graph/telemetry_service/helpers.py +1337 -0
- ciris_engine/logic/services/graph/telemetry_service/service.py +2429 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/__init__.py +17 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/aggregation_helpers.py +355 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/cleanup_helpers.py +438 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/compressor.py +260 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/__init__.py +27 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/audit.py +326 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/conversation.py +291 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/memory.py +197 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/metrics.py +251 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/task.py +257 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/consolidators/trace.py +363 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/data_converter.py +545 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/date_calculation_helpers.py +193 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/db_query_helpers.py +296 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/edge_helpers.py +92 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/edge_manager.py +896 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/extensive_helpers.py +322 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/period_manager.py +152 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/profound_helpers.py +277 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/query_manager.py +812 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/service.py +1692 -0
- ciris_engine/logic/services/graph/tsdb_consolidation/sql_builders.py +363 -0
- ciris_engine/logic/services/infrastructure/__init__.py +1 -0
- ciris_engine/logic/services/infrastructure/authentication/__init__.py +5 -0
- ciris_engine/logic/services/infrastructure/authentication/service.py +1634 -0
- ciris_engine/logic/services/infrastructure/database_maintenance/__init__.py +15 -0
- ciris_engine/logic/services/infrastructure/database_maintenance/service.py +764 -0
- ciris_engine/logic/services/infrastructure/resource_monitor/__init__.py +7 -0
- ciris_engine/logic/services/infrastructure/resource_monitor/ciris_billing_provider.py +755 -0
- ciris_engine/logic/services/infrastructure/resource_monitor/service.py +409 -0
- ciris_engine/logic/services/infrastructure/resource_monitor/simple_credit_provider.py +129 -0
- ciris_engine/logic/services/lifecycle/__init__.py +3 -0
- ciris_engine/logic/services/lifecycle/initialization/__init__.py +10 -0
- ciris_engine/logic/services/lifecycle/initialization/service.py +312 -0
- ciris_engine/logic/services/lifecycle/scheduler/__init__.py +5 -0
- ciris_engine/logic/services/lifecycle/scheduler/service.py +607 -0
- ciris_engine/logic/services/lifecycle/shutdown/__init__.py +9 -0
- ciris_engine/logic/services/lifecycle/shutdown/service.py +378 -0
- ciris_engine/logic/services/lifecycle/time/__init__.py +15 -0
- ciris_engine/logic/services/lifecycle/time/service.py +259 -0
- ciris_engine/logic/services/memory_service/__init__.py +8 -0
- ciris_engine/logic/services/mixins/__init__.py +13 -0
- ciris_engine/logic/services/mixins/example_usage.py +200 -0
- ciris_engine/logic/services/mixins/request_metrics.py +179 -0
- ciris_engine/logic/services/runtime/__init__.py +3 -0
- ciris_engine/logic/services/runtime/adapter_configuration/__init__.py +16 -0
- ciris_engine/logic/services/runtime/adapter_configuration/service.py +674 -0
- ciris_engine/logic/services/runtime/adapter_configuration/session.py +67 -0
- ciris_engine/logic/services/runtime/control_service/__init__.py +5 -0
- ciris_engine/logic/services/runtime/control_service/service.py +2269 -0
- ciris_engine/logic/services/runtime/llm_service/__init__.py +14 -0
- ciris_engine/logic/services/runtime/llm_service/pricing_calculator.py +279 -0
- ciris_engine/logic/services/runtime/llm_service/service.py +930 -0
- ciris_engine/logic/services/tools/__init__.py +5 -0
- ciris_engine/logic/services/tools/core_tool_service/__init__.py +8 -0
- ciris_engine/logic/services/tools/core_tool_service/service.py +852 -0
- ciris_engine/logic/setup/__init__.py +1 -0
- ciris_engine/logic/setup/first_run.py +250 -0
- ciris_engine/logic/setup/wizard.py +327 -0
- ciris_engine/logic/telemetry/__init__.py +46 -0
- ciris_engine/logic/telemetry/core.py +239 -0
- ciris_engine/logic/telemetry/hot_cold_config.py +133 -0
- ciris_engine/logic/telemetry/log_collector.py +190 -0
- ciris_engine/logic/telemetry/resource_monitor.py +7 -0
- ciris_engine/logic/telemetry/security.py +79 -0
- ciris_engine/logic/utils/__init__.py +18 -0
- ciris_engine/logic/utils/channel_utils.py +75 -0
- ciris_engine/logic/utils/consent/__init__.py +1 -0
- ciris_engine/logic/utils/consent/partnership_utils.py +172 -0
- ciris_engine/logic/utils/constants.py +92 -0
- ciris_engine/logic/utils/context_utils.py +145 -0
- ciris_engine/logic/utils/directory_setup.py +533 -0
- ciris_engine/logic/utils/graphql_context_provider.py +152 -0
- ciris_engine/logic/utils/identity_resolution.py +843 -0
- ciris_engine/logic/utils/incident_capture_handler.py +303 -0
- ciris_engine/logic/utils/initialization_manager.py +74 -0
- ciris_engine/logic/utils/jsondict_helpers.py +290 -0
- ciris_engine/logic/utils/log_sanitizer.py +97 -0
- ciris_engine/logic/utils/logging_config.py +151 -0
- ciris_engine/logic/utils/observability_decorators.py +544 -0
- ciris_engine/logic/utils/occurrence_utils.py +155 -0
- ciris_engine/logic/utils/path_resolution.py +281 -0
- ciris_engine/logic/utils/platform_detection.py +286 -0
- ciris_engine/logic/utils/privacy.py +266 -0
- ciris_engine/logic/utils/profile_loader.py +124 -0
- ciris_engine/logic/utils/profile_manager.py +16 -0
- ciris_engine/logic/utils/runtime_utils.py +69 -0
- ciris_engine/logic/utils/shutdown_manager.py +107 -0
- ciris_engine/logic/utils/task_formatters.py +60 -0
- ciris_engine/logic/utils/task_thought_factory.py +404 -0
- ciris_engine/logic/utils/thought_utils.py +54 -0
- ciris_engine/logic/utils/user_utils.py +70 -0
- ciris_engine/protocols/__init__.py +0 -0
- ciris_engine/protocols/adapters/__init__.py +35 -0
- ciris_engine/protocols/adapters/base.py +149 -0
- ciris_engine/protocols/adapters/configurable.py +265 -0
- ciris_engine/protocols/adapters/message.py +90 -0
- ciris_engine/protocols/audit/__init__.py +1 -0
- ciris_engine/protocols/buses/__init__.py +1 -0
- ciris_engine/protocols/config/__init__.py +1 -0
- ciris_engine/protocols/conscience/__init__.py +1 -0
- ciris_engine/protocols/consent.py +88 -0
- ciris_engine/protocols/context/__init__.py +1 -0
- ciris_engine/protocols/data/__init__.py +1 -0
- ciris_engine/protocols/dma/__init__.py +1 -0
- ciris_engine/protocols/dma/base.py +107 -0
- ciris_engine/protocols/faculties.py +34 -0
- ciris_engine/protocols/formatters/__init__.py +1 -0
- ciris_engine/protocols/handlers/__init__.py +1 -0
- ciris_engine/protocols/infrastructure/__init__.py +25 -0
- ciris_engine/protocols/infrastructure/base.py +377 -0
- ciris_engine/protocols/persistence/__init__.py +1 -0
- ciris_engine/protocols/pipeline_control.py +609 -0
- ciris_engine/protocols/processors/__init__.py +19 -0
- ciris_engine/protocols/processors/agent.py +299 -0
- ciris_engine/protocols/processors/base.py +130 -0
- ciris_engine/protocols/processors/orchestration.py +62 -0
- ciris_engine/protocols/registries/__init__.py +1 -0
- ciris_engine/protocols/runtime/__init__.py +1 -0
- ciris_engine/protocols/runtime/base.py +163 -0
- ciris_engine/protocols/secrets/__init__.py +1 -0
- ciris_engine/protocols/services/__init__.py +80 -0
- ciris_engine/protocols/services/adaptation/__init__.py +7 -0
- ciris_engine/protocols/services/adaptation/self_observation.py +265 -0
- ciris_engine/protocols/services/governance/__init__.py +20 -0
- ciris_engine/protocols/services/governance/communication.py +58 -0
- ciris_engine/protocols/services/governance/filter.py +56 -0
- ciris_engine/protocols/services/governance/visibility.py +32 -0
- ciris_engine/protocols/services/governance/wa_auth.py +192 -0
- ciris_engine/protocols/services/governance/wise_authority.py +75 -0
- ciris_engine/protocols/services/graph/__init__.py +19 -0
- ciris_engine/protocols/services/graph/audit.py +92 -0
- ciris_engine/protocols/services/graph/config.py +54 -0
- ciris_engine/protocols/services/graph/incident_management.py +103 -0
- ciris_engine/protocols/services/graph/memory.py +110 -0
- ciris_engine/protocols/services/graph/telemetry.py +51 -0
- ciris_engine/protocols/services/graph/tsdb_consolidation.py +87 -0
- ciris_engine/protocols/services/infrastructure/__init__.py +11 -0
- ciris_engine/protocols/services/infrastructure/authentication.py +159 -0
- ciris_engine/protocols/services/infrastructure/credit_gate.py +46 -0
- ciris_engine/protocols/services/infrastructure/database_maintenance.py +25 -0
- ciris_engine/protocols/services/infrastructure/resource_monitor.py +83 -0
- ciris_engine/protocols/services/lifecycle/__init__.py +13 -0
- ciris_engine/protocols/services/lifecycle/initialization.py +41 -0
- ciris_engine/protocols/services/lifecycle/scheduler.py +42 -0
- ciris_engine/protocols/services/lifecycle/shutdown.py +50 -0
- ciris_engine/protocols/services/lifecycle/time.py +31 -0
- ciris_engine/protocols/services/runtime/__init__.py +13 -0
- ciris_engine/protocols/services/runtime/llm.py +50 -0
- ciris_engine/protocols/services/runtime/runtime_control.py +193 -0
- ciris_engine/protocols/services/runtime/secrets.py +100 -0
- ciris_engine/protocols/services/runtime/tool.py +123 -0
- ciris_engine/protocols/telemetry/__init__.py +1 -0
- ciris_engine/protocols/utils/__init__.py +1 -0
- ciris_engine/schemas/__init__.py +112 -0
- ciris_engine/schemas/actions/__init__.py +37 -0
- ciris_engine/schemas/actions/parameters.py +137 -0
- ciris_engine/schemas/adapters/__init__.py +13 -0
- ciris_engine/schemas/adapters/cirisnode.py +135 -0
- ciris_engine/schemas/adapters/cli.py +97 -0
- ciris_engine/schemas/adapters/cli_tools.py +98 -0
- ciris_engine/schemas/adapters/discord.py +125 -0
- ciris_engine/schemas/adapters/graphql_core.py +144 -0
- ciris_engine/schemas/adapters/registration.py +47 -0
- ciris_engine/schemas/adapters/runtime_context.py +48 -0
- ciris_engine/schemas/adapters/tool_execution.py +45 -0
- ciris_engine/schemas/adapters/tools.py +96 -0
- ciris_engine/schemas/api/__init__.py +1 -0
- ciris_engine/schemas/api/agent.py +50 -0
- ciris_engine/schemas/api/audit.py +38 -0
- ciris_engine/schemas/api/auth.py +351 -0
- ciris_engine/schemas/api/config_security.py +242 -0
- ciris_engine/schemas/api/emergency.py +111 -0
- ciris_engine/schemas/api/responses.py +72 -0
- ciris_engine/schemas/api/runtime.py +26 -0
- ciris_engine/schemas/api/telemetry.py +109 -0
- ciris_engine/schemas/api/wa.py +90 -0
- ciris_engine/schemas/audit/__init__.py +13 -0
- ciris_engine/schemas/audit/core.py +139 -0
- ciris_engine/schemas/audit/hash_chain.py +58 -0
- ciris_engine/schemas/audit/verification.py +131 -0
- ciris_engine/schemas/buses/__init__.py +1 -0
- ciris_engine/schemas/config/__init__.py +41 -0
- ciris_engine/schemas/config/agent.py +279 -0
- ciris_engine/schemas/config/cognitive_state_behaviors.py +194 -0
- ciris_engine/schemas/config/default_dsar_sops.py +178 -0
- ciris_engine/schemas/config/essential.py +195 -0
- ciris_engine/schemas/config/tickets.py +86 -0
- ciris_engine/schemas/conscience/__init__.py +25 -0
- ciris_engine/schemas/conscience/context.py +34 -0
- ciris_engine/schemas/conscience/core.py +145 -0
- ciris_engine/schemas/conscience/results.py +24 -0
- ciris_engine/schemas/consent/__init__.py +5 -0
- ciris_engine/schemas/consent/core.py +404 -0
- ciris_engine/schemas/context/__init__.py +1 -0
- ciris_engine/schemas/covenant.py +382 -0
- ciris_engine/schemas/data/__init__.py +1 -0
- ciris_engine/schemas/dma/__init__.py +16 -0
- ciris_engine/schemas/dma/core.py +199 -0
- ciris_engine/schemas/dma/faculty.py +192 -0
- ciris_engine/schemas/dma/prompts.py +172 -0
- ciris_engine/schemas/dma/results.py +103 -0
- ciris_engine/schemas/formatters/__init__.py +1 -0
- ciris_engine/schemas/handlers/__init__.py +10 -0
- ciris_engine/schemas/handlers/context.py +119 -0
- ciris_engine/schemas/handlers/contexts.py +100 -0
- ciris_engine/schemas/handlers/core.py +167 -0
- ciris_engine/schemas/handlers/memory_schemas.py +67 -0
- ciris_engine/schemas/handlers/schemas.py +95 -0
- ciris_engine/schemas/identity.py +149 -0
- ciris_engine/schemas/infrastructure/__init__.py +1 -0
- ciris_engine/schemas/infrastructure/base.py +256 -0
- ciris_engine/schemas/infrastructure/behavioral_patterns.py +129 -0
- ciris_engine/schemas/infrastructure/feedback_loop.py +57 -0
- ciris_engine/schemas/infrastructure/identity_variance.py +141 -0
- ciris_engine/schemas/infrastructure/oauth.py +175 -0
- ciris_engine/schemas/infrastructure/wa_cli_wizard.py +54 -0
- ciris_engine/schemas/persistence/__init__.py +34 -0
- ciris_engine/schemas/persistence/core.py +140 -0
- ciris_engine/schemas/persistence/correlations.py +73 -0
- ciris_engine/schemas/persistence/postgres/__init__.py +1 -0
- ciris_engine/schemas/persistence/postgres/tables.py +280 -0
- ciris_engine/schemas/persistence/sqlite/__init__.py +1 -0
- ciris_engine/schemas/persistence/sqlite/tables.py +281 -0
- ciris_engine/schemas/platform.py +149 -0
- ciris_engine/schemas/processors/__init__.py +26 -0
- ciris_engine/schemas/processors/base.py +130 -0
- ciris_engine/schemas/processors/cognitive.py +77 -0
- ciris_engine/schemas/processors/context.py +35 -0
- ciris_engine/schemas/processors/core.py +152 -0
- ciris_engine/schemas/processors/dma.py +105 -0
- ciris_engine/schemas/processors/error.py +122 -0
- ciris_engine/schemas/processors/main.py +109 -0
- ciris_engine/schemas/processors/phase_results.py +21 -0
- ciris_engine/schemas/processors/results.py +99 -0
- ciris_engine/schemas/processors/solitude.py +79 -0
- ciris_engine/schemas/processors/state.py +202 -0
- ciris_engine/schemas/processors/state_example.py +177 -0
- ciris_engine/schemas/processors/states.py +21 -0
- ciris_engine/schemas/processors/status.py +34 -0
- ciris_engine/schemas/registries/__init__.py +1 -0
- ciris_engine/schemas/registries/base.py +66 -0
- ciris_engine/schemas/resources/__init__.py +15 -0
- ciris_engine/schemas/resources/crisis.py +315 -0
- ciris_engine/schemas/runtime/__init__.py +42 -0
- ciris_engine/schemas/runtime/adapter_management.py +186 -0
- ciris_engine/schemas/runtime/api.py +58 -0
- ciris_engine/schemas/runtime/audit.py +50 -0
- ciris_engine/schemas/runtime/bootstrap.py +33 -0
- ciris_engine/schemas/runtime/contexts.py +61 -0
- ciris_engine/schemas/runtime/core.py +161 -0
- ciris_engine/schemas/runtime/enums.py +167 -0
- ciris_engine/schemas/runtime/extended.py +232 -0
- ciris_engine/schemas/runtime/manifest.py +311 -0
- ciris_engine/schemas/runtime/memory.py +60 -0
- ciris_engine/schemas/runtime/messages.py +108 -0
- ciris_engine/schemas/runtime/models.py +156 -0
- ciris_engine/schemas/runtime/processing_context.py +43 -0
- ciris_engine/schemas/runtime/protocols_core.py +96 -0
- ciris_engine/schemas/runtime/resources.py +33 -0
- ciris_engine/schemas/runtime/system_context.py +417 -0
- ciris_engine/schemas/secrets/__init__.py +1 -0
- ciris_engine/schemas/secrets/core.py +267 -0
- ciris_engine/schemas/secrets/service.py +95 -0
- ciris_engine/schemas/services/__init__.py +33 -0
- ciris_engine/schemas/services/audit_summary_node.py +172 -0
- ciris_engine/schemas/services/authority/__init__.py +39 -0
- ciris_engine/schemas/services/authority/jwt.py +158 -0
- ciris_engine/schemas/services/authority/wa_updates.py +138 -0
- ciris_engine/schemas/services/authority/wise_authority.py +163 -0
- ciris_engine/schemas/services/authority_core.py +370 -0
- ciris_engine/schemas/services/capabilities.py +72 -0
- ciris_engine/schemas/services/community_core.py +95 -0
- ciris_engine/schemas/services/context.py +111 -0
- ciris_engine/schemas/services/conversation_summary_node.py +189 -0
- ciris_engine/schemas/services/core/__init__.py +153 -0
- ciris_engine/schemas/services/core/runtime.py +262 -0
- ciris_engine/schemas/services/core/runtime_config.py +117 -0
- ciris_engine/schemas/services/core/secrets.py +65 -0
- ciris_engine/schemas/services/correlation_node.py +179 -0
- ciris_engine/schemas/services/credit_gate.py +92 -0
- ciris_engine/schemas/services/discord_nodes.py +299 -0
- ciris_engine/schemas/services/feedback_core.py +131 -0
- ciris_engine/schemas/services/filters_core.py +270 -0
- ciris_engine/schemas/services/governance.py +26 -0
- ciris_engine/schemas/services/graph/__init__.py +26 -0
- ciris_engine/schemas/services/graph/attributes.py +254 -0
- ciris_engine/schemas/services/graph/audit.py +98 -0
- ciris_engine/schemas/services/graph/consolidation.py +338 -0
- ciris_engine/schemas/services/graph/edge_types.py +43 -0
- ciris_engine/schemas/services/graph/edges.py +88 -0
- ciris_engine/schemas/services/graph/incident.py +312 -0
- ciris_engine/schemas/services/graph/memory.py +84 -0
- ciris_engine/schemas/services/graph/node_data.py +174 -0
- ciris_engine/schemas/services/graph/query_results.py +82 -0
- ciris_engine/schemas/services/graph/telemetry.py +250 -0
- ciris_engine/schemas/services/graph/tsdb_consolidation.py +27 -0
- ciris_engine/schemas/services/graph/tsdb_models.py +107 -0
- ciris_engine/schemas/services/graph_core.py +196 -0
- ciris_engine/schemas/services/graph_typed_nodes.py +194 -0
- ciris_engine/schemas/services/infrastructure/__init__.py +1 -0
- ciris_engine/schemas/services/infrastructure/resource_monitor.py +20 -0
- ciris_engine/schemas/services/lifecycle/__init__.py +9 -0
- ciris_engine/schemas/services/lifecycle/initialization.py +33 -0
- ciris_engine/schemas/services/lifecycle/time.py +50 -0
- ciris_engine/schemas/services/llm.py +187 -0
- ciris_engine/schemas/services/metadata.py +43 -0
- ciris_engine/schemas/services/nodes.py +704 -0
- ciris_engine/schemas/services/operations.py +126 -0
- ciris_engine/schemas/services/requests.py +128 -0
- ciris_engine/schemas/services/resources_core.py +182 -0
- ciris_engine/schemas/services/runtime_control.py +1010 -0
- ciris_engine/schemas/services/shutdown.py +88 -0
- ciris_engine/schemas/services/special/__init__.py +0 -0
- ciris_engine/schemas/services/special/self_observation.py +396 -0
- ciris_engine/schemas/services/trace_summary_node.py +199 -0
- ciris_engine/schemas/services/visibility.py +98 -0
- ciris_engine/schemas/streaming/__init__.py +10 -0
- ciris_engine/schemas/streaming/reasoning_stream.py +95 -0
- ciris_engine/schemas/telemetry/__init__.py +0 -0
- ciris_engine/schemas/telemetry/collector.py +67 -0
- ciris_engine/schemas/telemetry/core.py +252 -0
- ciris_engine/schemas/telemetry/unified.py +59 -0
- ciris_engine/schemas/tools.py +72 -0
- ciris_engine/schemas/types.py +47 -0
- ciris_engine/schemas/utils/__init__.py +1 -0
- ciris_engine/schemas/utils/config_validator.py +54 -0
- ciris_engine/utils/__init__.py +1 -0
- ciris_engine/utils/serialization.py +35 -0
- ciris_sdk/__init__.py +124 -0
- ciris_sdk/auth_store.py +261 -0
- ciris_sdk/client.py +261 -0
- ciris_sdk/exceptions.py +73 -0
- ciris_sdk/model_types.py +258 -0
- ciris_sdk/models.py +354 -0
- ciris_sdk/pagination.py +214 -0
- ciris_sdk/rate_limiter.py +188 -0
- ciris_sdk/setup.py +17 -0
- ciris_sdk/telemetry_models.py +257 -0
- ciris_sdk/telemetry_responses.py +199 -0
- ciris_sdk/transport.py +177 -0
- ciris_sdk/websocket.py +400 -0
- main.py +766 -0
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pydantic models for LLM model capabilities configuration.
|
|
3
|
+
|
|
4
|
+
This module provides type-safe models for loading and validating
|
|
5
|
+
LLM model capabilities data from the on-device configuration file.
|
|
6
|
+
Used by the wizard for BYOK model selection.
|
|
7
|
+
|
|
8
|
+
BYOK Wizard Integration Pattern
|
|
9
|
+
===============================
|
|
10
|
+
|
|
11
|
+
When user selects "Bring Your Own Key" (BYOK) in the setup wizard:
|
|
12
|
+
|
|
13
|
+
1. User selects provider (OpenAI, Anthropic, etc.)
|
|
14
|
+
2. Wizard loads models for that provider:
|
|
15
|
+
|
|
16
|
+
```python
|
|
17
|
+
from ciris_engine.config import get_model_capabilities
|
|
18
|
+
|
|
19
|
+
config = get_model_capabilities()
|
|
20
|
+
provider_models = config.get_compatible_models(provider_name="openai")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
3. Display models grouped by compatibility:
|
|
24
|
+
- RECOMMENDED: ciris_recommended=True (green checkmark)
|
|
25
|
+
- COMPATIBLE: ciris_compatible=True (yellow checkmark)
|
|
26
|
+
- ADVANCED OVERRIDE: ciris_compatible=False (warning icon)
|
|
27
|
+
|
|
28
|
+
4. For each model, show:
|
|
29
|
+
- display_name
|
|
30
|
+
- capabilities (vision, tool_use icons)
|
|
31
|
+
- tier (default/fast/premium)
|
|
32
|
+
- notes (if any)
|
|
33
|
+
|
|
34
|
+
5. If user selects incompatible model (Advanced override):
|
|
35
|
+
```python
|
|
36
|
+
is_compat, issues = config.check_model_compatibility(provider, model_id)
|
|
37
|
+
# Show issues as warnings, allow override
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
6. Vision-capable model filtering:
|
|
41
|
+
```python
|
|
42
|
+
vision_models = config.get_models_with_vision(provider_name="openai")
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
All data is on-device in MODEL_CAPABILITIES.json - no external API calls.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
import json
|
|
49
|
+
from datetime import datetime
|
|
50
|
+
from pathlib import Path
|
|
51
|
+
from typing import Dict, List, Optional, Tuple
|
|
52
|
+
|
|
53
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class ModelCapabilities(BaseModel):
|
|
57
|
+
"""Capabilities flags for an LLM model."""
|
|
58
|
+
|
|
59
|
+
tool_use: bool = Field(..., description="Native function/tool calling support")
|
|
60
|
+
structured_output: bool = Field(..., description="Reliable JSON output for tool calls")
|
|
61
|
+
vision: bool = Field(default=False, description="Image/multimodal input support")
|
|
62
|
+
json_mode: bool = Field(default=False, description="JSON mode for structured responses")
|
|
63
|
+
streaming: bool = Field(default=True, description="Streaming response support")
|
|
64
|
+
|
|
65
|
+
model_config = ConfigDict(extra="forbid")
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class ModelInfo(BaseModel):
|
|
69
|
+
"""Information about a specific LLM model."""
|
|
70
|
+
|
|
71
|
+
display_name: str = Field(..., description="Human-readable model name")
|
|
72
|
+
architecture: Optional[str] = Field(default=None, description="Model architecture (dense, moe, etc)")
|
|
73
|
+
active_params: Optional[str] = Field(default=None, description="Active parameters per token")
|
|
74
|
+
context_window: int = Field(..., gt=0, description="Maximum context window in tokens")
|
|
75
|
+
capabilities: ModelCapabilities = Field(..., description="Model capabilities")
|
|
76
|
+
underlying_providers: Optional[List[str]] = Field(default=None, description="For aggregators: underlying providers")
|
|
77
|
+
tier: str = Field(..., description="Performance tier (default, fast, fallback, premium, legacy)")
|
|
78
|
+
ciris_compatible: bool = Field(..., description="Meets CIRIS minimum requirements")
|
|
79
|
+
ciris_recommended: bool = Field(default=False, description="Recommended for CIRIS use")
|
|
80
|
+
rejection_reason: Optional[str] = Field(default=None, description="Why model is not compatible")
|
|
81
|
+
notes: Optional[str] = Field(default=None, description="Additional notes")
|
|
82
|
+
|
|
83
|
+
model_config = ConfigDict(extra="forbid")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
class ProviderModels(BaseModel):
|
|
87
|
+
"""Models available from a specific provider."""
|
|
88
|
+
|
|
89
|
+
display_name: str = Field(..., description="Human-readable provider name")
|
|
90
|
+
api_base: Optional[str] = Field(default=None, description="Provider API base URL")
|
|
91
|
+
note: Optional[str] = Field(default=None, description="Provider notes")
|
|
92
|
+
models: Dict[str, ModelInfo] = Field(..., description="Available models")
|
|
93
|
+
|
|
94
|
+
model_config = ConfigDict(extra="forbid")
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
class RejectedModel(BaseModel):
|
|
98
|
+
"""Model that was tested and rejected."""
|
|
99
|
+
|
|
100
|
+
display_name: str = Field(..., description="Human-readable model name")
|
|
101
|
+
rejection_reason: str = Field(..., description="Why the model was rejected")
|
|
102
|
+
tested_date: Optional[str] = Field(default=None, description="When the model was tested")
|
|
103
|
+
|
|
104
|
+
model_config = ConfigDict(extra="forbid")
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class TierInfo(BaseModel):
|
|
108
|
+
"""Information about a performance tier."""
|
|
109
|
+
|
|
110
|
+
description: str = Field(..., description="Tier description")
|
|
111
|
+
typical_latency_ms: Optional[str] = Field(default=None, description="Typical latency range")
|
|
112
|
+
use_case: str = Field(..., description="Recommended use case")
|
|
113
|
+
|
|
114
|
+
model_config = ConfigDict(extra="forbid")
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class CirisRequirements(BaseModel):
|
|
118
|
+
"""CIRIS agent requirements for model compatibility."""
|
|
119
|
+
|
|
120
|
+
min_context_window: int = Field(..., gt=0, description="Minimum context window (tokens)")
|
|
121
|
+
preferred_context_window: int = Field(..., gt=0, description="Preferred context window (tokens)")
|
|
122
|
+
max_combined_cost_per_million_cents: float = Field(
|
|
123
|
+
..., ge=0, description="Max combined cost per million tokens (cents)"
|
|
124
|
+
)
|
|
125
|
+
min_provider_count: int = Field(..., ge=1, description="Minimum number of providers for fallback")
|
|
126
|
+
required_capabilities: List[str] = Field(..., description="Required capability flags")
|
|
127
|
+
recommended_capabilities: List[str] = Field(default_factory=list, description="Recommended capabilities")
|
|
128
|
+
|
|
129
|
+
model_config = ConfigDict(extra="forbid")
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
class CapabilitiesMetadata(BaseModel):
|
|
133
|
+
"""Metadata about the capabilities configuration."""
|
|
134
|
+
|
|
135
|
+
schema_version: str = Field(..., description="Schema version for compatibility")
|
|
136
|
+
ciris_requirements_version: str = Field(..., description="CIRIS requirements version")
|
|
137
|
+
update_frequency: str = Field(..., description="How often data is updated")
|
|
138
|
+
sources: List[str] = Field(..., description="Data sources")
|
|
139
|
+
|
|
140
|
+
model_config = ConfigDict(extra="forbid")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class ModelCapabilitiesConfig(BaseModel):
|
|
144
|
+
"""Complete LLM model capabilities configuration."""
|
|
145
|
+
|
|
146
|
+
version: str = Field(..., description="Configuration version")
|
|
147
|
+
last_updated: datetime = Field(..., description="Last update timestamp")
|
|
148
|
+
metadata: CapabilitiesMetadata = Field(..., description="Configuration metadata")
|
|
149
|
+
ciris_requirements: CirisRequirements = Field(..., description="CIRIS compatibility requirements")
|
|
150
|
+
providers: Dict[str, ProviderModels] = Field(..., description="Provider configurations")
|
|
151
|
+
rejected_models: Dict[str, RejectedModel] = Field(default_factory=dict, description="Models tested and rejected")
|
|
152
|
+
tiers: Dict[str, TierInfo] = Field(..., description="Performance tier definitions")
|
|
153
|
+
|
|
154
|
+
model_config = ConfigDict(extra="forbid")
|
|
155
|
+
|
|
156
|
+
@field_validator("version")
|
|
157
|
+
@classmethod
|
|
158
|
+
def validate_semver(cls, v: str) -> str:
|
|
159
|
+
"""Validate semantic versioning format."""
|
|
160
|
+
parts = v.split(".")
|
|
161
|
+
if len(parts) != 3 or not all(p.isdigit() for p in parts):
|
|
162
|
+
raise ValueError("Version must be in semantic versioning format (x.y.z)")
|
|
163
|
+
return v
|
|
164
|
+
|
|
165
|
+
@classmethod
|
|
166
|
+
def load_from_file(cls, path: Optional[str] = None) -> "ModelCapabilitiesConfig":
|
|
167
|
+
"""
|
|
168
|
+
Load capabilities configuration from JSON file.
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
path: Optional path to capabilities file. If None, uses default location.
|
|
172
|
+
|
|
173
|
+
Returns:
|
|
174
|
+
ModelCapabilitiesConfig instance
|
|
175
|
+
|
|
176
|
+
Raises:
|
|
177
|
+
FileNotFoundError: If capabilities file doesn't exist
|
|
178
|
+
ValueError: If JSON is invalid or doesn't match schema
|
|
179
|
+
"""
|
|
180
|
+
path_str: str
|
|
181
|
+
if path is None:
|
|
182
|
+
config_dir = Path(__file__).parent
|
|
183
|
+
path_str = str(config_dir / "MODEL_CAPABILITIES.json")
|
|
184
|
+
else:
|
|
185
|
+
path_str = path
|
|
186
|
+
|
|
187
|
+
path_obj = Path(path_str)
|
|
188
|
+
if not path_obj.exists():
|
|
189
|
+
raise FileNotFoundError(f"Model capabilities file not found: {path_obj}")
|
|
190
|
+
|
|
191
|
+
try:
|
|
192
|
+
with open(path_obj, "r", encoding="utf-8") as f:
|
|
193
|
+
data = json.load(f)
|
|
194
|
+
return cls(**data)
|
|
195
|
+
except json.JSONDecodeError as e:
|
|
196
|
+
raise ValueError(f"Invalid JSON in capabilities configuration: {e}")
|
|
197
|
+
except Exception as e:
|
|
198
|
+
raise ValueError(f"Failed to load capabilities configuration: {e}")
|
|
199
|
+
|
|
200
|
+
def get_provider_models(self, provider_name: str) -> Optional[Dict[str, ModelInfo]]:
|
|
201
|
+
"""
|
|
202
|
+
Get all models for a specific provider.
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
provider_name: Name of the provider (e.g., 'openai', 'openrouter')
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
Dict of model_id -> ModelInfo if provider found, None otherwise
|
|
209
|
+
"""
|
|
210
|
+
provider = self.providers.get(provider_name)
|
|
211
|
+
if not provider:
|
|
212
|
+
return None
|
|
213
|
+
return provider.models
|
|
214
|
+
|
|
215
|
+
def get_model(self, provider_name: str, model_id: str) -> Optional[ModelInfo]:
|
|
216
|
+
"""
|
|
217
|
+
Get a specific model by provider and model ID.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
provider_name: Name of the provider
|
|
221
|
+
model_id: Model identifier
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
ModelInfo if found, None otherwise
|
|
225
|
+
"""
|
|
226
|
+
provider = self.providers.get(provider_name)
|
|
227
|
+
if not provider:
|
|
228
|
+
return None
|
|
229
|
+
return provider.models.get(model_id)
|
|
230
|
+
|
|
231
|
+
def get_compatible_models(self, provider_name: Optional[str] = None) -> List[Tuple[str, str, ModelInfo]]:
|
|
232
|
+
"""
|
|
233
|
+
Get all CIRIS-compatible models.
|
|
234
|
+
|
|
235
|
+
Args:
|
|
236
|
+
provider_name: Optional provider to filter by
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
List of (provider_name, model_id, ModelInfo) tuples
|
|
240
|
+
"""
|
|
241
|
+
models = []
|
|
242
|
+
providers = (
|
|
243
|
+
{provider_name: self.providers[provider_name]}
|
|
244
|
+
if provider_name and provider_name in self.providers
|
|
245
|
+
else self.providers
|
|
246
|
+
)
|
|
247
|
+
|
|
248
|
+
for prov_name, provider in providers.items():
|
|
249
|
+
for model_id, model_info in provider.models.items():
|
|
250
|
+
if model_info.ciris_compatible:
|
|
251
|
+
models.append((prov_name, model_id, model_info))
|
|
252
|
+
|
|
253
|
+
return models
|
|
254
|
+
|
|
255
|
+
def get_recommended_models(self, provider_name: Optional[str] = None) -> List[Tuple[str, str, ModelInfo]]:
|
|
256
|
+
"""
|
|
257
|
+
Get CIRIS-recommended models.
|
|
258
|
+
|
|
259
|
+
Args:
|
|
260
|
+
provider_name: Optional provider to filter by
|
|
261
|
+
|
|
262
|
+
Returns:
|
|
263
|
+
List of (provider_name, model_id, ModelInfo) tuples
|
|
264
|
+
"""
|
|
265
|
+
return [
|
|
266
|
+
(prov, model_id, info)
|
|
267
|
+
for prov, model_id, info in self.get_compatible_models(provider_name)
|
|
268
|
+
if info.ciris_recommended
|
|
269
|
+
]
|
|
270
|
+
|
|
271
|
+
def get_models_by_tier(self, tier: str, provider_name: Optional[str] = None) -> List[Tuple[str, str, ModelInfo]]:
|
|
272
|
+
"""
|
|
273
|
+
Get models by performance tier.
|
|
274
|
+
|
|
275
|
+
Args:
|
|
276
|
+
tier: Tier name (default, fast, fallback, premium, legacy)
|
|
277
|
+
provider_name: Optional provider to filter by
|
|
278
|
+
|
|
279
|
+
Returns:
|
|
280
|
+
List of (provider_name, model_id, ModelInfo) tuples
|
|
281
|
+
"""
|
|
282
|
+
return [
|
|
283
|
+
(prov, model_id, info)
|
|
284
|
+
for prov, model_id, info in self.get_compatible_models(provider_name)
|
|
285
|
+
if info.tier == tier
|
|
286
|
+
]
|
|
287
|
+
|
|
288
|
+
def get_models_with_vision(self, provider_name: Optional[str] = None) -> List[Tuple[str, str, ModelInfo]]:
|
|
289
|
+
"""
|
|
290
|
+
Get models with vision/multimodal support.
|
|
291
|
+
|
|
292
|
+
Args:
|
|
293
|
+
provider_name: Optional provider to filter by
|
|
294
|
+
|
|
295
|
+
Returns:
|
|
296
|
+
List of (provider_name, model_id, ModelInfo) tuples
|
|
297
|
+
"""
|
|
298
|
+
return [
|
|
299
|
+
(prov, model_id, info)
|
|
300
|
+
for prov, model_id, info in self.get_compatible_models(provider_name)
|
|
301
|
+
if info.capabilities.vision
|
|
302
|
+
]
|
|
303
|
+
|
|
304
|
+
def check_model_compatibility(self, provider_name: str, model_id: str) -> Tuple[bool, List[str]]:
|
|
305
|
+
"""
|
|
306
|
+
Check if a model meets CIRIS requirements.
|
|
307
|
+
|
|
308
|
+
Args:
|
|
309
|
+
provider_name: Provider name
|
|
310
|
+
model_id: Model identifier
|
|
311
|
+
|
|
312
|
+
Returns:
|
|
313
|
+
Tuple of (is_compatible, list of issues)
|
|
314
|
+
"""
|
|
315
|
+
model = self.get_model(provider_name, model_id)
|
|
316
|
+
if not model:
|
|
317
|
+
return False, [f"Model not found: {provider_name}/{model_id}"]
|
|
318
|
+
|
|
319
|
+
issues = []
|
|
320
|
+
reqs = self.ciris_requirements
|
|
321
|
+
|
|
322
|
+
# Check context window
|
|
323
|
+
if model.context_window < reqs.min_context_window:
|
|
324
|
+
issues.append(f"Context window {model.context_window} < minimum {reqs.min_context_window}")
|
|
325
|
+
|
|
326
|
+
# Check required capabilities
|
|
327
|
+
for cap in reqs.required_capabilities:
|
|
328
|
+
if not getattr(model.capabilities, cap, False):
|
|
329
|
+
issues.append(f"Missing required capability: {cap}")
|
|
330
|
+
|
|
331
|
+
# Note recommended capabilities (not blocking)
|
|
332
|
+
missing_recommended = []
|
|
333
|
+
for cap in reqs.recommended_capabilities:
|
|
334
|
+
if not getattr(model.capabilities, cap, False):
|
|
335
|
+
missing_recommended.append(cap)
|
|
336
|
+
if missing_recommended:
|
|
337
|
+
issues.append(f"Missing recommended (non-blocking): {', '.join(missing_recommended)}")
|
|
338
|
+
|
|
339
|
+
# Check if model has rejection reason
|
|
340
|
+
if model.rejection_reason:
|
|
341
|
+
issues.append(f"Previously rejected: {model.rejection_reason}")
|
|
342
|
+
|
|
343
|
+
is_compatible = len([i for i in issues if "non-blocking" not in i]) == 0
|
|
344
|
+
return is_compatible, issues
|
|
345
|
+
|
|
346
|
+
def list_providers(self) -> List[Tuple[str, str]]:
|
|
347
|
+
"""
|
|
348
|
+
List all available providers.
|
|
349
|
+
|
|
350
|
+
Returns:
|
|
351
|
+
List of (provider_id, display_name) tuples
|
|
352
|
+
"""
|
|
353
|
+
return [(pid, prov.display_name) for pid, prov in self.providers.items()]
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
# Global configuration instance
|
|
357
|
+
_capabilities_config: Optional[ModelCapabilitiesConfig] = None
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
def get_model_capabilities(reload: bool = False) -> ModelCapabilitiesConfig:
|
|
361
|
+
"""
|
|
362
|
+
Get the global model capabilities configuration instance.
|
|
363
|
+
|
|
364
|
+
Args:
|
|
365
|
+
reload: If True, reload configuration from file
|
|
366
|
+
|
|
367
|
+
Returns:
|
|
368
|
+
ModelCapabilitiesConfig instance
|
|
369
|
+
"""
|
|
370
|
+
global _capabilities_config
|
|
371
|
+
|
|
372
|
+
if _capabilities_config is None or reload:
|
|
373
|
+
_capabilities_config = ModelCapabilitiesConfig.load_from_file()
|
|
374
|
+
|
|
375
|
+
return _capabilities_config
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
__all__ = [
|
|
379
|
+
"ModelCapabilities",
|
|
380
|
+
"ModelInfo",
|
|
381
|
+
"ProviderModels",
|
|
382
|
+
"CirisRequirements",
|
|
383
|
+
"ModelCapabilitiesConfig",
|
|
384
|
+
"get_model_capabilities",
|
|
385
|
+
"TierInfo",
|
|
386
|
+
"RejectedModel",
|
|
387
|
+
"CapabilitiesMetadata",
|
|
388
|
+
]
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Pydantic models for LLM pricing configuration.
|
|
3
|
+
|
|
4
|
+
This module provides type-safe models for loading and validating
|
|
5
|
+
LLM provider pricing data from external configuration files.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import json
|
|
9
|
+
import os
|
|
10
|
+
from datetime import datetime
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
from typing import Dict, List, Optional
|
|
13
|
+
|
|
14
|
+
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ModelConfig(BaseModel):
|
|
18
|
+
"""Configuration for a specific LLM model."""
|
|
19
|
+
|
|
20
|
+
input_cost: float = Field(..., ge=0.0, description="Input cost in cents per million tokens")
|
|
21
|
+
output_cost: float = Field(..., ge=0.0, description="Output cost in cents per million tokens")
|
|
22
|
+
context_window: int = Field(..., gt=0, description="Maximum context window in tokens")
|
|
23
|
+
active: bool = Field(..., description="Whether this model is currently active")
|
|
24
|
+
deprecated: bool = Field(default=False, description="Whether this model is deprecated")
|
|
25
|
+
effective_date: str = Field(..., description="Date when pricing became effective (YYYY-MM-DD)")
|
|
26
|
+
description: Optional[str] = Field(None, description="Human-readable model description")
|
|
27
|
+
provider_specific: Optional[Dict[str, str]] = Field(default=None, description="Provider-specific metadata")
|
|
28
|
+
|
|
29
|
+
@field_validator("effective_date")
|
|
30
|
+
@classmethod
|
|
31
|
+
def validate_date_format(cls, v: str) -> str:
|
|
32
|
+
"""Validate date format is YYYY-MM-DD."""
|
|
33
|
+
try:
|
|
34
|
+
datetime.strptime(v, "%Y-%m-%d")
|
|
35
|
+
return v
|
|
36
|
+
except ValueError:
|
|
37
|
+
raise ValueError("Date must be in YYYY-MM-DD format")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class RateLimits(BaseModel):
|
|
41
|
+
"""Rate limiting configuration."""
|
|
42
|
+
|
|
43
|
+
rpm: int = Field(..., gt=0, description="Requests per minute")
|
|
44
|
+
tpm: int = Field(..., gt=0, description="Tokens per minute")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class ProviderConfig(BaseModel):
|
|
48
|
+
"""Configuration for an LLM provider."""
|
|
49
|
+
|
|
50
|
+
display_name: str = Field(..., description="Human-readable provider name")
|
|
51
|
+
models: Dict[str, ModelConfig] = Field(..., description="Available models")
|
|
52
|
+
rate_limits: Optional[Dict[str, RateLimits]] = Field(default=None, description="Rate limiting tiers")
|
|
53
|
+
base_url: Optional[str] = Field(None, description="Provider's base API URL")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class EnergyEstimates(BaseModel):
|
|
57
|
+
"""Energy consumption estimates for models."""
|
|
58
|
+
|
|
59
|
+
model_patterns: Dict[str, Dict[str, float]] = Field(..., description="Energy consumption by model pattern")
|
|
60
|
+
|
|
61
|
+
model_config = ConfigDict(protected_namespaces=())
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class CarbonIntensity(BaseModel):
|
|
65
|
+
"""Carbon intensity data by region."""
|
|
66
|
+
|
|
67
|
+
global_average_g_co2_per_kwh: float = Field(..., ge=0.0, description="Global average CO2 grams per kWh")
|
|
68
|
+
regions: Dict[str, float] = Field(..., description="CO2 grams per kWh by region")
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class EnvironmentalFactors(BaseModel):
|
|
72
|
+
"""Environmental impact calculation factors."""
|
|
73
|
+
|
|
74
|
+
energy_estimates: EnergyEstimates
|
|
75
|
+
carbon_intensity: CarbonIntensity
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class FallbackPricing(BaseModel):
|
|
79
|
+
"""Fallback pricing for unknown models."""
|
|
80
|
+
|
|
81
|
+
unknown_model: ModelConfig = Field(..., description="Default pricing for unknown models")
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class PricingMetadata(BaseModel):
|
|
85
|
+
"""Metadata about the pricing configuration."""
|
|
86
|
+
|
|
87
|
+
update_frequency: str = Field(..., description="How often pricing is updated")
|
|
88
|
+
currency: str = Field(..., description="Currency for all pricing")
|
|
89
|
+
units: str = Field(..., description="Units for pricing (e.g., per_million_tokens)")
|
|
90
|
+
sources: List[str] = Field(..., description="Data sources for pricing")
|
|
91
|
+
schema_version: str = Field(..., description="Schema version for compatibility")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class PricingConfig(BaseModel):
|
|
95
|
+
"""Complete LLM pricing configuration."""
|
|
96
|
+
|
|
97
|
+
version: str = Field(..., description="Configuration version")
|
|
98
|
+
last_updated: datetime = Field(..., description="Last update timestamp")
|
|
99
|
+
metadata: PricingMetadata = Field(..., description="Configuration metadata")
|
|
100
|
+
providers: Dict[str, ProviderConfig] = Field(..., description="Provider configurations")
|
|
101
|
+
environmental_factors: EnvironmentalFactors = Field(..., description="Environmental impact factors")
|
|
102
|
+
fallback_pricing: FallbackPricing = Field(..., description="Fallback pricing for unknown models")
|
|
103
|
+
|
|
104
|
+
@field_validator("version")
|
|
105
|
+
@classmethod
|
|
106
|
+
def validate_semver(cls, v: str) -> str:
|
|
107
|
+
"""Validate semantic versioning format."""
|
|
108
|
+
parts = v.split(".")
|
|
109
|
+
if len(parts) != 3 or not all(p.isdigit() for p in parts):
|
|
110
|
+
raise ValueError("Version must be in semantic versioning format (x.y.z)")
|
|
111
|
+
return v
|
|
112
|
+
|
|
113
|
+
@classmethod
|
|
114
|
+
def load_from_file(cls, path: Optional[str] = None) -> "PricingConfig":
|
|
115
|
+
"""
|
|
116
|
+
Load pricing configuration from JSON file.
|
|
117
|
+
|
|
118
|
+
Args:
|
|
119
|
+
path: Optional path to pricing file. If None, uses default location.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
PricingConfig instance
|
|
123
|
+
|
|
124
|
+
Raises:
|
|
125
|
+
FileNotFoundError: If pricing file doesn't exist
|
|
126
|
+
ValueError: If JSON is invalid or doesn't match schema
|
|
127
|
+
"""
|
|
128
|
+
# Ensure we have a valid path string first
|
|
129
|
+
path_str: str
|
|
130
|
+
if path is None:
|
|
131
|
+
# Default path relative to this module
|
|
132
|
+
config_dir = Path(__file__).parent
|
|
133
|
+
path_str = str(config_dir / "PRICING_DATA.json")
|
|
134
|
+
else:
|
|
135
|
+
path_str = path
|
|
136
|
+
|
|
137
|
+
# Convert to Path object for file operations
|
|
138
|
+
path_obj = Path(path_str)
|
|
139
|
+
if not path_obj.exists():
|
|
140
|
+
raise FileNotFoundError(f"Pricing configuration file not found: {path_obj}")
|
|
141
|
+
|
|
142
|
+
try:
|
|
143
|
+
with open(path_obj, "r", encoding="utf-8") as f:
|
|
144
|
+
data = json.load(f)
|
|
145
|
+
return cls(**data)
|
|
146
|
+
except json.JSONDecodeError as e:
|
|
147
|
+
raise ValueError(f"Invalid JSON in pricing configuration: {e}")
|
|
148
|
+
except Exception as e:
|
|
149
|
+
raise ValueError(f"Failed to load pricing configuration: {e}")
|
|
150
|
+
|
|
151
|
+
def get_model_config(self, provider_name: str, model_name: str) -> Optional[ModelConfig]:
|
|
152
|
+
"""
|
|
153
|
+
Get configuration for a specific model.
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
provider_name: Name of the provider (e.g., 'openai')
|
|
157
|
+
model_name: Name of the model (e.g., 'gpt-4o-mini')
|
|
158
|
+
|
|
159
|
+
Returns:
|
|
160
|
+
ModelConfig if found, None otherwise
|
|
161
|
+
"""
|
|
162
|
+
provider = self.providers.get(provider_name)
|
|
163
|
+
if not provider:
|
|
164
|
+
return None
|
|
165
|
+
return provider.models.get(model_name)
|
|
166
|
+
|
|
167
|
+
def find_model_by_name(self, model_name: str) -> Optional[tuple[str, ModelConfig]]:
|
|
168
|
+
"""
|
|
169
|
+
Find a model by name across all providers.
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
model_name: Name of the model to find
|
|
173
|
+
|
|
174
|
+
Returns:
|
|
175
|
+
Tuple of (provider_name, ModelConfig) if found, None otherwise
|
|
176
|
+
"""
|
|
177
|
+
for provider_name, provider in self.providers.items():
|
|
178
|
+
if model_name in provider.models:
|
|
179
|
+
return provider_name, provider.models[model_name]
|
|
180
|
+
return None
|
|
181
|
+
|
|
182
|
+
def get_energy_estimate(self, model_name: str) -> float:
|
|
183
|
+
"""
|
|
184
|
+
Get energy consumption estimate for a model.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
model_name: Name of the model
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
Energy consumption in kWh per 1k tokens
|
|
191
|
+
"""
|
|
192
|
+
patterns = self.environmental_factors.energy_estimates.model_patterns
|
|
193
|
+
|
|
194
|
+
# Try exact match first
|
|
195
|
+
if model_name in patterns:
|
|
196
|
+
return patterns[model_name]["kwh_per_1k_tokens"]
|
|
197
|
+
|
|
198
|
+
# Try pattern matching
|
|
199
|
+
for pattern, values in patterns.items():
|
|
200
|
+
if pattern != "default" and pattern.lower() in model_name.lower():
|
|
201
|
+
return values["kwh_per_1k_tokens"]
|
|
202
|
+
|
|
203
|
+
# Return default
|
|
204
|
+
return patterns["default"]["kwh_per_1k_tokens"]
|
|
205
|
+
|
|
206
|
+
def get_carbon_intensity(self, region: Optional[str] = None) -> float:
|
|
207
|
+
"""
|
|
208
|
+
Get carbon intensity for a region.
|
|
209
|
+
|
|
210
|
+
Args:
|
|
211
|
+
region: Optional region name
|
|
212
|
+
|
|
213
|
+
Returns:
|
|
214
|
+
CO2 grams per kWh
|
|
215
|
+
"""
|
|
216
|
+
if region and region in self.environmental_factors.carbon_intensity.regions:
|
|
217
|
+
return self.environmental_factors.carbon_intensity.regions[region]
|
|
218
|
+
return self.environmental_factors.carbon_intensity.global_average_g_co2_per_kwh
|
|
219
|
+
|
|
220
|
+
def get_fallback_pricing(self) -> ModelConfig:
|
|
221
|
+
"""Get fallback pricing for unknown models."""
|
|
222
|
+
return self.fallback_pricing.unknown_model
|
|
223
|
+
|
|
224
|
+
def list_active_models(self, provider_name: Optional[str] = None) -> List[tuple[str, str, ModelConfig]]:
|
|
225
|
+
"""
|
|
226
|
+
List all active models.
|
|
227
|
+
|
|
228
|
+
Args:
|
|
229
|
+
provider_name: Optional provider to filter by
|
|
230
|
+
|
|
231
|
+
Returns:
|
|
232
|
+
List of (provider_name, model_name, ModelConfig) tuples
|
|
233
|
+
"""
|
|
234
|
+
models = []
|
|
235
|
+
providers = {provider_name: self.providers[provider_name]} if provider_name else self.providers
|
|
236
|
+
|
|
237
|
+
for prov_name, provider in providers.items():
|
|
238
|
+
for model_name, model_config in provider.models.items():
|
|
239
|
+
if model_config.active and not model_config.deprecated:
|
|
240
|
+
models.append((prov_name, model_name, model_config))
|
|
241
|
+
|
|
242
|
+
return models
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
# Default pricing configuration instance
|
|
246
|
+
_pricing_config: Optional[PricingConfig] = None
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def get_pricing_config(reload: bool = False) -> PricingConfig:
|
|
250
|
+
"""
|
|
251
|
+
Get the global pricing configuration instance.
|
|
252
|
+
|
|
253
|
+
Args:
|
|
254
|
+
reload: If True, reload configuration from file
|
|
255
|
+
|
|
256
|
+
Returns:
|
|
257
|
+
PricingConfig instance
|
|
258
|
+
"""
|
|
259
|
+
global _pricing_config
|
|
260
|
+
|
|
261
|
+
if _pricing_config is None or reload:
|
|
262
|
+
_pricing_config = PricingConfig.load_from_file()
|
|
263
|
+
|
|
264
|
+
return _pricing_config
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
__all__ = [
|
|
268
|
+
"ModelConfig",
|
|
269
|
+
"ProviderConfig",
|
|
270
|
+
"PricingConfig",
|
|
271
|
+
"get_pricing_config",
|
|
272
|
+
"RateLimits",
|
|
273
|
+
"EnvironmentalFactors",
|
|
274
|
+
"PricingMetadata",
|
|
275
|
+
"FallbackPricing",
|
|
276
|
+
]
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""Central constants for CIRIS."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
# Version information
|
|
6
|
+
CIRIS_VERSION = "1.7.7-stable"
|
|
7
|
+
CIRIS_VERSION_MAJOR = 1
|
|
8
|
+
CIRIS_VERSION_MINOR = 7
|
|
9
|
+
CIRIS_VERSION_PATCH = 7
|
|
10
|
+
CIRIS_VERSION_BUILD = 0
|
|
11
|
+
CIRIS_VERSION_STAGE = "stable"
|
|
12
|
+
CIRIS_CODENAME = "Context Engineering" # Codename for this release
|
|
13
|
+
|
|
14
|
+
# Agent defaults
|
|
15
|
+
DEFAULT_TEMPLATE = "default"
|
|
16
|
+
DEFAULT_TEMPLATE_PATH = Path("ciris_templates")
|
|
17
|
+
|
|
18
|
+
# Model defaults
|
|
19
|
+
DEFAULT_OPENAI_MODEL_NAME = "gpt-4o-mini"
|
|
20
|
+
|
|
21
|
+
# Prompt defaults
|
|
22
|
+
DEFAULT_PROMPT_TEMPLATE = "default_prompt"
|
|
23
|
+
|
|
24
|
+
# System defaults
|
|
25
|
+
DEFAULT_NUM_ROUNDS = 10
|
|
26
|
+
|
|
27
|
+
# API defaults
|
|
28
|
+
# Security Note: 127.0.0.1 binds to localhost only (recommended for security)
|
|
29
|
+
# Use 0.0.0.0 to bind to all interfaces (only for trusted networks/production deployments)
|
|
30
|
+
# Configure via CIRIS_API_HOST environment variable
|
|
31
|
+
DEFAULT_API_HOST = "127.0.0.1" # Secure default - localhost only
|
|
32
|
+
DEFAULT_API_PORT = 8080
|
|
33
|
+
|
|
34
|
+
# Timezone and datetime parsing constants
|
|
35
|
+
UTC_TIMEZONE_SUFFIX = "+00:00"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Data files for CIRIS Engine."""
|