flare-kernel 0.2.2__tar.gz → 0.2.3__tar.gz
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.
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/PKG-INFO +3 -1
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/pyproject.toml +3 -1
- flare_kernel-0.2.3/src/flare_kernel/app.py +39 -0
- flare_kernel-0.2.3/src/flare_kernel/contracts/__init__.py +78 -0
- flare_kernel-0.2.3/src/flare_kernel/contracts/context.py +42 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/contracts/kernel_contract.py +83 -0
- flare_kernel-0.2.3/src/flare_kernel/contracts/mode.py +32 -0
- flare_kernel-0.2.3/src/flare_kernel/contracts/project_contract.py +24 -0
- flare_kernel-0.2.3/src/flare_kernel/contracts/session_contract.py +76 -0
- flare_kernel-0.2.3/src/flare_kernel/project_store.py +84 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/__init__.py +4 -1
- flare_kernel-0.2.3/src/flare_kernel/router/api_errors.py +129 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/intent_retrieval.py +6 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_endpoint_handlers_sourcing.py +57 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_dependency_resolution.py +3 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_orchestration.py +2 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_orchestration_wrappers.py +2 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_turn_context.py +30 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_turn_context_wrapper.py +7 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_mode_flow.py +2 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_action.py +128 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_intake.py +320 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_intent.py +45 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_intent_query.py +240 -0
- flare_kernel-0.2.3/src/flare_kernel/router/kernel_request_flow_intent_signal.py +82 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/mode_resolution.py +17 -4
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_builder.py +2 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_projection.py +2 -0
- flare_kernel-0.2.3/src/flare_kernel/router/project_api.py +26 -0
- flare_kernel-0.2.3/src/flare_kernel/router/retrieval/retrieval_projection.py +124 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/retrieval/retrieval_query_builder.py +80 -0
- flare_kernel-0.2.3/src/flare_kernel/router/retrieval/retrieval_search.py +126 -0
- flare_kernel-0.2.3/src/flare_kernel/router/session_api.py +133 -0
- flare_kernel-0.2.3/src/flare_kernel/router/source_library.py +181 -0
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_response_phases_mode_runtime.py +187 -0
- flare_kernel-0.2.3/src/flare_kernel/router/streaming/streaming_response_phases_post_intake.py +204 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/turn_context_builder.py +67 -9
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/__init__.py +12 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/infrastructure/infrastructure.py +218 -12
- flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/source_library_persistence.py +289 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/source_text_extractor.py +163 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/sourcing_persistence.py +286 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/infrastructure/sourcing_provider.py +468 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/analysis_router_runtime.py +48 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/canonical_mode_runtime.py +344 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/decision_engine_mode_flags.py +200 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_plan.py +292 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_plan_stage.py +136 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement.py +331 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement_context.py +114 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement_helpers.py +271 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_requirement_payloads.py +259 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_sourcing.py +265 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/mode_orchestration_sourcing_stage.py +104 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/orchestration/mode_runtime.py +52 -5
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/source_ingestion_runtime.py +340 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/source_ingestion_runtime_artifacts.py +392 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/sourcing_search_runtime.py +257 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/orchestration/ssot_mode_runtime.py +31 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/session/checkpoint_store_sql.py +98 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/session/intake_session_store_query.py +40 -0
- flare_kernel-0.2.3/src/flare_kernel/runtime/tests/test_mode_runtime_fallback.py +63 -0
- flare_kernel-0.2.3/src/flare_kernel/session_store.py +312 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel.egg-info/PKG-INFO +3 -1
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel.egg-info/SOURCES.txt +51 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel.egg-info/requires.txt +2 -0
- flare_kernel-0.2.3/tests/test_analysis_route_projection.py +123 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_infrastructure_knowledge.py +91 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_mode_resolution.py +51 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_payload_enrichment.py +87 -1
- flare_kernel-0.2.3/tests/test_project_api.py +23 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_retrieval_projection.py +39 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_retrieval_query_builder.py +42 -0
- flare_kernel-0.2.3/tests/test_session_api.py +73 -0
- flare_kernel-0.2.3/tests/test_source_ingestion_runtime.py +66 -0
- flare_kernel-0.2.3/tests/test_source_ingestion_ssot_acceptance.py +79 -0
- flare_kernel-0.2.3/tests/test_source_library.py +178 -0
- flare_kernel-0.2.3/tests/test_source_library_persistence_scope.py +41 -0
- flare_kernel-0.2.3/tests/test_source_text_extractor.py +108 -0
- flare_kernel-0.2.3/tests/test_sourcing_provider.py +175 -0
- flare_kernel-0.2.3/tests/test_sourcing_search_runtime.py +185 -0
- flare_kernel-0.2.3/tests/test_ssot_mode_runtime.py +102 -0
- flare_kernel-0.2.2/src/flare_kernel/app.py +0 -27
- flare_kernel-0.2.2/src/flare_kernel/contracts/__init__.py +0 -23
- flare_kernel-0.2.2/src/flare_kernel/router/retrieval/retrieval_projection.py +0 -69
- flare_kernel-0.2.2/src/flare_kernel/router/retrieval/retrieval_search.py +0 -47
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/README.md +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/setup.cfg +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/main.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/action_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_analysis.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_builder.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_checkpoint.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_context.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_context_analysis.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_context_inputs.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_context_session.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/canonical/canonical_state_projection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/completion_response_builder.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/completion_selection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/endpoint_context.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/guided_completion.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_amount_quantity.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_answer.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_authority.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_authority_checkpoint.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_authority_hydration.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_authority_session.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_canonicalization.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_clarification.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_decision_rules.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_deployment_delivery.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_entry_policy.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_extraction.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_extraction_extractors.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_extraction_merge.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_field_projection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_field_projection_entity.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_field_projection_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_field_projection_source.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_field_scope.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_guided_confirmed_updates.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_guided_flags.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_guided_followup.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_guided_followup_work_item.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_guided_open_fields.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_guided_status.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_guided_summary.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_inputs.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_node_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_numeric.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_payload_updates.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_readiness.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_state_persistence.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_status.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_status_chooser_stage.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_status_guided_session.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_status_projection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_status_schema.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intake/intake_workflow_checkpoint.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/compat_aliases.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/intent_classifier_utils.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/intent_escalation_override.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/intent_escalation_pipeline.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/intent_escalation_signal.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/intent_routing.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/session_intent.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/session_intent_fields.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/session_intent_small_talk.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_compat_exports.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_compat_exports_parts/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_compat_exports_parts/constants.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_compat_exports_parts/domain.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_compat_exports_parts/endpoint.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_compat_exports_parts/facade.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_compat_exports_parts/router_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_compat_exports_parts/runtime.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_constants.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_constants_intake.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_constants_intent.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_constants_patch.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_endpoint_handlers.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_endpoint_handlers_health.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_endpoint_handlers_knowledge.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_endpoint_handlers_turn.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_canonical_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_canonical_wrapper.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_helpers.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_payload_enrichment.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_payload_wrapper.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_facade_utils.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_intent_query_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_request_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_route_action.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_route_execution.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_route_run.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_route_stream.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/kernel_session_intent_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/mode_switch.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/next_actions_guard.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_checkpoint_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_followup_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_context.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_context_helpers.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_decision.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_result.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_runtime_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state_context.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state_decision.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state_entry.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state_followup.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state_intent.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state_node.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_status_state_unpack.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_trace.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_trace_projection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/orchestration/orchestration_trace_steps.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/patch_contract.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/payload_enrichment.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/prompting.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/request_identity.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/request_intent_resolution.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/retrieval/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/retrieval/retrieval_aliases.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/retrieval/retrieval_field_queries.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_draft_completion.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_draft_finalize.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_draft_phase.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_draft_phase_timing.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_draft_post_completion.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_draft_prologue.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_event_emitter.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_intake_phase.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_mode_event_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_mode_events.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_response_bootstrap.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_response_builder.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_response_builder_transport.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_response_phases.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_response_runtime.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_retrieval_phase.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/streaming/streaming_runtime_steps.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/text_safety.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/domain/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/domain/domain_pack_loader.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/domain/profile_resolution.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/execution/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/execution/agent_runtime.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/execution/skill_runtime.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/infrastructure/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/infrastructure/logging.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/infrastructure/trace.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/intent/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/intent/intent_and_escalation/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/intent/intent_and_escalation/decision.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/intent/intent_and_escalation/lexicon.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/intent/intent_and_escalation/preprocessing.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/intent/intent_and_escalation/signals.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/intent/intent_and_escalation_classifier.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/llm/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/llm/llm_provider.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/llm/model_router.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/orchestration/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/orchestration/canvas_sourcing_contract.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/orchestration/decision_engine.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/orchestration/mode_orchestration.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/orchestration/sourcing_event_payloads.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning_branching.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning_branching_policy.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning_context.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning_hypothesis.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning_planning.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning_priority.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning_question_extraction.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning_readiness.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/reasoning/intake_reasoning_shared.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/session/__init__.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/session/checkpoint_manager.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/session/intake_session_store.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/session/models.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/tests/test_checkpoint_manager.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/tests/test_intake_reasoning.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/tests/test_intake_reasoning_split.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/tests/test_intake_session_store.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/runtime/tests/test_kernel_runtime.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel.egg-info/dependency_links.txt +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel.egg-info/top_level.txt +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_action_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_basics.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_builder_split_modules.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_business_hardcode_guard.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_canonical_state_context_analysis.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_canonical_state_context_inputs.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_canonical_state_context_session.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_canonical_state_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_canonical_state_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_canonical_state_projection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_canvas_sourcing_contract_meta.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_compat_aliases.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_completion_response_builder.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_completion_selection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_decision_engine.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_domain_pack_loader.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_endpoint_context.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_flare_v1_patch_contract.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_guided_completion.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_infrastructure_helpers.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_amount_quantity.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_answer.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_authority.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_authority_checkpoint.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_authority_hydration.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_authority_session.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_canonicalization.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_clarification.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_decision_rules.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_deployment_delivery.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_entry_policy.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_extraction.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_extraction_extractors.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_extraction_merge.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_field_projection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_field_projection_entity.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_field_projection_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_field_projection_source.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_field_scope.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_guided_confirmed_updates.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_guided_flags.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_guided_followup.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_guided_followup_work_item.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_guided_open_fields.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_guided_status.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_guided_summary.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_inputs.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_node_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_numeric.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_payload_updates.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_readiness.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_reasoning_priority.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_state_persistence.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_status.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_status_guided_session.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_status_projection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_status_schema.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_status_stage.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intake_workflow_checkpoint.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intent_classifier_utils.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intent_escalation_classifier.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intent_escalation_override.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intent_escalation_pipeline.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intent_escalation_signal.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intent_resolution.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intent_retrieval.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intent_routing.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_intent_type_compat_aliases.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_kernel_alias_delegation.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_kernel_endpoint_handlers.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_kernel_facade_helpers.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_kernel_facade_turn_context.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_kernel_intent_query_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_kernel_mode_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_kernel_route_execution_wrappers.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_kernel_session_intent_flow.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_llm_provider.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_mode_orchestration_state_bridge.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_mode_switch.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_model_router.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_new_flow_guard.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_checkpoint_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_followup_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_context.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_context_helpers.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_decision.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_projection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_result.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_runtime_state.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_state_context.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_state_decision.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_state_entry.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_state_followup.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_state_intent.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_state_node.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_state_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_status_state_unpack.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_trace.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_trace_projection.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_orchestration_trace_steps.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_patch_contract.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_request_identity.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_request_intent_resolution.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_retrieval_aliases.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_retrieval_field_queries.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_retrieval_search.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_session_intent.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_session_intent_fields.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_session_intent_small_talk.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_draft_completion.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_draft_finalize.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_draft_phase.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_draft_post_completion.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_draft_prologue.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_event_emitter.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_intake_phase.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_mode_event_payload.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_mode_events.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_response_bootstrap.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_response_phases.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_response_runtime.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_retrieval_phase.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_streaming_runtime_steps.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_text_safety.py +0 -0
- {flare_kernel-0.2.2 → flare_kernel-0.2.3}/tests/test_turn_context_builder.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flare-kernel
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: FLARE kernel runtime package
|
|
5
5
|
License: Proprietary
|
|
6
6
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -10,7 +10,9 @@ Requires-Python: >=3.11
|
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
11
|
Requires-Dist: flare-engines<0.3.0,>=0.2.0
|
|
12
12
|
Requires-Dist: fastapi<1.0,>=0.115
|
|
13
|
+
Requires-Dist: python-multipart<1.0,>=0.0.9
|
|
13
14
|
Requires-Dist: pydantic<3,>=2
|
|
15
|
+
Requires-Dist: pypdf<6,>=4
|
|
14
16
|
Requires-Dist: uvicorn<1.0,>=0.30
|
|
15
17
|
Requires-Dist: httpx<1.0,>=0.27
|
|
16
18
|
Requires-Dist: sqlalchemy<3,>=2
|
|
@@ -4,14 +4,16 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "flare-kernel"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.3"
|
|
8
8
|
description = "FLARE kernel runtime package"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
11
|
dependencies = [
|
|
12
12
|
"flare-engines>=0.2.0,<0.3.0",
|
|
13
13
|
"fastapi>=0.115,<1.0",
|
|
14
|
+
"python-multipart>=0.0.9,<1.0",
|
|
14
15
|
"pydantic>=2,<3",
|
|
16
|
+
"pypdf>=4,<6",
|
|
15
17
|
"uvicorn>=0.30,<1.0",
|
|
16
18
|
"httpx>=0.27,<1.0",
|
|
17
19
|
"sqlalchemy>=2,<3",
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""FastAPI app factory for flare-kernel."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from fastapi import FastAPI, HTTPException
|
|
6
|
+
from fastapi.middleware.cors import CORSMiddleware
|
|
7
|
+
|
|
8
|
+
from flare_kernel.router.api_errors import (
|
|
9
|
+
ApiError,
|
|
10
|
+
api_error_exception_handler,
|
|
11
|
+
http_exception_handler,
|
|
12
|
+
unhandled_exception_handler,
|
|
13
|
+
)
|
|
14
|
+
from flare_kernel.router import kernel_router, project_api_router, session_api_router, source_library_router
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def create_app() -> FastAPI:
|
|
18
|
+
app = FastAPI(
|
|
19
|
+
title="FLARE Kernel",
|
|
20
|
+
version="0.1.0",
|
|
21
|
+
description="FLARE kernel minimal runtime",
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
app.add_middleware(
|
|
25
|
+
CORSMiddleware,
|
|
26
|
+
allow_origins=["*"],
|
|
27
|
+
allow_credentials=True,
|
|
28
|
+
allow_methods=["*"],
|
|
29
|
+
allow_headers=["*"],
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
app.include_router(kernel_router)
|
|
33
|
+
app.include_router(project_api_router)
|
|
34
|
+
app.include_router(session_api_router)
|
|
35
|
+
app.include_router(source_library_router)
|
|
36
|
+
app.add_exception_handler(ApiError, api_error_exception_handler)
|
|
37
|
+
app.add_exception_handler(HTTPException, http_exception_handler)
|
|
38
|
+
app.add_exception_handler(Exception, unhandled_exception_handler)
|
|
39
|
+
return app
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""Kernel contracts."""
|
|
2
|
+
|
|
3
|
+
from flare_kernel.contracts.context import (
|
|
4
|
+
ContextAnalysisResult,
|
|
5
|
+
ContextContract,
|
|
6
|
+
ContextEvidenceItem,
|
|
7
|
+
ContextSourcingResult,
|
|
8
|
+
create_empty_context,
|
|
9
|
+
)
|
|
10
|
+
from flare_kernel.contracts.kernel_contract import (
|
|
11
|
+
AnalysisRouteDecision,
|
|
12
|
+
DeleteProjectSourceResponse,
|
|
13
|
+
HealthResponse,
|
|
14
|
+
IntentSuggestResponse,
|
|
15
|
+
KernelRequest,
|
|
16
|
+
KernelResponse,
|
|
17
|
+
KnowledgeIngestRequest,
|
|
18
|
+
KnowledgeIngestResponse,
|
|
19
|
+
KnowledgeSearchRequest,
|
|
20
|
+
KnowledgeSearchResponse,
|
|
21
|
+
ProjectSourceRecord,
|
|
22
|
+
ProjectSourcesResponse,
|
|
23
|
+
ProjectSourceUploadResponse,
|
|
24
|
+
SourcingSearchRequest,
|
|
25
|
+
SourcingSearchResponse,
|
|
26
|
+
)
|
|
27
|
+
from flare_kernel.contracts.mode import Mode, ModeHandler, mode_handlers, run_mode
|
|
28
|
+
from flare_kernel.contracts.project_contract import (
|
|
29
|
+
ProjectRecord,
|
|
30
|
+
ProjectsResponse,
|
|
31
|
+
ProjectUpsertRequest,
|
|
32
|
+
)
|
|
33
|
+
from flare_kernel.contracts.session_contract import (
|
|
34
|
+
SessionAppendExchangeRequest,
|
|
35
|
+
SessionCreateRequest,
|
|
36
|
+
SessionListResponse,
|
|
37
|
+
SessionMessageListResponse,
|
|
38
|
+
SessionMessageRecord,
|
|
39
|
+
SessionRecord,
|
|
40
|
+
SessionUpdateRequest,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
__all__ = [
|
|
44
|
+
"KernelRequest",
|
|
45
|
+
"KernelResponse",
|
|
46
|
+
"AnalysisRouteDecision",
|
|
47
|
+
"HealthResponse",
|
|
48
|
+
"IntentSuggestResponse",
|
|
49
|
+
"ProjectSourceRecord",
|
|
50
|
+
"ProjectSourceUploadResponse",
|
|
51
|
+
"ProjectSourcesResponse",
|
|
52
|
+
"DeleteProjectSourceResponse",
|
|
53
|
+
"KnowledgeIngestRequest",
|
|
54
|
+
"KnowledgeIngestResponse",
|
|
55
|
+
"KnowledgeSearchRequest",
|
|
56
|
+
"KnowledgeSearchResponse",
|
|
57
|
+
"SourcingSearchRequest",
|
|
58
|
+
"SourcingSearchResponse",
|
|
59
|
+
"ContextContract",
|
|
60
|
+
"ContextAnalysisResult",
|
|
61
|
+
"ContextEvidenceItem",
|
|
62
|
+
"ContextSourcingResult",
|
|
63
|
+
"create_empty_context",
|
|
64
|
+
"Mode",
|
|
65
|
+
"ModeHandler",
|
|
66
|
+
"mode_handlers",
|
|
67
|
+
"run_mode",
|
|
68
|
+
"ProjectRecord",
|
|
69
|
+
"ProjectUpsertRequest",
|
|
70
|
+
"ProjectsResponse",
|
|
71
|
+
"SessionRecord",
|
|
72
|
+
"SessionCreateRequest",
|
|
73
|
+
"SessionUpdateRequest",
|
|
74
|
+
"SessionListResponse",
|
|
75
|
+
"SessionMessageRecord",
|
|
76
|
+
"SessionMessageListResponse",
|
|
77
|
+
"SessionAppendExchangeRequest",
|
|
78
|
+
]
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""Canonical context contract for kernel orchestration."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ContextEvidenceItem(BaseModel):
|
|
11
|
+
id: str
|
|
12
|
+
source: str
|
|
13
|
+
snippet: str = ""
|
|
14
|
+
meta: dict[str, Any] = Field(default_factory=dict)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class ContextSourcingResult(BaseModel):
|
|
18
|
+
round: int
|
|
19
|
+
items: list[dict[str, Any]] = Field(default_factory=list)
|
|
20
|
+
timestamp: str
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ContextAnalysisResult(BaseModel):
|
|
24
|
+
version: int
|
|
25
|
+
payload: dict[str, Any] = Field(default_factory=dict)
|
|
26
|
+
timestamp: str
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ContextContract(BaseModel):
|
|
30
|
+
context_revision_id: str = ""
|
|
31
|
+
confirmed_fields: dict[str, Any] = Field(default_factory=dict)
|
|
32
|
+
missing_fields: list[str] = Field(default_factory=list)
|
|
33
|
+
notes: list[str] = Field(default_factory=list)
|
|
34
|
+
evidence: list[ContextEvidenceItem] = Field(default_factory=list)
|
|
35
|
+
sourcing_results: list[ContextSourcingResult] = Field(default_factory=list)
|
|
36
|
+
analysis_results: list[ContextAnalysisResult] = Field(default_factory=list)
|
|
37
|
+
rank_profile: dict[str, Any] = Field(default_factory=dict)
|
|
38
|
+
rank_feedback_log: list[dict[str, Any]] = Field(default_factory=list)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def create_empty_context() -> ContextContract:
|
|
42
|
+
return ContextContract()
|
|
@@ -57,6 +57,8 @@ class KernelRequest(BaseModel):
|
|
|
57
57
|
canvas_config: dict[str, Any] = Field(default_factory=dict)
|
|
58
58
|
plan_config: dict[str, Any] = Field(default_factory=dict)
|
|
59
59
|
payload: dict[str, Any] = Field(default_factory=dict)
|
|
60
|
+
entities: list[dict[str, Any] | str] = Field(default_factory=list)
|
|
61
|
+
entity_query_mode: Literal["off", "prefer", "only"] = "prefer"
|
|
60
62
|
context_refs: list[Any] = Field(default_factory=list)
|
|
61
63
|
knowledge_refs: list[str] = Field(default_factory=list)
|
|
62
64
|
action_key: str | None = None
|
|
@@ -69,11 +71,19 @@ class KernelRequest(BaseModel):
|
|
|
69
71
|
field_value: IntakeFieldValue | None = None
|
|
70
72
|
|
|
71
73
|
|
|
74
|
+
class AnalysisRouteDecision(BaseModel):
|
|
75
|
+
analysis_type: Literal["requirement", "sourcing"] = "requirement"
|
|
76
|
+
template_id: str = "analysis_requirement_default"
|
|
77
|
+
reason_codes: list[str] = Field(default_factory=list)
|
|
78
|
+
confidence: float = 0.0
|
|
79
|
+
|
|
80
|
+
|
|
72
81
|
class KernelResponse(BaseModel):
|
|
73
82
|
trace_id: str
|
|
74
83
|
state: Literal["RUNNING", "SUCCEEDED", "FAILED"]
|
|
75
84
|
events: list[dict[str, Any]] = Field(default_factory=list)
|
|
76
85
|
result: dict[str, Any] = Field(default_factory=dict)
|
|
86
|
+
analysis_route: AnalysisRouteDecision | None = None
|
|
77
87
|
next_actions: list[dict[str, Any]] = Field(default_factory=list)
|
|
78
88
|
|
|
79
89
|
|
|
@@ -128,9 +138,82 @@ class KnowledgeSearchResponse(BaseModel):
|
|
|
128
138
|
results: list[dict[str, Any]] = Field(default_factory=list)
|
|
129
139
|
|
|
130
140
|
|
|
141
|
+
class SourcingSearchRequest(BaseModel):
|
|
142
|
+
project_id: str = "default"
|
|
143
|
+
user_id: str = "default"
|
|
144
|
+
session_id: str = "default"
|
|
145
|
+
query: str
|
|
146
|
+
top_k: int = 8
|
|
147
|
+
append_mode: bool = False
|
|
148
|
+
lock_existing_order: bool = True
|
|
149
|
+
base_result_ids: list[str] = Field(default_factory=list)
|
|
150
|
+
source_scope: Literal["local", "web", "hybrid"] = "hybrid"
|
|
151
|
+
sourcing_enabled: bool = False
|
|
152
|
+
context_refs: list[Any] = Field(default_factory=list)
|
|
153
|
+
knowledge_refs: list[str] = Field(default_factory=list)
|
|
154
|
+
source_ids: list[str] = Field(default_factory=list)
|
|
155
|
+
entities: list[dict[str, Any] | str] = Field(default_factory=list)
|
|
156
|
+
entity_query_mode: Literal["off", "prefer", "only"] = "prefer"
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
class SourcingSearchResponse(BaseModel):
|
|
160
|
+
trace_id: str
|
|
161
|
+
retrieval_run_id: str
|
|
162
|
+
project_id: str
|
|
163
|
+
user_id: str
|
|
164
|
+
session_id: str
|
|
165
|
+
query: str
|
|
166
|
+
effective_query: str = ""
|
|
167
|
+
intent: str = ""
|
|
168
|
+
source_scope: Literal["local", "web", "hybrid"]
|
|
169
|
+
sourcing_enabled: bool
|
|
170
|
+
requested_top_k: int = 8
|
|
171
|
+
returned_count: int = 0
|
|
172
|
+
has_more: bool = False
|
|
173
|
+
next_top_k: int = 8
|
|
174
|
+
source_breakdown: dict[str, int] = Field(default_factory=dict)
|
|
175
|
+
new_results: list[dict[str, Any]] = Field(default_factory=list)
|
|
176
|
+
all_results: list[dict[str, Any]] = Field(default_factory=list)
|
|
177
|
+
results: list[dict[str, Any]] = Field(default_factory=list)
|
|
178
|
+
shortlist: list[dict[str, Any]] = Field(default_factory=list)
|
|
179
|
+
blocked: bool = False
|
|
180
|
+
reason: str = ""
|
|
181
|
+
|
|
182
|
+
|
|
131
183
|
class IntentSuggestResponse(BaseModel):
|
|
132
184
|
trace_id: str
|
|
133
185
|
suggested_mode: str
|
|
134
186
|
confidence: float = 0.0
|
|
135
187
|
reason: str = ""
|
|
136
188
|
source: Literal["intent_override", "manual", "current", "llm", "keywords", "fallback"] = "fallback"
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
class ProjectSourceRecord(BaseModel):
|
|
192
|
+
id: str
|
|
193
|
+
source_id: str
|
|
194
|
+
project_id: str
|
|
195
|
+
user_id: str
|
|
196
|
+
session_id: str | None = None
|
|
197
|
+
scope: str = "project"
|
|
198
|
+
source: str = "local_upload"
|
|
199
|
+
filename: str
|
|
200
|
+
mime_type: str = ""
|
|
201
|
+
size: int | None = None
|
|
202
|
+
status: Literal["uploaded", "parsing", "chunked", "embedded", "indexed", "ready", "failed"] = "uploaded"
|
|
203
|
+
error_code: str | None = None
|
|
204
|
+
error_message: str = ""
|
|
205
|
+
created_at: str
|
|
206
|
+
updated_at: str
|
|
207
|
+
persisted_to_project: bool = True
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
class ProjectSourceUploadResponse(BaseModel):
|
|
211
|
+
data: ProjectSourceRecord
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
class ProjectSourcesResponse(BaseModel):
|
|
215
|
+
sources: list[ProjectSourceRecord] = Field(default_factory=list)
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class DeleteProjectSourceResponse(BaseModel):
|
|
219
|
+
ok: bool = True
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""Canonical mode contract and dispatch for kernel orchestration."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Callable, Literal
|
|
6
|
+
|
|
7
|
+
from flare_kernel.contracts.context import ContextContract
|
|
8
|
+
|
|
9
|
+
Mode = Literal["plan", "sourcing", "analysis"]
|
|
10
|
+
ModeHandler = Callable[[ContextContract, dict[str, Any]], ContextContract]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _missing_handler(_context: ContextContract, _payload: dict[str, Any]) -> ContextContract:
|
|
14
|
+
raise ValueError("mode handler not implemented")
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
mode_handlers: dict[Mode, ModeHandler] = {
|
|
18
|
+
"plan": _missing_handler,
|
|
19
|
+
"sourcing": _missing_handler,
|
|
20
|
+
"analysis": _missing_handler,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def run_mode(
|
|
25
|
+
mode: Mode,
|
|
26
|
+
handlers: dict[Mode, ModeHandler],
|
|
27
|
+
context: ContextContract,
|
|
28
|
+
payload: dict[str, Any] | None = None,
|
|
29
|
+
) -> ContextContract:
|
|
30
|
+
if mode not in handlers:
|
|
31
|
+
raise ValueError(f"unsupported mode: {mode}")
|
|
32
|
+
return handlers[mode](context, payload or {})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"""Project API contracts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ProjectRecord(BaseModel):
|
|
9
|
+
project_id: str
|
|
10
|
+
project_name: str
|
|
11
|
+
status: str = "active"
|
|
12
|
+
session_count: int = 0
|
|
13
|
+
created_at: str | None = None
|
|
14
|
+
updated_at: str | None = None
|
|
15
|
+
latest_updated_at: str | None = None
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ProjectUpsertRequest(BaseModel):
|
|
19
|
+
project_name: str | None = None
|
|
20
|
+
status: str = "active"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ProjectsResponse(BaseModel):
|
|
24
|
+
projects: list[ProjectRecord] = Field(default_factory=list)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""Session API contracts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Literal
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SessionRecord(BaseModel):
|
|
11
|
+
session_id: str
|
|
12
|
+
project_id: str | None = None
|
|
13
|
+
title: str
|
|
14
|
+
preview: str = ""
|
|
15
|
+
title_source: Literal["default", "auto", "manual"] = "default"
|
|
16
|
+
status: str = "active"
|
|
17
|
+
user_id: str | None = None
|
|
18
|
+
function_type: str | None = None
|
|
19
|
+
created_at: str
|
|
20
|
+
updated_at: str
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class SessionCreateRequest(BaseModel):
|
|
24
|
+
function_type: str | None = None
|
|
25
|
+
project_id: str | None = None
|
|
26
|
+
title: str | None = None
|
|
27
|
+
user_id: str | None = None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class SessionUpdateRequest(BaseModel):
|
|
31
|
+
function_type: str | None = None
|
|
32
|
+
status: str | None = None
|
|
33
|
+
title: str | None = None
|
|
34
|
+
preview: str | None = None
|
|
35
|
+
title_source: Literal["default", "auto", "manual"] | None = None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class SessionListResponse(BaseModel):
|
|
39
|
+
sessions: list[SessionRecord] = Field(default_factory=list)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class SessionMessageRecord(BaseModel):
|
|
43
|
+
message_id: str
|
|
44
|
+
session_id: str
|
|
45
|
+
role: str
|
|
46
|
+
content: str
|
|
47
|
+
attachments: list[dict[str, Any]] = Field(default_factory=list)
|
|
48
|
+
context_refs: list[dict[str, Any]] = Field(default_factory=list)
|
|
49
|
+
knowledge_refs: list[dict[str, Any]] = Field(default_factory=list)
|
|
50
|
+
agent_status: dict[str, Any] | None = None
|
|
51
|
+
thinking_trace: str = ""
|
|
52
|
+
execution_trace: dict[str, Any] | None = None
|
|
53
|
+
knowledge_search: dict[str, Any] | None = None
|
|
54
|
+
sourcing_candidates: dict[str, Any] | None = None
|
|
55
|
+
knowledge_citation: dict[str, Any] | None = None
|
|
56
|
+
context_usage: dict[str, Any] | None = None
|
|
57
|
+
created_at: str
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class SessionMessageListResponse(BaseModel):
|
|
61
|
+
messages: list[SessionMessageRecord] = Field(default_factory=list)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class SessionAppendExchangeRequest(BaseModel):
|
|
65
|
+
user_message: str = ""
|
|
66
|
+
assistant_message: str = ""
|
|
67
|
+
attachments: list[dict[str, Any]] = Field(default_factory=list)
|
|
68
|
+
context_refs: list[dict[str, Any]] = Field(default_factory=list)
|
|
69
|
+
knowledge_refs: list[dict[str, Any]] = Field(default_factory=list)
|
|
70
|
+
agent_status: dict[str, Any] | None = None
|
|
71
|
+
thinking_trace: str = ""
|
|
72
|
+
execution_trace: dict[str, Any] | None = None
|
|
73
|
+
knowledge_search: dict[str, Any] | None = None
|
|
74
|
+
sourcing_candidates: dict[str, Any] | None = None
|
|
75
|
+
knowledge_citation: dict[str, Any] | None = None
|
|
76
|
+
context_usage: dict[str, Any] | None = None
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""In-process project store for project APIs."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import threading
|
|
6
|
+
from datetime import UTC, datetime
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from flare_kernel.session_store import list_sessions
|
|
10
|
+
|
|
11
|
+
_projects: dict[str, dict[str, Any]] = {}
|
|
12
|
+
_lock = threading.Lock()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def _now_iso() -> str:
|
|
16
|
+
return datetime.now(UTC).isoformat()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _normalize_text(value: Any) -> str:
|
|
20
|
+
return " ".join(str(value or "").split()).strip()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _build_project_view(record: dict[str, Any]) -> dict[str, Any]:
|
|
24
|
+
project_id = _normalize_text(record.get("project_id"))
|
|
25
|
+
session_rows = list_sessions(project_id=project_id)
|
|
26
|
+
latest_updated_at = ""
|
|
27
|
+
if session_rows:
|
|
28
|
+
latest_updated_at = str(session_rows[0].get("updated_at") or "").strip()
|
|
29
|
+
updated_at = _normalize_text(record.get("updated_at")) or latest_updated_at or _normalize_text(record.get("created_at"))
|
|
30
|
+
return {
|
|
31
|
+
"project_id": project_id,
|
|
32
|
+
"project_name": _normalize_text(record.get("project_name")) or project_id,
|
|
33
|
+
"status": _normalize_text(record.get("status")) or "active",
|
|
34
|
+
"session_count": len(session_rows),
|
|
35
|
+
"created_at": _normalize_text(record.get("created_at")) or None,
|
|
36
|
+
"updated_at": updated_at or None,
|
|
37
|
+
"latest_updated_at": latest_updated_at or updated_at or None,
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def list_projects() -> list[dict[str, Any]]:
|
|
42
|
+
with _lock:
|
|
43
|
+
rows = [_build_project_view(item) for item in _projects.values()]
|
|
44
|
+
return sorted(rows, key=lambda item: str(item.get("latest_updated_at") or item.get("updated_at") or ""), reverse=True)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def get_project(*, project_id: str) -> dict[str, Any] | None:
|
|
48
|
+
resolved_project_id = _normalize_text(project_id)
|
|
49
|
+
if not resolved_project_id:
|
|
50
|
+
return None
|
|
51
|
+
with _lock:
|
|
52
|
+
record = _projects.get(resolved_project_id)
|
|
53
|
+
if record is None:
|
|
54
|
+
return None
|
|
55
|
+
return _build_project_view(record)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def upsert_project(*, project_id: str, project_name: str | None, status: str | None = None) -> dict[str, Any]:
|
|
59
|
+
resolved_project_id = _normalize_text(project_id)
|
|
60
|
+
if not resolved_project_id:
|
|
61
|
+
raise ValueError("project_id is required")
|
|
62
|
+
|
|
63
|
+
now = _now_iso()
|
|
64
|
+
with _lock:
|
|
65
|
+
existing = _projects.get(resolved_project_id)
|
|
66
|
+
if existing is None:
|
|
67
|
+
record = {
|
|
68
|
+
"project_id": resolved_project_id,
|
|
69
|
+
"project_name": _normalize_text(project_name) or resolved_project_id,
|
|
70
|
+
"status": _normalize_text(status) or "active",
|
|
71
|
+
"created_at": now,
|
|
72
|
+
"updated_at": now,
|
|
73
|
+
}
|
|
74
|
+
else:
|
|
75
|
+
record = dict(existing)
|
|
76
|
+
next_project_name = _normalize_text(project_name)
|
|
77
|
+
if next_project_name:
|
|
78
|
+
record["project_name"] = next_project_name
|
|
79
|
+
next_status = _normalize_text(status)
|
|
80
|
+
if next_status:
|
|
81
|
+
record["status"] = next_status
|
|
82
|
+
record["updated_at"] = now
|
|
83
|
+
_projects[resolved_project_id] = record
|
|
84
|
+
return _build_project_view(record)
|
|
@@ -10,8 +10,11 @@ import importlib
|
|
|
10
10
|
import sys
|
|
11
11
|
|
|
12
12
|
from flare_kernel.router.kernel import router as kernel_router
|
|
13
|
+
from flare_kernel.router.project_api import router as project_api_router
|
|
14
|
+
from flare_kernel.router.session_api import router as session_api_router
|
|
15
|
+
from flare_kernel.router.source_library import router as source_library_router
|
|
13
16
|
|
|
14
|
-
__all__ = ["kernel_router"]
|
|
17
|
+
__all__ = ["kernel_router", "project_api_router", "source_library_router", "session_api_router"]
|
|
15
18
|
|
|
16
19
|
|
|
17
20
|
def _resolve_legacy_group(module_name: str) -> str | None:
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
"""API error contract helpers for transport-layer responses."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass, field
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
from fastapi import HTTPException, Request
|
|
9
|
+
from fastapi.responses import JSONResponse
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass(slots=True)
|
|
13
|
+
class ApiError(Exception):
|
|
14
|
+
"""Structured API error for transport-layer mapping."""
|
|
15
|
+
|
|
16
|
+
code: str
|
|
17
|
+
http_status: int
|
|
18
|
+
message: str
|
|
19
|
+
description: str = ""
|
|
20
|
+
context_fields: list[str] = field(default_factory=list)
|
|
21
|
+
retryable: bool = False
|
|
22
|
+
details: dict[str, Any] = field(default_factory=dict)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def build_error_response_payload(
|
|
26
|
+
*,
|
|
27
|
+
code: str,
|
|
28
|
+
http_status: int,
|
|
29
|
+
message: str,
|
|
30
|
+
description: str = "",
|
|
31
|
+
context_fields: list[str] | None = None,
|
|
32
|
+
retryable: bool = False,
|
|
33
|
+
details: dict[str, Any] | None = None,
|
|
34
|
+
) -> dict[str, Any]:
|
|
35
|
+
context_field_list = list(context_fields or [])
|
|
36
|
+
return {
|
|
37
|
+
"error": {
|
|
38
|
+
"code": code,
|
|
39
|
+
"message": message,
|
|
40
|
+
"details": {
|
|
41
|
+
**(details or {}),
|
|
42
|
+
"http_status": http_status,
|
|
43
|
+
"description": description,
|
|
44
|
+
"context_fields": context_field_list,
|
|
45
|
+
"retryable": retryable,
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _default_code_by_status(status_code: int) -> str:
|
|
52
|
+
if status_code == 403:
|
|
53
|
+
return "FORBIDDEN_SCOPE"
|
|
54
|
+
if status_code == 404:
|
|
55
|
+
return "RESOURCE_NOT_FOUND"
|
|
56
|
+
if status_code == 409:
|
|
57
|
+
return "INVALID_STATE_TRANSITION"
|
|
58
|
+
if status_code == 422:
|
|
59
|
+
return "INVALID_REQUEST"
|
|
60
|
+
if status_code == 401:
|
|
61
|
+
return "UNAUTHORIZED"
|
|
62
|
+
return "HTTP_EXCEPTION"
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _default_message_by_status(status_code: int) -> str:
|
|
66
|
+
if status_code == 403:
|
|
67
|
+
return "forbidden scope"
|
|
68
|
+
if status_code == 404:
|
|
69
|
+
return "resource not found"
|
|
70
|
+
if status_code == 409:
|
|
71
|
+
return "invalid state transition"
|
|
72
|
+
if status_code == 422:
|
|
73
|
+
return "invalid request"
|
|
74
|
+
if status_code == 401:
|
|
75
|
+
return "unauthorized"
|
|
76
|
+
return "request failed"
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
async def api_error_exception_handler(_: Request, exc: ApiError) -> JSONResponse:
|
|
80
|
+
payload = build_error_response_payload(
|
|
81
|
+
code=exc.code,
|
|
82
|
+
http_status=exc.http_status,
|
|
83
|
+
message=exc.message,
|
|
84
|
+
description=exc.description,
|
|
85
|
+
context_fields=exc.context_fields,
|
|
86
|
+
retryable=exc.retryable,
|
|
87
|
+
details=exc.details,
|
|
88
|
+
)
|
|
89
|
+
return JSONResponse(status_code=exc.http_status, content=payload)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
async def http_exception_handler(_: Request, exc: HTTPException) -> JSONResponse:
|
|
93
|
+
status_code = int(exc.status_code)
|
|
94
|
+
code = _default_code_by_status(status_code)
|
|
95
|
+
message = _default_message_by_status(status_code)
|
|
96
|
+
details: dict[str, Any] = {}
|
|
97
|
+
|
|
98
|
+
if isinstance(exc.detail, dict):
|
|
99
|
+
maybe_error = exc.detail.get("error")
|
|
100
|
+
if isinstance(maybe_error, dict):
|
|
101
|
+
code = str(maybe_error.get("code") or code)
|
|
102
|
+
message = str(maybe_error.get("message") or message)
|
|
103
|
+
details = maybe_error.get("details") if isinstance(maybe_error.get("details"), dict) else {}
|
|
104
|
+
else:
|
|
105
|
+
code = str(exc.detail.get("code") or code)
|
|
106
|
+
message = str(exc.detail.get("message") or message)
|
|
107
|
+
details = exc.detail.get("details") if isinstance(exc.detail.get("details"), dict) else {}
|
|
108
|
+
elif isinstance(exc.detail, str) and exc.detail.strip():
|
|
109
|
+
message = exc.detail.strip()
|
|
110
|
+
|
|
111
|
+
payload = build_error_response_payload(
|
|
112
|
+
code=code,
|
|
113
|
+
http_status=status_code,
|
|
114
|
+
message=message,
|
|
115
|
+
details=details,
|
|
116
|
+
)
|
|
117
|
+
return JSONResponse(status_code=status_code, content=payload)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
async def unhandled_exception_handler(_: Request, __: Exception) -> JSONResponse:
|
|
121
|
+
payload = build_error_response_payload(
|
|
122
|
+
code="INTERNAL_ERROR",
|
|
123
|
+
http_status=500,
|
|
124
|
+
message="internal server error",
|
|
125
|
+
description="unexpected server exception",
|
|
126
|
+
retryable=False,
|
|
127
|
+
)
|
|
128
|
+
return JSONResponse(status_code=500, content=payload)
|
|
129
|
+
|
{flare_kernel-0.2.2 → flare_kernel-0.2.3}/src/flare_kernel/router/intent/intent_retrieval.py
RENAMED
|
@@ -89,6 +89,9 @@ def search_knowledge_by_queries(
|
|
|
89
89
|
queries: list[str],
|
|
90
90
|
top_k: int,
|
|
91
91
|
min_score: float,
|
|
92
|
+
source_ids: list[str] | None = None,
|
|
93
|
+
entities: list[dict[str, Any] | str] | None = None,
|
|
94
|
+
entity_query_mode: str = "prefer",
|
|
92
95
|
) -> list[dict[str, Any]]:
|
|
93
96
|
return search_knowledge_by_queries_from_router(
|
|
94
97
|
trace_id=trace_id,
|
|
@@ -97,5 +100,8 @@ def search_knowledge_by_queries(
|
|
|
97
100
|
queries=queries,
|
|
98
101
|
top_k=top_k,
|
|
99
102
|
min_score=min_score,
|
|
103
|
+
source_ids=source_ids,
|
|
104
|
+
entities=entities,
|
|
105
|
+
entity_query_mode=entity_query_mode,
|
|
100
106
|
search_knowledge_records_fn=search_knowledge_records,
|
|
101
107
|
)
|