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,410 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Any, Dict, List, Optional, Union, cast
|
|
3
|
+
|
|
4
|
+
from pydantic import BaseModel, Field
|
|
5
|
+
|
|
6
|
+
from ciris_engine.logic.formatters import (
|
|
7
|
+
format_system_prompt_blocks,
|
|
8
|
+
format_system_snapshot,
|
|
9
|
+
format_user_profiles,
|
|
10
|
+
get_escalation_guidance,
|
|
11
|
+
)
|
|
12
|
+
from ciris_engine.logic.processors.support.processing_queue import ProcessingQueueItem
|
|
13
|
+
from ciris_engine.logic.registries.base import ServiceRegistry
|
|
14
|
+
from ciris_engine.logic.utils.constants import COVENANT_TEXT
|
|
15
|
+
from ciris_engine.protocols.dma.base import DSDMAProtocol
|
|
16
|
+
from ciris_engine.schemas.dma.core import DMAInputData
|
|
17
|
+
from ciris_engine.schemas.dma.results import DSDMAResult
|
|
18
|
+
from ciris_engine.schemas.runtime.system_context import SystemSnapshot
|
|
19
|
+
from ciris_engine.schemas.types import JSONDict
|
|
20
|
+
|
|
21
|
+
from .base_dma import BaseDMA
|
|
22
|
+
from .prompt_loader import get_prompt_loader
|
|
23
|
+
|
|
24
|
+
logger = logging.getLogger(__name__)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class BaseDSDMA(BaseDMA[DMAInputData, DSDMAResult], DSDMAProtocol):
|
|
28
|
+
"""
|
|
29
|
+
Abstract Base Class for Domain-Specific Decision-Making Algorithms.
|
|
30
|
+
Handles instructor client patching based on global config.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
DEFAULT_TEMPLATE: Optional[str] = (
|
|
34
|
+
"You are a domain-specific evaluator for the '{domain_name}' domain. "
|
|
35
|
+
"Your primary goal is to assess how well a given 'thought' aligns with the specific rules, "
|
|
36
|
+
"objectives, and knowledge pertinent to this domain. "
|
|
37
|
+
"Consider the provided domain rules: '{rules_summary_str}' and the general platform context: '{context_str}'. "
|
|
38
|
+
"Additionally, user profile information and system snapshot details will be provided with the thought for background awareness. "
|
|
39
|
+
"When evaluating thoughts that might lead to TOOL actions, consider whether the tools available "
|
|
40
|
+
"are appropriate for the domain and whether their use aligns with domain-specific best practices. "
|
|
41
|
+
"Focus your evaluation on domain alignment."
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
def __init__(
|
|
45
|
+
self,
|
|
46
|
+
domain_name: str,
|
|
47
|
+
service_registry: ServiceRegistry,
|
|
48
|
+
model_name: Optional[str] = None,
|
|
49
|
+
domain_specific_knowledge: Optional[JSONDict] = None,
|
|
50
|
+
prompt_template: Optional[str] = None,
|
|
51
|
+
**kwargs: Any,
|
|
52
|
+
) -> None:
|
|
53
|
+
|
|
54
|
+
# Use provided model name or default
|
|
55
|
+
resolved_model = model_name or "gpt-4"
|
|
56
|
+
|
|
57
|
+
super().__init__(service_registry=service_registry, model_name=resolved_model, max_retries=2, **kwargs)
|
|
58
|
+
|
|
59
|
+
self.domain_name = domain_name
|
|
60
|
+
self.domain_specific_knowledge = domain_specific_knowledge if domain_specific_knowledge else {}
|
|
61
|
+
|
|
62
|
+
self.prompt_loader = get_prompt_loader()
|
|
63
|
+
try:
|
|
64
|
+
prompt_collection = self.prompt_loader.load_prompt_template("dsdma_base")
|
|
65
|
+
self.prompt_template_data = prompt_collection
|
|
66
|
+
# Get system guidance header from the collection
|
|
67
|
+
system_guidance = prompt_collection.get_prompt("system_guidance_header")
|
|
68
|
+
if prompt_template is not None:
|
|
69
|
+
self.prompt_template = prompt_template
|
|
70
|
+
elif system_guidance:
|
|
71
|
+
self.prompt_template = system_guidance # get_prompt returns a string
|
|
72
|
+
else:
|
|
73
|
+
self.prompt_template = ""
|
|
74
|
+
except FileNotFoundError:
|
|
75
|
+
logger.warning(f"DSDMA base prompt template not found for domain '{domain_name}', using fallback")
|
|
76
|
+
# Create a PromptCollection with fallback data
|
|
77
|
+
from ciris_engine.schemas.dma.prompts import PromptCollection
|
|
78
|
+
|
|
79
|
+
self.prompt_template_data = PromptCollection(
|
|
80
|
+
component_name="dsdma_base_fallback",
|
|
81
|
+
description="Fallback DSDMA prompt collection",
|
|
82
|
+
system_guidance_header=self.DEFAULT_TEMPLATE if self.DEFAULT_TEMPLATE else "",
|
|
83
|
+
)
|
|
84
|
+
self.prompt_template = (
|
|
85
|
+
prompt_template
|
|
86
|
+
if prompt_template is not None
|
|
87
|
+
else (self.DEFAULT_TEMPLATE if self.DEFAULT_TEMPLATE else "")
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
# Store last user prompt for debugging/streaming
|
|
91
|
+
self.last_user_prompt: Optional[str] = None
|
|
92
|
+
|
|
93
|
+
logger.info(f"BaseDSDMA '{self.domain_name}' initialized with model: {self.model_name}")
|
|
94
|
+
|
|
95
|
+
class LLMOutputForDSDMA(BaseModel):
|
|
96
|
+
score: float = Field(..., ge=0.0, le=1.0)
|
|
97
|
+
recommended_action: Optional[str] = Field(default=None)
|
|
98
|
+
flags: List[str] = Field(default_factory=list)
|
|
99
|
+
reasoning: str
|
|
100
|
+
|
|
101
|
+
async def evaluate(self, *args: Any, **kwargs: Any) -> DSDMAResult: # type: ignore[override]
|
|
102
|
+
"""Evaluate thought within domain-specific context."""
|
|
103
|
+
# Extract arguments - maintain backward compatibility
|
|
104
|
+
input_data = args[0] if args else kwargs.get("input_data")
|
|
105
|
+
current_context = args[1] if len(args) > 1 else kwargs.get("current_context")
|
|
106
|
+
|
|
107
|
+
if not input_data:
|
|
108
|
+
raise ValueError("input_data is required")
|
|
109
|
+
|
|
110
|
+
# Extract DMAInputData if provided
|
|
111
|
+
dma_input_data: Optional[DMAInputData] = None
|
|
112
|
+
if current_context and isinstance(current_context, dict):
|
|
113
|
+
# Try to extract DMAInputData if it's in the context
|
|
114
|
+
if "dma_input_data" in current_context:
|
|
115
|
+
dma_input_data = current_context["dma_input_data"]
|
|
116
|
+
else:
|
|
117
|
+
logger.debug("No DMAInputData in context, using legacy JSONDict")
|
|
118
|
+
|
|
119
|
+
return await self.evaluate_thought(input_data, dma_input_data)
|
|
120
|
+
|
|
121
|
+
async def evaluate_thought(
|
|
122
|
+
self, thought_item: ProcessingQueueItem, current_context: Optional[DMAInputData]
|
|
123
|
+
) -> DSDMAResult:
|
|
124
|
+
|
|
125
|
+
thought_content_str = str(thought_item.content)
|
|
126
|
+
|
|
127
|
+
# Fetch original task for context
|
|
128
|
+
thought_depth = getattr(thought_item, "thought_depth", 0)
|
|
129
|
+
agent_occurrence_id = getattr(thought_item, "agent_occurrence_id", "default")
|
|
130
|
+
original_task = await self.fetch_original_task(thought_item.source_task_id, agent_occurrence_id)
|
|
131
|
+
task_context_str = self.format_task_context(original_task, thought_depth)
|
|
132
|
+
task_context_block = f"=== ORIGINAL TASK ===\n{task_context_str}\n\n"
|
|
133
|
+
|
|
134
|
+
# Use DMAInputData if provided, otherwise fall back to ProcessingQueueItem context
|
|
135
|
+
if current_context:
|
|
136
|
+
# Use typed DMAInputData fields
|
|
137
|
+
context_str = f"Round {current_context.round_number}, Ponder count: {current_context.current_thought_depth}"
|
|
138
|
+
rules_summary_str = (
|
|
139
|
+
self.domain_specific_knowledge.get("rules_summary", "General domain guidance")
|
|
140
|
+
if isinstance(self.domain_specific_knowledge, dict)
|
|
141
|
+
else "General domain guidance"
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# Get system snapshot from DMAInputData - CRITICAL requirement
|
|
145
|
+
if not current_context.system_snapshot:
|
|
146
|
+
raise ValueError(
|
|
147
|
+
f"CRITICAL: System snapshot is required for DSDMA evaluation in domain '{self.domain_name}'"
|
|
148
|
+
)
|
|
149
|
+
system_snapshot = current_context.system_snapshot
|
|
150
|
+
user_profiles_data = system_snapshot.user_profiles
|
|
151
|
+
# Convert list of UserProfile to dict format expected by format_user_profiles
|
|
152
|
+
user_profiles_dict = {}
|
|
153
|
+
for profile in user_profiles_data:
|
|
154
|
+
user_profiles_dict[profile.user_id] = {
|
|
155
|
+
"name": profile.display_name,
|
|
156
|
+
"nick": profile.display_name,
|
|
157
|
+
"interests": getattr(profile, "interests", []),
|
|
158
|
+
"primary_channel": getattr(profile, "primary_channel", None),
|
|
159
|
+
}
|
|
160
|
+
user_profiles_block = format_user_profiles(user_profiles_dict)
|
|
161
|
+
system_snapshot_block = format_system_snapshot(system_snapshot)
|
|
162
|
+
|
|
163
|
+
# Get identity from system snapshot - CRITICAL requirement
|
|
164
|
+
if not system_snapshot.agent_identity:
|
|
165
|
+
raise ValueError(
|
|
166
|
+
f"CRITICAL: Agent identity is required for DSDMA evaluation in domain '{self.domain_name}'"
|
|
167
|
+
)
|
|
168
|
+
# Format identity block from agent_identity data - FAIL FAST if incomplete
|
|
169
|
+
# Type narrow to dict for .get() access
|
|
170
|
+
agent_identity = system_snapshot.agent_identity
|
|
171
|
+
if isinstance(agent_identity, dict):
|
|
172
|
+
agent_id = agent_identity.get("agent_id")
|
|
173
|
+
description = agent_identity.get("description")
|
|
174
|
+
role = agent_identity.get("role")
|
|
175
|
+
else:
|
|
176
|
+
# It's IdentityData model
|
|
177
|
+
agent_id = agent_identity.agent_id
|
|
178
|
+
description = agent_identity.description
|
|
179
|
+
role = agent_identity.role
|
|
180
|
+
|
|
181
|
+
# CRITICAL: Identity must be complete - no defaults allowed
|
|
182
|
+
if not agent_id:
|
|
183
|
+
raise ValueError(f"CRITICAL: agent_id is missing from identity! This is a fatal error.")
|
|
184
|
+
if not description:
|
|
185
|
+
raise ValueError(f"CRITICAL: description is missing from identity! This is a fatal error.")
|
|
186
|
+
if not role:
|
|
187
|
+
raise ValueError(f"CRITICAL: role is missing from identity! This is a fatal error.")
|
|
188
|
+
|
|
189
|
+
identity_block = "=== CORE IDENTITY - THIS IS WHO YOU ARE! ===\n"
|
|
190
|
+
identity_block += f"Agent: {agent_id}\n"
|
|
191
|
+
identity_block += f"Description: {description}\n"
|
|
192
|
+
identity_block += f"Role: {role}\n"
|
|
193
|
+
identity_block += "============================================"
|
|
194
|
+
else:
|
|
195
|
+
# NO FALLBACK - STRICT TYPE CHECKING ONLY
|
|
196
|
+
# When no DMAInputData, we still need to get identity from ProcessingQueueItem
|
|
197
|
+
context_str = "No specific platform context provided."
|
|
198
|
+
rules_summary_str = (
|
|
199
|
+
self.domain_specific_knowledge.get("rules_summary", "General domain guidance")
|
|
200
|
+
if isinstance(self.domain_specific_knowledge, dict)
|
|
201
|
+
else "General domain guidance"
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
# STRICT TYPE CHECKING - initial_context MUST be a dict
|
|
205
|
+
if not isinstance(thought_item.initial_context, dict):
|
|
206
|
+
raise ValueError(
|
|
207
|
+
f"CRITICAL: initial_context must be a dict, got {type(thought_item.initial_context).__name__}! "
|
|
208
|
+
f"This is a fatal error. DSDMA domain '{self.domain_name}' requires properly typed inputs."
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
# Extract system_snapshot - MUST exist
|
|
212
|
+
system_snapshot_raw = thought_item.initial_context.get("system_snapshot")
|
|
213
|
+
if not system_snapshot_raw:
|
|
214
|
+
raise ValueError(
|
|
215
|
+
f"CRITICAL: No system_snapshot in initial_context for DSDMA domain '{self.domain_name}'! "
|
|
216
|
+
"This is a fatal error. Identity is required for ALL DMA evaluations."
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
# Extract agent_identity - MUST exist and be complete
|
|
220
|
+
agent_identity_raw = (
|
|
221
|
+
system_snapshot_raw.get("agent_identity") if isinstance(system_snapshot_raw, dict) else None
|
|
222
|
+
)
|
|
223
|
+
if not agent_identity_raw:
|
|
224
|
+
raise ValueError(
|
|
225
|
+
f"CRITICAL: No agent_identity found in system_snapshot for DSDMA domain '{self.domain_name}'! "
|
|
226
|
+
"Identity is required for ALL DMA evaluations. This is a fatal error."
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
# Validate ALL required identity fields - type narrow for dict access
|
|
230
|
+
if not isinstance(agent_identity_raw, dict):
|
|
231
|
+
raise ValueError(
|
|
232
|
+
f"CRITICAL: agent_identity must be a dict, got {type(agent_identity_raw).__name__}! "
|
|
233
|
+
f"This is a fatal error. DSDMA domain '{self.domain_name}' requires properly typed inputs."
|
|
234
|
+
)
|
|
235
|
+
agent_id = agent_identity_raw.get("agent_id")
|
|
236
|
+
description = agent_identity_raw.get("description")
|
|
237
|
+
role = agent_identity_raw.get("role")
|
|
238
|
+
|
|
239
|
+
if not agent_id:
|
|
240
|
+
raise ValueError(
|
|
241
|
+
f"CRITICAL: agent_id is missing from identity in DSDMA domain '{self.domain_name}'! This is a fatal error."
|
|
242
|
+
)
|
|
243
|
+
if not description:
|
|
244
|
+
raise ValueError(
|
|
245
|
+
f"CRITICAL: description is missing from identity in DSDMA domain '{self.domain_name}'! This is a fatal error."
|
|
246
|
+
)
|
|
247
|
+
if not role:
|
|
248
|
+
raise ValueError(
|
|
249
|
+
f"CRITICAL: role is missing from identity in DSDMA domain '{self.domain_name}'! This is a fatal error."
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
# Build identity block
|
|
253
|
+
identity_block = "=== CORE IDENTITY - THIS IS WHO YOU ARE! ===\n"
|
|
254
|
+
identity_block += f"Agent: {agent_id}\n"
|
|
255
|
+
identity_block += f"Description: {description}\n"
|
|
256
|
+
identity_block += f"Role: {role}\n"
|
|
257
|
+
identity_block += "============================================"
|
|
258
|
+
|
|
259
|
+
# Format optional blocks - type narrow for .get() access
|
|
260
|
+
if isinstance(system_snapshot_raw, dict):
|
|
261
|
+
user_profiles_data_raw = system_snapshot_raw.get("user_profiles")
|
|
262
|
+
# format_user_profiles accepts Union[List[Any], dict[str, Any], None]
|
|
263
|
+
user_profiles_block = format_user_profiles(user_profiles_data_raw) if user_profiles_data_raw else ""
|
|
264
|
+
# Cast dict to SystemSnapshot for format_system_snapshot
|
|
265
|
+
system_snapshot_block = format_system_snapshot(cast(SystemSnapshot, system_snapshot_raw))
|
|
266
|
+
else:
|
|
267
|
+
# system_snapshot_raw is not a dict - shouldn't happen but handle gracefully
|
|
268
|
+
user_profiles_block = ""
|
|
269
|
+
system_snapshot_block = ""
|
|
270
|
+
|
|
271
|
+
escalation_guidance_block = get_escalation_guidance(0)
|
|
272
|
+
|
|
273
|
+
# Import crisis resources formatter
|
|
274
|
+
from ciris_engine.logic.formatters import format_crisis_resources_block
|
|
275
|
+
|
|
276
|
+
crisis_resources_block = format_crisis_resources_block(include_full_disclaimer=False)
|
|
277
|
+
|
|
278
|
+
task_history_block = ""
|
|
279
|
+
|
|
280
|
+
template_has_blocks = any(
|
|
281
|
+
placeholder in self.prompt_template
|
|
282
|
+
for placeholder in [
|
|
283
|
+
"{identity_block}",
|
|
284
|
+
"{task_history_block}",
|
|
285
|
+
"{escalation_guidance_block}",
|
|
286
|
+
"{system_snapshot_block}",
|
|
287
|
+
"{user_profiles_block}",
|
|
288
|
+
"{crisis_resources_block}",
|
|
289
|
+
]
|
|
290
|
+
)
|
|
291
|
+
|
|
292
|
+
if template_has_blocks:
|
|
293
|
+
try:
|
|
294
|
+
system_message_content = self.prompt_template.format(
|
|
295
|
+
identity_block=identity_block,
|
|
296
|
+
task_history_block=task_history_block,
|
|
297
|
+
escalation_guidance_block=escalation_guidance_block,
|
|
298
|
+
system_snapshot_block=system_snapshot_block,
|
|
299
|
+
user_profiles_block=user_profiles_block,
|
|
300
|
+
crisis_resources_block=crisis_resources_block,
|
|
301
|
+
domain_name=self.domain_name,
|
|
302
|
+
rules_summary_str=rules_summary_str,
|
|
303
|
+
context_str=context_str,
|
|
304
|
+
)
|
|
305
|
+
except KeyError as e:
|
|
306
|
+
logger.error(f"Missing template variable in DSDMA template: {e}")
|
|
307
|
+
system_message_content = format_system_prompt_blocks(
|
|
308
|
+
identity_block, # Now guaranteed to be non-empty when we have current_context
|
|
309
|
+
task_history_block,
|
|
310
|
+
system_snapshot_block,
|
|
311
|
+
user_profiles_block,
|
|
312
|
+
escalation_guidance_block,
|
|
313
|
+
f"You are a domain-specific evaluator for the '{self.domain_name}' domain. "
|
|
314
|
+
f"Consider the domain rules: '{rules_summary_str}' and context: '{context_str}'.",
|
|
315
|
+
)
|
|
316
|
+
else:
|
|
317
|
+
system_message_template = self.prompt_template
|
|
318
|
+
if not system_message_template:
|
|
319
|
+
system_message_template = (
|
|
320
|
+
"You are a domain-specific evaluator for the '{domain_name}' domain. "
|
|
321
|
+
"Your primary goal is to assess how well a given 'thought' aligns with the specific rules, "
|
|
322
|
+
"objectives, and knowledge pertinent to this domain. "
|
|
323
|
+
"Consider the provided domain rules: '{rules_summary_str}' and the general platform context: '{context_str}'. "
|
|
324
|
+
"Additionally, user profile information and system snapshot details will be provided with the thought for background awareness. "
|
|
325
|
+
"Focus your evaluation on domain alignment."
|
|
326
|
+
)
|
|
327
|
+
|
|
328
|
+
system_message_content = system_message_template.format(
|
|
329
|
+
domain_name=self.domain_name, rules_summary_str=rules_summary_str, context_str=context_str
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
full_snapshot_and_profile_context_str = task_context_block + system_snapshot_block + user_profiles_block
|
|
333
|
+
user_message_content = f"{full_snapshot_and_profile_context_str}\nEvaluate this thought for the '{self.domain_name}' domain: \"{thought_content_str}\""
|
|
334
|
+
|
|
335
|
+
# Store user prompt for streaming/debugging
|
|
336
|
+
self.last_user_prompt = user_message_content
|
|
337
|
+
|
|
338
|
+
logger.debug(
|
|
339
|
+
f"DSDMA '{self.domain_name}' input to LLM for thought {thought_item.thought_id}:\nSystem: {system_message_content}\nUser: {user_message_content}"
|
|
340
|
+
)
|
|
341
|
+
|
|
342
|
+
# CRITICAL: Identity block must ALWAYS be first in system message after covenant
|
|
343
|
+
# Prepend identity to system message if not already included
|
|
344
|
+
if identity_block and "CORE IDENTITY" not in system_message_content:
|
|
345
|
+
system_message_content = identity_block + "\n\n" + system_message_content
|
|
346
|
+
|
|
347
|
+
# Get images from thought item for multimodal
|
|
348
|
+
thought_images = getattr(thought_item, "images", []) or []
|
|
349
|
+
if thought_images:
|
|
350
|
+
logger.info(
|
|
351
|
+
f"[VISION] DSDMA '{self.domain_name}' building multimodal content with {len(thought_images)} images"
|
|
352
|
+
)
|
|
353
|
+
user_content = self.build_multimodal_content(user_message_content, thought_images)
|
|
354
|
+
|
|
355
|
+
messages: List[JSONDict] = [
|
|
356
|
+
{"role": "system", "content": COVENANT_TEXT},
|
|
357
|
+
{"role": "system", "content": system_message_content},
|
|
358
|
+
{"role": "user", "content": user_content},
|
|
359
|
+
]
|
|
360
|
+
|
|
361
|
+
try:
|
|
362
|
+
llm_eval_data, _ = await self.call_llm_structured(
|
|
363
|
+
messages=messages,
|
|
364
|
+
response_model=BaseDSDMA.LLMOutputForDSDMA,
|
|
365
|
+
max_tokens=4096,
|
|
366
|
+
temperature=0.0,
|
|
367
|
+
thought_id=thought_item.thought_id,
|
|
368
|
+
task_id=thought_item.source_task_id,
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
result = DSDMAResult(
|
|
372
|
+
domain=self.domain_name,
|
|
373
|
+
domain_alignment=min(max(llm_eval_data.score, 0.0), 1.0),
|
|
374
|
+
flags=llm_eval_data.flags,
|
|
375
|
+
reasoning=llm_eval_data.reasoning,
|
|
376
|
+
)
|
|
377
|
+
logger.info(
|
|
378
|
+
f"DSDMA '{self.domain_name}' (instructor) evaluation successful for thought ID {thought_item.thought_id}: "
|
|
379
|
+
f"Domain Alignment: {result.domain_alignment}"
|
|
380
|
+
)
|
|
381
|
+
# raw_llm_response field has been removed from DSDMAResult
|
|
382
|
+
return result
|
|
383
|
+
except Exception as e:
|
|
384
|
+
logger.error(
|
|
385
|
+
f"DSDMA {self.domain_name} evaluation failed for thought ID {thought_item.thought_id}: {e}",
|
|
386
|
+
exc_info=True,
|
|
387
|
+
)
|
|
388
|
+
return DSDMAResult(
|
|
389
|
+
domain=self.domain_name,
|
|
390
|
+
domain_alignment=0.0,
|
|
391
|
+
flags=["LLM_Error_Instructor"],
|
|
392
|
+
reasoning=f"Failed DSDMA evaluation via instructor: {str(e)}",
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
async def evaluate_alias(self, input_data: ProcessingQueueItem, **kwargs: Any) -> DSDMAResult:
|
|
396
|
+
"""Alias for evaluate_thought to satisfy BaseDMA."""
|
|
397
|
+
# Extract DMAInputData if available, otherwise None
|
|
398
|
+
context_raw = kwargs.get("current_context")
|
|
399
|
+
dma_input_data: Optional[DMAInputData] = None
|
|
400
|
+
|
|
401
|
+
if isinstance(context_raw, dict) and "dma_input_data" in context_raw:
|
|
402
|
+
dma_input_data = context_raw["dma_input_data"]
|
|
403
|
+
elif isinstance(context_raw, DMAInputData):
|
|
404
|
+
dma_input_data = context_raw
|
|
405
|
+
|
|
406
|
+
return await self.evaluate_thought(input_data, dma_input_data)
|
|
407
|
+
|
|
408
|
+
def __repr__(self) -> str:
|
|
409
|
+
return f"<BaseDSDMA domain='{self.domain_name}'>"
|
|
410
|
+
# No legacy field names present; v1 field names are already used throughout.
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Any, Dict, Optional, Type
|
|
3
|
+
|
|
4
|
+
from ciris_engine.logic.registries.base import ServiceRegistry
|
|
5
|
+
from ciris_engine.protocols.dma.base import ActionSelectionDMAProtocol as ActionSelectionDMAInterface
|
|
6
|
+
from ciris_engine.protocols.dma.base import CSDMAProtocol as CSDMAInterface
|
|
7
|
+
from ciris_engine.protocols.dma.base import PDMAProtocol as EthicalDMAInterface
|
|
8
|
+
from ciris_engine.protocols.faculties import EpistemicFaculty
|
|
9
|
+
from ciris_engine.schemas.config.agent import AgentTemplate
|
|
10
|
+
|
|
11
|
+
from .dsdma_base import BaseDSDMA
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
# No longer need a registry - all agents use BaseDSDMA
|
|
16
|
+
DSDMA_CLASS_REGISTRY: Dict[str, Type[BaseDSDMA]] = {
|
|
17
|
+
"BaseDSDMA": BaseDSDMA,
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
ETHICAL_DMA_REGISTRY: Dict[str, Type[EthicalDMAInterface]] = {}
|
|
21
|
+
CSDMA_REGISTRY: Dict[str, Type[CSDMAInterface]] = {}
|
|
22
|
+
ACTION_SELECTION_DMA_REGISTRY: Dict[str, Type[ActionSelectionDMAInterface]] = {}
|
|
23
|
+
|
|
24
|
+
try:
|
|
25
|
+
from .pdma import EthicalPDMAEvaluator
|
|
26
|
+
|
|
27
|
+
ETHICAL_DMA_REGISTRY["EthicalPDMAEvaluator"] = EthicalPDMAEvaluator
|
|
28
|
+
except ImportError:
|
|
29
|
+
pass
|
|
30
|
+
|
|
31
|
+
try:
|
|
32
|
+
from .csdma import CSDMAEvaluator
|
|
33
|
+
|
|
34
|
+
CSDMA_REGISTRY["CSDMAEvaluator"] = CSDMAEvaluator
|
|
35
|
+
except ImportError:
|
|
36
|
+
pass
|
|
37
|
+
|
|
38
|
+
try:
|
|
39
|
+
from .action_selection_pdma import ActionSelectionPDMAEvaluator
|
|
40
|
+
|
|
41
|
+
ACTION_SELECTION_DMA_REGISTRY["ActionSelectionPDMAEvaluator"] = ActionSelectionPDMAEvaluator
|
|
42
|
+
except ImportError:
|
|
43
|
+
pass
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def create_dma(
|
|
47
|
+
dma_type: str,
|
|
48
|
+
dma_identifier: str,
|
|
49
|
+
service_registry: ServiceRegistry,
|
|
50
|
+
*,
|
|
51
|
+
model_name: Optional[str] = None,
|
|
52
|
+
prompt_overrides: Optional[Dict[str, str]] = None,
|
|
53
|
+
faculties: Optional[Dict[str, EpistemicFaculty]] = None,
|
|
54
|
+
**kwargs: Any,
|
|
55
|
+
) -> Any:
|
|
56
|
+
"""Create a DMA instance of the specified type.
|
|
57
|
+
|
|
58
|
+
Args:
|
|
59
|
+
dma_type: Type of DMA ('ethical', 'csdma', 'dsdma', 'action_selection')
|
|
60
|
+
dma_identifier: Specific DMA class identifier
|
|
61
|
+
service_registry: Service registry for dependencies
|
|
62
|
+
model_name: Optional LLM model name
|
|
63
|
+
prompt_overrides: Optional prompt customizations
|
|
64
|
+
faculties: Optional epistemic faculties
|
|
65
|
+
**kwargs: Additional DMA-specific parameters
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
DMA instance or None if creation fails
|
|
69
|
+
"""
|
|
70
|
+
registries = {
|
|
71
|
+
"ethical": ETHICAL_DMA_REGISTRY,
|
|
72
|
+
"csdma": CSDMA_REGISTRY,
|
|
73
|
+
"dsdma": DSDMA_CLASS_REGISTRY,
|
|
74
|
+
"action_selection": ACTION_SELECTION_DMA_REGISTRY,
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
registry = registries.get(dma_type)
|
|
78
|
+
if not registry:
|
|
79
|
+
logger.error(f"Unknown DMA type: {dma_type}")
|
|
80
|
+
return None
|
|
81
|
+
|
|
82
|
+
dma_class = registry.get(dma_identifier) # type: ignore[attr-defined]
|
|
83
|
+
if not dma_class:
|
|
84
|
+
logger.error(f"Unknown {dma_type} DMA identifier: {dma_identifier}")
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
try:
|
|
88
|
+
constructor_args = {"service_registry": service_registry, **kwargs}
|
|
89
|
+
|
|
90
|
+
if model_name is not None:
|
|
91
|
+
constructor_args["model_name"] = model_name
|
|
92
|
+
if prompt_overrides is not None:
|
|
93
|
+
constructor_args["prompt_overrides"] = prompt_overrides
|
|
94
|
+
if faculties is not None:
|
|
95
|
+
constructor_args["faculties"] = faculties
|
|
96
|
+
|
|
97
|
+
return dma_class(**constructor_args)
|
|
98
|
+
except Exception as e:
|
|
99
|
+
logger.error(f"Failed to create {dma_type} DMA {dma_identifier}: {e}")
|
|
100
|
+
return None
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def create_dsdma_from_identity(
|
|
104
|
+
identity: Optional[AgentTemplate],
|
|
105
|
+
service_registry: ServiceRegistry,
|
|
106
|
+
*,
|
|
107
|
+
model_name: Optional[str] = None,
|
|
108
|
+
sink: Optional[Any] = None,
|
|
109
|
+
) -> BaseDSDMA:
|
|
110
|
+
"""Instantiate a DSDMA based on the agent's identity.
|
|
111
|
+
|
|
112
|
+
The identity represents the agent's configuration loaded from the graph. If ``identity``
|
|
113
|
+
is ``None``, this is a fatal error as the agent has no identity.
|
|
114
|
+
|
|
115
|
+
All agents now use BaseDSDMA with domain-specific overrides provided through
|
|
116
|
+
dsdma_kwargs in their identity configuration.
|
|
117
|
+
"""
|
|
118
|
+
if identity is None:
|
|
119
|
+
logger.critical("FATAL: No identity provided - agent has no identity!")
|
|
120
|
+
raise RuntimeError("Cannot create DSDMA without agent identity. Who am I?")
|
|
121
|
+
|
|
122
|
+
# Extract overrides from identity configuration
|
|
123
|
+
if identity.dsdma_kwargs:
|
|
124
|
+
# Handle DSDMAConfiguration object
|
|
125
|
+
prompt_template = identity.dsdma_kwargs.prompt_template
|
|
126
|
+
domain_knowledge = identity.dsdma_kwargs.domain_specific_knowledge
|
|
127
|
+
else:
|
|
128
|
+
prompt_template = None
|
|
129
|
+
domain_knowledge = None
|
|
130
|
+
|
|
131
|
+
# Always use BaseDSDMA now
|
|
132
|
+
dma_result = create_dma(
|
|
133
|
+
dma_type="dsdma",
|
|
134
|
+
dma_identifier="BaseDSDMA", # Always use BaseDSDMA
|
|
135
|
+
service_registry=service_registry,
|
|
136
|
+
model_name=model_name,
|
|
137
|
+
prompt_overrides=None,
|
|
138
|
+
domain_name=identity.name,
|
|
139
|
+
domain_specific_knowledge=domain_knowledge,
|
|
140
|
+
prompt_template=prompt_template,
|
|
141
|
+
sink=sink,
|
|
142
|
+
)
|
|
143
|
+
|
|
144
|
+
# Ensure we return the correct type - FAIL FAST if not BaseDSDMA
|
|
145
|
+
if isinstance(dma_result, BaseDSDMA):
|
|
146
|
+
return dma_result
|
|
147
|
+
|
|
148
|
+
# FAIL FAST: All 3 DMAs are required
|
|
149
|
+
logger.critical(f"create_dma returned unexpected type: {type(dma_result)} - DSDMA is required!")
|
|
150
|
+
raise RuntimeError(f"Failed to create DSDMA - got {type(dma_result)} instead of BaseDSDMA")
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Any, Dict, List, Optional
|
|
3
|
+
|
|
4
|
+
from ciris_engine.constants import DEFAULT_OPENAI_MODEL_NAME
|
|
5
|
+
from ciris_engine.logic.formatters import format_system_snapshot, format_user_profiles
|
|
6
|
+
from ciris_engine.logic.processors.support.processing_queue import ProcessingQueueItem
|
|
7
|
+
from ciris_engine.logic.registries.base import ServiceRegistry
|
|
8
|
+
from ciris_engine.logic.utils import COVENANT_TEXT
|
|
9
|
+
from ciris_engine.protocols.dma.base import PDMAProtocol
|
|
10
|
+
from ciris_engine.schemas.dma.results import EthicalDMAResult
|
|
11
|
+
from ciris_engine.schemas.types import JSONDict
|
|
12
|
+
|
|
13
|
+
from .base_dma import BaseDMA
|
|
14
|
+
from .prompt_loader import get_prompt_loader
|
|
15
|
+
|
|
16
|
+
logger = logging.getLogger(__name__)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class EthicalPDMAEvaluator(BaseDMA[ProcessingQueueItem, EthicalDMAResult], PDMAProtocol):
|
|
20
|
+
"""
|
|
21
|
+
Evaluates a thought against core ethical principles using an LLM
|
|
22
|
+
and returns a structured EthicalDMAResult using the 'instructor' library.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self,
|
|
27
|
+
service_registry: ServiceRegistry,
|
|
28
|
+
model_name: str = DEFAULT_OPENAI_MODEL_NAME,
|
|
29
|
+
max_retries: int = 2,
|
|
30
|
+
prompt_overrides: Optional[Dict[str, str]] = None,
|
|
31
|
+
**kwargs: Any,
|
|
32
|
+
) -> None:
|
|
33
|
+
super().__init__(
|
|
34
|
+
service_registry=service_registry,
|
|
35
|
+
model_name=model_name,
|
|
36
|
+
max_retries=max_retries,
|
|
37
|
+
prompt_overrides=prompt_overrides,
|
|
38
|
+
**kwargs,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
self.prompt_loader = get_prompt_loader()
|
|
42
|
+
self.prompt_template_data = self.prompt_loader.load_prompt_template("pdma_ethical")
|
|
43
|
+
|
|
44
|
+
# Store last user prompt for debugging/streaming
|
|
45
|
+
self.last_user_prompt: Optional[str] = None
|
|
46
|
+
|
|
47
|
+
logger.info(f"EthicalPDMAEvaluator initialized with model: {self.model_name}")
|
|
48
|
+
|
|
49
|
+
async def evaluate(self, *args: Any, **kwargs: Any) -> EthicalDMAResult: # type: ignore[override]
|
|
50
|
+
# Extract arguments - maintain backward compatibility
|
|
51
|
+
input_data = args[0] if args else kwargs.get("input_data")
|
|
52
|
+
context = args[1] if len(args) > 1 else kwargs.get("context")
|
|
53
|
+
|
|
54
|
+
if not input_data:
|
|
55
|
+
raise ValueError("input_data is required")
|
|
56
|
+
|
|
57
|
+
original_thought_content = str(input_data.content)
|
|
58
|
+
logger.debug(f"Evaluating thought ID {input_data.thought_id}")
|
|
59
|
+
|
|
60
|
+
# Fetch original task for context
|
|
61
|
+
thought_depth = getattr(input_data, "thought_depth", 0)
|
|
62
|
+
agent_occurrence_id = getattr(input_data, "agent_occurrence_id", "default")
|
|
63
|
+
original_task = await self.fetch_original_task(input_data.source_task_id, agent_occurrence_id)
|
|
64
|
+
task_context_str = self.format_task_context(original_task, thought_depth)
|
|
65
|
+
|
|
66
|
+
system_snapshot_context_str = ""
|
|
67
|
+
user_profile_context_str = ""
|
|
68
|
+
if context and hasattr(context, "system_snapshot") and context.system_snapshot:
|
|
69
|
+
system_snapshot_context_str = format_system_snapshot(context.system_snapshot)
|
|
70
|
+
if hasattr(context.system_snapshot, "user_profiles") and context.system_snapshot.user_profiles:
|
|
71
|
+
user_profile_context_str = format_user_profiles(context.system_snapshot.user_profiles)
|
|
72
|
+
elif context and hasattr(context, "user_profiles") and context.user_profiles:
|
|
73
|
+
user_profile_context_str = format_user_profiles(context.user_profiles)
|
|
74
|
+
|
|
75
|
+
# Include task context in the full context
|
|
76
|
+
full_context_str = (
|
|
77
|
+
f"=== ORIGINAL TASK ===\n{task_context_str}\n\n" + system_snapshot_context_str + user_profile_context_str
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
messages: List[JSONDict] = []
|
|
81
|
+
|
|
82
|
+
if self.prompt_loader.uses_covenant_header(self.prompt_template_data):
|
|
83
|
+
messages.append({"role": "system", "content": COVENANT_TEXT})
|
|
84
|
+
|
|
85
|
+
system_message = self.prompt_loader.get_system_message(
|
|
86
|
+
self.prompt_template_data,
|
|
87
|
+
original_thought_content=original_thought_content,
|
|
88
|
+
full_context_str=full_context_str,
|
|
89
|
+
)
|
|
90
|
+
messages.append({"role": "system", "content": system_message})
|
|
91
|
+
|
|
92
|
+
user_message_text = self.prompt_loader.get_user_message(
|
|
93
|
+
self.prompt_template_data,
|
|
94
|
+
original_thought_content=original_thought_content,
|
|
95
|
+
full_context_str=full_context_str,
|
|
96
|
+
)
|
|
97
|
+
# Build multimodal content if images are present
|
|
98
|
+
input_images = getattr(input_data, "images", []) or []
|
|
99
|
+
if input_images:
|
|
100
|
+
logger.info(f"[VISION] EthicalPDMA building multimodal content with {len(input_images)} images")
|
|
101
|
+
user_content = self.build_multimodal_content(user_message_text, input_images)
|
|
102
|
+
messages.append({"role": "user", "content": user_content})
|
|
103
|
+
|
|
104
|
+
# Store user prompt for streaming/debugging
|
|
105
|
+
self.last_user_prompt = user_message_text
|
|
106
|
+
|
|
107
|
+
result_tuple = await self.call_llm_structured(
|
|
108
|
+
messages=messages,
|
|
109
|
+
response_model=EthicalDMAResult,
|
|
110
|
+
max_tokens=4096,
|
|
111
|
+
temperature=0.0,
|
|
112
|
+
thought_id=input_data.thought_id,
|
|
113
|
+
task_id=input_data.source_task_id,
|
|
114
|
+
)
|
|
115
|
+
response_obj: EthicalDMAResult = result_tuple[0]
|
|
116
|
+
logger.info(f"Evaluation successful for thought ID {input_data.thought_id}")
|
|
117
|
+
return response_obj
|
|
118
|
+
|
|
119
|
+
def __repr__(self) -> str:
|
|
120
|
+
return f"<EthicalPDMAEvaluator model='{self.model_name}'>"
|