qfa.services.orchestrator#
Orchestrator service — core business logic for feedback analysis.
Assembles prompts, enforces token limits, filters prompt injection, manages retries with exponential backoff, and enforces deadlines.
Classes
|
Core orchestration service for feedback analysis. |
- class qfa.services.orchestrator.Orchestrator(llm: LLMPort, anonymizer: AnonymizationPort, settings: OrchestratorSettings, llm_timeout_seconds: float, max_total_tokens: int)[source]#
Bases:
objectCore orchestration service for feedback analysis.
Assembles prompts from feedback records, validates input, calls the LLM through the
LLMPort, and manages retries with exponential backoff and deadline enforcement.- Parameters:
llm (LLMPort) – The LLM provider adapter.
anonymizer (AnonymizationPort) – The anonymisation adapter used to redact PII before LLM calls.
settings (OrchestratorSettings) – Configuration for the orchestrator behaviour.
llm_timeout_seconds (float) – Maximum time in seconds for a single LLM call.
max_total_tokens (int) – Maximum estimated total tokens for a single request.
- async analyze(request: AnalysisRequestModel, deadline: datetime, anonymize: bool = True) AnalysisResultModel[source]#
Analyze a batch of feedback records.
- Parameters:
request (AnalysisRequest) – The analysis request containing feedback records and prompt.
deadline (datetime) – Absolute UTC deadline by which the analysis must complete.
- Returns:
The complete analysis result.
- Return type:
AnalysisResult
- Raises:
AnalysisTimeoutError – When the deadline is exceeded.
FeedbackTooLargeError – When estimated tokens exceed the configured limit.
AnalysisError – For non-recoverable LLM failures or prompt injection.
- async summarize(request: SummaryRequestModel, deadline: datetime, anonymize: bool = True) SummaryResultModel[source]#
Summarize each submitted feedback record individually.
- Parameters:
request (SummaryRequest) – The summarization request containing feedback records and options.
deadline (datetime) – Absolute UTC deadline by which summarization must complete.
- Returns:
The per-feedback-record summaries and titles.
- Return type:
SummaryResult
- Raises:
AnalysisError – When the LLM returns invalid output or another non-recoverable error occurs.
- async summarize_aggregate(request: SummaryRequestModel, deadline: datetime, anonymize: bool = True) AggregateSummaryResultModel[source]#
Summarize multiple feedback records as a single aggregate summary.
- Parameters:
request (SummaryRequest) – The summarization request containing feedback records and options.
deadline (datetime) – Absolute UTC deadline by which summarization must complete.
- Returns:
A single aggregate summary with themes ordered by frequency.
- Return type:
AggregateSummaryResult
- async assign_codes(request: CodingAssignmentRequestModel, deadline: datetime, anonymize: bool = True) CodingAssignmentResultModel[source]#
Assign hierarchical codes to each feedback record.
- Parameters:
request (CodingAssignmentRequest) – Feedback records, coding framework,
max_codes, and tenant id.deadline (datetime) – Absolute UTC deadline by which all records must be coded.
- Returns:
Per-record leaf codes from
classify_feedback.- Return type:
CodingAssignmentResult
- Raises:
AnalysisTimeoutError – When
deadlineis reached before every record is processed.LLMTimeoutError – When a single LLM completion exceeds the configured timeout.
LLMRateLimitError – When the LLM provider returns rate limiting.
LLMError – For other LLM provider failures.