{"openapi":"3.1.0","info":{"title":"Factflow","description":"AI Knowledge and Fact Pipeline","version":"0.5.1"},"paths":{"/api/v1/system/mq-diagnostic":{"post":{"tags":["system"],"summary":"Run Mq Diagnostic","description":"Run MQ connection diagnostic with verbose step-by-step output.\n\nTests STOMP connectivity to an MQ broker (e.g., AWS AmazonMQ) with\ndetailed timeline of DNS, TCP, TLS, and STOMP handshake phases.\n\nThis is a one-shot diagnostic connection that does NOT use the\nproduction ArtemisQueueProvider. It's designed for debugging\nconnection issues with custom credentials.\n\nArgs:\n    request: Connection parameters including host, port, credentials\n\nReturns:\n    MQDiagnosticResponse with step-by-step timeline and connection details","operationId":"run_mq_diagnostic_api_v1_system_mq_diagnostic_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MQDiagnosticRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MQDiagnosticResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/system/health":{"get":{"tags":["system"],"summary":"Get System Health","description":"Get comprehensive system health status.\n\nChecks health of:\n- Database connection\n- Queue adapter\n- Storage adapter\n- Orchestrator\n\nArgs:\n    debug: If true, include extended debug info (connection states, errors, etc.)\n\nReturns:\n    SystemHealthResponse with overall status and component details","operationId":"get_system_health_api_v1_system_health_get","parameters":[{"name":"debug","in":"query","required":false,"schema":{"type":"boolean","description":"Include extended debug info","default":false,"title":"Debug"},"description":"Include extended debug info"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemHealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/system/metrics":{"get":{"tags":["system"],"summary":"Get System Metrics","description":"Get system-wide metrics.\n\nAggregates metrics from pipeline orchestrator including:\n- Messages received, completed, failed\n- Messages currently in flight\n- Number of running routes\n- Circuit breaker status by domain\n\nReturns:\n    SystemMetrics with aggregated statistics\n\nRaises:\n    HTTPException: 503 if orchestrator not available","operationId":"get_system_metrics_api_v1_system_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemMetrics"}}}}}}},"/api/v1/system/config":{"get":{"tags":["system"],"summary":"Get System Config","description":"Get current system configuration (sanitized - no secrets).\n\nReturns public configuration information with sensitive\nfields (passwords, API keys) excluded.\n\nReturns:\n    ConfigResponse with sanitized configuration\n\nRaises:\n    HTTPException: 503 if configuration not available","operationId":"get_system_config_api_v1_system_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemConfigResponse"}}}}}}},"/api/v1/system/reload":{"post":{"tags":["system"],"summary":"Reload Configuration","description":"Reload system configuration and restart pipeline routes.\n\nThis will:\n1. Stop all current processors\n2. Reload configuration from YAML\n3. Start new processors\n\nReturns:\n    ReloadResponse with success status and routes reloaded count\n\nRaises:\n    HTTPException: 503 if orchestrator not available","operationId":"reload_configuration_api_v1_system_reload_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReloadResponse"}}}}}}},"/api/v1/system/version":{"get":{"tags":["system"],"summary":"Get Version Info","description":"Get version information for Factflow and dependencies.\n\nReturns version numbers for:\n- Factflow\n- Python runtime\n- FastAPI framework\n- Pydantic library\n- PostgreSQL database (if available)\n\nReturns:\n    VersionInfo with all version numbers","operationId":"get_version_info_api_v1_system_version_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionInfo"}}}}}}},"/api/v1/adapters":{"get":{"tags":["adapters"],"summary":"List Adapters","description":"List all registered adapters.\n\nReturns:\n    AdapterListResponse with list of adapter type names\n\nRaises:\n    HTTPException: 503 if orchestrator/registry not available","operationId":"list_adapters_api_v1_adapters_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdapterListResponse"}}}},"503":{"description":"Adapter registry not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/adapters/{adapter_type}":{"get":{"tags":["adapters"],"summary":"Get Adapter Info","description":"Get adapter info including config schema.\n\nArgs:\n    adapter_type: Adapter type identifier (e.g., 'webscraper')\n    container: Service container\n\nReturns:\n    AdapterInfoResponse with config schema and metadata\n\nRaises:\n    HTTPException: 404 if adapter not found, 503 if registry not available","operationId":"get_adapter_info_api_v1_adapters__adapter_type__get","parameters":[{"name":"adapter_type","in":"path","required":true,"schema":{"type":"string","title":"Adapter Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdapterInfoResponse"}}}},"404":{"description":"Adapter not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Adapter registry not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/adapters/{adapter_type}/validate":{"post":{"tags":["adapters"],"summary":"Validate Adapter Config","description":"Validate adapter configuration without creating instance.\n\nArgs:\n    adapter_type: Adapter type identifier\n    request: Configuration to validate\n    container: Service container\n\nReturns:\n    ConfigValidationResponse indicating validity and any errors\n\nRaises:\n    HTTPException: 404 if adapter not found, 503 if registry not available","operationId":"validate_adapter_config_api_v1_adapters__adapter_type__validate_post","parameters":[{"name":"adapter_type","in":"path","required":true,"schema":{"type":"string","title":"Adapter Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigValidationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigValidationResponse"}}}},"404":{"description":"Adapter not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Adapter registry not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/capabilities":{"get":{"tags":["chat"],"summary":"Get Capabilities","description":"Discover chat system capabilities.\n\nReturns available LLM models, embedding models with index status,\nsupported context modes, retrieval strategies, languages, and defaults.\n\nUse this endpoint to populate UI dropdowns and validate parameters\nbefore making chat requests.\n\nArgs:\n    config: Application configuration (injected)\n    index_service: Index management service (injected)\n\nReturns:\n    CapabilitiesResponse with all available options and defaults","operationId":"get_capabilities_api_v1_chat_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapabilitiesResponse"}}}}}}},"/api/v1/chat/sources":{"get":{"tags":["chat"],"summary":"Get Sources","description":"Get available data sources (executions with indexed content).\n\nReturns executions that have embeddings indexed, optionally filtered\nby embedding model. Use this to populate source selection in the UI.\n\nArgs:\n    conn: Database connection (injected)\n    embedding_model: Optional filter by embedding model name\n    min_segments: Minimum segment count to include (default 1)\n\nReturns:\n    SourcesResponse with list of available sources","operationId":"get_sources_api_v1_chat_sources_get","parameters":[{"name":"embedding_model","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by embedding model","title":"Embedding Model"},"description":"Filter by embedding model"},{"name":"min_segments","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Minimum segment count","default":1,"title":"Min Segments"},"description":"Minimum segment count"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourcesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/search/rrf":{"post":{"tags":["chat"],"summary":"Search Rrf","description":"Execute RRF hybrid search combining vector similarity and keyword matching.\n\nReciprocal Rank Fusion (RRF) combines rankings from both search methods:\n- Vector search: Semantic similarity based on embeddings\n- Keyword search: Full-text search with language-specific stemming\n\nResults appearing high in both searches are boosted.\n\nArgs:\n    request: RRF search request with query and parameters\n    service: Hybrid search service (injected)\n\nReturns:\n    Search results with RRF scores and component breakdowns\n\nRaises:\n    HTTPException: 503 if service not configured, 400 for invalid request","operationId":"search_rrf_api_v1_chat_search_rrf_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RRFSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RRFSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/search/keyword":{"post":{"tags":["chat"],"summary":"Search Keyword Only","description":"Execute keyword-only full-text search.\n\nUses PostgreSQL's tsvector with language-specific stemming.\nUseful for exact term matching when semantic similarity isn't needed.\n\nArgs:\n    request: Keyword search request\n    service: Hybrid search service (injected)\n\nReturns:\n    Search results ranked by FTS score\n\nRaises:\n    HTTPException: 503 if service not configured","operationId":"search_keyword_only_api_v1_chat_search_keyword_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeywordSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RRFSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/search/vector":{"post":{"tags":["chat"],"summary":"Search Vector Only","description":"Execute vector-only semantic search.\n\nUses embedding similarity without keyword matching.\nUseful when exact terms don't matter, only semantic meaning.\n\nArgs:\n    request: Vector search request\n    service: Hybrid search service (injected)\n\nReturns:\n    Search results ranked by vector similarity\n\nRaises:\n    HTTPException: 503 if service not configured","operationId":"search_vector_only_api_v1_chat_search_vector_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VectorSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RRFSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/complete":{"post":{"tags":["chat"],"summary":"Chat Complete","description":"Execute RAG chat with context retrieval and LLM generation.\n\nThis endpoint retrieves relevant context from the knowledge base,\nbuilds a prompt with the context, and generates a response using the\nspecified LLM model.\n\nRetrieval strategies:\n- merge: Search all sources in parallel, merge by weighted similarity\n- sequential: Search sources in order until enough results are found\n- ensemble: Use RRF to combine vector and keyword search\n\nArgs:\n    request: Chat request with query, history, and configuration\n    service: Chat service (injected)\n\nReturns:\n    ChatCompletionResponse with generated text and source attributions\n\nRaises:\n    HTTPException: 503 if service not configured, 500 on generation error","operationId":"chat_complete_api_v1_chat_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/stream":{"post":{"tags":["chat"],"summary":"Chat Stream","description":"Stream RAG chat response using Server-Sent Events.\n\nThe stream emits events in this order:\n1. `sources` event with retrieved context attributions\n2. Multiple `text` events with generated content chunks\n3. `done` event when generation is complete\n\nEvent format:\n```\nevent: sources\ndata: {\"sources\": [...]}\n\nevent: text\ndata: {\"content\": \"...\"}\n\nevent: done\ndata: {\"completed\": true}\n```\n\nArgs:\n    request: Chat request with query, history, and configuration\n    service: Chat service (injected)\n\nReturns:\n    StreamingResponse with SSE events\n\nRaises:\n    HTTPException: 503 if service not configured","operationId":"chat_stream_api_v1_chat_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatCompletionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/templates":{"post":{"tags":["chat"],"summary":"Create Template","description":"Create a new chat template.\n\nTemplates store reusable chat configurations including persona,\nsystem prompts, RAG settings, and LLM parameters.\n\nArgs:\n    template: Template configuration (id optional, will be generated)\n    conn: Database connection (injected)\n\nReturns:\n    Created template with generated ID\n\nRaises:\n    HTTPException: 400 if validation fails, 500 on database error","operationId":"create_template_api_v1_chat_templates_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTemplate-Input"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTemplate-Output"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["chat"],"summary":"List Templates","description":"List templates with optional filters.\n\nSupports filtering by:\n- Owner ID (user's own templates)\n- Public visibility\n- Tags (any tag matches)\n\nArgs:\n    conn: Database connection (injected)\n    owner_id: Optional owner filter\n    include_public: Whether to include public templates\n    tags: Optional tag filter\n    limit: Maximum results\n    offset: Pagination offset\n\nReturns:\n    List of matching templates with total count","operationId":"list_templates_api_v1_chat_templates_get","parameters":[{"name":"owner_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by owner ID","title":"Owner Id"},"description":"Filter by owner ID"},{"name":"include_public","in":"query","required":false,"schema":{"type":"boolean","description":"Include public templates","default":true,"title":"Include Public"},"description":"Include public templates"},{"name":"tags","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Filter by tags (any match)","title":"Tags"},"description":"Filter by tags (any match)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Maximum results","default":50,"title":"Limit"},"description":"Maximum results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/chat/templates/{template_id}":{"get":{"tags":["chat"],"summary":"Get Template","description":"Get a template by ID.\n\nArgs:\n    template_id: Template UUID\n    conn: Database connection (injected)\n\nReturns:\n    Template if found\n\nRaises:\n    HTTPException: 404 if not found","operationId":"get_template_api_v1_chat_templates__template_id__get","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTemplate-Output"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["chat"],"summary":"Update Template","description":"Update an existing template.\n\nThe template ID in the URL must match the template body.\n\nArgs:\n    template_id: Template UUID to update\n    template: Updated template configuration\n    conn: Database connection (injected)\n\nReturns:\n    Updated template\n\nRaises:\n    HTTPException: 400 if ID mismatch, 404 if not found","operationId":"update_template_api_v1_chat_templates__template_id__put","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTemplate-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatTemplate-Output"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["chat"],"summary":"Delete Template","description":"Delete a template by ID.\n\nArgs:\n    template_id: Template UUID to delete\n    conn: Database connection (injected)\n\nRaises:\n    HTTPException: 404 if not found","operationId":"delete_template_api_v1_chat_templates__template_id__delete","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/configs":{"post":{"tags":["configs"],"summary":"Create Config","description":"Create a new pipeline configuration.\n\nThe YAML is validated but validation errors do NOT block persistence — the\nconfig is saved regardless and the `validation_report` / `is_runnable`\nfields on the response reflect the current state. The run-gate on\n`POST /configs/{id}/run` enforces that invalid configs cannot be executed.\n\nPure YAML parse errors still return 400 (nothing persistable).\n\nArgs:\n    request: Configuration create request\n    service: Execution service (injected)\n    container: Service container (injected)\n\nReturns:\n    Created configuration with validation_report and is_runnable populated.\n\nRaises:\n    HTTPException: 400 on YAML parse error, 500 for server errors","operationId":"create_config_api_v1_configs_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineConfigResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["configs"],"summary":"List Configs","description":"List all active pipeline configurations with pagination.\n\nEach entry carries a `validation_report` and `is_runnable` field re-derived\nagainst the current adapter registry. Registry drift (a renamed/removed\nadapter) is surfaced automatically without requiring a user re-save.\n\nArgs:\n    service: Execution service (injected)\n    container: Service container (injected)\n    limit: Maximum number of results per page (default: 100)\n    offset: Number of records to skip for pagination (default: 0)\n\nReturns:\n    Paginated list of configurations with total count","operationId":"list_configs_api_v1_configs_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum results per page","default":100,"title":"Limit"},"description":"Maximum results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Offset"},"description":"Number of records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/configs/validate":{"post":{"tags":["configs"],"summary":"Validate Config","description":"Validate a pipeline configuration YAML without persisting it.\n\nAlways returns 200. Inspect `is_valid` / `error_count` to determine status.","operationId":"validate_config_api_v1_configs_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateConfigRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/configs/{config_id}":{"get":{"tags":["configs"],"summary":"Get Config","description":"Get detailed pipeline configuration.\n\nThe response includes a `validation_report` re-derived from the current\nadapter registry, so registry drift is visible even for configs that were\nvalid when saved.\n\nArgs:\n    config_id: Configuration UUID\n    service: Execution service (injected)\n    container: Service container (injected)\n\nReturns:\n    Configuration details including YAML content and current validation state\n\nRaises:\n    HTTPException: 404 if not found","operationId":"get_config_api_v1_configs__config_id__get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDetailResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["configs"],"summary":"Update Config","description":"Update an existing pipeline configuration.\n\nValidation errors do NOT block persistence — the new YAML is saved and the\nresponse carries the current `validation_report` / `is_runnable` fields so\nthe caller can surface the status. The run-gate on\n`POST /configs/{id}/run` enforces that invalid configs cannot be executed.\n\nArgs:\n    config_id: Configuration UUID to update\n    request: Update request with new name, description, and config_yaml\n    service: Execution service (injected)\n    container: Service container (injected)\n\nReturns:\n    Updated configuration details with validation_report and is_runnable.\n\nRaises:\n    HTTPException: 404 if not found, 400 on YAML parse error only","operationId":"update_config_api_v1_configs__config_id__put","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDetailResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["configs"],"summary":"Deactivate Config","description":"Deactivate a pipeline configuration (soft delete).\n\nArgs:\n    config_id: Configuration UUID\n    service: Execution service (injected)\n\nRaises:\n    HTTPException: 404 if not found","operationId":"deactivate_config_api_v1_configs__config_id__delete","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}}],"responses":{"204":{"description":"Successful Response"},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/configs/{config_id}/run":{"post":{"tags":["configs"],"summary":"Run Config","description":"Start a new pipeline execution from a configuration.\n\nThis is the preferred way to start executions - it ensures full traceability\nby linking the execution to a stored configuration.\n\nThe endpoint:\n1. Creates an execution record in the database\n2. Loads the pipeline routes from the config\n3. Starts all routes in the orchestrator\n4. Publishes the init_message to trigger pipeline execution (unless skip_init_message=True)\n\nArgs:\n    config_id: Configuration UUID to run\n    service: Execution service (injected)\n    container: Service container (injected)\n    skip_init_message: If True, start routes but don't publish init_message (for replay scenarios)\n    init_payload_overrides: Override init_message payload fields (merged into YAML defaults)\n\nReturns:\n    Created execution record\n\nRaises:\n    HTTPException: 404 if config not found, 503 if orchestrator not available, 500 for errors","operationId":"run_config_api_v1_configs__config_id__run_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Config Id"}},{"name":"skip_init_message","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Skip Init Message"}},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Tag for the new execution (unique)","title":"Tag"},"description":"Tag for the new execution (unique)"}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"description":"Override init_message payload fields at runtime","title":"Init Payload Overrides"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"Validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines":{"get":{"tags":["pipelines"],"summary":"List Pipelines","description":"List all pipelines across all active executions.","operationId":"list_pipelines_api_v1_pipelines_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: running, stopped","title":"Status"},"description":"Filter by status: running, stopped"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines/metrics/aggregate":{"get":{"tags":["pipelines"],"summary":"Get Aggregate Metrics","description":"Get aggregate metrics across all pipelines and all executions.","operationId":"get_aggregate_metrics_api_v1_pipelines_metrics_aggregate_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AggregateMetrics"}}}}}}},"/api/v1/pipelines/{route_id}":{"get":{"tags":["pipelines"],"summary":"Get Pipeline","description":"Get pipeline detail. Searches across all active executions.","operationId":"get_pipeline_api_v1_pipelines__route_id__get","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","title":"Route Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineDetail"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["pipelines"],"summary":"Update Pipeline State","description":"Pause/resume a route globally (affects ALL executions with this route).","operationId":"update_pipeline_state_api_v1_pipelines__route_id__patch","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","title":"Route Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineStateUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineControlResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pipelines"],"summary":"Delete Pipeline","description":"Stop and delete a pipeline route. Searches across all active executions.","operationId":"delete_pipeline_api_v1_pipelines__route_id__delete","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","title":"Route Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineControlResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pipelines/{route_id}/metrics":{"get":{"tags":["pipelines"],"summary":"Get Pipeline Metrics","description":"Get metrics for a route. Searches across all active executions.","operationId":"get_pipeline_metrics_api_v1_pipelines__route_id__metrics_get","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","title":"Route Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineMetrics"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/replay":{"post":{"tags":["replay"],"summary":"Execute detached replay","description":"Replay stored pipeline outputs from a previous execution to any target route.\n\n    This creates a new execution context with:\n    - New execution_id (UUID v7)\n    - New replay_batch_id (UUID v7) for grouping replayed messages\n    - Unique correlation_id per message for lineage tracking\n\n    The replay operation:\n    1. Lists objects at the source prefix (execution_id/stage/path)\n    2. Filters out .meta.json sidecar files\n    3. Publishes each object to the target route's inbound queue\n    4. Puts execution_id and replay_batch_id in message METADATA\n    5. Puts object_key in message payload for downstream adapters","operationId":"execute_replay_api_v1_replay_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetachedReplayRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetachedReplayResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/replay/routes":{"get":{"tags":["replay"],"summary":"List available routes","description":"List all routes available as replay targets.\n\n    Routes are loaded from YAML pipeline configurations in config/pipelines/.\n    Each route has an inbound queue where replayed messages will be published.","operationId":"list_routes_api_v1_replay_routes_get","parameters":[{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by config source file","title":"Source"},"description":"Filter by config source file"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/replay/routes/reload":{"post":{"tags":["replay"],"summary":"Reload routes from config","description":"Reload route definitions from pipeline configuration files.","operationId":"reload_routes_api_v1_replay_routes_reload_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutesListResponse"}}}}}}},"/api/v1/storage/objects":{"get":{"tags":["storage"],"summary":"List Objects","description":"List storage objects with optional filters and pagination.\n\nSupports filtering by:\n- correlation_id: Search metadata for matching correlation_id\n- stage: Search metadata for matching stage\n- route_id: Search metadata for matching route_id\n- prefix: Filter by key prefix (filesystem path)\n- delimiter: Character for hierarchical listing (returns common_prefixes for folders)\n\nWhen delimiter is provided (typically '/'), the response includes:\n- objects: Files at the current level\n- common_prefixes: Folder prefixes for navigation\n- execution_prefixes: Enriched execution info when include_execution_info=true\n\nArgs:\n    storage: Storage provider (injected)\n    correlation_id: Filter by correlation_id\n    stage: Filter by stage name\n    route_id: Filter by route_id\n    prefix: Filter by key prefix\n    delimiter: Delimiter for hierarchical listing (typically '/')\n    include_metadata: Include full sidecar metadata in each object (default: true)\n    include_execution_info: Enrich execution ID prefixes with execution metadata (default: false)\n    limit: Maximum results per page (default: 100, max: 1000)\n    offset: Number of records to skip for pagination (default: 0)\n\nReturns:\n    ListObjectsResponse with matching objects, common_prefixes, and execution_prefixes\n\nRaises:\n    HTTPException: 503 if storage not available","operationId":"list_objects_api_v1_storage_objects_get","parameters":[{"name":"correlation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by correlation_id","title":"Correlation Id"},"description":"Filter by correlation_id"},{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by stage name","title":"Stage"},"description":"Filter by stage name"},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by route_id","title":"Route Id"},"description":"Filter by route_id"},{"name":"prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by key prefix","title":"Prefix"},"description":"Filter by key prefix"},{"name":"delimiter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Delimiter for hierarchical listing (typically '/')","title":"Delimiter"},"description":"Delimiter for hierarchical listing (typically '/')"},{"name":"extension","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"File extension filter (.md, .json; comma-separated)","title":"Extension"},"description":"File extension filter (.md, .json; comma-separated)"},{"name":"include_metadata","in":"query","required":false,"schema":{"type":"boolean","description":"Include sidecar metadata in response","default":true,"title":"Include Metadata"},"description":"Include sidecar metadata in response"},{"name":"include_execution_info","in":"query","required":false,"schema":{"type":"boolean","description":"Enrich execution ID prefixes with execution info","default":false,"title":"Include Execution Info"},"description":"Enrich execution ID prefixes with execution info"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum results per page","default":100,"title":"Limit"},"description":"Maximum results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Offset"},"description":"Number of records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListObjectsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/storage/objects/{key}/metadata":{"get":{"tags":["storage"],"summary":"Get Object Metadata","description":"Get metadata for a storage object.\n\nArgs:\n    key: Full object key (path)\n    storage: Storage provider (injected)\n\nReturns:\n    ObjectMetadataResponse with full metadata\n\nRaises:\n    HTTPException: 404 if not found, 503 if storage not available","operationId":"get_object_metadata_api_v1_storage_objects__key__metadata_get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObjectMetadataResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/storage/objects/{key}":{"get":{"tags":["storage"],"summary":"Get Object Content","description":"Get object content as a streaming response.\n\nArgs:\n    key: Full object key (path)\n    storage: Storage provider (injected)\n\nReturns:\n    StreamingResponse with object content\n\nRaises:\n    HTTPException: 404 if not found, 503 if storage not available","operationId":"get_object_content_api_v1_storage_objects__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/storage/browse":{"get":{"tags":["storage"],"summary":"Browse Storage","description":"Browse storage hierarchy.\n\nNavigate storage like a filesystem for Admin UI.\n\nArgs:\n    storage: Storage provider (injected)\n    path: Directory path to browse (empty for root)\n\nReturns:\n    BrowseResponse with directories and files\n\nRaises:\n    HTTPException: 503 if storage not available","operationId":"browse_storage_api_v1_storage_browse_get","parameters":[{"name":"path","in":"query","required":false,"schema":{"type":"string","description":"Directory path to browse","default":"","title":"Path"},"description":"Directory path to browse"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrowseResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/storage/events":{"get":{"tags":["storage"],"summary":"Stream Storage Events","description":"Stream storage write events via Server-Sent Events.\n\nPipeline adapters write content to storage during execution. Each write\nemits a `storage.object.created` event on `/topic/system.storage.events`.\nThis endpoint subscribes to the topic, filters by execution/stage/path/extension,\nand streams matching events to the client.\n\nMulti-execution aggregation: pass `execution_id` multiple times\n(`?execution_id=tag1&execution_id=tag2`) to multiplex events from several\nexecutions in a single stream. Each event carries its `execution_id` so\nconsumers can distinguish sources.\n\nResumable: set the `Last-Event-ID` request header to skip events that\nsort lexicographically ≤ the provided UUIDv7. Best-effort — events\npublished during the reconnect gap are lost.\n\nThe stream ends when all watched executions reach terminal state\n(completed/failed/cancelled), the timeout is reached, or the client\ndisconnects.","operationId":"stream_storage_events_api_v1_storage_events_get","parameters":[{"name":"execution_id","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"description":"Execution UUID or tag(s); repeat for multi-execution watch","title":"Execution Id"},"description":"Execution UUID or tag(s); repeat for multi-execution watch"},{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by stage prefix (e.g. 'boost/routines')","title":"Stage"},"description":"Filter by stage prefix (e.g. 'boost/routines')"},{"name":"path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by sub-path within stage","title":"Path"},"description":"Filter by sub-path within stage"},{"name":"extension","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by extension (.md, .json)","title":"Extension"},"description":"Filter by extension (.md, .json)"},{"name":"timeout","in":"query","required":false,"schema":{"type":"number","maximum":3600.0,"minimum":1.0,"description":"Stream timeout in seconds","default":300.0,"title":"Timeout"},"description":"Stream timeout in seconds"},{"name":"keep_open","in":"query","required":false,"schema":{"type":"boolean","description":"Do not auto-terminate when all watched executions complete","default":false,"title":"Keep Open"},"description":"Do not auto-terminate when all watched executions complete"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Storage event streamer not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content/count":{"get":{"tags":["content"],"summary":"Count content objects and list available stages","operationId":"content_count_api_v1_content_count_get","parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","description":"Content domain: storage","title":"Domain"},"description":"Content domain: storage"},{"name":"execution_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Execution UUID or tag","title":"Execution Id"},"description":"Execution UUID or tag"},{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pipeline stage (path segment)","title":"Stage"},"description":"Pipeline stage (path segment)"},{"name":"path","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Sub-path within stage","title":"Path"},"description":"Sub-path within stage"},{"name":"extension","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Extension filter (.md, .json; comma-separated)","title":"Extension"},"description":"Extension filter (.md, .json; comma-separated)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentCountResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content/archive/prepare":{"post":{"tags":["content"],"summary":"Start async archive preparation","operationId":"archive_prepare_api_v1_content_archive_prepare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchivePrepareRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchivePrepareResponse"}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content/archive/{job_id}/status":{"get":{"tags":["content"],"summary":"Check archive preparation progress","operationId":"archive_status_api_v1_content_archive__job_id__status_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArchiveStatusResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content/archive/{job_id}/download":{"get":{"tags":["content"],"summary":"Download prepared archive","operationId":"archive_download_api_v1_content_archive__job_id__download_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/content/archive/{job_id}":{"delete":{"tags":["content"],"summary":"Cancel and clean up archive job","operationId":"archive_cancel_api_v1_content_archive__job_id__delete","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"204":{"description":"Successful Response"},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions":{"post":{"tags":["executions"],"summary":"Start Execution","description":"Start a new pipeline execution.\n\nArgs:\n    request: Execution start request\n    service: Execution service (injected)\n\nReturns:\n    Created execution record\n\nRaises:\n    HTTPException: 400 if config not found, 500 for server errors","operationId":"start_execution_api_v1_executions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionStartRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["executions"],"summary":"List Executions","description":"List pipeline executions with filters and pagination.\n\nArgs:\n    service: Execution service (injected)\n    status: Filter by status (running, completed, failed, cancelled, interrupted)\n    config_id: Filter by configuration ID\n    started_after: Filter by minimum start time\n    started_before: Filter by maximum start time\n    limit: Maximum number of results per page (default: 100)\n    offset: Number of records to skip for pagination (default: 0)\n\nReturns:\n    Paginated list of executions matching filters with total count","operationId":"list_executions_api_v1_executions_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["running","completed","failed","cancelled","interrupted"],"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"config_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by configuration","title":"Config Id"},"description":"Filter by configuration"},{"name":"started_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by minimum start time","title":"Started After"},"description":"Filter by minimum start time"},{"name":"started_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter by maximum start time","title":"Started Before"},"description":"Filter by maximum start time"},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by exact tag match","title":"Tag"},"description":"Filter by exact tag match"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum results per page","default":100,"title":"Limit"},"description":"Maximum results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Offset"},"description":"Number of records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/replay":{"post":{"tags":["executions"],"summary":"Replay Execution","description":"Replay a previous pipeline execution.\n\nFull replay coordinator:\n1. Creates a new execution record linked to the parent\n2. Starts routes via OrchestratorManager (skip init_message)\n3. Publishes replay messages from source storage to target route\n\nFor cross-pipeline replay, provide config_id in the request body to use\na different pipeline's routes. Storage reads from the parent execution.\n\nArgs:\n    execution_id: Parent execution UUID or tag to replay from\n    request: Replay request with from_stage, to_route, and replay source\n    service: Execution service (injected)\n    container: Service container for manager, storage, queue, route resolver\n\nReturns:\n    New execution record for the replay\n\nRaises:\n    HTTPException: 404 if parent execution not found, 400 if route/stage invalid, 503 if services unavailable","operationId":"replay_execution_api_v1_executions__execution_id__replay_post","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionReplayRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}":{"get":{"tags":["executions"],"summary":"Get Execution","description":"Get detailed execution information.\n\nArgs:\n    execution_id: Execution UUID or tag\n    service: Execution service (injected)\n\nReturns:\n    Execution details including config snapshot and error info\n\nRaises:\n    HTTPException: 404 if not found","operationId":"get_execution_api_v1_executions__execution_id__get","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionDetailResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["executions"],"summary":"Update Execution Status","description":"Update execution status.\n\nSupports setting status to 'cancelled', 'failed', or 'completed' for running executions.\nUses PATCH with a status body for proper REST semantics.\n\nUse cases:\n- 'cancelled': User-initiated cancellation of a running execution\n- 'failed': Manual cleanup of stale executions that failed but weren't detected\n- 'completed': Manual cleanup of stale executions that completed but weren't detected\n\nNote: 'failed' and 'completed' are intended for administrative cleanup of executions\nthat got stuck in 'running' status (e.g., after server restart in embedded mode).\n\nArgs:\n    execution_id: Execution UUID\n    request: Status update request with target status and optional error_info\n    service: Execution service (injected)\n\nReturns:\n    Status update result with previous and current status\n\nRaises:\n    HTTPException: 404 if not found, 400 if status change not allowed","operationId":"update_execution_status_api_v1_executions__execution_id__patch","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionStatusUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionStatusUpdateResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/stats":{"get":{"tags":["executions"],"summary":"Get Execution Stats","description":"Get execution statistics derived from lineage.\n\nArgs:\n    execution_id: Execution UUID\n    service: Execution service (injected)\n\nReturns:\n    Execution statistics\n\nRaises:\n    HTTPException: 404 if not found","operationId":"get_execution_stats_api_v1_executions__execution_id__stats_get","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionStatsResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/routes":{"get":{"tags":["executions"],"summary":"Get Execution Routes","description":"Get route-level statistics for an execution.\n\nReturns aggregated statistics per route derived from lineage data.\n\nArgs:\n    execution_id: Execution UUID\n    service: Execution service (injected)\n    lineage_service: Lineage service (injected)\n\nReturns:\n    Route-level statistics for this execution\n\nRaises:\n    HTTPException: 404 if execution not found","operationId":"get_execution_routes_api_v1_executions__execution_id__routes_get","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RouteStatsResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/dag":{"get":{"tags":["executions"],"summary":"Get Execution Dag","description":"Get the DAG structure for an execution.\n\nExtracts route dependency graph from the execution's config snapshot.\nNodes represent routes, edges represent queue connections.\n\nArgs:\n    execution_id: Execution UUID\n    service: Execution service (injected)\n\nReturns:\n    DAG structure with nodes and edges\n\nRaises:\n    HTTPException: 404 if not found","operationId":"get_execution_dag_api_v1_executions__execution_id__dag_get","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DAGResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/monitor":{"get":{"tags":["executions"],"summary":"Get Execution Monitor","description":"Get unified monitoring view for an execution.\n\nCombines execution record, DAG, route status, and metrics in a single call.\nDesigned for dashboard rendering without multiple API round-trips.\n\nArgs:\n    execution_id: Execution UUID\n    service: Execution service (injected)\n    lineage_service: Lineage service (injected)\n\nReturns:\n    Unified monitoring view with execution, DAG, routes, and metrics\n\nRaises:\n    HTTPException: 404 if not found","operationId":"get_execution_monitor_api_v1_executions__execution_id__monitor_get","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/events":{"get":{"tags":["executions"],"summary":"Stream Execution Events","description":"Stream execution progress via Server-Sent Events.\n\nReactive endpoint - events pushed as they occur, no polling.\nRecommended for frontend dashboards and real-time monitoring.\n\nEvent types:\n- initiated: Message processing started\n- processing: Message being processed by adapter\n- completed: Message processing completed\n- failed: Message processing failed\n\nThe stream ends when:\n- Execution completes (status: completed/failed/cancelled)\n- Timeout reached (default 5 minutes)\n- Client disconnects\n\nArgs:\n    execution_id: Execution UUID to stream events for\n    service: Execution service (injected)\n    streamer: Event streamer (injected)\n    timeout: Maximum stream duration in seconds\n\nReturns:\n    EventSourceResponse with SSE stream\n\nRaises:\n    HTTPException: 404 if execution not found, 503 if streamer unavailable","operationId":"stream_execution_events_api_v1_executions__execution_id__events_get","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}},{"name":"timeout","in":"query","required":false,"schema":{"type":"number","maximum":3600.0,"minimum":1.0,"description":"Stream timeout in seconds","default":300.0,"title":"Timeout"},"description":"Stream timeout in seconds"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Event streamer not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/wait":{"post":{"tags":["executions"],"summary":"Wait For Execution","description":"Wait for execution to complete (LEGACY - CLI only).\n\nWARNING: This endpoint blocks the HTTP connection until completion.\nNOT recommended for:\n- Frontend applications (use GET /events SSE instead)\n- Load-balanced environments\n- Long-running executions\n\nUse cases where this is acceptable:\n- CLI tools with --wait flag\n- CI/CD scripts with timeout\n- Simple synchronous integrations\n\nFor reactive monitoring, use GET /executions/{id}/events instead.\n\nArgs:\n    execution_id: Execution UUID to wait for\n    request: Wait request with timeout\n    waiter: Execution waiter (injected)\n    service: Execution service for stats (injected)\n\nReturns:\n    Wait result with completion status and final statistics\n\nRaises:\n    HTTPException: 404 if execution not found, 503 if waiter unavailable","operationId":"wait_for_execution_api_v1_executions__execution_id__wait_post","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionWaitRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionWaitResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Execution waiter not available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/replays":{"get":{"tags":["executions"],"summary":"Get Execution Replays","description":"Get all replay executions for a parent execution.\n\nArgs:\n    execution_id: Parent execution UUID\n    service: Execution service (injected)\n    limit: Maximum number of results per page (default: 100)\n    offset: Number of records to skip for pagination (default: 0)\n\nReturns:\n    Paginated list of replay executions","operationId":"get_execution_replays_api_v1_executions__execution_id__replays_get","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Maximum results per page","default":100,"title":"Limit"},"description":"Maximum results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of records to skip","default":0,"title":"Offset"},"description":"Number of records to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/executions/{execution_id}/lineage":{"get":{"tags":["executions"],"summary":"Get Execution Lineage","description":"Get lineage entries for an execution.\n\nReturns all lineage tracking entries associated with this execution,\nordered by started_at timestamp.\n\nArgs:\n    execution_id: Execution UUID\n    service: Execution service (injected)\n    lineage_service: Lineage service (injected)\n    limit: Maximum number of results\n\nReturns:\n    List of lineage entries for this execution\n\nRaises:\n    HTTPException: 404 if execution not found","operationId":"get_execution_lineage_api_v1_executions__execution_id__lineage_get","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string","title":"Execution Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"description":"Maximum results","default":1000,"title":"Limit"},"description":"Maximum results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionLineageResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lineage/stats":{"get":{"tags":["lineage"],"summary":"Get Lineage Stats","description":"Get aggregate lineage statistics.\n\nProvides overview statistics for monitoring and dashboards.\n\nArgs:\n    service: Lineage service (injected)\n    execution_id: Optional execution ID to scope stats\n\nReturns:\n    LineageStatsResponse with aggregate statistics","operationId":"get_lineage_stats_api_v1_lineage_stats_get","parameters":[{"name":"execution_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by execution ID","title":"Execution Id"},"description":"Filter by execution ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lineage/failures":{"get":{"tags":["lineage"],"summary":"Get Lineage Failures","description":"Get failed lineage entries with pagination.\n\nUseful for operational monitoring and debugging.\n\nArgs:\n    service: Lineage service (injected)\n    stage_name: Filter by stage name\n    route_id: Filter by route ID\n    execution_id: Filter by execution ID\n    limit: Maximum results (default: 20, max: 100)\n    offset: Pagination offset\n\nReturns:\n    LineageFailuresResponse with failures and pagination","operationId":"get_lineage_failures_api_v1_lineage_failures_get","parameters":[{"name":"stage_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by stage name","title":"Stage Name"},"description":"Filter by stage name"},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by route ID","title":"Route Id"},"description":"Filter by route ID"},{"name":"execution_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by execution ID","title":"Execution Id"},"description":"Filter by execution ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max results per page","default":20,"title":"Limit"},"description":"Max results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageFailuresResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lineage":{"get":{"tags":["lineage"],"summary":"List Lineage Entries","description":"List lineage entries with filters and pagination.\n\nProvides paginated access to lineage entries with provenance-based filtering.\nMetadata filters query the JSONB metadata column for provenance fields\n(origin, url, title, document_id) that are accumulated during pipeline processing.","operationId":"list_lineage_entries_api_v1_lineage_get","parameters":[{"name":"execution_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Filter by execution ID","title":"Execution Id"},"description":"Filter by execution ID"},{"name":"route_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by route ID","title":"Route Id"},"description":"Filter by route ID"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (initiated, processing, completed, failed)","title":"Status"},"description":"Filter by status (initiated, processing, completed, failed)"},{"name":"is_root","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter for root entries only (parent_correlation_id IS NULL)","title":"Is Root"},"description":"Filter for root entries only (parent_correlation_id IS NULL)"},{"name":"url","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by source URL (case-insensitive partial match on metadata)","title":"Url"},"description":"Filter by source URL (case-insensitive partial match on metadata)"},{"name":"origin","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by origin hostname (case-insensitive partial match on metadata)","title":"Origin"},"description":"Filter by origin hostname (case-insensitive partial match on metadata)"},{"name":"title","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by title (case-insensitive partial match on metadata)","title":"Title"},"description":"Filter by title (case-insensitive partial match on metadata)"},{"name":"document_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by document ID (exact match on metadata)","title":"Document Id"},"description":"Filter by document ID (exact match on metadata)"},{"name":"started_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter entries started at or after this time (ISO 8601)","title":"Started After"},"description":"Filter entries started at or after this time (ISO 8601)"},{"name":"started_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Filter entries started at or before this time (ISO 8601)","title":"Started Before"},"description":"Filter entries started at or before this time (ISO 8601)"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort field: started_at, completed_at, route_id, stage_name","default":"started_at","title":"Sort By"},"description":"Sort field: started_at, completed_at, route_id, stage_name"},{"name":"sort_order","in":"query","required":false,"schema":{"type":"string","description":"Sort direction: asc or desc","default":"asc","title":"Sort Order"},"description":"Sort direction: asc or desc"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max results per page","default":100,"title":"Limit"},"description":"Max results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lineage/batch/{batch_id}":{"get":{"tags":["lineage"],"summary":"Get Lineage Batch","description":"Get all lineage entries for a replay batch.\n\nArgs:\n    batch_id: Replay batch ID\n    service: Lineage service (injected)\n\nReturns:\n    LineageBatchResponse with batch entries","operationId":"get_lineage_batch_api_v1_lineage_batch__batch_id__get","parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"string","title":"Batch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageBatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lineage/{correlation_id}":{"get":{"tags":["lineage"],"summary":"Get Lineage Entry","description":"Get a single lineage entry by correlation ID.\n\nArgs:\n    correlation_id: Correlation ID to lookup\n    service: Lineage service (injected)\n\nReturns:\n    LineageEntryResponse with entry details\n\nRaises:\n    HTTPException: 404 if not found","operationId":"get_lineage_entry_api_v1_lineage__correlation_id__get","parameters":[{"name":"correlation_id","in":"path","required":true,"schema":{"type":"string","title":"Correlation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageEntryResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lineage/{correlation_id}/chain":{"get":{"tags":["lineage"],"summary":"Get Lineage Chain","description":"Get the full lineage chain (leaf to root).\n\nFollows parent_correlation_id links using recursive CTE.\n\nArgs:\n    correlation_id: Starting correlation ID (leaf)\n    service: Lineage service (injected)\n\nReturns:\n    LineageChainResponse with chain entries\n\nRaises:\n    HTTPException: 404 if correlation ID not found","operationId":"get_lineage_chain_api_v1_lineage__correlation_id__chain_get","parameters":[{"name":"correlation_id","in":"path","required":true,"schema":{"type":"string","title":"Correlation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageChainResponse"}}}},"404":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lineage/{correlation_id}/children":{"get":{"tags":["lineage"],"summary":"Get Lineage Children","description":"Get child entries for a correlation ID (fan-out).\n\nArgs:\n    correlation_id: Parent correlation ID\n    service: Lineage service (injected)\n    limit: Maximum results per page (default 50)\n    offset: Pagination offset (default 0)\n\nReturns:\n    LineageChildrenResponse with paginated child entries","operationId":"get_lineage_children_api_v1_lineage__correlation_id__children_get","parameters":[{"name":"correlation_id","in":"path","required":true,"schema":{"type":"string","title":"Correlation Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max children per page","default":50,"title":"Limit"},"description":"Max children per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageChildrenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search":{"post":{"tags":["search"],"summary":"Semantic Search","description":"Execute semantic similarity search.\n\nArgs:\n    request: Search request with query vector and parameters\n    service: Search service (injected)\n\nReturns:\n    Search results with similarity scores\n\nRaises:\n    HTTPException: 400 for invalid request, 500 for server errors","operationId":"semantic_search_api_v1_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequestModel"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/multi-model":{"post":{"tags":["search"],"summary":"Multi Model Search","description":"Execute semantic search across multiple embedding models.\n\nArgs:\n    request: Multi-model search request with vectors for each model\n    service: Search service (injected)\n\nReturns:\n    Search results grouped by model with aggregation\n\nRaises:\n    HTTPException: 400 for invalid request, 500 for server errors","operationId":"multi_model_search_api_v1_search_multi_model_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiModelSearchRequestModel"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiModelSearchResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/hybrid":{"post":{"tags":["search"],"summary":"Hybrid Search","description":"Execute hybrid search combining vector similarity with metadata filters.\n\nArgs:\n    request: Hybrid search request with vector and filters\n    service: Search service (injected)\n\nReturns:\n    Search results filtered by metadata\n\nRaises:\n    HTTPException: 400 for invalid request, 500 for server errors","operationId":"hybrid_search_api_v1_search_hybrid_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HybridSearchRequestModel"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/text":{"post":{"tags":["search"],"summary":"Text Search","description":"Execute semantic search from a text query.\n\nEmbeds the text using the specified model, then performs vector similarity search.\n\nArgs:\n    request: Text search request with query string and parameters\n    service: Search service (injected)\n    embedding: Embedding service for text-to-vector (injected)\n\nReturns:\n    Search results with similarity scores","operationId":"text_search_api_v1_search_text_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextSearchRequestModel"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/text/hybrid":{"post":{"tags":["search"],"summary":"Text Hybrid Search","description":"Execute hybrid search from a text query.\n\nEmbeds the text using the specified model, then performs vector similarity\nsearch combined with optional keyword search.\n\nArgs:\n    request: Text hybrid search request\n    service: Search service (injected)\n    embedding: Embedding service for text-to-vector (injected)\n\nReturns:\n    Search results with similarity scores","operationId":"text_hybrid_search_api_v1_search_text_hybrid_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextHybridSearchRequestModel"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search/text/multi-model":{"post":{"tags":["search"],"summary":"Text Multi Model Search","description":"Execute multi-model search from a text query.\n\nEmbeds the text using each specified model in parallel,\nthen performs vector similarity search across all models.\n\nArgs:\n    request: Text multi-model search request\n    service: Search service (injected)\n    embedding: Embedding service for text-to-vector (injected)\n\nReturns:\n    Search results grouped by model with aggregation","operationId":"text_multi_model_search_api_v1_search_text_multi_model_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TextMultiModelSearchRequestModel"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultiModelSearchResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indexes":{"get":{"tags":["indexes"],"summary":"List Indexes","description":"List all vector indexes.\n\nArgs:\n    service: Index management service (injected)\n\nReturns:\n    List of all indexes with their details\n\nRaises:\n    HTTPException: 500 for server errors","operationId":"list_indexes_api_v1_indexes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexListResponseModel"}}}}}},"post":{"tags":["indexes"],"summary":"Create Index","description":"Create a vector index for a model.\n\nArgs:\n    request: Index creation request\n    service: Index management service (injected)\n\nReturns:\n    Created index information\n\nRaises:\n    HTTPException: 400 if model not found or index exists, 500 for server errors","operationId":"create_index_api_v1_indexes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIndexRequestModel"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexInfoModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indexes/stats":{"get":{"tags":["indexes"],"summary":"Get Index Stats","description":"Get statistics for all vector indexes.\n\nArgs:\n    service: Index management service (injected)\n\nReturns:\n    Aggregated statistics including total vectors, size, and per-model breakdown\n\nRaises:\n    HTTPException: 500 for server errors","operationId":"get_index_stats_api_v1_indexes_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexStatsResponseModel"}}}}}}},"/api/v1/indexes/analyze":{"post":{"tags":["indexes"],"summary":"Analyze Indexes","description":"Analyze indexes and provide improvement recommendations.\n\nArgs:\n    service: Index management service (injected)\n\nReturns:\n    List of recommendations for index improvements\n\nRaises:\n    HTTPException: 500 for server errors","operationId":"analyze_indexes_api_v1_indexes_analyze_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexAnalyzeResponseModel"}}}}}}},"/api/v1/indexes/{model_name}":{"get":{"tags":["indexes"],"summary":"Get Index","description":"Get details for a specific model's index.\n\nArgs:\n    model_name: Name of the embedding model\n    service: Index management service (injected)\n\nReturns:\n    Index information for the specified model\n\nRaises:\n    HTTPException: 404 if index not found, 500 for server errors","operationId":"get_index_api_v1_indexes__model_name__get","parameters":[{"name":"model_name","in":"path","required":true,"schema":{"type":"string","title":"Model Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexInfoModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["indexes"],"summary":"Delete Index","description":"Delete a model's vector index.\n\nArgs:\n    model_name: Name of the embedding model\n    service: Index management service (injected)\n\nReturns:\n    204 No Content on success\n\nRaises:\n    HTTPException: 404 if index not found, 500 for server errors","operationId":"delete_index_api_v1_indexes__model_name__delete","parameters":[{"name":"model_name","in":"path","required":true,"schema":{"type":"string","title":"Model Name"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/indexes/auto-manage":{"post":{"tags":["indexes"],"summary":"Auto Manage Indexes","description":"Automatically manage indexes based on recommendations.\n\nAnalyzes all models and optionally applies recommendations:\n- Creates IVFFLAT indexes for models above threshold\n- Upgrades IVFFLAT to HNSW for models with 100K+ vectors\n- Rebuilds IVFFLAT indexes with suboptimal parameters\n\nArgs:\n    request: Auto-manage request with dry_run flag\n    service: Index management service (injected)\n\nReturns:\n    Results of auto-management with applied changes\n\nRaises:\n    HTTPException: 500 for server errors","operationId":"auto_manage_indexes_api_v1_indexes_auto_manage_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoManageRequestModel"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoManageResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/embeddings":{"get":{"tags":["embeddings"],"summary":"Lookup Embeddings By Storage Key","description":"Lookup embeddings by storage key.\n\nRetrieve all embedding vectors for a specific storage path.\nReturns full embedding data including vector values and metadata.\n\nArgs:\n    storage_key: The storage key (object path) to search for\n    model_name: Optional model name filter\n    include_content: Whether to fetch segment content from storage\n    service: Search service (injected)\n\nReturns:\n    List of embeddings with full vector data\n\nRaises:\n    HTTPException: 404 if no embeddings found, 500 for server errors","operationId":"lookup_embeddings_by_storage_key_api_v1_embeddings_get","parameters":[{"name":"storage_key","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Storage key (object path) to lookup","title":"Storage Key"},"description":"Storage key (object path) to lookup"},{"name":"model_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional filter by model name","title":"Model Name"},"description":"Optional filter by model name"},{"name":"include_content","in":"query","required":false,"schema":{"type":"boolean","description":"Include segment content from storage","default":false,"title":"Include Content"},"description":"Include segment content from storage"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingLookupResponseModel"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks":{"post":{"tags":["webhooks"],"summary":"Register a new webhook","operationId":"create_webhook_api_v1_webhooks_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["webhooks"],"summary":"List registered webhooks","operationId":"list_webhooks_api_v1_webhooks_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"only_active","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Only Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{webhook_id}":{"get":{"tags":["webhooks"],"summary":"Get a webhook by id","operationId":"get_webhook_api_v1_webhooks__webhook_id__get","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["webhooks"],"summary":"Update a webhook","operationId":"update_webhook_api_v1_webhooks__webhook_id__patch","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["webhooks"],"summary":"Delete a webhook and its delivery history","operationId":"delete_webhook_api_v1_webhooks__webhook_id__delete","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{webhook_id}/test":{"post":{"tags":["webhooks"],"summary":"Send a synthetic test delivery synchronously","operationId":"test_webhook_api_v1_webhooks__webhook_id__test_post","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{webhook_id}/deliveries":{"get":{"tags":["webhooks"],"summary":"List webhook delivery attempts","operationId":"list_deliveries_api_v1_webhooks__webhook_id__deliveries_get","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks/{webhook_id}/deliveries/{delivery_id}/retry":{"post":{"tags":["webhooks"],"summary":"Re-arm a pending or dead-letter delivery","operationId":"retry_delivery_api_v1_webhooks__webhook_id__deliveries__delivery_id__retry_post","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}},{"name":"delivery_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Delivery Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookRetryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","description":"Root endpoint with service information.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Root  Get"}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Simple health check endpoint.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}}},"components":{"schemas":{"AdapterInfo":{"properties":{"name":{"type":"string","title":"Name","description":"Adapter name"},"type":{"type":"string","title":"Type","description":"Adapter type"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Adapter configuration"}},"type":"object","required":["name","type","config"],"title":"AdapterInfo","description":"Adapter information."},"AdapterInfoResponse":{"properties":{"type":{"type":"string","title":"Type","description":"Adapter type identifier"},"has_config_class":{"type":"boolean","title":"Has Config Class","description":"Whether adapter has a Pydantic config class"},"config_schema":{"additionalProperties":true,"type":"object","title":"Config Schema","description":"JSON Schema for adapter configuration"},"injectable_dependencies":{"items":{"type":"string"},"type":"array","title":"Injectable Dependencies","description":"List of injectable dependency names (e.g., 'storage')"}},"type":"object","required":["type","has_config_class","config_schema"],"title":"AdapterInfoResponse","description":"Response for adapter info including config schema."},"AdapterListResponse":{"properties":{"adapters":{"items":{"type":"string"},"type":"array","title":"Adapters","description":"List of registered adapter type names"},"total":{"type":"integer","title":"Total","description":"Total number of registered adapters"}},"type":"object","required":["adapters","total"],"title":"AdapterListResponse","description":"Response for listing registered adapters."},"AggregateMetrics":{"properties":{"total_messages_received":{"type":"integer","title":"Total Messages Received","description":"Total messages received across all pipelines"},"total_messages_completed":{"type":"integer","title":"Total Messages Completed","description":"Total messages completed across all pipelines"},"total_messages_failed":{"type":"integer","title":"Total Messages Failed","description":"Total messages failed across all pipelines"},"total_messages_in_flight":{"type":"integer","title":"Total Messages In Flight","description":"Total messages in flight across all pipelines"},"routes_running":{"type":"integer","title":"Routes Running","description":"Number of currently running routes"},"routes_total":{"type":"integer","title":"Routes Total","description":"Total number of routes"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Metrics timestamp"}},"type":"object","required":["total_messages_received","total_messages_completed","total_messages_failed","total_messages_in_flight","routes_running","routes_total","timestamp"],"title":"AggregateMetrics","description":"Aggregate metrics across all pipelines."},"ArchivePrepareRequest":{"properties":{"domain":{"type":"string","title":"Domain","default":"storage"},"execution_id":{"type":"string","title":"Execution Id"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"},"extension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extension"}},"type":"object","required":["execution_id"],"title":"ArchivePrepareRequest"},"ArchivePrepareResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"total":{"type":"integer","title":"Total"},"filename":{"type":"string","title":"Filename"}},"type":"object","required":["job_id","total","filename"],"title":"ArchivePrepareResponse"},"ArchiveStatusResponse":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","enum":["preparing","ready","failed","cancelled"],"title":"Status"},"total":{"type":"integer","title":"Total"},"processed":{"type":"integer","title":"Processed"},"filename":{"type":"string","title":"Filename"},"file_size":{"type":"integer","title":"File Size"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["job_id","status","total","processed","filename","file_size"],"title":"ArchiveStatusResponse"},"Attachment":{"properties":{"storage_key":{"type":"string","title":"Storage Key","description":"Storage path to the document"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Display title for the attachment"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens","description":"Max tokens to include from this document"}},"type":"object","required":["storage_key"],"title":"Attachment","description":"A document attachment for explicit context selection."},"AttachmentConfig":{"properties":{"attachments":{"items":{"$ref":"#/components/schemas/Attachment"},"type":"array","maxItems":20,"title":"Attachments","description":"Explicit document attachments"},"include_full_content":{"type":"boolean","title":"Include Full Content","description":"Include full document content (vs summary/excerpts)","default":true}},"type":"object","title":"AttachmentConfig","description":"Configuration for attachment-based context retrieval."},"AttachmentConfigModel":{"properties":{"attachments":{"items":{"$ref":"#/components/schemas/AttachmentModel"},"type":"array","maxItems":20,"title":"Attachments","description":"Explicit document attachments (max 20)"},"include_full_content":{"type":"boolean","title":"Include Full Content","description":"Include full document content (vs summary/excerpts)","default":true}},"type":"object","title":"AttachmentConfigModel","description":"Configuration for attachment-based context retrieval."},"AttachmentModel":{"properties":{"storage_key":{"type":"string","minLength":1,"title":"Storage Key","description":"Storage path to the document"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Display title for the attachment"},"max_tokens":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Tokens","description":"Max tokens to include from this document"}},"type":"object","required":["storage_key"],"title":"AttachmentModel","description":"A document attachment for explicit context selection."},"AutoManageRequestModel":{"properties":{"dry_run":{"type":"boolean","title":"Dry Run","description":"If true, only return recommendations without applying them","default":false}},"type":"object","title":"AutoManageRequestModel","description":"API request model for automatic index management."},"AutoManageResponseModel":{"properties":{"results":{"items":{"$ref":"#/components/schemas/AutoManageResultModel"},"type":"array","title":"Results"},"total_count":{"type":"integer","minimum":0.0,"title":"Total Count"},"applied_count":{"type":"integer","minimum":0.0,"title":"Applied Count"},"dry_run":{"type":"boolean","title":"Dry Run"}},"type":"object","required":["results","total_count","applied_count","dry_run"],"title":"AutoManageResponseModel","description":"API response model for automatic index management."},"AutoManageResultModel":{"properties":{"model_name":{"type":"string","title":"Model Name"},"action":{"type":"string","title":"Action"},"reason":{"type":"string","title":"Reason"},"applied":{"type":"boolean","title":"Applied"},"index_info":{"anyOf":[{"$ref":"#/components/schemas/IndexInfoModel"},{"type":"null"}]}},"type":"object","required":["model_name","action","reason","applied"],"title":"AutoManageResultModel","description":"API model for a single auto-management result."},"BackpressureMetrics":{"properties":{"current_rate":{"type":"number","title":"Current Rate","description":"Current processing rate (msgs/sec)"},"target_rate":{"type":"number","title":"Target Rate","description":"Target rate from config (msgs/sec)"},"in_flight":{"type":"integer","title":"In Flight","description":"Current in-flight message count"},"max_in_flight":{"type":"integer","title":"Max In Flight","description":"Maximum allowed in-flight messages"}},"type":"object","required":["current_rate","target_rate","in_flight","max_in_flight"],"title":"BackpressureMetrics","description":"Backpressure controller metrics."},"BrowseResponse":{"properties":{"path":{"type":"string","title":"Path","description":"Current path"},"directories":{"items":{"type":"string"},"type":"array","title":"Directories","description":"Subdirectories"},"files":{"items":{"type":"string"},"type":"array","title":"Files","description":"Files in this directory"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent","description":"Parent path for navigation"},"total_directories":{"type":"integer","title":"Total Directories","description":"Count of directories"},"total_files":{"type":"integer","title":"Total Files","description":"Count of files"}},"type":"object","required":["path","directories","files","total_directories","total_files"],"title":"BrowseResponse","description":"Response for browsing storage hierarchy."},"CapabilitiesResponse":{"properties":{"llm_models":{"items":{"$ref":"#/components/schemas/LLMModelInfo"},"type":"array","title":"Llm Models","description":"Available LLM models"},"embedding_models":{"items":{"$ref":"#/components/schemas/EmbeddingModelInfo"},"type":"array","title":"Embedding Models","description":"Available embedding models"},"context_modes":{"items":{"type":"string"},"type":"array","title":"Context Modes","description":"Available context modes","default":["rag","attachment","hybrid","document","none"]},"retrieval_strategies":{"items":{"type":"string"},"type":"array","title":"Retrieval Strategies","description":"Available retrieval strategies","default":["merge","sequential","ensemble"]},"search_languages":{"items":{"type":"string"},"type":"array","title":"Search Languages","description":"Available FTS languages","default":["norwegian","english","simple"]},"defaults":{"$ref":"#/components/schemas/ChatDefaults","description":"Default parameter values"}},"type":"object","title":"CapabilitiesResponse","description":"Response model for chat capabilities discovery."},"ChatCompletionRequest":{"properties":{"query":{"type":"string","maxLength":10000,"minLength":1,"title":"Query","description":"User query text"},"history":{"items":{"$ref":"#/components/schemas/ChatMessageModel"},"type":"array","maxItems":50,"title":"History","description":"Conversation history"},"context_mode":{"type":"string","enum":["rag","attachment","hybrid","document","none"],"title":"Context Mode","description":"How to retrieve context","default":"rag"},"rag_config":{"anyOf":[{"$ref":"#/components/schemas/RAGConfigModel"},{"type":"null"}],"description":"RAG configuration (optional, uses defaults if not provided)"},"attachment_config":{"anyOf":[{"$ref":"#/components/schemas/AttachmentConfigModel"},{"type":"null"}],"description":"Attachment configuration for attachment/hybrid modes"},"document_paths":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":20},{"type":"null"}],"title":"Document Paths","description":"Explicit document paths for document mode (max 20)"},"embedding_model":{"type":"string","title":"Embedding Model","description":"Embedding model for query (when no rag_config specified)","default":"openai-small"},"llm_model":{"type":"string","title":"Llm Model","description":"LLM model for generation","default":"gpt-4o-mini"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt","description":"Custom system prompt (overrides default RAG prompt)"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","description":"Generation temperature","default":0.7},"max_tokens":{"type":"integer","maximum":8192.0,"minimum":1.0,"title":"Max Tokens","description":"Max tokens in response","default":1024},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id","description":"Optional conversation ID for tracking"}},"type":"object","required":["query"],"title":"ChatCompletionRequest","description":"Request model for chat completion."},"ChatCompletionResponse":{"properties":{"response":{"type":"string","title":"Response","description":"Generated response text"},"sources":{"items":{"$ref":"#/components/schemas/SourceAttributionModel"},"type":"array","title":"Sources","description":"Source attributions for retrieved context"},"documents_used":{"anyOf":[{"items":{"$ref":"#/components/schemas/DocumentInfo"},"type":"array"},{"type":"null"}],"title":"Documents Used","description":"Documents used in document mode"},"search_metadata":{"anyOf":[{"$ref":"#/components/schemas/SearchMetadata"},{"type":"null"}],"description":"Search observability metadata (RAG/hybrid modes)"},"retrieval_time_ms":{"type":"number","title":"Retrieval Time Ms","description":"Time spent retrieving context"},"generation_time_ms":{"type":"number","title":"Generation Time Ms","description":"Time spent generating response"},"total_time_ms":{"type":"number","title":"Total Time Ms","description":"Total request time"},"model_used":{"type":"string","title":"Model Used","description":"LLM model that generated the response"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id","description":"Conversation ID if provided"}},"type":"object","required":["response","retrieval_time_ms","generation_time_ms","total_time_ms","model_used"],"title":"ChatCompletionResponse","description":"Response model for chat completion."},"ChatDefaults":{"properties":{"llm_model":{"type":"string","title":"Llm Model","description":"Default LLM model","default":"gpt-4o-mini"},"embedding_model":{"type":"string","title":"Embedding Model","description":"Default embedding model","default":"openai-small"},"context_mode":{"type":"string","title":"Context Mode","description":"Default context mode","default":"rag"},"retrieval_strategy":{"type":"string","title":"Retrieval Strategy","description":"Default retrieval strategy","default":"merge"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","description":"Default temperature","default":0.7},"max_tokens":{"type":"integer","maximum":8192.0,"minimum":1.0,"title":"Max Tokens","description":"Default max tokens","default":1024},"similarity_threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Similarity Threshold","description":"Default similarity","default":0.7},"max_results":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Results","description":"Default max results","default":10},"search_language":{"type":"string","title":"Search Language","description":"Default FTS language","default":"norwegian"}},"type":"object","title":"ChatDefaults","description":"Default values for chat parameters."},"ChatMessageModel":{"properties":{"role":{"type":"string","enum":["user","assistant","system"],"title":"Role","description":"Message role"},"content":{"type":"string","minLength":1,"title":"Content","description":"Message content"}},"type":"object","required":["role","content"],"title":"ChatMessageModel","description":"A message in the conversation history."},"ChatTemplate-Input":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Template ID (UUID v7)"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"owner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id","description":"Owner user ID, null for global templates"},"is_public":{"type":"boolean","title":"Is Public","description":"Whether template is publicly visible","default":false},"persona":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Persona","description":"Short persona description"},"instructions":{"items":{"type":"string"},"type":"array","title":"Instructions","description":"Behavior instructions"},"roles":{"$ref":"#/components/schemas/RoleConfig","description":"Role configuration with system prompt"},"default_context_mode":{"$ref":"#/components/schemas/ContextMode","default":"rag"},"default_rag_config":{"anyOf":[{"$ref":"#/components/schemas/RAGConfig"},{"type":"null"}]},"default_attachment_config":{"anyOf":[{"$ref":"#/components/schemas/AttachmentConfig"},{"type":"null"}]},"llm_model":{"type":"string","title":"Llm Model","default":"gpt-4o-mini"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.7},"max_tokens":{"type":"integer","maximum":8000.0,"minimum":100.0,"title":"Max Tokens","default":2048}},"type":"object","required":["name","roles"],"title":"ChatTemplate","description":"A reusable chat template with persona and configuration defaults."},"ChatTemplate-Output":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id","description":"Template ID (UUID v7)"},"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"owner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id","description":"Owner user ID, null for global templates"},"is_public":{"type":"boolean","title":"Is Public","description":"Whether template is publicly visible","default":false},"persona":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Persona","description":"Short persona description"},"instructions":{"items":{"type":"string"},"type":"array","title":"Instructions","description":"Behavior instructions"},"roles":{"$ref":"#/components/schemas/RoleConfig","description":"Role configuration with system prompt"},"default_context_mode":{"$ref":"#/components/schemas/ContextMode","default":"rag"},"default_rag_config":{"anyOf":[{"$ref":"#/components/schemas/RAGConfig"},{"type":"null"}]},"default_attachment_config":{"anyOf":[{"$ref":"#/components/schemas/AttachmentConfig"},{"type":"null"}]},"llm_model":{"type":"string","title":"Llm Model","default":"gpt-4o-mini"},"temperature":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Temperature","default":0.7},"max_tokens":{"type":"integer","maximum":8000.0,"minimum":100.0,"title":"Max Tokens","default":2048}},"type":"object","required":["name","roles"],"title":"ChatTemplate","description":"A reusable chat template with persona and configuration defaults."},"CircuitBreakerConfigResponse":{"properties":{"failure_threshold":{"type":"integer","title":"Failure Threshold","description":"Failures before opening"},"success_threshold":{"type":"integer","title":"Success Threshold","description":"Successes before closing from half-open"},"timeout_seconds":{"type":"number","title":"Timeout Seconds","description":"Seconds before half-open transition"},"half_open_max_calls":{"type":"integer","title":"Half Open Max Calls","description":"Max concurrent calls in half-open"}},"type":"object","required":["failure_threshold","success_threshold","timeout_seconds","half_open_max_calls"],"title":"CircuitBreakerConfigResponse","description":"Circuit breaker configuration thresholds."},"CircuitBreakerMetrics":{"properties":{"state":{"type":"string","title":"State","description":"Circuit state: closed, open, half_open"},"consecutive_failures":{"type":"integer","title":"Consecutive Failures","description":"Consecutive failures","default":0},"consecutive_successes":{"type":"integer","title":"Consecutive Successes","description":"Consecutive successes","default":0},"total_failures":{"type":"integer","title":"Total Failures","description":"Total failures","default":0},"total_successes":{"type":"integer","title":"Total Successes","description":"Total successes","default":0},"last_failure_time":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Failure Time","description":"Monotonic timestamp of last failure"},"retry_after":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retry After","description":"Seconds until half-open transition (when open)"},"half_open_calls":{"type":"integer","title":"Half Open Calls","description":"Current calls in half-open state","default":0},"config":{"anyOf":[{"$ref":"#/components/schemas/CircuitBreakerConfigResponse"},{"type":"null"}],"description":"Circuit breaker thresholds"}},"type":"object","required":["state"],"title":"CircuitBreakerMetrics","description":"Metrics for a single circuit breaker domain."},"ComponentHealth":{"properties":{"name":{"type":"string","title":"Name","description":"Component name"},"status":{"type":"string","title":"Status","description":"Health status: healthy, degraded, unhealthy"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Additional status information"},"checked_at":{"type":"string","format":"date-time","title":"Checked At","description":"Check timestamp"}},"type":"object","required":["name","status"],"title":"ComponentHealth","description":"Health status for a single component."},"ConfigCreateRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Human-readable name for the configuration"},"config_yaml":{"type":"string","title":"Config Yaml","description":"Full YAML content"},"source_type":{"type":"string","enum":["file","api","imported"],"title":"Source Type","description":"Origin of config","default":"api"},"source_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Path","description":"Original file path if from file"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional description"}},"type":"object","required":["name","config_yaml"],"title":"ConfigCreateRequest","description":"Request to create a new pipeline configuration."},"ConfigDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Configuration UUID"},"name":{"type":"string","title":"Name","description":"Configuration name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional description"},"source_type":{"type":"string","enum":["file","api","imported"],"title":"Source Type","description":"Origin of config"},"source_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Path","description":"Original file path"},"config_hash":{"type":"string","title":"Config Hash","description":"SHA-256 hash of config"},"version":{"type":"integer","title":"Version","description":"Version number"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether config is active"},"validation_report":{"anyOf":[{"$ref":"#/components/schemas/ValidationReportResponse"},{"type":"null"}],"description":"Current validation report, re-derived on read against the live adapter registry. None when the validator is unavailable (e.g. during early startup)."},"is_runnable":{"type":"boolean","title":"Is Runnable","description":"True when the config passes validation (error_count == 0). Warnings do not invalidate. Mirrors ValidationReport.is_valid.","default":true},"config_yaml":{"type":"string","title":"Config Yaml","description":"Full YAML content"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By","description":"Creator identity"}},"type":"object","required":["id","name","source_type","config_hash","version","created_at","updated_at","is_active","config_yaml"],"title":"ConfigDetailResponse","description":"Detailed configuration response including YAML content."},"ConfigListResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of configurations matching filters"},"limit":{"type":"integer","title":"Limit","description":"Maximum entries per page"},"offset":{"type":"integer","title":"Offset","description":"Offset from start"},"has_more":{"type":"boolean","title":"Has More","description":"Whether more configurations exist"},"configs":{"items":{"$ref":"#/components/schemas/PipelineConfigResponse"},"type":"array","title":"Configs","description":"List of configurations"}},"type":"object","required":["total","limit","offset","has_more","configs"],"title":"ConfigListResponse","description":"Paginated list of pipeline configurations."},"ConfigUpdateRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Human-readable name for the configuration"},"config_yaml":{"type":"string","title":"Config Yaml","description":"Full YAML content"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional description"}},"type":"object","required":["name","config_yaml"],"title":"ConfigUpdateRequest","description":"Request to update an existing pipeline configuration.\n\nUpdates name, description, and config_yaml. The version is incremented\nautomatically by the server, and config_hash is recalculated."},"ConfigValidationError":{"properties":{"field":{"type":"string","title":"Field","description":"Field path that failed validation (e.g., 'http_timeout')"},"message":{"type":"string","title":"Message","description":"Human-readable error message"},"type":{"type":"string","title":"Type","description":"Pydantic error type (e.g., 'less_than_equal')"}},"type":"object","required":["field","message","type"],"title":"ConfigValidationError","description":"Single validation error detail."},"ConfigValidationRequest":{"properties":{"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Configuration to validate"}},"type":"object","required":["config"],"title":"ConfigValidationRequest","description":"Request for validating adapter configuration."},"ConfigValidationResponse":{"properties":{"valid":{"type":"boolean","title":"Valid","description":"Whether configuration is valid"},"validated_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Validated Config","description":"Validated config with defaults applied (only if valid)"},"errors":{"items":{"$ref":"#/components/schemas/ConfigValidationError"},"type":"array","title":"Errors","description":"List of validation errors (only if invalid)"}},"type":"object","required":["valid"],"title":"ConfigValidationResponse","description":"Response for configuration validation."},"ContentCountResponse":{"properties":{"total":{"type":"integer","title":"Total"},"stages":{"items":{"type":"string"},"type":"array","title":"Stages"}},"type":"object","required":["total","stages"],"title":"ContentCountResponse"},"ContextMode":{"type":"string","enum":["rag","attachment","hybrid","document","none"],"title":"ContextMode","description":"How to provide context to the LLM."},"CreateIndexRequestModel":{"properties":{"model_name":{"type":"string","minLength":1,"title":"Model Name","description":"Name of the embedding model"},"index_type":{"type":"string","enum":["ivfflat","hnsw"],"title":"Index Type","description":"Type of index to create","default":"ivfflat"},"parameters":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Parameters","description":"Override default index parameters"}},"type":"object","required":["model_name"],"title":"CreateIndexRequestModel","description":"API request model to create a vector index."},"DAGEdge":{"properties":{"from_route":{"type":"string","title":"From Route","description":"Source route ID"},"to_route":{"type":"string","title":"To Route","description":"Target route ID"},"queue":{"type":"string","title":"Queue","description":"Queue connecting the routes"}},"type":"object","required":["from_route","to_route","queue"],"title":"DAGEdge","description":"An edge in the pipeline DAG representing queue connection."},"DAGNode":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Route identifier"},"name":{"type":"string","title":"Name","description":"Human-readable route name"},"adapters":{"items":{"type":"string"},"type":"array","title":"Adapters","description":"Adapter types in this route"}},"type":"object","required":["route_id","name"],"title":"DAGNode","description":"A node in the pipeline DAG representing a route."},"DAGResponse":{"properties":{"execution_id":{"type":"string","format":"uuid","title":"Execution Id","description":"Execution ID"},"init_queue":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Init Queue","description":"Initial queue for pipeline trigger"},"nodes":{"items":{"$ref":"#/components/schemas/DAGNode"},"type":"array","title":"Nodes","description":"Route nodes"},"edges":{"items":{"$ref":"#/components/schemas/DAGEdge"},"type":"array","title":"Edges","description":"Queue connections between routes"}},"type":"object","required":["execution_id"],"title":"DAGResponse","description":"Pipeline DAG structure extracted from config."},"DataSourceConfig":{"properties":{"name":{"type":"string","title":"Name"},"model_name":{"type":"string","title":"Model Name"},"metadata_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata Filters"},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","default":5},"similarity_threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Similarity Threshold","default":0.5},"weight":{"type":"number","maximum":10.0,"minimum":0.0,"title":"Weight","default":1.0}},"type":"object","required":["name","model_name"],"title":"DataSourceConfig","description":"Configuration for a single data source in RAG."},"DataSourceConfigModel":{"properties":{"name":{"type":"string","title":"Name","description":"Descriptive name for the source"},"model_name":{"type":"string","title":"Model Name","description":"Embedding model name"},"limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Limit","description":"Max results from this source","default":5},"similarity_threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Similarity Threshold","description":"Min similarity","default":0.7},"weight":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Weight","description":"Weight for merging results","default":1.0},"metadata_filters":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata Filters","description":"Optional metadata filters"}},"type":"object","required":["name","model_name"],"title":"DataSourceConfigModel","description":"Configuration for a single data source in RAG retrieval."},"DetachedReplayRequest":{"properties":{"from_execution_id":{"type":"string","format":"uuid","title":"From Execution Id","description":"UUID of the source execution to replay from"},"from_stage":{"type":"string","minLength":1,"title":"From Stage","description":"Pipeline stage name (e.g., 'boost/compacted', 'markdown_converted')"},"from_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Path","description":"Optional path within stage for subset replay"},"to_route":{"type":"string","minLength":1,"title":"To Route","description":"Target route name to replay to"}},"type":"object","required":["from_execution_id","from_stage","to_route"],"title":"DetachedReplayRequest","description":"Request model for detached replay API.\n\nSemantic fields for replaying stored outputs to a target route."},"DetachedReplayResponse":{"properties":{"execution_id":{"type":"string","format":"uuid","title":"Execution Id","description":"New execution UUID for replayed messages"},"from_execution_id":{"type":"string","format":"uuid","title":"From Execution Id","description":"Source execution UUID"},"from_stage":{"type":"string","title":"From Stage","description":"Source pipeline stage"},"from_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Path","description":"Source path within stage (if specified)"},"to_route":{"type":"string","title":"To Route","description":"Target route name"},"to_queue":{"type":"string","title":"To Queue","description":"Target queue that received messages"},"objects_found":{"type":"integer","title":"Objects Found","description":"Total objects found at source prefix"},"objects_published":{"type":"integer","title":"Objects Published","description":"Objects successfully published"},"objects_failed":{"type":"integer","title":"Objects Failed","description":"Objects that failed to publish","default":0},"status":{"type":"string","enum":["publishing_complete","partial_failure"],"title":"Status","description":"Overall status of the replay operation"},"replay_batch_id":{"type":"string","format":"uuid","title":"Replay Batch Id","description":"UUID for grouping all replayed messages"},"errors":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Errors","description":"List of error messages for failed objects"}},"type":"object","required":["execution_id","from_execution_id","from_stage","from_path","to_route","to_queue","objects_found","objects_published","status","replay_batch_id"],"title":"DetachedReplayResponse","description":"Response model for detached replay API.\n\nContains counts and status of the replay operation."},"DiagnosticStep":{"properties":{"timestamp_ms":{"type":"number","title":"Timestamp Ms","description":"Milliseconds since diagnostic start"},"phase":{"type":"string","title":"Phase","description":"Diagnostic phase: dns, tcp, tls, stomp, pubsub_publish, pubsub_subscribe, complete, error"},"event":{"type":"string","title":"Event","description":"Human-readable event description"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details","description":"Additional context"},"success":{"type":"boolean","title":"Success","description":"Whether this step succeeded","default":true}},"type":"object","required":["timestamp_ms","phase","event"],"title":"DiagnosticStep","description":"Single step in the connection diagnostic process."},"DocumentInfo":{"properties":{"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path","description":"Document file path (document mode)"},"storage_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storage Key","description":"Storage key path (attachment mode)"},"index":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Index","description":"1-based index matching LLM [1], [2] references"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Display title for the document"},"content_length":{"type":"integer","minimum":0.0,"title":"Content Length","description":"Content length in characters","default":0},"content_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Preview","description":"First 200 chars of content"}},"type":"object","title":"DocumentInfo","description":"Information about a document used in document or attachment mode.\n\nFor document mode: uses `path` field.\nFor attachment mode: uses `storage_key` and `index` fields.\nThe `index` is 1-based, matching LLM [1], [2] references in responses."},"EmbeddingLookupResponseModel":{"properties":{"embeddings":{"items":{"$ref":"#/components/schemas/EmbeddingLookupResultModel"},"type":"array","title":"Embeddings"},"storage_key":{"type":"string","title":"Storage Key"},"total_count":{"type":"integer","minimum":0.0,"title":"Total Count"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name","description":"Model filter applied, if any"}},"type":"object","required":["embeddings","storage_key","total_count"],"title":"EmbeddingLookupResponseModel","description":"API response model for embedding lookup by storage key."},"EmbeddingLookupResultModel":{"properties":{"vector_id":{"type":"string","format":"uuid","title":"Vector Id"},"segment_id":{"type":"string","format":"uuid","title":"Segment Id"},"model_name":{"type":"string","title":"Model Name"},"model_version":{"type":"string","title":"Model Version"},"dimension":{"type":"integer","minimum":1.0,"title":"Dimension"},"vector_data":{"items":{"type":"number"},"type":"array","title":"Vector Data","description":"The embedding vector data"},"storage_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storage Key"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"metadata":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["vector_id","segment_id","model_name","model_version","dimension","vector_data"],"title":"EmbeddingLookupResultModel","description":"API model for an embedding lookup result."},"EmbeddingModelInfo":{"properties":{"name":{"type":"string","title":"Name","description":"Model identifier"},"display_name":{"type":"string","title":"Display Name","description":"Human-readable name"},"dimension":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dimension","description":"Vector dimension"},"vector_count":{"type":"integer","minimum":0.0,"title":"Vector Count","description":"Number of vectors indexed","default":0},"has_index":{"type":"boolean","title":"Has Index","description":"Whether index exists","default":false},"index_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Index Type","description":"Index type (ivfflat, hnsw)"}},"type":"object","required":["name","display_name"],"title":"EmbeddingModelInfo","description":"Information about an available embedding model."},"ErrorResponse":{"properties":{"detail":{"type":"string","title":"Detail","description":"Error message (matches FastAPI HTTPException)"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code","description":"Machine-readable error code (e.g., 'NOT_FOUND', 'VALIDATION_ERROR')"},"correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correlation Id","description":"Request correlation ID for tracing"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Error timestamp"}},"type":"object","required":["detail"],"title":"ErrorResponse","description":"Standard error response matching FastAPI HTTPException format.\n\nThis model is used in OpenAPI response declarations for 4xx/5xx errors.\nThe `detail` field matches FastAPI's HTTPException structure."},"ExecutionDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Execution UUID (used for storage paths)"},"config_id":{"type":"string","format":"uuid","title":"Config Id","description":"Configuration ID"},"status":{"type":"string","enum":["running","completed","failed","cancelled","interrupted"],"title":"Status","description":"Current status"},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"Start timestamp"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"Completion timestamp"},"parent_execution_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Execution Id","description":"Parent execution if replay"},"replay_source":{"anyOf":[{"type":"string","enum":["storage","lineage","manual"]},{"type":"null"}],"title":"Replay Source","description":"Replay source type"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"Human-readable execution label"},"config_snapshot":{"additionalProperties":true,"type":"object","title":"Config Snapshot","description":"Config snapshot at execution time"},"root_correlation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Root Correlation Id","description":"First message correlation ID"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional metadata"},"error_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error Info","description":"Error details if failed"}},"type":"object","required":["id","config_id","status","started_at","config_snapshot"],"title":"ExecutionDetailResponse","description":"Detailed execution response including config snapshot and error info."},"ExecutionLineageResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of lineage entries"},"execution_id":{"type":"string","format":"uuid","title":"Execution Id","description":"Execution ID these entries belong to"},"entries":{"items":{"$ref":"#/components/schemas/LineageEntryResponse"},"type":"array","title":"Entries","description":"List of lineage entries"}},"type":"object","required":["total","execution_id","entries"],"title":"ExecutionLineageResponse","description":"Lineage entries for a specific execution."},"ExecutionListResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of executions matching filters"},"limit":{"type":"integer","title":"Limit","description":"Maximum entries per page"},"offset":{"type":"integer","title":"Offset","description":"Offset from start"},"has_more":{"type":"boolean","title":"Has More","description":"Whether more executions exist"},"executions":{"items":{"$ref":"#/components/schemas/ExecutionResponse"},"type":"array","title":"Executions","description":"List of executions"}},"type":"object","required":["total","limit","offset","has_more","executions"],"title":"ExecutionListResponse","description":"Paginated list of pipeline executions."},"ExecutionPrefixInfo":{"properties":{"prefix":{"type":"string","title":"Prefix","description":"The prefix path (execution ID)"},"execution_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Execution Id","description":"UUID v7 execution ID if valid"},"config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config Id","description":"Pipeline config ID"},"config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config Name","description":"Pipeline config name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Execution status (pending, running, completed, failed)"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At","description":"Execution start time (ISO format)"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At","description":"Execution completion time (ISO format)"}},"type":"object","required":["prefix"],"title":"ExecutionPrefixInfo","description":"Enriched information for execution ID prefixes.\n\nWhen include_execution_info=true, common_prefixes that are execution IDs\nare enriched with execution metadata."},"ExecutionReplayRequest":{"properties":{"replay_source":{"type":"string","enum":["storage","lineage","manual"],"title":"Replay Source","description":"Type of replay"},"from_stage":{"type":"string","minLength":1,"title":"From Stage","description":"Pipeline stage to replay from (e.g. 'markdown_segmented')"},"to_route":{"type":"string","minLength":1,"title":"To Route","description":"Target route name (e.g. 'embedding_generator')"},"from_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Path","description":"Optional path within stage for subset replay"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional metadata"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"Tag for the new replay execution (unique)"},"config_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Config Id","description":"Target config for cross-pipeline replay"}},"type":"object","required":["replay_source","from_stage","to_route"],"title":"ExecutionReplayRequest","description":"Request to replay a pipeline execution.\n\nThe execution to replay is identified by the execution_id path parameter.\nServer creates a new execution, starts routes, and publishes replay messages.\n\nFor cross-pipeline replay, provide config_id to use a different pipeline's\nroutes instead of the parent's. Storage reads from the parent execution."},"ExecutionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Execution UUID (used for storage paths)"},"config_id":{"type":"string","format":"uuid","title":"Config Id","description":"Configuration ID"},"status":{"type":"string","enum":["running","completed","failed","cancelled","interrupted"],"title":"Status","description":"Current status"},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"Start timestamp"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"Completion timestamp"},"parent_execution_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Parent Execution Id","description":"Parent execution if replay"},"replay_source":{"anyOf":[{"type":"string","enum":["storage","lineage","manual"]},{"type":"null"}],"title":"Replay Source","description":"Replay source type"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"Human-readable execution label"}},"type":"object","required":["id","config_id","status","started_at"],"title":"ExecutionResponse","description":"Pipeline execution response.\n\nStorage paths use execution id (UUID v7) directly."},"ExecutionStartRequest":{"properties":{"config_id":{"type":"string","format":"uuid","title":"Config Id","description":"ID of the pipeline configuration to run"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Optional execution metadata"},"tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag","description":"Human-readable execution label (unique)"}},"type":"object","required":["config_id"],"title":"ExecutionStartRequest","description":"Request to start a new pipeline execution.\n\nServer generates execution_id (UUID v7) which is used for storage paths."},"ExecutionStatsResponse":{"properties":{"execution_id":{"type":"string","format":"uuid","title":"Execution Id","description":"Execution UUID"},"total_messages":{"type":"integer","title":"Total Messages","description":"Total messages processed","default":0},"completed_messages":{"type":"integer","title":"Completed Messages","description":"Successfully completed messages","default":0},"failed_messages":{"type":"integer","title":"Failed Messages","description":"Failed messages","default":0},"in_progress_messages":{"type":"integer","title":"In Progress Messages","description":"Messages still processing","default":0},"success_rate":{"type":"number","title":"Success Rate","description":"Completion success rate","default":0.0}},"type":"object","required":["execution_id"],"title":"ExecutionStatsResponse","description":"Execution statistics (derived from lineage)."},"ExecutionStatusUpdateRequest":{"properties":{"status":{"type":"string","enum":["cancelled","failed","completed"],"title":"Status","description":"Target status ('cancelled', 'failed', or 'completed')"},"error_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error Info","description":"Error details when marking as 'failed' (ignored for other statuses)"}},"type":"object","required":["status"],"title":"ExecutionStatusUpdateRequest","description":"Request to update execution status.\n\nUsed with PATCH /executions/{execution_id} to change execution state.\nSupports setting status to 'cancelled', 'failed', or 'completed'.\n\nFor 'failed' status, optional error_info can be provided with details\nabout why the execution is being marked as failed."},"ExecutionStatusUpdateResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether update succeeded"},"execution_id":{"type":"string","format":"uuid","title":"Execution Id","description":"Execution UUID"},"previous_status":{"type":"string","enum":["running","completed","failed","cancelled","interrupted"],"title":"Previous Status","description":"Status before update"},"current_status":{"type":"string","enum":["running","completed","failed","cancelled","interrupted"],"title":"Current Status","description":"Status after update"},"message":{"type":"string","title":"Message","description":"Status message"}},"type":"object","required":["success","execution_id","previous_status","current_status","message"],"title":"ExecutionStatusUpdateResponse","description":"Response from updating execution status."},"ExecutionWaitRequest":{"properties":{"timeout":{"type":"number","maximum":3600.0,"minimum":1.0,"title":"Timeout","description":"Maximum time to wait in seconds (1-3600)","default":300.0}},"type":"object","title":"ExecutionWaitRequest","description":"Request to wait for execution completion."},"ExecutionWaitResponse":{"properties":{"completed":{"type":"boolean","title":"Completed","description":"Whether execution completed (vs timeout)"},"execution_id":{"type":"string","format":"uuid","title":"Execution Id","description":"Execution UUID"},"duration_ms":{"type":"number","title":"Duration Ms","description":"How long the wait took in milliseconds"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Optional message (e.g., timeout reason)"},"stats":{"anyOf":[{"$ref":"#/components/schemas/ExecutionStatsResponse"},{"type":"null"}],"description":"Final execution statistics"}},"type":"object","required":["completed","execution_id","duration_ms"],"title":"ExecutionWaitResponse","description":"Response from waiting for execution completion."},"FreshConnectionTestResult":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether all publishes succeeded"},"total_attempts":{"type":"integer","title":"Total Attempts","description":"Total connection+publish attempts","default":0},"successful_publishes":{"type":"integer","title":"Successful Publishes","description":"Successful publishes","default":0},"failed_publishes":{"type":"integer","title":"Failed Publishes","description":"Failed publishes","default":0},"ssl_eof_errors":{"type":"integer","title":"Ssl Eof Errors","description":"SSLEOFError count","default":0},"connection_lost_errors":{"type":"integer","title":"Connection Lost Errors","description":"ConnectionLostError count","default":0},"connect_failed_errors":{"type":"integer","title":"Connect Failed Errors","description":"FailedAllConnectAttemptsError count","default":0},"other_errors":{"type":"integer","title":"Other Errors","description":"Other error count","default":0},"total_duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Duration Ms","description":"Total test duration in ms"},"avg_connection_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Connection Time Ms","description":"Average connection establishment time"},"avg_publish_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Publish Time Ms","description":"Average publish time (after connection)"},"jitter_applied_ms":{"type":"integer","title":"Jitter Applied Ms","description":"Jitter setting used","default":0},"concurrency_limit":{"type":"integer","title":"Concurrency Limit","description":"Concurrency limit used","default":0},"first_error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Error Type","description":"Type of first error"},"first_error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Error Message","description":"First error message"},"first_error_attempt":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"First Error Attempt","description":"Attempt number of first error"},"total_retries_needed":{"type":"integer","title":"Total Retries Needed","description":"Sum of all retries across all publishes","default":0},"publishes_succeeded_first_try":{"type":"integer","title":"Publishes Succeeded First Try","description":"Publishes that worked without retry","default":0},"publishes_succeeded_on_retry":{"type":"integer","title":"Publishes Succeeded On Retry","description":"Publishes that needed at least one retry","default":0},"max_retries_for_single_publish":{"type":"integer","title":"Max Retries For Single Publish","description":"Worst case retries for one publish","default":0},"retry_attempts_configured":{"type":"integer","title":"Retry Attempts Configured","description":"Max retry attempts setting used","default":0},"retry_backoff_ms_configured":{"type":"integer","title":"Retry Backoff Ms Configured","description":"Base backoff setting used","default":0}},"type":"object","required":["success"],"title":"FreshConnectionTestResult","description":"Result of fresh-connection-per-publish test (replicates ArtemisQueueProvider pattern)."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Health status"},"service":{"type":"string","title":"Service","description":"Service name","default":"factflow"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Check timestamp"}},"type":"object","required":["status"],"title":"HealthResponse","description":"Simple health check response."},"HybridSearchRequestModel":{"properties":{"query_vector":{"items":{"type":"number"},"type":"array","minItems":1,"title":"Query Vector","description":"Pre-computed query embedding vector"},"model_name":{"type":"string","minLength":1,"title":"Model Name","description":"Name of the embedding model"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum number of results","default":10},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score (0-1)"},"include_content":{"type":"boolean","title":"Include Content","description":"Include segment content in results","default":false},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Pagination offset","default":0},"metadata_filters":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"items":{},"type":"array"}]},"type":"object"},{"type":"null"}],"title":"Metadata Filters","description":"Metadata filters to apply (key-value or key-list for IN queries)"},"keyword_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword Query","description":"Optional keyword search to combine with vector search"}},"type":"object","required":["query_vector","model_name"],"title":"HybridSearchRequestModel","description":"API request model for hybrid search combining vector similarity with filters."},"IndexAnalyzeResponseModel":{"properties":{"recommendations":{"items":{"$ref":"#/components/schemas/IndexRecommendationModel"},"type":"array","title":"Recommendations"},"total_count":{"type":"integer","minimum":0.0,"title":"Total Count"}},"type":"object","required":["recommendations","total_count"],"title":"IndexAnalyzeResponseModel","description":"API response model for index analysis."},"IndexInfoModel":{"properties":{"index_name":{"type":"string","title":"Index Name"},"model_name":{"type":"string","title":"Model Name"},"index_type":{"type":"string","enum":["ivfflat","hnsw"],"title":"Index Type"},"row_count":{"type":"integer","minimum":0.0,"title":"Row Count"},"size_bytes":{"type":"integer","minimum":0.0,"title":"Size Bytes"},"size_pretty":{"type":"string","title":"Size Pretty"},"parameters":{"additionalProperties":{"type":"integer"},"type":"object","title":"Parameters"},"scan_count":{"type":"integer","minimum":0.0,"title":"Scan Count","default":0}},"type":"object","required":["index_name","model_name","index_type","row_count","size_bytes","size_pretty","parameters"],"title":"IndexInfoModel","description":"API model for vector index information."},"IndexListResponseModel":{"properties":{"indexes":{"items":{"$ref":"#/components/schemas/IndexInfoModel"},"type":"array","title":"Indexes"},"total_count":{"type":"integer","minimum":0.0,"title":"Total Count"}},"type":"object","required":["indexes","total_count"],"title":"IndexListResponseModel","description":"API response model for listing indexes."},"IndexRecommendationModel":{"properties":{"model_name":{"type":"string","title":"Model Name"},"current_state":{"type":"string","enum":["no_index","ivfflat","hnsw"],"title":"Current State"},"recommendation":{"type":"string","title":"Recommendation"},"reason":{"type":"string","title":"Reason"},"suggested_parameters":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Suggested Parameters"}},"type":"object","required":["model_name","current_state","recommendation","reason"],"title":"IndexRecommendationModel","description":"API model for index improvement recommendation."},"IndexStatsResponseModel":{"properties":{"total_indexes":{"type":"integer","minimum":0.0,"title":"Total Indexes"},"total_vectors":{"type":"integer","minimum":0.0,"title":"Total Vectors"},"total_size_bytes":{"type":"integer","minimum":0.0,"title":"Total Size Bytes"},"total_size_pretty":{"type":"string","title":"Total Size Pretty"},"indexes":{"items":{"$ref":"#/components/schemas/IndexInfoModel"},"type":"array","title":"Indexes"},"models_without_index":{"items":{"type":"string"},"type":"array","title":"Models Without Index"}},"type":"object","required":["total_indexes","total_vectors","total_size_bytes","total_size_pretty","indexes","models_without_index"],"title":"IndexStatsResponseModel","description":"API response model for index statistics."},"KeywordSearchRequest":{"properties":{"query":{"type":"string","maxLength":10000,"minLength":1,"title":"Query","description":"Search query text"},"language":{"type":"string","enum":["norwegian","english","simple"],"title":"Language","description":"Full-text search language","default":"norwegian"},"execution_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Execution Id","description":"Filter by pipeline execution"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum results to return","default":10}},"type":"object","required":["query"],"title":"KeywordSearchRequest","description":"Request model for keyword-only search."},"LLMModelInfo":{"properties":{"name":{"type":"string","title":"Name","description":"Model identifier (profile_name or model)"},"display_name":{"type":"string","title":"Display Name","description":"Human-readable name"},"provider":{"type":"string","title":"Provider","description":"Provider type (openai, azure, anthropic, etc.)"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Underlying model name"}},"type":"object","required":["name","display_name","provider"],"title":"LLMModelInfo","description":"Information about an available LLM model."},"LineageBatchResponse":{"properties":{"batch_id":{"type":"string","title":"Batch Id","description":"Replay batch ID"},"entries":{"items":{"$ref":"#/components/schemas/LineageEntryResponse"},"type":"array","title":"Entries","description":"Entries in this batch"},"total":{"type":"integer","title":"Total","description":"Total entries in batch"}},"type":"object","required":["batch_id","entries","total"],"title":"LineageBatchResponse","description":"Lineage entries for a replay batch."},"LineageChainResponse":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/LineageEntryResponse"},"type":"array","title":"Entries","description":"Chain entries from leaf to root"},"total_depth":{"type":"integer","title":"Total Depth","description":"Total depth of the chain"},"root_correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Correlation Id","description":"Root correlation ID (oldest ancestor)"},"leaf_correlation_id":{"type":"string","title":"Leaf Correlation Id","description":"Leaf correlation ID (starting point)"}},"type":"object","required":["entries","total_depth","leaf_correlation_id"],"title":"LineageChainResponse","description":"Lineage chain from leaf to root."},"LineageChildrenResponse":{"properties":{"parent_correlation_id":{"type":"string","title":"Parent Correlation Id","description":"Parent correlation ID"},"children":{"items":{"$ref":"#/components/schemas/LineageEntryResponse"},"type":"array","title":"Children","description":"Child lineage entries"},"total":{"type":"integer","title":"Total","description":"Total number of children"},"limit":{"type":"integer","title":"Limit","description":"Maximum entries per page"},"offset":{"type":"integer","title":"Offset","description":"Offset from start"},"has_more":{"type":"boolean","title":"Has More","description":"Whether more children exist"}},"type":"object","required":["parent_correlation_id","children","total","limit","offset","has_more"],"title":"LineageChildrenResponse","description":"Children of a lineage entry (fan-out)."},"LineageEntryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Lineage entry UUID"},"correlation_id":{"type":"string","title":"Correlation Id","description":"Correlation ID for this processing attempt"},"parent_correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Correlation Id","description":"Parent correlation ID if derived"},"replay_batch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Replay Batch Id","description":"Replay batch ID if part of replay"},"execution_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Execution Id","description":"Execution ID this entry belongs to"},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Route ID from YAML config"},"adapter_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Adapter Name","description":"Adapter that processed this message"},"adapter_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Adapter Index","description":"Position in adapter chain (0-based)"},"stage_name":{"type":"string","title":"Stage Name","description":"Stage name"},"stage_status":{"type":"string","enum":["pending","initiated","processing","completed","failed","cancelled"],"title":"Stage Status","description":"Current status of this stage"},"stage_input_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage Input Hash","description":"Input hash for deduplication"},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"When processing started"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"When processing completed"},"duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Ms","description":"Processing duration in milliseconds"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata","description":"Additional metadata"},"error_info":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Error Info","description":"Error details if failed"}},"type":"object","required":["id","correlation_id","stage_name","stage_status","started_at"],"title":"LineageEntryResponse","description":"Pipeline lineage entry response."},"LineageFailuresResponse":{"properties":{"failures":{"items":{"$ref":"#/components/schemas/LineageEntryResponse"},"type":"array","title":"Failures","description":"Failed lineage entries"},"total":{"type":"integer","title":"Total","description":"Total number of failures"},"limit":{"type":"integer","title":"Limit","description":"Maximum entries per page"},"offset":{"type":"integer","title":"Offset","description":"Offset from start"},"has_more":{"type":"boolean","title":"Has More","description":"Whether more failures exist"}},"type":"object","required":["failures","total","limit","offset","has_more"],"title":"LineageFailuresResponse","description":"Paginated failure list."},"LineageListResponse":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/LineageEntryResponse"},"type":"array","title":"Entries","description":"List of lineage entries"},"total":{"type":"integer","title":"Total","description":"Total number of entries"},"limit":{"type":"integer","title":"Limit","description":"Maximum entries per page"},"offset":{"type":"integer","title":"Offset","description":"Offset from start"},"has_more":{"type":"boolean","title":"Has More","description":"Whether more entries exist"}},"type":"object","required":["entries","total","limit","offset","has_more"],"title":"LineageListResponse","description":"Paginated lineage list."},"LineageStatsResponse":{"properties":{"total_entries":{"type":"integer","title":"Total Entries","description":"Total lineage entries"},"by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Status","description":"Entry counts by status"},"by_stage":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Stage","description":"Entry counts by stage name"},"by_route":{"additionalProperties":{"$ref":"#/components/schemas/RouteStatsDetail"},"type":"object","title":"By Route","description":"Detailed stats by route ID"},"recent_failures_24h":{"type":"integer","title":"Recent Failures 24H","description":"Failures in last 24 hours"},"avg_duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Duration Ms","description":"Average processing duration"},"execution_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Execution Id","description":"Execution ID if scoped"}},"type":"object","required":["total_entries","by_status","by_stage","by_route","recent_failures_24h"],"title":"LineageStatsResponse","description":"Aggregate lineage statistics."},"ListObjectsResponse":{"properties":{"objects":{"items":{"$ref":"#/components/schemas/StorageObjectSummary"},"type":"array","title":"Objects","description":"List of objects"},"common_prefixes":{"items":{"type":"string"},"type":"array","title":"Common Prefixes","description":"Common prefixes (folders) when delimiter is used"},"execution_prefixes":{"items":{"$ref":"#/components/schemas/ExecutionPrefixInfo"},"type":"array","title":"Execution Prefixes","description":"Enriched execution info when include_execution_info=true"},"total":{"type":"integer","title":"Total","description":"Total number of objects matching filters"},"limit":{"type":"integer","title":"Limit","description":"Maximum entries per page"},"offset":{"type":"integer","title":"Offset","description":"Offset from start"},"has_more":{"type":"boolean","title":"Has More","description":"Whether more objects exist"}},"type":"object","required":["objects","total","limit","offset","has_more"],"title":"ListObjectsResponse","description":"Paginated response for listing objects."},"MQDiagnosticRequest":{"properties":{"host":{"type":"string","title":"Host","description":"MQ broker host (e.g., b-xxxxx.mq.eu-north-1.amazonaws.com)"},"port":{"type":"integer","maximum":65535.0,"minimum":1.0,"title":"Port","description":"STOMP+SSL port (61614 for AWS MQ)","default":61614},"username":{"type":"string","title":"Username","description":"MQ username"},"password":{"type":"string","title":"Password","description":"MQ password"},"ssl_enabled":{"type":"boolean","title":"Ssl Enabled","description":"Enable SSL/TLS (required for AWS MQ)","default":true},"ssl_verify":{"type":"boolean","title":"Ssl Verify","description":"Verify SSL certificates","default":true},"heartbeat_send_ms":{"type":"integer","minimum":0.0,"title":"Heartbeat Send Ms","description":"Heartbeat send interval (ms)","default":30000},"heartbeat_receive_ms":{"type":"integer","minimum":0.0,"title":"Heartbeat Receive Ms","description":"Heartbeat receive interval (ms)","default":30000},"connect_timeout":{"type":"number","minimum":0.1,"title":"Connect Timeout","description":"Connection timeout (seconds)","default":10.0},"broker_arn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Broker Arn","description":"AWS broker ARN (for reference only)"},"test_pubsub":{"type":"boolean","title":"Test Pubsub","description":"Test message publish/subscribe flow","default":false},"pubsub_timeout":{"type":"number","minimum":0.1,"title":"Pubsub Timeout","description":"Pub/sub test timeout (seconds)","default":10.0},"message_count":{"type":"integer","minimum":1.0,"title":"Message Count","description":"Number of test messages to publish","default":1},"report_modulo":{"type":"integer","minimum":0.0,"title":"Report Modulo","description":"Report progress every N messages (0=auto: every 10% for <=1000, every 1000 for >1000)","default":0},"message_delay_ms":{"type":"integer","minimum":0.0,"title":"Message Delay Ms","description":"Delay between messages in ms","default":0},"jitter_ms":{"type":"integer","minimum":0.0,"title":"Jitter Ms","description":"Random jitter range to add to delay in ms","default":0},"throttle_rps":{"anyOf":[{"type":"number","minimum":0.1},{"type":"null"}],"title":"Throttle Rps","description":"Optional rate limit (requests per second)"},"test_retry":{"type":"boolean","title":"Test Retry","description":"Test publish retry behavior on SSLEOFError","default":false},"retry_attempts":{"type":"integer","minimum":1.0,"title":"Retry Attempts","description":"Number of retry attempts for publish","default":3},"retry_backoff_ms":{"type":"integer","minimum":0.0,"title":"Retry Backoff Ms","description":"Base backoff between retries in ms","default":500},"test_fresh_connection":{"type":"boolean","title":"Test Fresh Connection","description":"Test fresh-connection-per-publish pattern (replicates ArtemisQueueProvider)","default":false},"fresh_connection_count":{"type":"integer","minimum":1.0,"title":"Fresh Connection Count","description":"Number of fresh-connection publishes to attempt","default":10},"fresh_connection_jitter_ms":{"type":"integer","minimum":0.0,"title":"Fresh Connection Jitter Ms","description":"Max jitter in ms before each connection (0=disabled)","default":100},"fresh_connection_concurrency":{"type":"integer","minimum":1.0,"title":"Fresh Connection Concurrency","description":"Max concurrent fresh connections (semaphore limit)","default":5},"test_fresh_connection_with_retry":{"type":"boolean","title":"Test Fresh Connection With Retry","description":"Test fresh-connection with retry logic (proves SSLEOFError fix)","default":false},"fresh_retry_attempts":{"type":"integer","minimum":1.0,"title":"Fresh Retry Attempts","description":"Max retry attempts per publish on SSLEOFError","default":3},"fresh_retry_backoff_ms":{"type":"integer","minimum":0.0,"title":"Fresh Retry Backoff Ms","description":"Base backoff in ms (exponential: 100, 200, 400...)","default":100}},"type":"object","required":["host","username","password"],"title":"MQDiagnosticRequest","description":"Connection parameters for MQ diagnostic test."},"MQDiagnosticResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether connection test succeeded"},"duration_ms":{"type":"number","title":"Duration Ms","description":"Total diagnostic duration (ms)"},"stomp_url":{"type":"string","title":"Stomp Url","description":"Formatted STOMP connection URL (stomp+ssl://host:port or stomp://host:port)"},"steps":{"items":{"$ref":"#/components/schemas/DiagnosticStep"},"type":"array","title":"Steps","description":"Step-by-step connection timeline"},"connected":{"type":"boolean","title":"Connected","description":"Whether STOMP connection was established","default":false},"stomp_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stomp Version","description":"Negotiated STOMP protocol version"},"server_heartbeat":{"anyOf":[{"prefixItems":[{"type":"integer"},{"type":"integer"}],"type":"array","maxItems":2,"minItems":2},{"type":"null"}],"title":"Server Heartbeat","description":"Server heartbeat (send, receive) ms"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id","description":"STOMP session ID"},"pubsub_test":{"anyOf":[{"$ref":"#/components/schemas/PubSubTestResult"},{"type":"null"}],"description":"Pub/sub test results (when test_pubsub=true)"},"retry_test":{"anyOf":[{"$ref":"#/components/schemas/RetryTestResult"},{"type":"null"}],"description":"Retry behavior test results (when test_retry=true)"},"fresh_connection_test":{"anyOf":[{"$ref":"#/components/schemas/FreshConnectionTestResult"},{"type":"null"}],"description":"Fresh-connection-per-publish test results (when test_fresh_connection=true)"},"error_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Type","description":"Exception type if failed"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if failed"},"error_traceback":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Traceback","description":"Full traceback if failed"},"resolved_ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved Ip","description":"Resolved IP address"},"tls_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Version","description":"TLS version used"},"tls_cipher":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tls Cipher","description":"TLS cipher suite"},"server_cert_subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Cert Subject","description":"Server certificate subject"},"server_cert_issuer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Cert Issuer","description":"Server certificate issuer"},"server_cert_expires":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Server Cert Expires","description":"Server certificate expiry"}},"type":"object","required":["success","duration_ms","stomp_url"],"title":"MQDiagnosticResponse","description":"Full MQ diagnostic result with connection timeline."},"MonitorMetrics":{"properties":{"total_messages":{"type":"integer","title":"Total Messages","description":"Total messages processed","default":0},"completed_messages":{"type":"integer","title":"Completed Messages","description":"Successfully completed messages","default":0},"failed_messages":{"type":"integer","title":"Failed Messages","description":"Failed messages","default":0},"in_progress_messages":{"type":"integer","title":"In Progress Messages","description":"Messages currently processing","default":0}},"type":"object","title":"MonitorMetrics","description":"Aggregated metrics for the execution."},"MonitorResponse":{"properties":{"execution_id":{"type":"string","format":"uuid","title":"Execution Id","description":"Execution ID"},"config_id":{"type":"string","format":"uuid","title":"Config Id","description":"Configuration ID"},"status":{"type":"string","enum":["running","completed","failed","cancelled","interrupted"],"title":"Status","description":"Execution status"},"started_at":{"type":"string","format":"date-time","title":"Started At","description":"Execution start time"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"Execution completion time"},"dag":{"$ref":"#/components/schemas/DAGResponse","description":"Pipeline DAG structure"},"routes":{"items":{"$ref":"#/components/schemas/MonitorRouteStatus"},"type":"array","title":"Routes","description":"Per-route status"},"metrics":{"$ref":"#/components/schemas/MonitorMetrics","description":"Aggregated execution metrics"}},"type":"object","required":["execution_id","config_id","status","started_at","dag","metrics"],"title":"MonitorResponse","description":"Unified monitoring view for an execution.\n\nCombines: execution record, DAG structure, route status, and metrics.\nSingle endpoint for dashboard rendering."},"MonitorRouteStatus":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Route identifier"},"name":{"type":"string","title":"Name","description":"Human-readable route name"},"lineage_total":{"type":"integer","title":"Lineage Total","description":"Total messages tracked in lineage","default":0},"lineage_completed":{"type":"integer","title":"Lineage Completed","description":"Completed messages from lineage","default":0},"lineage_failed":{"type":"integer","title":"Lineage Failed","description":"Failed messages from lineage","default":0},"lineage_in_progress":{"type":"integer","title":"Lineage In Progress","description":"In-progress messages from lineage","default":0},"avg_duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Duration Ms","description":"Average processing duration in milliseconds"}},"type":"object","required":["route_id","name"],"title":"MonitorRouteStatus","description":"Route status combining runtime and lineage data."},"MultiModelSearchRequestModel":{"properties":{"query_vectors":{"additionalProperties":{"items":{"type":"number"},"type":"array"},"type":"object","minProperties":1,"title":"Query Vectors","description":"Map of model_name to query vector"},"limit_per_model":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit Per Model","description":"Maximum results per model","default":10},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score (0-1)"},"include_content":{"type":"boolean","title":"Include Content","description":"Include segment content in results","default":false},"aggregation":{"type":"string","enum":["union","intersection","ranked"],"title":"Aggregation","description":"How to aggregate results across models","default":"ranked"}},"type":"object","required":["query_vectors"],"title":"MultiModelSearchRequestModel","description":"API request model for multi-model search."},"MultiModelSearchResponseModel":{"properties":{"responses":{"items":{"$ref":"#/components/schemas/SearchResponseModel"},"type":"array","title":"Responses"},"aggregation":{"type":"string","enum":["union","intersection","ranked"],"title":"Aggregation"},"total_results":{"type":"integer","minimum":0.0,"title":"Total Results"},"search_time_ms":{"type":"number","minimum":0.0,"title":"Search Time Ms"}},"type":"object","required":["responses","aggregation","total_results","search_time_ms"],"title":"MultiModelSearchResponseModel","description":"API response model for multi-model search."},"ObjectMetadataResponse":{"properties":{"key":{"type":"string","title":"Key","description":"Full object key"},"content_type":{"type":"string","title":"Content Type","description":"MIME type"},"content_length":{"type":"integer","title":"Content Length","description":"Size in bytes"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum","description":"SHA256 checksum"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At","description":"Creation timestamp"},"modified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Modified At","description":"Last modified timestamp"},"correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correlation Id","description":"Pipeline correlation ID"},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Pipeline route ID"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage","description":"Pipeline stage name"},"document_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Id","description":"Document identifier"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Document title"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Source URL"},"original_object_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Object Key","description":"Lineage to source object"}},"type":"object","required":["key","content_type","content_length"],"title":"ObjectMetadataResponse","description":"Full object metadata response."},"PipelineConfigResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Configuration UUID"},"name":{"type":"string","title":"Name","description":"Configuration name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional description"},"source_type":{"type":"string","enum":["file","api","imported"],"title":"Source Type","description":"Origin of config"},"source_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Path","description":"Original file path"},"config_hash":{"type":"string","title":"Config Hash","description":"SHA-256 hash of config"},"version":{"type":"integer","title":"Version","description":"Version number"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Last update timestamp"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether config is active"},"validation_report":{"anyOf":[{"$ref":"#/components/schemas/ValidationReportResponse"},{"type":"null"}],"description":"Current validation report, re-derived on read against the live adapter registry. None when the validator is unavailable (e.g. during early startup)."},"is_runnable":{"type":"boolean","title":"Is Runnable","description":"True when the config passes validation (error_count == 0). Warnings do not invalidate. Mirrors ValidationReport.is_valid.","default":true}},"type":"object","required":["id","name","source_type","config_hash","version","created_at","updated_at","is_active"],"title":"PipelineConfigResponse","description":"Pipeline configuration response.\n\nNote: Renamed from ConfigResponse to avoid schema collision with SystemConfigResponse."},"PipelineControlResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether operation succeeded"},"route_id":{"type":"string","title":"Route Id","description":"Route ID"},"message":{"type":"string","title":"Message","description":"Operation status message"},"status":{"type":"string","title":"Status","description":"Pipeline status after operation"}},"type":"object","required":["success","route_id","message","status"],"title":"PipelineControlResponse","description":"Pipeline control operation response."},"PipelineDetail":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Unique route identifier"},"name":{"type":"string","title":"Name","description":"Pipeline name"},"running":{"type":"boolean","title":"Running","description":"Whether pipeline is currently running"},"execution_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Execution Id","description":"Current execution ID if running"},"inbound_config":{"additionalProperties":true,"type":"object","title":"Inbound Config","description":"Inbound queue configuration"},"adapters":{"items":{"$ref":"#/components/schemas/AdapterInfo"},"type":"array","title":"Adapters","description":"Configured adapters"},"storage_destinations":{"items":{"$ref":"#/components/schemas/StorageDestination"},"type":"array","title":"Storage Destinations","description":"Storage destinations for adapters with 'stage' config"},"metrics":{"additionalProperties":{"type":"integer"},"type":"object","title":"Metrics","description":"Pipeline metrics"},"backpressure":{"anyOf":[{"$ref":"#/components/schemas/BackpressureMetrics"},{"type":"null"}],"description":"Backpressure metrics if available"}},"type":"object","required":["route_id","name","running","inbound_config","adapters","metrics"],"title":"PipelineDetail","description":"Detailed pipeline information."},"PipelineListResponse":{"properties":{"total":{"type":"integer","title":"Total","description":"Total number of pipelines"},"pipelines":{"items":{"$ref":"#/components/schemas/PipelineStatus"},"type":"array","title":"Pipelines","description":"List of pipeline statuses"}},"type":"object","required":["total","pipelines"],"title":"PipelineListResponse","description":"List of pipelines."},"PipelineMetrics":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Route identifier"},"messages_received":{"type":"integer","title":"Messages Received","description":"Total messages received"},"messages_completed":{"type":"integer","title":"Messages Completed","description":"Total messages completed"},"messages_failed":{"type":"integer","title":"Messages Failed","description":"Total messages failed"},"messages_in_flight":{"type":"integer","title":"Messages In Flight","description":"Messages currently processing"},"backpressure":{"anyOf":[{"$ref":"#/components/schemas/BackpressureMetrics"},{"type":"null"}],"description":"Backpressure metrics if available"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Metrics timestamp"}},"type":"object","required":["route_id","messages_received","messages_completed","messages_failed","messages_in_flight","timestamp"],"title":"PipelineMetrics","description":"Detailed pipeline metrics."},"PipelineStateUpdateRequest":{"properties":{"state":{"type":"string","title":"State","description":"Target state: 'paused' or 'running'"}},"type":"object","required":["state"],"title":"PipelineStateUpdateRequest","description":"Request to update pipeline state.\n\nUsed with PATCH /pipelines/{route_id} to change pipeline state."},"PipelineStatus":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Unique route identifier"},"name":{"type":"string","title":"Name","description":"Pipeline name"},"running":{"type":"boolean","title":"Running","description":"Whether pipeline is actively processing"},"pausing":{"type":"boolean","title":"Pausing","description":"Whether pipeline is draining in-flight messages","default":false},"paused":{"type":"boolean","title":"Paused","description":"Whether pipeline is fully paused","default":false},"execution_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Execution Id","description":"Current execution ID if running"},"messages_received":{"type":"integer","title":"Messages Received","description":"Total messages received","default":0},"messages_completed":{"type":"integer","title":"Messages Completed","description":"Total messages completed","default":0},"messages_failed":{"type":"integer","title":"Messages Failed","description":"Total messages failed","default":0},"messages_in_flight":{"type":"integer","title":"Messages In Flight","description":"Messages currently processing","default":0},"storage_destinations":{"items":{"$ref":"#/components/schemas/StorageDestination"},"type":"array","title":"Storage Destinations","description":"Storage destinations for adapters with 'stage' config"}},"type":"object","required":["route_id","name","running"],"title":"PipelineStatus","description":"Pipeline status information."},"PubSubTestResult":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether pub/sub test succeeded"},"queue_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Queue Name","description":"Test queue name used"},"messages_sent":{"type":"integer","title":"Messages Sent","description":"Number of messages published","default":0},"messages_received":{"type":"integer","title":"Messages Received","description":"Number of messages received","default":0},"messages_expected":{"type":"integer","title":"Messages Expected","description":"Number of messages expected","default":0},"roundtrip_min_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Roundtrip Min Ms","description":"Minimum round-trip latency in ms"},"roundtrip_max_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Roundtrip Max Ms","description":"Maximum round-trip latency in ms"},"roundtrip_avg_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Roundtrip Avg Ms","description":"Average round-trip latency in ms"},"total_duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Duration Ms","description":"Total test duration in ms"},"delay_applied_ms":{"type":"integer","title":"Delay Applied Ms","description":"Delay between messages in ms","default":0},"jitter_applied_ms":{"type":"integer","title":"Jitter Applied Ms","description":"Jitter range applied in ms","default":0},"throttle_applied_rps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Throttle Applied Rps","description":"Rate limit applied (rps)"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Error message if failed"}},"type":"object","required":["success"],"title":"PubSubTestResult","description":"Result of pub/sub message flow test."},"QueueDebugInfo":{"properties":{"connected":{"type":"boolean","title":"Connected","description":"Whether queue is connected"},"health_state":{"type":"string","title":"Health State","description":"Health state: healthy, degraded, stalled, reconnecting"},"last_message_age_seconds":{"type":"number","title":"Last Message Age Seconds","description":"Seconds since last message received"},"reconnect_attempts":{"type":"integer","title":"Reconnect Attempts","description":"Number of reconnect attempts","default":0},"reconnect_in_progress":{"type":"boolean","title":"Reconnect In Progress","description":"Whether reconnection is in progress","default":false},"active_subscriptions":{"items":{"type":"string"},"type":"array","title":"Active Subscriptions","description":"Active subscription IDs"},"subscription_states":{"additionalProperties":{"$ref":"#/components/schemas/SubscriptionState"},"type":"object","title":"Subscription States","description":"Subscription states by ID"},"last_error":{"anyOf":[{"$ref":"#/components/schemas/QueueErrorInfo"},{"type":"null"}],"description":"Last error if any"},"config":{"additionalProperties":true,"type":"object","title":"Config","description":"Health config values"}},"type":"object","required":["connected","health_state","last_message_age_seconds"],"title":"QueueDebugInfo","description":"Debug information for queue/STOMP connection."},"QueueErrorInfo":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Exception type name"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message","description":"Error message"},"traceback":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Traceback","description":"Full traceback"}},"type":"object","title":"QueueErrorInfo","description":"Last error information for queue debugging."},"RAGConfig":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/DataSourceConfig"},"type":"array","maxItems":10,"minItems":1,"title":"Sources"},"retrieval_strategy":{"$ref":"#/components/schemas/RetrievalStrategy","default":"merge"},"max_total_results":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Total Results","default":10},"include_content":{"type":"boolean","title":"Include Content","default":true}},"type":"object","required":["sources"],"title":"RAGConfig","description":"Complete RAG configuration for a chat query."},"RAGConfigModel":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/DataSourceConfigModel"},"type":"array","title":"Sources","description":"Data sources to search"},"retrieval_strategy":{"type":"string","enum":["merge","sequential","ensemble"],"title":"Retrieval Strategy","description":"Strategy for combining results from multiple sources","default":"merge"},"max_total_results":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Max Total Results","description":"Max total context items","default":10}},"type":"object","title":"RAGConfigModel","description":"Configuration for RAG context retrieval."},"RRFResultModel":{"properties":{"segment_id":{"type":"string","format":"uuid","title":"Segment Id"},"rrf_score":{"type":"number","title":"Rrf Score"},"content":{"type":"string","title":"Content"},"storage_key":{"type":"string","title":"Storage Key"},"language":{"type":"string","title":"Language"},"vector_similarity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vector Similarity"},"keyword_rank":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Keyword Rank"},"vector_rrf_contribution":{"type":"number","title":"Vector Rrf Contribution"},"keyword_rrf_contribution":{"type":"number","title":"Keyword Rrf Contribution"}},"type":"object","required":["segment_id","rrf_score","content","storage_key","language","vector_similarity","keyword_rank","vector_rrf_contribution","keyword_rrf_contribution"],"title":"RRFResultModel","description":"Single result from RRF hybrid search."},"RRFSearchRequest":{"properties":{"query":{"type":"string","maxLength":10000,"minLength":1,"title":"Query","description":"Search query text"},"model_name":{"type":"string","title":"Model Name","description":"Embedding model name (must match indexed model)"},"language":{"type":"string","enum":["norwegian","english","simple"],"title":"Language","description":"Full-text search language","default":"norwegian"},"vector_weight":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Vector Weight","description":"Weight for vector results","default":1.0},"keyword_weight":{"type":"number","maximum":2.0,"minimum":0.0,"title":"Keyword Weight","description":"Weight for keyword results","default":1.0},"k":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"K","description":"RRF smoothing constant","default":60},"candidate_pool_size":{"type":"integer","maximum":500.0,"minimum":10.0,"title":"Candidate Pool Size","description":"Max candidates per search type","default":100},"execution_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Execution Id","description":"Filter by pipeline execution"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum results to return","default":10},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Number of results to skip","default":0}},"type":"object","required":["query","model_name"],"title":"RRFSearchRequest","description":"Request model for RRF hybrid search."},"RRFSearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/RRFResultModel"},"type":"array","title":"Results"},"total_candidates":{"type":"integer","title":"Total Candidates"},"language":{"type":"string","title":"Language"},"search_time_ms":{"type":"number","title":"Search Time Ms"},"config":{"additionalProperties":true,"type":"object","title":"Config"}},"type":"object","required":["results","total_candidates","language","search_time_ms","config"],"title":"RRFSearchResponse","description":"Response model for RRF hybrid search."},"ReloadResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether reload succeeded"},"message":{"type":"string","title":"Message","description":"Status message"},"routes_reloaded":{"type":"integer","title":"Routes Reloaded","description":"Number of routes reloaded","default":0}},"type":"object","required":["success","message"],"title":"ReloadResponse","description":"Configuration reload response."},"RetrievalStrategy":{"type":"string","enum":["merge","sequential","ensemble"],"title":"RetrievalStrategy","description":"How to combine results from multiple sources."},"RetryTestResult":{"properties":{"success":{"type":"boolean","title":"Success","description":"Whether retry test succeeded"},"total_attempts":{"type":"integer","title":"Total Attempts","description":"Total publish attempts made","default":0},"successful_attempts":{"type":"integer","title":"Successful Attempts","description":"Number of successful publishes","default":0},"failed_attempts":{"type":"integer","title":"Failed Attempts","description":"Number of failed attempts before success","default":0},"ssl_errors_caught":{"type":"integer","title":"Ssl Errors Caught","description":"SSLEOFError count caught and retried","default":0},"connection_errors_caught":{"type":"integer","title":"Connection Errors Caught","description":"ConnectionLostError count caught","default":0},"other_errors_caught":{"type":"integer","title":"Other Errors Caught","description":"Other errors caught","default":0},"final_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Final Error","description":"Final error if all retries failed"},"retry_backoff_ms":{"type":"integer","title":"Retry Backoff Ms","description":"Backoff used between retries","default":0},"total_retry_time_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Retry Time Ms","description":"Total time spent in retries"}},"type":"object","required":["success"],"title":"RetryTestResult","description":"Result of publish retry behavior test."},"RoleConfig":{"properties":{"system_prompt":{"type":"string","title":"System Prompt","description":"The system prompt defining the role's behavior"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Display name for this role"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Role description"}},"type":"object","required":["system_prompt"],"title":"RoleConfig","description":"Configuration for a role in a chat template."},"RouteCircuitBreaker":{"properties":{"adapter":{"type":"string","title":"Adapter","description":"Adapter name"},"domains":{"additionalProperties":{"$ref":"#/components/schemas/CircuitBreakerMetrics"},"type":"object","title":"Domains","description":"Per-domain circuit breaker metrics"}},"type":"object","required":["adapter"],"title":"RouteCircuitBreaker","description":"Circuit breaker data for a single adapter in a route."},"RouteInfo":{"properties":{"route":{"type":"string","title":"Route","description":"Route name"},"queue":{"type":"string","title":"Queue","description":"Inbound queue for the route"},"source":{"type":"string","title":"Source","description":"Config file that defines the route"}},"type":"object","required":["route","queue","source"],"title":"RouteInfo","description":"Information about an available route."},"RouteStats":{"properties":{"route_id":{"type":"string","title":"Route Id","description":"Route identifier"},"total_messages":{"type":"integer","title":"Total Messages","description":"Total messages processed","default":0},"completed":{"type":"integer","title":"Completed","description":"Successfully completed messages","default":0},"failed":{"type":"integer","title":"Failed","description":"Failed messages","default":0},"in_progress":{"type":"integer","title":"In Progress","description":"Currently processing messages","default":0},"avg_duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Duration Ms","description":"Average processing duration in milliseconds"}},"type":"object","required":["route_id"],"title":"RouteStats","description":"Statistics for a single route within an execution."},"RouteStatsDetail":{"properties":{"total":{"type":"integer","title":"Total","description":"Total messages","default":0},"completed":{"type":"integer","title":"Completed","description":"Completed messages","default":0},"failed":{"type":"integer","title":"Failed","description":"Failed messages","default":0},"initiated":{"type":"integer","title":"Initiated","description":"Initiated messages","default":0},"processing":{"type":"integer","title":"Processing","description":"Processing messages","default":0},"avg_duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Duration Ms","description":"Average duration in ms"}},"type":"object","title":"RouteStatsDetail","description":"Detailed statistics for a route."},"RouteStatsResponse":{"properties":{"execution_id":{"type":"string","format":"uuid","title":"Execution Id","description":"Execution ID"},"routes":{"items":{"$ref":"#/components/schemas/RouteStats"},"type":"array","title":"Routes","description":"Per-route statistics"}},"type":"object","required":["execution_id"],"title":"RouteStatsResponse","description":"Route-level statistics for an execution."},"RoutesListResponse":{"properties":{"routes":{"items":{"$ref":"#/components/schemas/RouteInfo"},"type":"array","title":"Routes","description":"Available routes for replay"},"total":{"type":"integer","title":"Total","description":"Total number of routes"}},"type":"object","required":["routes","total"],"title":"RoutesListResponse","description":"Response model for listing available routes."},"SearchMetadata":{"properties":{"strategy":{"type":"string","title":"Strategy","description":"Retrieval strategy used"},"candidates_evaluated":{"type":"integer","minimum":0.0,"title":"Candidates Evaluated","description":"Total candidates evaluated","default":0},"embedding_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embedding Model","description":"Embedding model used"},"index_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Index Type","description":"Vector index type used"},"vector_weight":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vector Weight","description":"Vector weight (for RRF)"},"keyword_weight":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Keyword Weight","description":"Keyword weight (for RRF)"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language","description":"FTS language used"}},"type":"object","required":["strategy"],"title":"SearchMetadata","description":"Observability metadata for RAG search operations."},"SearchRequestModel":{"properties":{"query_vector":{"items":{"type":"number"},"type":"array","minItems":1,"title":"Query Vector","description":"Pre-computed query embedding vector"},"model_name":{"type":"string","minLength":1,"title":"Model Name","description":"Name of the embedding model"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum number of results","default":10},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score (0-1)"},"include_content":{"type":"boolean","title":"Include Content","description":"Include segment content in results","default":false},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Pagination offset","default":0},"metadata_filters":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"items":{},"type":"array"}]},"type":"object"},{"type":"null"}],"title":"Metadata Filters","description":"Metadata filters for hybrid search"}},"type":"object","required":["query_vector","model_name"],"title":"SearchRequestModel","description":"API request model for semantic search."},"SearchResponseModel":{"properties":{"results":{"items":{"$ref":"#/components/schemas/SearchResultModel"},"type":"array","title":"Results"},"total_count":{"type":"integer","minimum":0.0,"title":"Total Count"},"limit":{"type":"integer","minimum":1.0,"title":"Limit"},"offset":{"type":"integer","minimum":0.0,"title":"Offset"},"model_name":{"type":"string","title":"Model Name"},"search_time_ms":{"type":"number","minimum":0.0,"title":"Search Time Ms"},"index_used":{"type":"boolean","title":"Index Used"}},"type":"object","required":["results","total_count","limit","offset","model_name","search_time_ms","index_used"],"title":"SearchResponseModel","description":"API response model for search results."},"SearchResultModel":{"properties":{"vector_id":{"type":"string","format":"uuid","title":"Vector Id"},"segment_id":{"type":"string","format":"uuid","title":"Segment Id"},"model_name":{"type":"string","title":"Model Name"},"similarity":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Similarity"},"storage_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storage Key"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"metadata":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"}]},"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["vector_id","segment_id","model_name","similarity"],"title":"SearchResultModel","description":"API model for a single search result."},"SidecarMetadata":{"properties":{"correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correlation Id","description":"Pipeline correlation ID"},"parent_correlation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Correlation Id","description":"Parent correlation ID for lineage"},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Pipeline route ID"},"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage","description":"Pipeline stage name"},"content_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Type","description":"MIME type"},"content_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Content Length","description":"Size in bytes"},"checksum":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checksum","description":"SHA256 checksum"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At","description":"Creation timestamp (ISO format)"},"modified_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Modified At","description":"Last modified timestamp (ISO format)"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Source URL"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Document title"},"document_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Id","description":"Document identifier"},"original_object_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Object Key","description":"Lineage to source object"},"extra":{"additionalProperties":{"type":"string"},"type":"object","title":"Extra","description":"Additional metadata fields"}},"type":"object","title":"SidecarMetadata","description":"Sidecar metadata from .meta.json files.\n\nContains pipeline lineage and processing metadata stored alongside content."},"SourceAttributionModel":{"properties":{"segment_id":{"type":"string","title":"Segment Id"},"storage_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storage Key"},"similarity":{"type":"number","title":"Similarity"},"model_name":{"type":"string","title":"Model Name"},"snippet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snippet"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","required":["segment_id","storage_key","similarity","model_name","snippet","metadata"],"title":"SourceAttributionModel","description":"Source attribution for a retrieved context item."},"SourceInfo":{"properties":{"execution_id":{"type":"string","format":"uuid","title":"Execution Id","description":"Pipeline execution ID"},"config_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Config Name","description":"Pipeline config name"},"config_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Config Id","description":"Pipeline config ID"},"indexed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Indexed At","description":"When content was indexed"},"segment_count":{"type":"integer","minimum":0.0,"title":"Segment Count","description":"Number of segments indexed","default":0},"embedding_models":{"items":{"type":"string"},"type":"array","title":"Embedding Models","description":"Embedding models used"}},"type":"object","required":["execution_id"],"title":"SourceInfo","description":"Information about an indexed execution (data source)."},"SourcesResponse":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/SourceInfo"},"type":"array","title":"Sources","description":"Available data sources"},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of sources","default":0}},"type":"object","title":"SourcesResponse","description":"Response model for available sources."},"StorageDestination":{"properties":{"adapter":{"type":"string","title":"Adapter","description":"Adapter name/type that writes to storage"},"stage":{"type":"string","title":"Stage","description":"Storage stage/path (e.g., 'boost/filtered/', 'markdown_converted')"}},"type":"object","required":["adapter","stage"],"title":"StorageDestination","description":"Storage destination information for an adapter."},"StorageObjectSummary":{"properties":{"key":{"type":"string","title":"Key","description":"Full object key"},"size":{"type":"integer","title":"Size","description":"Content size in bytes"},"content_type":{"type":"string","title":"Content Type","description":"MIME type"},"modified_at":{"type":"string","format":"date-time","title":"Modified At","description":"Last modified timestamp"},"metadata":{"additionalProperties":{"type":"string"},"type":"object","title":"Metadata","description":"Object metadata"},"sidecar":{"anyOf":[{"$ref":"#/components/schemas/SidecarMetadata"},{"type":"null"}],"description":"Embedded sidecar metadata when include_metadata=true"}},"type":"object","required":["key","size","content_type","modified_at"],"title":"StorageObjectSummary","description":"Summary of a storage object for list responses."},"SubscriptionState":{"properties":{"state":{"type":"string","title":"State","description":"Subscription state"},"task_done":{"type":"boolean","title":"Task Done","description":"Whether the task is complete"}},"type":"object","required":["state","task_done"],"title":"SubscriptionState","description":"State of a single subscription."},"SystemConfigResponse":{"properties":{"database_host":{"type":"string","title":"Database Host","description":"Database host"},"database_port":{"type":"integer","title":"Database Port","description":"Database port"},"database_name":{"type":"string","title":"Database Name","description":"Database name"},"queue_provider":{"type":"string","title":"Queue Provider","description":"Queue provider type"},"storage_base_path":{"type":"string","title":"Storage Base Path","description":"Storage base path"},"environment":{"type":"string","title":"Environment","description":"Environment: development, production, test, embedded"}},"type":"object","required":["database_host","database_port","database_name","queue_provider","storage_base_path","environment"],"title":"SystemConfigResponse","description":"System configuration (sanitized - no secrets).\n\nNote: Renamed from ConfigResponse to avoid schema collision with PipelineConfigResponse."},"SystemHealthDebug":{"properties":{"queue":{"anyOf":[{"$ref":"#/components/schemas/QueueDebugInfo"},{"type":"null"}],"description":"Queue debug info"}},"type":"object","title":"SystemHealthDebug","description":"Extended debug information for system health."},"SystemHealthResponse":{"properties":{"status":{"type":"string","title":"Status","description":"Overall health status: healthy, degraded, unhealthy"},"components":{"items":{"$ref":"#/components/schemas/ComponentHealth"},"type":"array","title":"Components","description":"Component-level health checks"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Check timestamp"},"uptime_seconds":{"type":"number","title":"Uptime Seconds","description":"System uptime in seconds","default":0.0},"debug":{"anyOf":[{"$ref":"#/components/schemas/SystemHealthDebug"},{"type":"null"}],"description":"Extended debug info (when debug=true)"}},"type":"object","required":["status","components"],"title":"SystemHealthResponse","description":"Overall system health with component details."},"SystemMetrics":{"properties":{"messages_received":{"type":"integer","title":"Messages Received","description":"Total messages received","default":0},"messages_completed":{"type":"integer","title":"Messages Completed","description":"Total messages completed","default":0},"messages_failed":{"type":"integer","title":"Messages Failed","description":"Total messages failed","default":0},"messages_in_flight":{"type":"integer","title":"Messages In Flight","description":"Current messages being processed","default":0},"routes_running":{"type":"integer","title":"Routes Running","description":"Number of active routes","default":0},"queue_depths":{"additionalProperties":{"type":"integer"},"type":"object","title":"Queue Depths","description":"Queue depths if available"},"circuit_breakers":{"additionalProperties":{"items":{"$ref":"#/components/schemas/RouteCircuitBreaker"},"type":"array"},"type":"object","title":"Circuit Breakers","description":"Circuit breaker metrics by route_id"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp","description":"Metrics timestamp"}},"type":"object","title":"SystemMetrics","description":"System-wide metrics."},"TemplateListResponse":{"properties":{"templates":{"items":{"$ref":"#/components/schemas/ChatTemplate-Output"},"type":"array","title":"Templates"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["templates","total"],"title":"TemplateListResponse","description":"Response for template list endpoint."},"TextHybridSearchRequestModel":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"Text query to embed and search"},"model_name":{"type":"string","minLength":1,"title":"Model Name","description":"Embedding model profile name"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum number of results","default":10},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score (0-1)"},"include_content":{"type":"boolean","title":"Include Content","description":"Include segment content in results","default":false},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Pagination offset","default":0},"metadata_filters":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"items":{},"type":"array"}]},"type":"object"},{"type":"null"}],"title":"Metadata Filters","description":"Metadata filters for filtering results"},"keyword_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyword Query","description":"Optional keyword search query (defaults to the text query if not provided)"}},"type":"object","required":["query","model_name"],"title":"TextHybridSearchRequestModel","description":"API request model for text-based hybrid search (vector + keyword)."},"TextMultiModelSearchRequestModel":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"Text query to embed with each model"},"model_names":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Model Names","description":"Embedding model profile names"},"limit_per_model":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit Per Model","description":"Maximum results per model","default":10},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score (0-1)"},"include_content":{"type":"boolean","title":"Include Content","description":"Include segment content in results","default":false},"aggregation":{"type":"string","enum":["union","intersection","ranked"],"title":"Aggregation","description":"How to aggregate results across models","default":"ranked"}},"type":"object","required":["query","model_names"],"title":"TextMultiModelSearchRequestModel","description":"API request model for text-based multi-model search."},"TextSearchRequestModel":{"properties":{"query":{"type":"string","minLength":1,"title":"Query","description":"Text query to embed and search"},"model_name":{"type":"string","minLength":1,"title":"Model Name","description":"Embedding model profile name"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum number of results","default":10},"similarity_threshold":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Similarity Threshold","description":"Minimum similarity score (0-1)"},"include_content":{"type":"boolean","title":"Include Content","description":"Include segment content in results","default":false},"offset":{"type":"integer","minimum":0.0,"title":"Offset","description":"Pagination offset","default":0},"metadata_filters":{"anyOf":[{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"number"},{"items":{},"type":"array"}]},"type":"object"},{"type":"null"}],"title":"Metadata Filters","description":"Metadata filters for filtering results"}},"type":"object","required":["query","model_name"],"title":"TextSearchRequestModel","description":"API request model for text-based semantic search (embeds text server-side)."},"ValidateConfigRequest":{"properties":{"config_yaml":{"type":"string","title":"Config Yaml","description":"Full YAML content to validate"}},"type":"object","required":["config_yaml"],"title":"ValidateConfigRequest","description":"Request to validate a pipeline configuration without persisting it."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ValidationIssueResponse":{"properties":{"severity":{"type":"string","enum":["error","warning"],"title":"Severity","description":"error or warning"},"code":{"type":"string","title":"Code","description":"Stable error code (e.g. E202, W501)"},"path":{"type":"string","title":"Path","description":"Path into the config where the issue was found"},"message":{"type":"string","title":"Message","description":"Human-readable description of the issue"},"suggestion":{"type":"string","title":"Suggestion","description":"Deterministic, authoritative remediation guidance"}},"type":"object","required":["severity","code","path","message","suggestion"],"title":"ValidationIssueResponse","description":"A single validation finding emitted by the pipeline config validator."},"ValidationReportResponse":{"properties":{"is_valid":{"type":"boolean","title":"Is Valid","description":"True when no errors present; warnings do not invalidate"},"issues":{"items":{"$ref":"#/components/schemas/ValidationIssueResponse"},"type":"array","title":"Issues","description":"All findings, errors first then warnings"},"error_count":{"type":"integer","title":"Error Count","description":"Number of errors"},"warning_count":{"type":"integer","title":"Warning Count","description":"Number of warnings"}},"type":"object","required":["is_valid","error_count","warning_count"],"title":"ValidationReportResponse","description":"Validation report returned by the config validator.\n\nReturned verbatim in 200 responses from `POST /configs/validate` and embedded\nin 400 responses from create/update/run endpoints when validation fails."},"VectorSearchRequest":{"properties":{"query":{"type":"string","maxLength":10000,"minLength":1,"title":"Query","description":"Search query text"},"model_name":{"type":"string","title":"Model Name","description":"Embedding model name"},"execution_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Execution Id","description":"Filter by pipeline execution"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Maximum results to return","default":10},"similarity_threshold":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Similarity Threshold","description":"Minimum similarity score","default":0.0}},"type":"object","required":["query","model_name"],"title":"VectorSearchRequest","description":"Request model for vector-only search."},"VersionInfo":{"properties":{"factflow_version":{"type":"string","title":"Factflow Version","description":"Factflow version"},"python_version":{"type":"string","title":"Python Version","description":"Python version"},"fastapi_version":{"type":"string","title":"Fastapi Version","description":"FastAPI version"},"pydantic_version":{"type":"string","title":"Pydantic Version","description":"Pydantic version"},"postgres_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postgres Version","description":"PostgreSQL version if available"}},"type":"object","required":["factflow_version","python_version","fastapi_version","pydantic_version"],"title":"VersionInfo","description":"Version information for Factflow and dependencies."},"WebhookCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"title":"Name","description":"Human-readable webhook name."},"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url","description":"Destination URL for POST delivery."},"events":{"items":{"type":"string","enum":["execution.completed","execution.failed","storage.object.created"]},"type":"array","minItems":1,"title":"Events","description":"Event types this webhook receives."},"filter":{"anyOf":[{"$ref":"#/components/schemas/WebhookFilter"},{"type":"null"}],"description":"Optional metadata filter (AND-combined)."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Free-form description."},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret","description":"Shared HMAC-SHA256 signing secret. When omitted, signatures are skipped."},"is_active":{"type":"boolean","title":"Is Active","description":"Whether this webhook receives events at creation time.","default":true}},"type":"object","required":["name","url","events"],"title":"WebhookCreateRequest","description":"Request body for ``POST /api/v1/webhooks``."},"WebhookDeliveryListResponse":{"properties":{"deliveries":{"items":{"$ref":"#/components/schemas/WebhookDeliveryResponse"},"type":"array","title":"Deliveries"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["deliveries","total","limit","offset","has_more"],"title":"WebhookDeliveryListResponse","description":"Response body for ``GET /api/v1/webhooks/{id}/deliveries``."},"WebhookDeliveryResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"webhook_id":{"type":"string","format":"uuid","title":"Webhook Id"},"event_type":{"anyOf":[{"type":"string","enum":["execution.completed","execution.failed","storage.object.created"]},{"type":"string","const":"webhook.test"}],"title":"Event Type"},"event_id":{"type":"string","title":"Event Id","description":"Source event id (idempotency key)."},"payload":{"additionalProperties":true,"type":"object","title":"Payload","description":"Full payload as sent to the consumer."},"status":{"type":"string","enum":["pending","delivered","dead_letter"],"title":"Status"},"attempts":{"type":"integer","title":"Attempts","description":"Number of delivery attempts made."},"next_retry_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Retry At"},"last_attempt_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Attempt At"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"response_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body","description":"First 1024 chars of last response body."},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","webhook_id","event_type","event_id","payload","status","attempts","created_at"],"title":"WebhookDeliveryResponse","description":"Webhook delivery record as returned from the API."},"WebhookFilter":{"properties":{"stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stage","description":"Exact match on sidecar stage (storage events)."},"tag_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tag Pattern","description":"fnmatch glob on execution.tag (execution events). Example: 'production-*'."},"extension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extension","description":"Suffix match on object key (storage events). Example: '.md'."},"route_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Route Id","description":"Exact match on sidecar route_id (storage events)."}},"type":"object","title":"WebhookFilter","description":"Optional metadata filter applied to events before delivery.\n\nAll fields are optional. When multiple fields are set, they combine with AND.\nEvents that lack the filter's target field are excluded (not matched).\nFor example, a webhook with ``stage`` set receives only storage events\nwith a matching sidecar ``stage``; it does not receive execution events."},"WebhookListResponse":{"properties":{"webhooks":{"items":{"$ref":"#/components/schemas/WebhookResponse"},"type":"array","title":"Webhooks"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["webhooks","total","limit","offset","has_more"],"title":"WebhookListResponse","description":"Response body for ``GET /api/v1/webhooks``."},"WebhookResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Webhook id (UUID v7)."},"name":{"type":"string","title":"Name","description":"Human-readable webhook name."},"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url","description":"Destination URL for POST delivery."},"events":{"items":{"type":"string","enum":["execution.completed","execution.failed","storage.object.created"]},"type":"array","title":"Events","description":"Event types this webhook receives."},"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter","description":"Metadata filter as stored (compact — only set fields included)."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active","description":"Whether this webhook is currently delivering."},"has_secret":{"type":"boolean","title":"Has Secret","description":"True when a signing secret is configured."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the webhook was registered."},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When the webhook was last modified."},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By","description":"API caller identity at creation."}},"type":"object","required":["id","name","url","events","is_active","has_secret","created_at","updated_at"],"title":"WebhookResponse","description":"Webhook row as returned from the API. Secret is never echoed."},"WebhookRetryResponse":{"properties":{"delivery_id":{"type":"string","format":"uuid","title":"Delivery Id"},"status":{"type":"string","enum":["pending","delivered","dead_letter"],"title":"Status"},"next_retry_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Retry At"},"message":{"type":"string","title":"Message"}},"type":"object","required":["delivery_id","status","message"],"title":"WebhookRetryResponse","description":"Response body for ``POST /api/v1/webhooks/{id}/deliveries/{delivery_id}/retry``."},"WebhookTestResponse":{"properties":{"success":{"type":"boolean","title":"Success","description":"True when the endpoint returned a 2xx response."},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status","description":"HTTP status code (if reached)."},"response_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body","description":"First 1024 chars of the response body."},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Connection error if the request did not complete."},"duration_ms":{"type":"number","title":"Duration Ms","description":"Elapsed time in milliseconds."}},"type":"object","required":["success","duration_ms"],"title":"WebhookTestResponse","description":"Response body for ``POST /api/v1/webhooks/{id}/test``."},"WebhookUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"events":{"anyOf":[{"items":{"type":"string","enum":["execution.completed","execution.failed","storage.object.created"]},"type":"array","minItems":1},{"type":"null"}],"title":"Events"},"filter":{"anyOf":[{"$ref":"#/components/schemas/WebhookFilter"},{"type":"null"}]},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"WebhookUpdateRequest","description":"Request body for ``PATCH /api/v1/webhooks/{id}``. All fields optional."}}}}