SDAC Coordinator Release Agent
Overview
The Coordinator Release Agent is the primary agent for the SDAC AI Widget. It helps state auditors analyze cost report data by calling validation tools and providing concise, actionable analysis.
- Registry ID:
sdac_coordinator-release-agent - Profile ID:
sdac-coordinator-release
Communication Style
The agent is designed for state auditors who need direct, evidence-based analysis:
- Concise -- Gets to the point without lengthy explanations
- Actionable -- Tells auditors what to DO, not what IS
- Specific -- Uses exact numbers, names, and dollar amounts (e.g., "Williams added $2,800" not "new hires increased costs")
- Direct -- Avoids hedging language like "appears," "seems," or "potentially"
Position-First Behavior
- Treats the position or role as the primary unit of analysis.
- Rolls non-DSP replacement/support rows into the linked main-roster position when possible.
- Treats DSP=
Ylinked rows as valid add-on positions. - Enumerates every flagged position and every reason it was flagged.
- Calls out ambiguity explicitly when lower-section rows cannot be linked confidently.
- Keeps the legacy claimable-based federal-funds fringe calculation path in place.
Available Tools
The agent has access to persisted report-analysis tools plus targeted real-time tools:
| Tool | Purpose |
|---|---|
sdac-get-analysis-packet | Retrieves the precomputed report analysis packet from SDAC.analysis_Results |
sdac-get-analysis-result | Retrieves one precomputed analysis result, such as FRINGE, SALARY, or COMMENT_QUALITY |
sdac-start-report-analysis | Starts or reuses the post-ingestion report analysis workflow |
sdac-search-analysis-evidence | Searches persisted report, row-level finding, comparison, and historical evidence before raw tools |
sdac-validate-fringe | Validates fringe benefit rates using position-level aggregation and linked-occupant context |
sdac-get-report-info | Retrieves report context: district name, year, quarter, salary/fringe totals, and position counts |
sdac-fetch-costs | Syncs TherapyLog cost data and returns a report context the widget can analyze |
sdac-compare-quarters | Compares the current report to prior-year data using position counts and position-family changes |
sdac-compare-multiple-quarters | Compares the current report against selected historical quarter/year targets |
sdac-cross-reference-replacements | Cross-references replacements, substitutions, and DSP add-ons against main-roster positions |
The agent extracts the report_id from its system context and passes it to tools automatically.
Precomputed Analysis Behavior
When a report_id is available, the agent should prefer persisted report-analysis evidence:
- For broad review prompts, validation readiness questions, send-back questions, row-level finding questions, or historical evidence search, call
sdac-search-analysis-evidence. - For focused prompts, call
sdac-get-analysis-resultwith the requestedanalysis_type. - If persisted evidence is missing because report analysis has not started, call
sdac-start-report-analysis. - For broad current-report packet summaries,
sdac-get-analysis-packetremains available as a compatibility wrapper. - Call raw validation tools only when the persisted result is missing, stale, still running, or explicitly refreshed.
- Do not mention hidden analysis sections. Conversational filtering is handled by the evidence/packet/result tools using SDAC feature flags.
The persisted packet is produced by Report analysis workflow.
API Endpoint
POST /sdac/chat
The agent is accessed via the source-backed streaming chat endpoint with
automatic session management. Browser widget code should call the same-origin
proxy at POST /api/ingestion/sdac/chat.
Request:
{
"reportId": "8201EDC2-2EDE-4CA1-AF44-D0F5AA185CDB",
"message": "What is the fringe variance for this report?",
"userId": "auditor@state.gov",
"sessionId": "browser-session-abc123",
"conversationId": null
}
Response: Server-Sent Events stream with metadata, tool-start, tool-result, delta, usage, and done events.
See Streaming Responses for full SSE event documentation.
Session Management
Conversations are managed server-side with:
- Context persistence across page refreshes
- Token usage tracking per turn for cost analysis
- 90-day automatic conversation expiration
- Cross-session context for the same report
See Session Management for architecture details.
Configuration
The agent's system prompt and LLM settings are managed via Core.AgentProfiles:
- Edit prompts through the Admin Dashboard without code changes
- Version tracking with automatic cache invalidation on prompt updates
- Per-profile LLM model overrides (temperature, max tokens, deployment)
Example Interaction
Auditor: "What is the fringe variance for this report?"
Agent calls: sdac-get-report-info → retrieves district context
Agent calls: sdac-validate-fringe → analyzes fringe benefit rates
Agent calls: sdac-compare-quarters → explains position-count movement versus prior year
Agent: "Three positions need review. Speech-Language Pathologist [row 16]
has a high fringe rate after combining split-occupancy costs. Principal [row 12]
has a linked DSP add-on. Ask the district to justify these specific positions."