monkeybrain-runtime 1.0.0__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.
- monkeybrain_runtime-1.0.0.dist-info/METADATA +76 -0
- monkeybrain_runtime-1.0.0.dist-info/RECORD +838 -0
- monkeybrain_runtime-1.0.0.dist-info/WHEEL +5 -0
- monkeybrain_runtime-1.0.0.dist-info/entry_points.txt +3 -0
- monkeybrain_runtime-1.0.0.dist-info/top_level.txt +2 -0
- services/__init__.py +8 -0
- services/agentos/__init__.py +0 -0
- services/agentos/main.py +1 -0
- services/assets/helpers/__init__.py +12 -0
- services/assets/helpers/device.py +59 -0
- services/assets/helpers/equipment.py +179 -0
- services/assets/helpers/instruments.py +72 -0
- services/assets/helpers/machines.py +183 -0
- services/assets/helpers/materials.py +76 -0
- services/assets/helpers/parts.py +116 -0
- services/assets/helpers/plc.py +134 -0
- services/assets/helpers/tags.py +108 -0
- services/assets/helpers/tools.py +101 -0
- services/assets/main.py +75 -0
- services/assets/models/__init__.py +12 -0
- services/assets/models/device.py +79 -0
- services/assets/models/equipment.py +222 -0
- services/assets/models/instruments.py +85 -0
- services/assets/models/machines.py +230 -0
- services/assets/models/material.py +266 -0
- services/assets/models/parts.py +96 -0
- services/assets/models/plc.py +264 -0
- services/assets/models/tags.py +76 -0
- services/assets/models/tools.py +179 -0
- services/assets/routers/__init__.py +12 -0
- services/assets/routers/classes.py +65 -0
- services/assets/routers/device.py +86 -0
- services/assets/routers/equipment.py +145 -0
- services/assets/routers/families.py +61 -0
- services/assets/routers/instruments.py +70 -0
- services/assets/routers/machines.py +136 -0
- services/assets/routers/materials.py +105 -0
- services/assets/routers/parts.py +130 -0
- services/assets/routers/plc.py +94 -0
- services/assets/routers/subclasses.py +68 -0
- services/assets/routers/tags.py +138 -0
- services/assets/routers/tools.py +113 -0
- services/auth/helpers/__init__.py +13 -0
- services/auth/helpers/approval_decisions.py +261 -0
- services/auth/helpers/audit_elasticsearch_sync.py +350 -0
- services/auth/helpers/departments.py +53 -0
- services/auth/helpers/graph_store.py +848 -0
- services/auth/helpers/influx_store.py +280 -0
- services/auth/helpers/me.py +33 -0
- services/auth/helpers/nats_consumer.py +618 -0
- services/auth/helpers/nats_store.py +242 -0
- services/auth/helpers/permissions.py +62 -0
- services/auth/helpers/roles.py +87 -0
- services/auth/helpers/store.py +54 -0
- services/auth/helpers/team_members.py +155 -0
- services/auth/helpers/teams.py +87 -0
- services/auth/helpers/tokens.py +71 -0
- services/auth/helpers/users.py +119 -0
- services/auth/helpers/websocket_broadcast.py +41 -0
- services/auth/main.py +88 -0
- services/auth/models/__init__.py +12 -0
- services/auth/models/departments.py +55 -0
- services/auth/models/login.py +20 -0
- services/auth/models/permissions.py +61 -0
- services/auth/models/roles.py +53 -0
- services/auth/models/session.py +26 -0
- services/auth/models/teamMembers.py +59 -0
- services/auth/models/teams.py +56 -0
- services/auth/models/users.py +77 -0
- services/auth/routers/__init__.py +14 -0
- services/auth/routers/auth.py +3839 -0
- services/auth/routers/departments.py +84 -0
- services/auth/routers/integration_config.py +703 -0
- services/auth/routers/me.py +28 -0
- services/auth/routers/permissions.py +96 -0
- services/auth/routers/roles.py +139 -0
- services/auth/routers/session.py +224 -0
- services/auth/routers/team_members.py +152 -0
- services/auth/routers/teams.py +112 -0
- services/auth/routers/users.py +131 -0
- services/auth/routers/websocket_events.py +247 -0
- services/batch_execution/__init__.py +19 -0
- services/batch_execution/pipeline_triggers/__init__.py +53 -0
- services/batch_execution/pipeline_triggers/pipeline_parameter_adjuster.py +440 -0
- services/batch_execution/pipeline_triggers/pipeline_trigger_engine.py +445 -0
- services/batch_execution/pipeline_triggers/re_evaluation_queue.py +341 -0
- services/batch_execution/pipeline_triggers/test_phase3_implementation.py +553 -0
- services/batch_execution/pipeline_triggers/workflow_reevaluator.py +367 -0
- services/batch_execution/smoke_test_e2e_feedback_loop.py +704 -0
- services/batch_execution/workflow_executor.py +478 -0
- services/changeover/helpers/__init__.py +11 -0
- services/changeover/helpers/changeover.py +87 -0
- services/changeover/helpers/changeover_common.py +55 -0
- services/changeover/helpers/changeover_events.py +66 -0
- services/changeover/helpers/changeover_kpis.py +33 -0
- services/changeover/helpers/changeover_matrix.py +60 -0
- services/changeover/helpers/changeover_procedures.py +164 -0
- services/changeover/helpers/changeover_windows.py +96 -0
- services/changeover/main.py +52 -0
- services/changeover/models/__init__.py +11 -0
- services/changeover/models/changeover.py +73 -0
- services/changeover/models/changeover_events.py +142 -0
- services/changeover/models/changeover_kpis.py +75 -0
- services/changeover/models/changeover_matrix.py +63 -0
- services/changeover/models/changeover_procedures.py +108 -0
- services/changeover/models/changeover_tasks.py +87 -0
- services/changeover/models/changeover_windows.py +72 -0
- services/changeover/routers/__init__.py +9 -0
- services/changeover/routers/changeover_events.py +127 -0
- services/changeover/routers/changeover_kpis.py +80 -0
- services/changeover/routers/changeover_matrix.py +80 -0
- services/changeover/routers/changeover_procedures.py +118 -0
- services/changeover/routers/changeover_windows.py +98 -0
- services/common/__init__.py +2 -0
- services/common/approval_chains.py +648 -0
- services/common/auth.py +56 -0
- services/common/cdc.py +52 -0
- services/common/compat.py +217 -0
- services/common/compliance.py +562 -0
- services/common/config.py +134 -0
- services/common/cors.py +17 -0
- services/common/data_transformation.py +195 -0
- services/common/db.py +577 -0
- services/common/embeddings.py +97 -0
- services/common/event_reducers.py +194 -0
- services/common/event_types.py +51 -0
- services/common/integration_ingestion.py +169 -0
- services/common/logging.py +204 -0
- services/common/models/__init__.py +2 -0
- services/common/models/databricks.py +25 -0
- services/common/models/enums.py +64 -0
- services/common/module_control.py +422 -0
- services/common/mongo_cdc_watcher.py +106 -0
- services/common/n8n_auth.py +22 -0
- services/common/neo4j_mirror.py +1087 -0
- services/common/ontology_registry.py +110 -0
- services/common/reasoning_traces.py +52 -0
- services/common/supply_chain_cdc.py +555 -0
- services/common/tracing.py +159 -0
- services/common/utils.py +30 -0
- services/customers/helpers/__init__.py +8 -0
- services/customers/helpers/customer_details.py +64 -0
- services/customers/helpers/customer_metadata.py +64 -0
- services/customers/helpers/customer_order_metrics.py +67 -0
- services/customers/helpers/customer_payment_data.py +67 -0
- services/customers/main.py +50 -0
- services/customers/models/__init__.py +8 -0
- services/customers/models/customer_details.py +42 -0
- services/customers/models/customer_metadata.py +97 -0
- services/customers/models/customer_order_metrics.py +86 -0
- services/customers/models/customer_payment_data.py +60 -0
- services/customers/routers/__init__.py +8 -0
- services/customers/routers/customer_details.py +88 -0
- services/customers/routers/customer_metadata.py +88 -0
- services/customers/routers/customer_order_metrics.py +88 -0
- services/customers/routers/customer_payment_data.py +88 -0
- services/documents/__init__.py +1 -0
- services/documents/helpers/__init__.py +6 -0
- services/documents/helpers/document_metadata.py +569 -0
- services/documents/helpers/document_workflows.py +215 -0
- services/documents/helpers/report_templates.py +113 -0
- services/documents/main.py +49 -0
- services/documents/models/__init__.py +6 -0
- services/documents/models/document_metadata.py +215 -0
- services/documents/models/document_workflows.py +136 -0
- services/documents/models/report_templates.py +132 -0
- services/documents/routers/__init__.py +6 -0
- services/documents/routers/document_metadata.py +654 -0
- services/documents/routers/document_workflows.py +146 -0
- services/documents/routers/report_templates.py +86 -0
- services/events/helpers/__init__.py +5 -0
- services/events/helpers/events.py +394 -0
- services/events/main.py +40 -0
- services/events/models/__init__.py +5 -0
- services/events/models/events.py +50 -0
- services/events/routers/__init__.py +6 -0
- services/events/routers/count_events.py +109 -0
- services/events/routers/events.py +75 -0
- services/events/seed_events.py +196 -0
- services/facilities/helpers/__init__.py +8 -0
- services/facilities/helpers/lines.py +74 -0
- services/facilities/helpers/locations.py +231 -0
- services/facilities/helpers/plants.py +59 -0
- services/facilities/helpers/stages.py +110 -0
- services/facilities/helpers/workstation.py +213 -0
- services/facilities/main.py +60 -0
- services/facilities/models/__init__.py +10 -0
- services/facilities/models/industrialLine.py +72 -0
- services/facilities/models/industrialPlant.py +164 -0
- services/facilities/models/locations.py +74 -0
- services/facilities/models/stages.py +92 -0
- services/facilities/models/worker.py +73 -0
- services/facilities/models/workstation.py +117 -0
- services/facilities/models/workstation_live_state.py +59 -0
- services/facilities/routers/__init__.py +8 -0
- services/facilities/routers/bays.py +81 -0
- services/facilities/routers/buildings.py +92 -0
- services/facilities/routers/floors.py +81 -0
- services/facilities/routers/lines.py +154 -0
- services/facilities/routers/locations.py +208 -0
- services/facilities/routers/plant.py +203 -0
- services/facilities/routers/rooms.py +81 -0
- services/facilities/routers/stages.py +152 -0
- services/facilities/routers/workstation.py +173 -0
- services/file/backup.py +71 -0
- services/file/main.py +45 -0
- services/file/recieve.py +54 -0
- services/file/send.py +55 -0
- services/file/src/core/config.py +90 -0
- services/file/src/core/keycloak.py +152 -0
- services/file/src/core/logging_config.py +9 -0
- services/file/src/core/security.py +33 -0
- services/file/src/helpers/cad_conversion.py +331 -0
- services/file/src/helpers/helpers.py +825 -0
- services/file/src/routes/cad_conversion.py +26 -0
- services/file/src/routes/files.py +136 -0
- services/file/src/routes/presigned.py +154 -0
- services/file/src/services/websocket.py +293 -0
- services/floor_layout/helpers/__init__.py +8 -0
- services/floor_layout/helpers/bays.py +92 -0
- services/floor_layout/helpers/buildings.py +54 -0
- services/floor_layout/helpers/floors.py +65 -0
- services/floor_layout/helpers/rooms.py +76 -0
- services/floor_layout/main.py +52 -0
- services/floor_layout/models/__init__.py +8 -0
- services/floor_layout/models/bays.py +65 -0
- services/floor_layout/models/buildings.py +52 -0
- services/floor_layout/models/floors.py +45 -0
- services/floor_layout/models/rooms.py +61 -0
- services/floor_layout/routers/__init__.py +9 -0
- services/floor_layout/routers/bays.py +143 -0
- services/floor_layout/routers/buildings.py +116 -0
- services/floor_layout/routers/floors.py +89 -0
- services/floor_layout/routers/locations.py +80 -0
- services/floor_layout/routers/rooms.py +134 -0
- services/inventory/helpers/__init__.py +13 -0
- services/inventory/helpers/cycle_counts.py +124 -0
- services/inventory/helpers/inventory_allocations.py +134 -0
- services/inventory/helpers/inventory_item_counts.py +114 -0
- services/inventory/helpers/inventory_item_quantities.py +114 -0
- services/inventory/helpers/inventory_items.py +103 -0
- services/inventory/helpers/inventory_stage_outputs.py +134 -0
- services/inventory/helpers/inventory_transactions.py +112 -0
- services/inventory/helpers/stock_adjustment_requests.py +101 -0
- services/inventory/helpers/warehouse_cycle_counts.py +133 -0
- services/inventory/helpers/warehouse_locations.py +213 -0
- services/inventory/helpers/warehouse_regulated_records.py +123 -0
- services/inventory/main.py +62 -0
- services/inventory/models/__init__.py +17 -0
- services/inventory/models/cycle_counts.py +99 -0
- services/inventory/models/inventory_allocations.py +121 -0
- services/inventory/models/inventory_common.py +65 -0
- services/inventory/models/inventory_enums.py +21 -0
- services/inventory/models/inventory_item_count.py +65 -0
- services/inventory/models/inventory_item_quantity.py +82 -0
- services/inventory/models/inventory_items.py +168 -0
- services/inventory/models/inventory_responses.py +44 -0
- services/inventory/models/inventory_stage_outputs.py +96 -0
- services/inventory/models/inventory_state.py +15 -0
- services/inventory/models/inventory_transactions.py +80 -0
- services/inventory/models/stock_adjustment_requests.py +109 -0
- services/inventory/models/warehouse_cycle_counts.py +119 -0
- services/inventory/models/warehouse_location_models.py +708 -0
- services/inventory/models/warehouse_regulated_records.py +358 -0
- services/inventory/routers/__init__.py +13 -0
- services/inventory/routers/cycle_counts.py +106 -0
- services/inventory/routers/inventory_allocations.py +125 -0
- services/inventory/routers/inventory_item_counts.py +105 -0
- services/inventory/routers/inventory_item_quantities.py +105 -0
- services/inventory/routers/inventory_items.py +109 -0
- services/inventory/routers/inventory_stage_outputs.py +122 -0
- services/inventory/routers/inventory_transactions.py +96 -0
- services/inventory/routers/stock_adjustment_requests.py +124 -0
- services/inventory/routers/warehouse_cycle_counts.py +124 -0
- services/inventory/routers/warehouse_locations.py +426 -0
- services/inventory/routers/warehouse_regulated_records.py +273 -0
- services/iot/helpers/__init__.py +8 -0
- services/iot/helpers/ble_device.py +87 -0
- services/iot/helpers/mqtt_bridge.py +115 -0
- services/iot/helpers/sensor_readings.py +63 -0
- services/iot/helpers/sensors.py +77 -0
- services/iot/helpers/servers.py +72 -0
- services/iot/helpers/uwb_device.py +95 -0
- services/iot/main.py +53 -0
- services/iot/models/__init__.py +8 -0
- services/iot/models/ble_device.py +118 -0
- services/iot/models/sensors.py +256 -0
- services/iot/models/servers.py +206 -0
- services/iot/models/uwb_device.py +106 -0
- services/iot/routers/__init__.py +8 -0
- services/iot/routers/ble_device.py +110 -0
- services/iot/routers/sensors.py +144 -0
- services/iot/routers/servers.py +141 -0
- services/iot/routers/uwb_device.py +148 -0
- services/module_control/__init__.py +1 -0
- services/module_control/helpers/__init__.py +1 -0
- services/module_control/helpers/integration_config.py +243 -0
- services/module_control/helpers/security.py +104 -0
- services/module_control/main.py +44 -0
- services/module_control/models/__init__.py +1 -0
- services/module_control/models/module_control.py +65 -0
- services/module_control/routers/__init__.py +1 -0
- services/module_control/routers/module_control.py +219 -0
- services/orders/helpers/__init__.py +11 -0
- services/orders/helpers/invoices.py +123 -0
- services/orders/helpers/order_customer_metrics.py +61 -0
- services/orders/helpers/order_details.py +71 -0
- services/orders/helpers/order_metadata.py +61 -0
- services/orders/helpers/order_payment_metadata.py +74 -0
- services/orders/helpers/orders.py +119 -0
- services/orders/helpers/sales_orders.py +136 -0
- services/orders/main.py +56 -0
- services/orders/models/__init__.py +11 -0
- services/orders/models/invoices.py +415 -0
- services/orders/models/order_customer_metrics.py +78 -0
- services/orders/models/order_details.py +46 -0
- services/orders/models/order_metadata.py +60 -0
- services/orders/models/order_payment_metadata.py +63 -0
- services/orders/models/orders.py +64 -0
- services/orders/models/sales_orders.py +130 -0
- services/orders/routers/__init__.py +11 -0
- services/orders/routers/invoices.py +111 -0
- services/orders/routers/order_customer_metrics.py +87 -0
- services/orders/routers/order_details.py +87 -0
- services/orders/routers/order_metadata.py +87 -0
- services/orders/routers/order_payment_metadata.py +87 -0
- services/orders/routers/orders.py +74 -0
- services/orders/routers/sales_orders.py +111 -0
- services/pm/helpers/__init__.py +14 -0
- services/pm/helpers/calendar_bookings.py +114 -0
- services/pm/helpers/calibration_point.py +110 -0
- services/pm/helpers/calibrations.py +196 -0
- services/pm/helpers/checklists.py +318 -0
- services/pm/helpers/cleaning.py +333 -0
- services/pm/helpers/downtime.py +376 -0
- services/pm/helpers/kanban_boards.py +186 -0
- services/pm/helpers/maintainance.py +177 -0
- services/pm/helpers/sop.py +1155 -0
- services/pm/helpers/sop_cdc.py +324 -0
- services/pm/helpers/weekly_schedules.py +79 -0
- services/pm/main.py +62 -0
- services/pm/models/__init__.py +14 -0
- services/pm/models/calendar_booking.py +82 -0
- services/pm/models/calibration_point.py +44 -0
- services/pm/models/calibrations.py +167 -0
- services/pm/models/checklists.py +117 -0
- services/pm/models/cleaning.py +203 -0
- services/pm/models/downtime.py +109 -0
- services/pm/models/kanban_board.py +178 -0
- services/pm/models/maintainanceLog.py +148 -0
- services/pm/models/sop.py +152 -0
- services/pm/models/weekly_schedule.py +91 -0
- services/pm/routers/__init__.py +14 -0
- services/pm/routers/calendar_bookings.py +143 -0
- services/pm/routers/calibration_point.py +94 -0
- services/pm/routers/calibrations.py +232 -0
- services/pm/routers/checklists.py +188 -0
- services/pm/routers/cleaning.py +127 -0
- services/pm/routers/downtime.py +143 -0
- services/pm/routers/kanban_boards.py +283 -0
- services/pm/routers/maintainance.py +241 -0
- services/pm/routers/sop.py +437 -0
- services/pm/routers/weekly_schedules.py +108 -0
- services/process_definitions/helpers/__init__.py +11 -0
- services/process_definitions/helpers/cpp_cqa_registry.py +120 -0
- services/process_definitions/helpers/mbmr_templates.py +107 -0
- services/process_definitions/helpers/packing_instructions.py +113 -0
- services/process_definitions/helpers/process_constraints.py +495 -0
- services/process_definitions/helpers/process_corrections.py +279 -0
- services/process_definitions/helpers/process_definition.py +996 -0
- services/process_definitions/helpers/process_node_catalog.py +786 -0
- services/process_definitions/helpers/process_post_checks.py +441 -0
- services/process_definitions/helpers/process_pre_checks.py +351 -0
- services/process_definitions/helpers/process_steps.py +220 -0
- services/process_definitions/main.py +71 -0
- services/process_definitions/models/__init__.py +13 -0
- services/process_definitions/models/cpp_cqa_registry.py +145 -0
- services/process_definitions/models/gxp_change_controls.py +38 -0
- services/process_definitions/models/gxp_risk_assessments.py +30 -0
- services/process_definitions/models/gxp_validation_evidence.py +33 -0
- services/process_definitions/models/mbmr_templates.py +173 -0
- services/process_definitions/models/packing_instructions.py +176 -0
- services/process_definitions/models/process_constraints.py +159 -0
- services/process_definitions/models/process_corrections.py +118 -0
- services/process_definitions/models/process_definition.py +685 -0
- services/process_definitions/models/process_definition_common.py +48 -0
- services/process_definitions/models/process_node_catalog.py +25 -0
- services/process_definitions/models/process_post_checks.py +171 -0
- services/process_definitions/models/process_pre_checks.py +168 -0
- services/process_definitions/models/process_steps.py +170 -0
- services/process_definitions/node_services/__init__.py +8 -0
- services/process_definitions/node_services/common.py +95 -0
- services/process_definitions/node_services/executor.py +499 -0
- services/process_definitions/node_services/flow_simulator.py +733 -0
- services/process_definitions/node_services/functions.py +193 -0
- services/process_definitions/node_services/messaging.py +44 -0
- services/process_definitions/node_services/models.py +221 -0
- services/process_definitions/node_services/network.py +161 -0
- services/process_definitions/node_services/parsers.py +87 -0
- services/process_definitions/node_services/sequence.py +95 -0
- services/process_definitions/node_services/storage.py +50 -0
- services/process_definitions/node_services/webhooks.py +52 -0
- services/process_definitions/routers/__init__.py +10 -0
- services/process_definitions/routers/cpp_cqa_registry.py +86 -0
- services/process_definitions/routers/mbmr_templates.py +84 -0
- services/process_definitions/routers/packing_instructions.py +84 -0
- services/process_definitions/routers/process_constraints.py +564 -0
- services/process_definitions/routers/process_corrections.py +343 -0
- services/process_definitions/routers/process_definition.py +992 -0
- services/process_definitions/routers/process_post_checks.py +529 -0
- services/process_definitions/routers/process_pre_checks.py +435 -0
- services/process_definitions/routers/process_steps.py +274 -0
- services/procurement/helpers/__init__.py +9 -0
- services/procurement/helpers/goods_receipts.py +240 -0
- services/procurement/helpers/purchase_order_shipping_information.py +85 -0
- services/procurement/helpers/purchase_orders.py +68 -0
- services/procurement/helpers/quality_control.py +235 -0
- services/procurement/helpers/sampling.py +404 -0
- services/procurement/main.py +52 -0
- services/procurement/models/__init__.py +9 -0
- services/procurement/models/goods_receipts.py +165 -0
- services/procurement/models/purchase_orders.py +54 -0
- services/procurement/models/quality_control.py +464 -0
- services/procurement/models/reinspection_records.py +28 -0
- services/procurement/models/sampling.py +262 -0
- services/procurement/models/shipping_information.py +51 -0
- services/procurement/routers/__init__.py +9 -0
- services/procurement/routers/goods_receipts.py +201 -0
- services/procurement/routers/purchase_orders.py +106 -0
- services/procurement/routers/quality_control.py +386 -0
- services/procurement/routers/sampling.py +296 -0
- services/procurement/routers/shipping_information.py +97 -0
- services/production/__init__.py +1 -0
- services/production/agents/__init__.py +5 -0
- services/production/agents/batch_planning_agent.py +815 -0
- services/production/models/__init__.py +25 -0
- services/production/models/batch.py +253 -0
- services/products/helpers/__init__.py +10 -0
- services/products/helpers/boms.py +100 -0
- services/products/helpers/drug_research.py +644 -0
- services/products/helpers/product_component.py +168 -0
- services/products/helpers/product_inventory.py +221 -0
- services/products/helpers/product_pricing.py +123 -0
- services/products/helpers/product_utils.py +32 -0
- services/products/helpers/products.py +81 -0
- services/products/main.py +59 -0
- services/products/models/__init__.py +9 -0
- services/products/models/drug_research.py +138 -0
- services/products/models/product_common.py +60 -0
- services/products/models/product_component.py +1028 -0
- services/products/models/product_inventory.py +118 -0
- services/products/models/product_pricing.py +73 -0
- services/products/models/products.py +151 -0
- services/products/routers/__init__.py +9 -0
- services/products/routers/boms.py +116 -0
- services/products/routers/drug_research.py +115 -0
- services/products/routers/product_components.py +123 -0
- services/products/routers/product_inventory.py +185 -0
- services/products/routers/product_pricing.py +136 -0
- services/products/routers/products.py +165 -0
- services/replenishment/__init__.py +1 -0
- services/replenishment/main.py +46 -0
- services/replenishment/routers/__init__.py +1 -0
- services/replenishment/routers/replenishment.py +20 -0
- services/shifts/helpers/__init__.py +7 -0
- services/shifts/helpers/shift_templates.py +124 -0
- services/shifts/helpers/shifts.py +79 -0
- services/shifts/helpers/timesheets.py +137 -0
- services/shifts/main.py +48 -0
- services/shifts/models/__init__.py +8 -0
- services/shifts/models/shift.py +62 -0
- services/shifts/models/shift_template.py +82 -0
- services/shifts/models/time_range.py +31 -0
- services/shifts/models/timesheet.py +196 -0
- services/shifts/routers/__init__.py +7 -0
- services/shifts/routers/shift_templates.py +97 -0
- services/shifts/routers/shifts.py +117 -0
- services/shifts/routers/timesheets.py +117 -0
- services/shipping/helpers/__init__.py +15 -0
- services/shipping/helpers/carrier.py +78 -0
- services/shipping/helpers/customs_declaration.py +104 -0
- services/shipping/helpers/delivery_note.py +99 -0
- services/shipping/helpers/package.py +95 -0
- services/shipping/helpers/pallet.py +85 -0
- services/shipping/helpers/route.py +93 -0
- services/shipping/helpers/shipping_information.py +82 -0
- services/shipping/helpers/shipping_provider_details.py +59 -0
- services/shipping/helpers/shipping_provider_metadata.py +59 -0
- services/shipping/helpers/vehicle.py +85 -0
- services/shipping/helpers/waybill.py +86 -0
- services/shipping/main.py +64 -0
- services/shipping/models/__init__.py +15 -0
- services/shipping/models/carrier.py +97 -0
- services/shipping/models/customs_declaration.py +138 -0
- services/shipping/models/delivery_note.py +163 -0
- services/shipping/models/package.py +152 -0
- services/shipping/models/pallet.py +137 -0
- services/shipping/models/route.py +120 -0
- services/shipping/models/shipping_information.py +55 -0
- services/shipping/models/shipping_provider_details.py +42 -0
- services/shipping/models/shipping_provider_metadata.py +54 -0
- services/shipping/models/vehicle.py +129 -0
- services/shipping/models/waybill.py +189 -0
- services/shipping/routers/__init__.py +15 -0
- services/shipping/routers/carrier.py +99 -0
- services/shipping/routers/customs_declaration.py +132 -0
- services/shipping/routers/delivery_note.py +150 -0
- services/shipping/routers/package.py +141 -0
- services/shipping/routers/pallet.py +108 -0
- services/shipping/routers/route.py +128 -0
- services/shipping/routers/shipping_information.py +97 -0
- services/shipping/routers/shipping_provider_details.py +80 -0
- services/shipping/routers/shipping_provider_metadata.py +80 -0
- services/shipping/routers/vehicle.py +117 -0
- services/shipping/routers/waybill.py +119 -0
- services/suppliers/helpers/__init__.py +13 -0
- services/suppliers/helpers/supplier_capabilities.py +58 -0
- services/suppliers/helpers/supplier_certifications.py +67 -0
- services/suppliers/helpers/supplier_details.py +58 -0
- services/suppliers/helpers/supplier_financials.py +58 -0
- services/suppliers/helpers/supplier_inventory.py +74 -0
- services/suppliers/helpers/supplier_locations.py +60 -0
- services/suppliers/helpers/supplier_pricing.py +69 -0
- services/suppliers/helpers/supplier_quality.py +69 -0
- services/suppliers/helpers/supplier_shipping.py +69 -0
- services/suppliers/main.py +60 -0
- services/suppliers/models/__init__.py +13 -0
- services/suppliers/models/supplier_capabilities.py +70 -0
- services/suppliers/models/supplier_certifications.py +64 -0
- services/suppliers/models/supplier_details.py +75 -0
- services/suppliers/models/supplier_financials.py +69 -0
- services/suppliers/models/supplier_inventory.py +76 -0
- services/suppliers/models/supplier_locations.py +70 -0
- services/suppliers/models/supplier_pricing.py +74 -0
- services/suppliers/models/supplier_quality.py +74 -0
- services/suppliers/models/supplier_shipping.py +76 -0
- services/suppliers/routers/__init__.py +13 -0
- services/suppliers/routers/supplier_capabilities.py +88 -0
- services/suppliers/routers/supplier_certifications.py +87 -0
- services/suppliers/routers/supplier_details.py +83 -0
- services/suppliers/routers/supplier_financials.py +83 -0
- services/suppliers/routers/supplier_inventory.py +105 -0
- services/suppliers/routers/supplier_locations.py +89 -0
- services/suppliers/routers/supplier_pricing.py +96 -0
- services/suppliers/routers/supplier_quality.py +96 -0
- services/suppliers/routers/supplier_shipping.py +96 -0
- services/supply_allocation/main.py +46 -0
- services/supply_allocation/routers/__init__.py +1 -0
- services/supply_allocation/routers/allocation.py +20 -0
- services/taxonomy/helpers/__init__.py +7 -0
- services/taxonomy/helpers/classes.py +48 -0
- services/taxonomy/helpers/family.py +53 -0
- services/taxonomy/helpers/subclass.py +58 -0
- services/taxonomy/main.py +48 -0
- services/taxonomy/models/__init__.py +7 -0
- services/taxonomy/models/classes.py +52 -0
- services/taxonomy/models/family.py +60 -0
- services/taxonomy/models/subclass.py +50 -0
- services/taxonomy/routers/__init__.py +7 -0
- services/taxonomy/routers/classes.py +78 -0
- services/taxonomy/routers/family.py +77 -0
- services/taxonomy/routers/subclass.py +82 -0
- services/warehouse_execution/__init__.py +1 -0
- services/warehouse_execution/main.py +46 -0
- services/warehouse_execution/routers/__init__.py +1 -0
- services/warehouse_execution/routers/execution.py +21 -0
- services/work_order_agent/__init__.py +17 -0
- services/work_order_agent/agent/__init__.py +17 -0
- services/work_order_agent/agent/work_order_agent.py +658 -0
- services/work_order_agent/tracking/__init__.py +101 -0
- services/work_order_agent/tracking/event_system.py +182 -0
- services/work_order_agent/tracking/state_machine.py +163 -0
- services/work_order_agent/tracking/state_machine_integrator.py +295 -0
- services/work_order_agent/tracking/test_phase2_implementation.py +302 -0
- services/work_order_agent/tracking/time_analysis.py +301 -0
- services/work_order_agent/tracking/tracked_work_order.py +255 -0
- services/work_order_agent/tracking/work_order_adapter.py +367 -0
- services/work_order_agent/tracking/work_order_batch_manager.py +406 -0
- services/work_order_agent/tracking/work_order_repository.py +431 -0
- services/workorders/helpers/__init__.py +5 -0
- services/workorders/helpers/area_room_usage_ledger.py +139 -0
- services/workorders/helpers/batch_execution_records.py +265 -0
- services/workorders/helpers/batch_release_workflows.py +158 -0
- services/workorders/helpers/batch_step_executions.py +145 -0
- services/workorders/helpers/equipment_usage_ledger.py +209 -0
- services/workorders/helpers/executed_bmr_records.py +170 -0
- services/workorders/helpers/executed_bpr_records.py +170 -0
- services/workorders/helpers/executed_instruction_evidence.py +155 -0
- services/workorders/helpers/ipc_result_records.py +134 -0
- services/workorders/helpers/production_batches.py +117 -0
- services/workorders/helpers/work_orders.py +367 -0
- services/workorders/helpers/yield_reconciliation_records.py +158 -0
- services/workorders/main.py +110 -0
- services/workorders/models/__init__.py +5 -0
- services/workorders/models/area_room_usage_ledger.py +154 -0
- services/workorders/models/batch_execution_records.py +575 -0
- services/workorders/models/batch_release_workflows.py +190 -0
- services/workorders/models/batch_step_executions.py +142 -0
- services/workorders/models/equipment_usage_ledger.py +144 -0
- services/workorders/models/executed_bmr_records.py +220 -0
- services/workorders/models/executed_bpr_records.py +220 -0
- services/workorders/models/executed_instruction_evidence.py +128 -0
- services/workorders/models/ipc_result_records.py +164 -0
- services/workorders/models/production_batches.py +181 -0
- services/workorders/models/work_orders.py +255 -0
- services/workorders/models/yield_reconciliation_records.py +175 -0
- services/workorders/routers/__init__.py +5 -0
- services/workorders/routers/area_room_usage_ledger.py +117 -0
- services/workorders/routers/batch_execution_records.py +103 -0
- services/workorders/routers/batch_release_workflows.py +86 -0
- services/workorders/routers/batch_step_executions.py +88 -0
- services/workorders/routers/equipment_usage_ledger.py +115 -0
- services/workorders/routers/executed_bmr_records.py +86 -0
- services/workorders/routers/executed_bpr_records.py +86 -0
- services/workorders/routers/executed_instruction_evidence.py +86 -0
- services/workorders/routers/ipc_result_records.py +86 -0
- services/workorders/routers/production_batches.py +86 -0
- services/workorders/routers/work_orders.py +257 -0
- services/workorders/routers/yield_reconciliation_records.py +86 -0
- src/broca/__init__.py +5 -0
- src/broca/agent.py +201 -0
- src/cerebellum/__init__.py +0 -0
- src/cerebellum/adapter.py +84 -0
- src/cerebellum/capabilities/__init__.py +0 -0
- src/cerebellum/capabilities/agent/__init__.py +0 -0
- src/cerebellum/capabilities/agent/agents.py +65 -0
- src/cerebellum/capabilities/ai/__init__.py +0 -0
- src/cerebellum/capabilities/ai/providers.py +106 -0
- src/cerebellum/capabilities/api/__init__.py +0 -0
- src/cerebellum/capabilities/api/graphql.py +35 -0
- src/cerebellum/capabilities/api/rest_api.py +45 -0
- src/cerebellum/capabilities/api/webhook.py +30 -0
- src/cerebellum/capabilities/browser/__init__.py +0 -0
- src/cerebellum/capabilities/browser/browsers.py +27 -0
- src/cerebellum/capabilities/cloud/__init__.py +0 -0
- src/cerebellum/capabilities/cloud/cloud.py +46 -0
- src/cerebellum/capabilities/communication/__init__.py +0 -0
- src/cerebellum/capabilities/communication/communication.py +62 -0
- src/cerebellum/capabilities/database/__init__.py +0 -0
- src/cerebellum/capabilities/database/elasticsearch.py +40 -0
- src/cerebellum/capabilities/database/influxdb.py +37 -0
- src/cerebellum/capabilities/database/mongodb.py +50 -0
- src/cerebellum/capabilities/database/neo4j.py +32 -0
- src/cerebellum/capabilities/database/redis.py +44 -0
- src/cerebellum/capabilities/enterprise/__init__.py +0 -0
- src/cerebellum/capabilities/enterprise/opensource.py +180 -0
- src/cerebellum/capabilities/enterprise/proprietary.py +313 -0
- src/cerebellum/capabilities/event_streaming/__init__.py +0 -0
- src/cerebellum/capabilities/event_streaming/streaming.py +38 -0
- src/cerebellum/capabilities/infrastructure/__init__.py +0 -0
- src/cerebellum/capabilities/infrastructure/infrastructure.py +30 -0
- src/cerebellum/capabilities/productivity/__init__.py +0 -0
- src/cerebellum/capabilities/productivity/productivity.py +158 -0
- src/cerebellum/capabilities/robotics/__init__.py +0 -0
- src/cerebellum/capabilities/robotics/robotics.py +124 -0
- src/cerebellum/capabilities/runtime/__init__.py +0 -0
- src/cerebellum/capabilities/runtime/runtimes.py +92 -0
- src/cerebellum/capabilities/search/__init__.py +0 -0
- src/cerebellum/capabilities/search/search.py +63 -0
- src/cerebellum/capabilities/source_control/__init__.py +0 -0
- src/cerebellum/capabilities/source_control/source_control.py +113 -0
- src/cerebellum/capabilities/storage/__init__.py +0 -0
- src/cerebellum/capabilities/storage/storage.py +94 -0
- src/cerebellum/capabilities/workflow/__init__.py +0 -0
- src/cerebellum/capabilities/workflow/workflows.py +49 -0
- src/cerebellum/capability.py +108 -0
- src/cerebellum/config.py +157 -0
- src/cerebellum/fallback.py +147 -0
- src/cerebellum/fallback_engine.py +121 -0
- src/cerebellum/key_manager.py +129 -0
- src/cerebellum/keystore.py +179 -0
- src/cerebellum/lifecycle.py +54 -0
- src/cerebellum/metadata.py +61 -0
- src/cerebellum/operator/base.py +25 -0
- src/cerebellum/peripheral.py +92 -0
- src/cerebellum/registry.py +98 -0
- src/cerebellum/resolve_entity_capability.py +259 -0
- src/cingulate/benchmark/__init__.py +23 -0
- src/cingulate/benchmark/reporter.py +102 -0
- src/cingulate/benchmark/runner.py +159 -0
- src/cingulate/benchmark/scenario_runner.py +150 -0
- src/cingulate/benchmark/validator.py +102 -0
- src/cingulate/governance/__init__.py +21 -0
- src/cingulate/governance/architecture_validator.py +194 -0
- src/cingulate/governance/compliance.py +104 -0
- src/cingulate/governance/governance.py +77 -0
- src/cingulate/governance/policy_registry.py +91 -0
- src/cortex/__init__.py +33 -0
- src/cortex/cost.py +71 -0
- src/cortex/counterfactual.py +162 -0
- src/cortex/digital_twin.py +90 -0
- src/cortex/experience.py +83 -0
- src/cortex/feedback.py +144 -0
- src/cortex/loss.py +116 -0
- src/cortex/prediction.py +142 -0
- src/cortex/replay.py +130 -0
- src/cortex/reward.py +113 -0
- src/cortex/simulator.py +102 -0
- src/cortex/world_model.py +180 -0
- src/cortex/world_model_simulation.py +1591 -0
- src/cortex/world_state.py +121 -0
- src/cortex/xavier.py +250 -0
- src/deepdive/__init__.py +29 -0
- src/deepdive/aggregation.py +113 -0
- src/deepdive/digital_twin_aggregator.py +128 -0
- src/deepdive/elasticsearch_adapter.py +110 -0
- src/deepdive/fleet_analytics.py +131 -0
- src/deepdive/knowledge_aggregator.py +130 -0
- src/homeostasis/__init__.py +19 -0
- src/homeostasis/control_plane.py +159 -0
- src/introspection/__init__.py +38 -0
- src/introspection/alerting.py +142 -0
- src/introspection/health.py +101 -0
- src/introspection/lemon.py +243 -0
- src/introspection/logging.py +147 -0
- src/introspection/metrics.py +106 -0
- src/introspection/tracing.py +162 -0
- src/monkey_brain/__init__.py +1 -0
- src/monkey_brain/api/main.py +148 -0
- src/monkey_brain/api/models.py +81 -0
- src/monkey_brain/api/routes/routes/keys.py +106 -0
- src/monkey_brain/api/routes/routes/run.py +169 -0
- src/monkey_brain/api/routes/routes/simulate.py +485 -0
- src/monkey_brain/dlm/__init__.py +44 -0
- src/monkey_brain/dlm/dlm.py +139 -0
- src/monkey_brain/dlm/gc.py +115 -0
- src/monkey_brain/dlm/lifecycle.py +149 -0
- src/monkey_brain/dlm/orphans.py +99 -0
- src/monkey_brain/dlm/storage.py +149 -0
- src/monkey_brain/dlm/ttl.py +140 -0
- src/monkey_brain/documents/__init__.py +0 -0
- src/monkey_brain/documents/document_ocr.py +6 -0
- src/monkey_brain/kernel/__init__.py +53 -0
- src/monkey_brain/kernel/capability_interface.py +144 -0
- src/monkey_brain/kernel/classifier/__init__.py +1 -0
- src/monkey_brain/kernel/classifier/embed_classifier.py +125 -0
- src/monkey_brain/kernel/classifier/intent_examples.py +106 -0
- src/monkey_brain/kernel/dag.py +23 -0
- src/monkey_brain/kernel/execution_state.py +257 -0
- src/monkey_brain/kernel/goal_planner.py +85 -0
- src/monkey_brain/kernel/goal_router.py +20 -0
- src/monkey_brain/kernel/goals/__init__.py +1 -0
- src/monkey_brain/kernel/goals/goal.py +130 -0
- src/monkey_brain/kernel/goals/goal_bootstrap.py +38 -0
- src/monkey_brain/kernel/goals/goal_classifier.py +132 -0
- src/monkey_brain/kernel/goals/goal_registry.py +75 -0
- src/monkey_brain/kernel/intents/__init__.py +1 -0
- src/monkey_brain/kernel/intents/event_adapter.py +246 -0
- src/monkey_brain/kernel/intents/helpers.py +13 -0
- src/monkey_brain/kernel/intents/intent_registry.py +705 -0
- src/monkey_brain/kernel/intents/intent_router.py +102 -0
- src/monkey_brain/kernel/intents/predicates/approval_create.py +9 -0
- src/monkey_brain/kernel/intents/predicates/approval_decision.py +9 -0
- src/monkey_brain/kernel/intents/predicates/approval_hold.py +9 -0
- src/monkey_brain/kernel/intents/predicates/approval_query.py +9 -0
- src/monkey_brain/kernel/intents/predicates/batch_close.py +9 -0
- src/monkey_brain/kernel/intents/predicates/batch_creation.py +9 -0
- src/monkey_brain/kernel/intents/predicates/batch_delete.py +9 -0
- src/monkey_brain/kernel/intents/predicates/batch_hold.py +9 -0
- src/monkey_brain/kernel/intents/predicates/batch_record.py +9 -0
- src/monkey_brain/kernel/intents/predicates/batch_update.py +9 -0
- src/monkey_brain/kernel/intents/predicates/change_control.py +49 -0
- src/monkey_brain/kernel/intents/predicates/compliance_audit.py +14 -0
- src/monkey_brain/kernel/intents/predicates/decision_intelligence.py +9 -0
- src/monkey_brain/kernel/intents/predicates/drug_research.py +9 -0
- src/monkey_brain/kernel/intents/predicates/fuzzy_match.py +19 -0
- src/monkey_brain/kernel/intents/predicates/production_kpi.py +9 -0
- src/monkey_brain/kernel/intents/predicates/sop_create.py +9 -0
- src/monkey_brain/kernel/intents/predicates/sop_query.py +9 -0
- src/monkey_brain/kernel/intents/predicates/sop_update.py +9 -0
- src/monkey_brain/kernel/intents/predicates/warehouse_shipping.py +9 -0
- src/monkey_brain/kernel/intents/predicates/work_order_create.py +9 -0
- src/monkey_brain/kernel/intents/predicates/work_order_delete.py +9 -0
- src/monkey_brain/kernel/intents/predicates/work_order_hold.py +9 -0
- src/monkey_brain/kernel/intents/predicates/work_order_query.py +9 -0
- src/monkey_brain/kernel/intents/predicates/work_order_status.py +9 -0
- src/monkey_brain/kernel/intents/predicates/work_order_update.py +9 -0
- src/monkey_brain/kernel/intents/predicates/worker.py +9 -0
- src/monkey_brain/kernel/intents/telemetry_adapter.py +274 -0
- src/monkey_brain/kernel/intents/utils.py +68 -0
- src/monkey_brain/kernel/learning.py +98 -0
- src/monkey_brain/kernel/llm_explorer.py +188 -0
- src/monkey_brain/kernel/loss.py +81 -0
- src/monkey_brain/kernel/nlp/__init__.py +1 -0
- src/monkey_brain/kernel/nlp/compat.py +23 -0
- src/monkey_brain/kernel/nlp/models.py +10 -0
- src/monkey_brain/kernel/nlp/question_analyzer.py +203 -0
- src/monkey_brain/kernel/nlp/spacy_parser.py +53 -0
- src/monkey_brain/kernel/observer.py +97 -0
- src/monkey_brain/kernel/parser/__init__.py +3 -0
- src/monkey_brain/kernel/parser/ast.py +28 -0
- src/monkey_brain/kernel/parser/extractors/__init__.py +11 -0
- src/monkey_brain/kernel/parser/extractors/entities.py +21 -0
- src/monkey_brain/kernel/parser/extractors/filters.py +16 -0
- src/monkey_brain/kernel/parser/extractors/projections.py +36 -0
- src/monkey_brain/kernel/parser/extractors/verbs.py +31 -0
- src/monkey_brain/kernel/parser/parser.py +57 -0
- src/monkey_brain/kernel/parser/rules.py +75 -0
- src/monkey_brain/kernel/pipeline.py +44 -0
- src/monkey_brain/kernel/planner.py +57 -0
- src/monkey_brain/kernel/rl/__init__.py +33 -0
- src/monkey_brain/kernel/rl/learner.py +98 -0
- src/monkey_brain/kernel/rl/policy.py +254 -0
- src/monkey_brain/kernel/rl/reward.py +117 -0
- src/monkey_brain/kernel/rl/transition.py +112 -0
- src/monkey_brain/persistence/__init__.py +47 -0
- src/monkey_brain/persistence/adapters.py +49 -0
- src/monkey_brain/persistence/events.py +105 -0
- src/monkey_brain/persistence/manager.py +124 -0
- src/monkey_brain/persistence/mongodb_adapter.py +91 -0
- src/monkey_brain/persistence/redis_adapter.py +93 -0
- src/monkey_brain/persistence/reducer.py +111 -0
- src/monkey_brain/runtime/__init__.py +49 -0
- src/monkey_brain/runtime/depedencies.py +8 -0
- src/monkey_brain/runtime/engine.py +183 -0
- src/monkey_brain/runtime/message_bus.py +82 -0
- src/monkey_brain/runtime/process.py +144 -0
- src/monkey_brain/runtime/resource_manager.py +100 -0
- src/monkey_brain/runtime/routers.py +8 -0
- src/monkey_brain/runtime/runtime.py +199 -0
- src/monkey_brain/runtime/scheduler.py +165 -0
- src/monkey_brain/runtime/supervisor.py +133 -0
- src/monkey_brain/runtime/worker_pool.py +111 -0
- src/plasticity/seed/__init__.py +30 -0
- src/plasticity/seed/benchmark_generator.py +105 -0
- src/plasticity/seed/event_generator.py +122 -0
- src/plasticity/seed/scenario_builder.py +134 -0
- src/plasticity/seed/seed_data.py +206 -0
- src/plasticity/seed/seeder.py +122 -0
- src/plasticity/testing/__init__.py +28 -0
- src/plasticity/testing/performance.py +131 -0
- src/plasticity/testing/profiler.py +255 -0
- src/plasticity/testing/reporter.py +84 -0
- src/plasticity/testing/runner.py +209 -0
- src/sync/__init__.py +12 -0
- src/sync/cloud_aggregator.py +63 -0
- src/sync/edge_node.py +51 -0
- src/sync/sync_manager.py +74 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"""TTL Manager — Time-To-Live management for data objects.
|
|
2
|
+
|
|
3
|
+
Supports configurable TTL per data class.
|
|
4
|
+
Tracks object creation time and expiration.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import time
|
|
10
|
+
from dataclasses import dataclass, field
|
|
11
|
+
from datetime import datetime, timezone
|
|
12
|
+
from typing import Any
|
|
13
|
+
from uuid import uuid4
|
|
14
|
+
|
|
15
|
+
from src.monkey_brain.dlm.lifecycle import LifecyclePolicy, get_policy
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class TtlEntry:
|
|
20
|
+
"""An entry with TTL tracking."""
|
|
21
|
+
|
|
22
|
+
entry_id: str = field(default_factory=lambda: f"ttl-{uuid4().hex[:8]}")
|
|
23
|
+
data_type: str = ""
|
|
24
|
+
object_id: str = ""
|
|
25
|
+
created_at: float = field(default_factory=time.time)
|
|
26
|
+
ttl_seconds: int | None = None
|
|
27
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def age_seconds(self) -> float:
|
|
31
|
+
return time.time() - self.created_at
|
|
32
|
+
|
|
33
|
+
@property
|
|
34
|
+
def remaining_seconds(self) -> float | None:
|
|
35
|
+
if self.ttl_seconds is None:
|
|
36
|
+
return None
|
|
37
|
+
remaining = self.ttl_seconds - self.age_seconds
|
|
38
|
+
return max(0.0, remaining)
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def is_expired(self) -> bool:
|
|
42
|
+
if self.ttl_seconds is None:
|
|
43
|
+
return False
|
|
44
|
+
return self.age_seconds >= self.ttl_seconds
|
|
45
|
+
|
|
46
|
+
def to_dict(self) -> dict[str, Any]:
|
|
47
|
+
return {
|
|
48
|
+
"entry_id": self.entry_id,
|
|
49
|
+
"data_type": self.data_type,
|
|
50
|
+
"object_id": self.object_id,
|
|
51
|
+
"created_at": self.created_at,
|
|
52
|
+
"age_seconds": round(self.age_seconds, 2),
|
|
53
|
+
"ttl_seconds": self.ttl_seconds,
|
|
54
|
+
"remaining_seconds": round(self.remaining_seconds, 2) if self.remaining_seconds is not None else None,
|
|
55
|
+
"is_expired": self.is_expired,
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class TtlManager:
|
|
60
|
+
"""Manages TTL for all data objects.
|
|
61
|
+
|
|
62
|
+
Responsibilities:
|
|
63
|
+
- Track object creation and expiration
|
|
64
|
+
- Query expired objects
|
|
65
|
+
- Apply TTL policies
|
|
66
|
+
"""
|
|
67
|
+
|
|
68
|
+
def __init__(self):
|
|
69
|
+
self._entries: dict[str, TtlEntry] = {}
|
|
70
|
+
self._by_type: dict[str, list[str]] = {}
|
|
71
|
+
|
|
72
|
+
def register(
|
|
73
|
+
self,
|
|
74
|
+
data_type: str,
|
|
75
|
+
object_id: str,
|
|
76
|
+
ttl_seconds: int | None = None,
|
|
77
|
+
**metadata: Any,
|
|
78
|
+
) -> TtlEntry:
|
|
79
|
+
"""Register an object with TTL."""
|
|
80
|
+
policy = get_policy(data_type)
|
|
81
|
+
effective_ttl = ttl_seconds if ttl_seconds is not None else policy.ttl_seconds
|
|
82
|
+
|
|
83
|
+
entry = TtlEntry(
|
|
84
|
+
data_type=data_type,
|
|
85
|
+
object_id=object_id,
|
|
86
|
+
ttl_seconds=effective_ttl,
|
|
87
|
+
metadata=metadata,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
self._entries[entry.entry_id] = entry
|
|
91
|
+
|
|
92
|
+
if data_type not in self._by_type:
|
|
93
|
+
self._by_type[data_type] = []
|
|
94
|
+
self._by_type[data_type].append(entry.entry_id)
|
|
95
|
+
|
|
96
|
+
return entry
|
|
97
|
+
|
|
98
|
+
def is_expired(self, entry_id: str) -> bool:
|
|
99
|
+
"""Check if an entry has expired."""
|
|
100
|
+
entry = self._entries.get(entry_id)
|
|
101
|
+
return entry.is_expired if entry else False
|
|
102
|
+
|
|
103
|
+
def get_expired(self, data_type: str | None = None) -> list[TtlEntry]:
|
|
104
|
+
"""Get all expired entries."""
|
|
105
|
+
expired = []
|
|
106
|
+
for entry in self._entries.values():
|
|
107
|
+
if entry.is_expired:
|
|
108
|
+
if data_type is None or entry.data_type == data_type:
|
|
109
|
+
expired.append(entry)
|
|
110
|
+
return expired
|
|
111
|
+
|
|
112
|
+
def get_by_type(self, data_type: str) -> list[TtlEntry]:
|
|
113
|
+
"""Get all entries of a type."""
|
|
114
|
+
entry_ids = self._by_type.get(data_type, [])
|
|
115
|
+
return [self._entries[eid] for eid in entry_ids if eid in self._entries]
|
|
116
|
+
|
|
117
|
+
def remove(self, entry_id: str) -> bool:
|
|
118
|
+
"""Remove an entry."""
|
|
119
|
+
if entry_id in self._entries:
|
|
120
|
+
entry = self._entries[entry_id]
|
|
121
|
+
self._by_type.get(entry.data_type, []).remove(entry_id)
|
|
122
|
+
del self._entries[entry_id]
|
|
123
|
+
return True
|
|
124
|
+
return False
|
|
125
|
+
|
|
126
|
+
def count(self, data_type: str | None = None) -> int:
|
|
127
|
+
"""Count entries."""
|
|
128
|
+
if data_type:
|
|
129
|
+
return len(self._by_type.get(data_type, []))
|
|
130
|
+
return len(self._entries)
|
|
131
|
+
|
|
132
|
+
def summary(self) -> dict:
|
|
133
|
+
expired_count = sum(1 for e in self._entries.values() if e.is_expired)
|
|
134
|
+
by_type = {dt: len(ids) for dt, ids in self._by_type.items()}
|
|
135
|
+
return {
|
|
136
|
+
"total": len(self._entries),
|
|
137
|
+
"expired": expired_count,
|
|
138
|
+
"active": len(self._entries) - expired_count,
|
|
139
|
+
"by_type": by_type,
|
|
140
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""MonkeyBrain Cognitive Kernel (Deadpool).
|
|
2
|
+
|
|
3
|
+
The Kernel owns cognition only.
|
|
4
|
+
|
|
5
|
+
Responsibilities:
|
|
6
|
+
- Intent: classify what the user wants
|
|
7
|
+
- Goal: structure the intent for execution
|
|
8
|
+
- Planner: generate candidate capability pipelines
|
|
9
|
+
- Policy: select which pipeline to execute (Bellman/RL)
|
|
10
|
+
- LLM Explorer: generate candidate workflows (exploration)
|
|
11
|
+
- ExecutionState: single source of truth
|
|
12
|
+
- Observer: passive execution recording
|
|
13
|
+
- Loss: quantify prediction error
|
|
14
|
+
- Learning: update Policy from Loss
|
|
15
|
+
|
|
16
|
+
The Kernel never executes capabilities.
|
|
17
|
+
The Kernel never manages threads.
|
|
18
|
+
The Kernel never performs integrations.
|
|
19
|
+
The Kernel only produces executable capability pipelines.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from src.monkey_brain.kernel.pipeline import Pipeline, PipelineStep
|
|
23
|
+
from src.monkey_brain.kernel.capability_interface import ICapability
|
|
24
|
+
from src.monkey_brain.kernel.observer import Observer, Observation
|
|
25
|
+
from src.monkey_brain.kernel.loss import Loss, compute_loss
|
|
26
|
+
from src.monkey_brain.kernel.learning import Learning, Transition
|
|
27
|
+
from src.monkey_brain.kernel.rl.policy import IPolicy, BellmanPolicy
|
|
28
|
+
from src.monkey_brain.kernel.rl.transition import Transition as RLTransition, TransitionTable
|
|
29
|
+
from src.monkey_brain.kernel.rl.reward import RewardModel, RewardSignal
|
|
30
|
+
from src.monkey_brain.kernel.rl.learner import Learner, LearningMetrics
|
|
31
|
+
from src.monkey_brain.kernel.llm_explorer import LLMExplorer, WorkflowCandidate
|
|
32
|
+
|
|
33
|
+
__all__ = [
|
|
34
|
+
"Pipeline",
|
|
35
|
+
"PipelineStep",
|
|
36
|
+
"ICapability",
|
|
37
|
+
"Observer",
|
|
38
|
+
"Observation",
|
|
39
|
+
"Loss",
|
|
40
|
+
"compute_loss",
|
|
41
|
+
"Learning",
|
|
42
|
+
"Transition",
|
|
43
|
+
"IPolicy",
|
|
44
|
+
"BellmanPolicy",
|
|
45
|
+
"RLTransition",
|
|
46
|
+
"TransitionTable",
|
|
47
|
+
"RewardModel",
|
|
48
|
+
"RewardSignal",
|
|
49
|
+
"Learner",
|
|
50
|
+
"LearningMetrics",
|
|
51
|
+
"LLMExplorer",
|
|
52
|
+
"WorkflowCandidate",
|
|
53
|
+
]
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"""Capability Interface — Uniform execution interface for all runtime capabilities.
|
|
2
|
+
|
|
3
|
+
This module defines the ICapability interface that all capabilities must implement.
|
|
4
|
+
Every capability transforms execution state and contributes to policy learning.
|
|
5
|
+
|
|
6
|
+
Key Principles:
|
|
7
|
+
- Every capability implements the same interface
|
|
8
|
+
- All capabilities are treated identically by the runtime
|
|
9
|
+
- No privileged execution stages
|
|
10
|
+
- Every capability augments execution state
|
|
11
|
+
- Every capability contributes policy observations
|
|
12
|
+
- Bellman selects capabilities, not pipelines
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from abc import ABC, abstractmethod
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
from src.monkey_brain.kernel.execution_state import ExecutionState, CapabilityResult
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ICapability(ABC):
|
|
24
|
+
"""Core capability interface — all capabilities must implement.
|
|
25
|
+
|
|
26
|
+
Every capability:
|
|
27
|
+
- consumes an execution state
|
|
28
|
+
- augments the execution state
|
|
29
|
+
- emits observations
|
|
30
|
+
- contributes policy updates
|
|
31
|
+
- returns a new execution state
|
|
32
|
+
|
|
33
|
+
The runtime treats all capabilities identically.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
@property
|
|
37
|
+
@abstractmethod
|
|
38
|
+
def capability_name(self) -> str:
|
|
39
|
+
"""Unique name of this capability."""
|
|
40
|
+
...
|
|
41
|
+
|
|
42
|
+
@property
|
|
43
|
+
@abstractmethod
|
|
44
|
+
def capability_type(self) -> str:
|
|
45
|
+
"""Type of capability (e.g., 'entity_resolution', 'knowledge_retrieval')."""
|
|
46
|
+
...
|
|
47
|
+
|
|
48
|
+
@abstractmethod
|
|
49
|
+
async def execute(self, state: ExecutionState, **kwargs: Any) -> CapabilityResult:
|
|
50
|
+
"""Execute the capability and return updated state.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
state: Current execution state
|
|
54
|
+
**kwargs: Additional execution context
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
CapabilityResult with updated state and execution metadata
|
|
58
|
+
"""
|
|
59
|
+
...
|
|
60
|
+
|
|
61
|
+
@abstractmethod
|
|
62
|
+
def can_execute(self, state: ExecutionState) -> bool:
|
|
63
|
+
"""Determine if this capability can execute given current state.
|
|
64
|
+
|
|
65
|
+
Used by Bellman for capability selection.
|
|
66
|
+
|
|
67
|
+
Args:
|
|
68
|
+
state: Current execution state
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
True if capability can execute, False otherwise
|
|
72
|
+
"""
|
|
73
|
+
...
|
|
74
|
+
|
|
75
|
+
@abstractmethod
|
|
76
|
+
def estimate_reward(self, state: ExecutionState) -> float:
|
|
77
|
+
"""Estimate expected reward for executing this capability.
|
|
78
|
+
|
|
79
|
+
Used by Bellman for policy evaluation.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
state: Current execution state
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
Estimated reward (0.0 to 1.0)
|
|
86
|
+
"""
|
|
87
|
+
...
|
|
88
|
+
|
|
89
|
+
@abstractmethod
|
|
90
|
+
def estimate_cost(self, state: ExecutionState) -> float:
|
|
91
|
+
"""Estimate execution cost for this capability.
|
|
92
|
+
|
|
93
|
+
Used by Bellman for cost-benefit analysis.
|
|
94
|
+
|
|
95
|
+
Args:
|
|
96
|
+
state: Current execution state
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
Estimated cost (0.0 to 1.0, where higher is more expensive)
|
|
100
|
+
"""
|
|
101
|
+
...
|
|
102
|
+
|
|
103
|
+
def compute_confidence(self, state: ExecutionState) -> float:
|
|
104
|
+
"""Compute confidence that this capability will succeed.
|
|
105
|
+
|
|
106
|
+
Args:
|
|
107
|
+
state: Current execution state
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
Confidence score (0.0 to 1.0)
|
|
111
|
+
"""
|
|
112
|
+
return 0.5 # Default confidence - override in subclasses
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class EntityResolutionCapability(ICapability):
|
|
116
|
+
"""Base class for entity resolution capabilities."""
|
|
117
|
+
|
|
118
|
+
@property
|
|
119
|
+
def capability_type(self) -> str:
|
|
120
|
+
return "entity_resolution"
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
class KnowledgeRetrievalCapability(ICapability):
|
|
124
|
+
"""Base class for knowledge retrieval capabilities."""
|
|
125
|
+
|
|
126
|
+
@property
|
|
127
|
+
def capability_type(self) -> str:
|
|
128
|
+
return "knowledge_retrieval"
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class AnalysisCapability(ICapability):
|
|
132
|
+
"""Base class for analysis capabilities."""
|
|
133
|
+
|
|
134
|
+
@property
|
|
135
|
+
def capability_type(self) -> str:
|
|
136
|
+
return "analysis"
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
class AnswerGenerationCapability(ICapability):
|
|
140
|
+
"""Base class for answer generation capabilities."""
|
|
141
|
+
|
|
142
|
+
@property
|
|
143
|
+
def capability_type(self) -> str:
|
|
144
|
+
return "answer_generation"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Classifier module."""
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"""Embedding-based intent classifier with logistic regression head."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import logging
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
from src.monkey_brain.kernel.classifier.intent_examples import INTENT_EXAMPLES
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
import logging
|
|
14
|
+
import numpy as np
|
|
15
|
+
from typing import Any
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
# Module-level singleton
|
|
20
|
+
_classifier: "EmbedClassifier | None" = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class EmbedClassifier:
|
|
24
|
+
"""
|
|
25
|
+
Intent classifier using embeddings + logistic regression.
|
|
26
|
+
Model-agnostic: swap the SentenceTransformer and retrain.
|
|
27
|
+
~30ms per call after warm-up. No generation, no Ollama round trip.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
def __init__(self, model_name: str = "all-MiniLM-L6-v2"):
|
|
31
|
+
from sentence_transformers import SentenceTransformer
|
|
32
|
+
self.model = SentenceTransformer(model_name, device="cpu")
|
|
33
|
+
self.intent_labels: list[str] = []
|
|
34
|
+
self.intent_matrix: np.ndarray = self._build_matrix()
|
|
35
|
+
self.classifier = self._train_classifier()
|
|
36
|
+
|
|
37
|
+
def _build_matrix(self) -> np.ndarray:
|
|
38
|
+
sentences, labels = [], []
|
|
39
|
+
for intent, examples in INTENT_EXAMPLES.items():
|
|
40
|
+
for ex in examples:
|
|
41
|
+
sentences.append(ex)
|
|
42
|
+
labels.append(intent)
|
|
43
|
+
self.intent_labels = labels
|
|
44
|
+
vecs = self.model.encode(sentences, normalize_embeddings=True, show_progress_bar=False)
|
|
45
|
+
return vecs
|
|
46
|
+
|
|
47
|
+
def _train_classifier(self):
|
|
48
|
+
"""Train a logistic regression classifier on embeddings."""
|
|
49
|
+
from sklearn.linear_model import LogisticRegression
|
|
50
|
+
from sklearn.preprocessing import LabelEncoder
|
|
51
|
+
|
|
52
|
+
X = self.intent_matrix
|
|
53
|
+
y = np.array(self.intent_labels)
|
|
54
|
+
|
|
55
|
+
le = LabelEncoder()
|
|
56
|
+
y_encoded = le.fit_transform(y)
|
|
57
|
+
|
|
58
|
+
clf = LogisticRegression(
|
|
59
|
+
max_iter=1000,
|
|
60
|
+
C=10.0,
|
|
61
|
+
class_weight="balanced",
|
|
62
|
+
solver="lbfgs",
|
|
63
|
+
)
|
|
64
|
+
clf.fit(X, y_encoded)
|
|
65
|
+
self._label_encoder = le
|
|
66
|
+
return clf
|
|
67
|
+
|
|
68
|
+
def invalidate(self):
|
|
69
|
+
"""Force matrix rebuild on next classify() call — called after DB example updates."""
|
|
70
|
+
self.intent_matrix = None
|
|
71
|
+
self.classifier = None
|
|
72
|
+
|
|
73
|
+
def classify(self, prompt: str, question_analysis: dict, threshold: float = 0.45) -> dict[str, Any] | None:
|
|
74
|
+
if self.intent_matrix is None:
|
|
75
|
+
self.intent_matrix = self._build_matrix()
|
|
76
|
+
self.classifier = self._train_classifier()
|
|
77
|
+
|
|
78
|
+
qvec = self.model.encode([prompt], normalize_embeddings=True)[0]
|
|
79
|
+
|
|
80
|
+
proba = self.classifier.predict_proba([qvec])[0]
|
|
81
|
+
best_idx = int(np.argmax(proba))
|
|
82
|
+
confidence = float(proba[best_idx])
|
|
83
|
+
intent = self._label_encoder.inverse_transform([best_idx])[0]
|
|
84
|
+
|
|
85
|
+
if confidence < threshold:
|
|
86
|
+
logger.info("Below threshold (%.2f) — keyword fallback", confidence)
|
|
87
|
+
return None
|
|
88
|
+
|
|
89
|
+
return {"pipeline_id": intent, "confidence": confidence}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
# --- Module-level functions — these are what callers import ---
|
|
93
|
+
|
|
94
|
+
def get_classifier() -> EmbedClassifier:
|
|
95
|
+
"""Singleton — model loads once at startup, stays resident."""
|
|
96
|
+
global _classifier
|
|
97
|
+
if _classifier is None:
|
|
98
|
+
logger.info("Loading intent embedding model (one-time)...")
|
|
99
|
+
_classifier = EmbedClassifier()
|
|
100
|
+
logger.info("Intent model ready.")
|
|
101
|
+
return _classifier
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def classify_intent(prompt: str, question_analysis: dict, threshold: float = 0.0) -> dict[str, Any] | None:
|
|
105
|
+
"""~30ms, synchronous, safe to call from async context without await.
|
|
106
|
+
|
|
107
|
+
Returns a dict with:
|
|
108
|
+
- intent: the intent class string (e.g. "work_order_query")
|
|
109
|
+
- confidence: float 0-1
|
|
110
|
+
- pipeline_id: resolved pipeline name
|
|
111
|
+
Or None if below threshold.
|
|
112
|
+
"""
|
|
113
|
+
try:
|
|
114
|
+
result = get_classifier().classify(prompt, question_analysis, threshold)
|
|
115
|
+
|
|
116
|
+
if result is None:
|
|
117
|
+
return None
|
|
118
|
+
return {
|
|
119
|
+
"intent": str(result["pipeline_id"]),
|
|
120
|
+
"confidence": float(result["confidence"]),
|
|
121
|
+
"pipeline_id": str(result["pipeline_id"]),
|
|
122
|
+
}
|
|
123
|
+
except Exception as e:
|
|
124
|
+
logger.warning("Embed classifier error (%s): %s", type(e).__name__, e)
|
|
125
|
+
return None
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"""Intent examples for the embedding classifier."""
|
|
2
|
+
|
|
3
|
+
INTENT_EXAMPLES: dict[str, list[str]] = {
|
|
4
|
+
"plant_topology": [
|
|
5
|
+
"show me the plant structure",
|
|
6
|
+
"what plants do we have",
|
|
7
|
+
"list all plants",
|
|
8
|
+
"plant hierarchy",
|
|
9
|
+
],
|
|
10
|
+
"line": [
|
|
11
|
+
"show me the production lines",
|
|
12
|
+
"what lines exist",
|
|
13
|
+
"list all lines",
|
|
14
|
+
"production line details",
|
|
15
|
+
],
|
|
16
|
+
"stage": [
|
|
17
|
+
"show me the stages",
|
|
18
|
+
"what stages are there",
|
|
19
|
+
"list all stages",
|
|
20
|
+
"process stages",
|
|
21
|
+
],
|
|
22
|
+
"workstation": [
|
|
23
|
+
"show me workstations",
|
|
24
|
+
"what workstations exist",
|
|
25
|
+
"list all workstations",
|
|
26
|
+
"workstation details",
|
|
27
|
+
],
|
|
28
|
+
"asset_management": [
|
|
29
|
+
"show me the machines",
|
|
30
|
+
"what equipment do we have",
|
|
31
|
+
"list all machines",
|
|
32
|
+
"machine details",
|
|
33
|
+
],
|
|
34
|
+
"worker": [
|
|
35
|
+
"show me the workers",
|
|
36
|
+
"who works here",
|
|
37
|
+
"list all workers",
|
|
38
|
+
"worker details",
|
|
39
|
+
],
|
|
40
|
+
"batch_record": [
|
|
41
|
+
"show me batch records",
|
|
42
|
+
"what batches are there",
|
|
43
|
+
"batch details",
|
|
44
|
+
"batch status",
|
|
45
|
+
],
|
|
46
|
+
"work_order_query": [
|
|
47
|
+
"show me work orders",
|
|
48
|
+
"what work orders exist",
|
|
49
|
+
"work order details",
|
|
50
|
+
"work order status",
|
|
51
|
+
],
|
|
52
|
+
"sop_compliance": [
|
|
53
|
+
"show me SOPs",
|
|
54
|
+
"what SOPs exist",
|
|
55
|
+
"SOP compliance",
|
|
56
|
+
"standard operating procedures",
|
|
57
|
+
],
|
|
58
|
+
"production_kpi": [
|
|
59
|
+
"show me production KPIs",
|
|
60
|
+
"what is the OEE",
|
|
61
|
+
"production metrics",
|
|
62
|
+
"performance indicators",
|
|
63
|
+
],
|
|
64
|
+
"maintenance": [
|
|
65
|
+
"show me maintenance records",
|
|
66
|
+
"what maintenance is due",
|
|
67
|
+
"maintenance schedule",
|
|
68
|
+
"preventive maintenance",
|
|
69
|
+
],
|
|
70
|
+
"quality_approval": [
|
|
71
|
+
"show me approvals",
|
|
72
|
+
"what needs approval",
|
|
73
|
+
"approval status",
|
|
74
|
+
"quality approvals",
|
|
75
|
+
],
|
|
76
|
+
"change_control": [
|
|
77
|
+
"show me change controls",
|
|
78
|
+
"what changes are pending",
|
|
79
|
+
"change control status",
|
|
80
|
+
"document changes",
|
|
81
|
+
],
|
|
82
|
+
"knowledge_base": [
|
|
83
|
+
"search for information",
|
|
84
|
+
"find documentation",
|
|
85
|
+
"knowledge search",
|
|
86
|
+
"what do you know about",
|
|
87
|
+
],
|
|
88
|
+
"simulation": [
|
|
89
|
+
"simulate this scenario",
|
|
90
|
+
"what if we change",
|
|
91
|
+
"predict the outcome",
|
|
92
|
+
"impact analysis",
|
|
93
|
+
],
|
|
94
|
+
"count": [
|
|
95
|
+
"how many",
|
|
96
|
+
"count the",
|
|
97
|
+
"what is the total",
|
|
98
|
+
"number of",
|
|
99
|
+
],
|
|
100
|
+
"web_search": [
|
|
101
|
+
"search the web",
|
|
102
|
+
"find online information",
|
|
103
|
+
"web search for",
|
|
104
|
+
"look up online",
|
|
105
|
+
],
|
|
106
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""DAG — execution graph."""
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
|
+
from typing import Any
|
|
5
|
+
from uuid import uuid4
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class DAGNode:
|
|
9
|
+
node_id: str = field(default_factory=lambda: f"node-{uuid4().hex[:8]}")
|
|
10
|
+
operator_type: str = ""
|
|
11
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|
|
12
|
+
|
|
13
|
+
@dataclass
|
|
14
|
+
class DAGEdge:
|
|
15
|
+
source_node_id: str = ""
|
|
16
|
+
target_node_id: str = ""
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class ExecutionDAG:
|
|
20
|
+
dag_id: str = field(default_factory=lambda: f"dag-{uuid4().hex[:8]}")
|
|
21
|
+
nodes: list[DAGNode] = field(default_factory=list)
|
|
22
|
+
edges: list[DAGEdge] = field(default_factory=list)
|
|
23
|
+
metadata: dict[str, Any] = field(default_factory=dict)
|