Sign in with your admin account.
| Provider | Status | Credit / Balance | Used | Remaining | Notes |
|---|---|---|---|---|---|
| Loading… | |||||
Server-side slot limiting for TTS, STT and D-ID. Excess calls queue here rather than failing at the upstream API. Total limit is the system-wide cap, enforced exactly across all workers via Redis. Active / Queued / Available counters reflect the whole system in real time. If Redis goes down the limiter falls back to per-worker semaphores (signalled by an amber dot under the Redis column).
| Provider | Total limit | Queue timeout | Active | Queued | Available | Redis | |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
Live counters refresh every 3 s while this tab is open. Changes take effect immediately — no restart needed.
Verifies every voice in your curated list is still live on Fish Audio and flags any scenarios pointing at a removed voice. Run before each class as a quick health check.
| Status | Name | Accent | Gender | Age | Voice ID | Scenarios using it | Actions |
|---|---|---|---|---|---|---|---|
| Click "Validate now" to run a check. | |||||||
| Agent / Service | Requests | Input | Output | Cost (USD) | Time to first audio | ± SD | Avg latency | ± SD | Max latency |
|---|
Aggregated across all completed sessions. Click column headers to sort. Only sessions that reached the /end endpoint are included (flushed usage).
| Scenario ID ↕ | Scenario ↕ | Patient ↕ | Provider ↕ | Requests ↕ | Cost ↕ | Avg first audio ↕ | Max first audio ↕ | Avg total ↕ | Max total ↕ |
|---|---|---|---|---|---|---|---|---|---|
| Loading… | |||||||||
One row per scenario + provider combination, aggregated across all completed sessions. "First audio" = time to first playable chunk (streaming only). "Total" = full synthesis time. Cost = cumulative TTS spend across all sessions for that scenario. — = no data recorded (non-streaming or metric not available).
| ID ↕ | Patient ↕ | Age ↕ | Title ↕ | Category ↕ | Difficulty ↕ | Years ↕ | Sessions ↕ | |||
|---|---|---|---|---|---|---|---|---|---|---|
| ID ↕ | Patient ↕ | Title ↕ | Owner ↕ | Type ↕ | Category ↕ | Difficulty ↕ | Published ↕ | Plays (total) ↕ | Library ↕ | Sessions ↕ | Likes ↕ | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Student ↕ | Scenario ↕ | Patient ↕ | Started ↕ | Mode ↕ | Turns ↕ | Score ↕ | AI Score ↕ | Status ↕ |
|---|
Latency recorded per service during this session
Configure the questions students see in the feedback form. Drag to reorder, choose star rating (1-5), free text, or multiple choice, and mark fields as required. Edits apply to the template selected above; click Save Form to persist them. The student-facing form is whichever template is marked Active.
Add, edit, retire or delete achievement trophies. The rule drives evaluation: pick from the predefined set (matches predicates in services/trophies.py) and supply matching threshold JSON. Inactive trophies stop being evaluated but stay in the table for historical display.
| Icon | Title | ID | Theme | Rule | Threshold | XP | Sort | Awarded | Active |
|---|
Edit titles and XP thresholds for each level band. Validation: level 1 must be at xp_min = 0, levels must be unique, and xp_min must be non-decreasing as level rises (otherwise lookups would be ambiguous). After saving in production, run systemctl restart consultai if your deploy uses multiple gunicorn workers — the worker that handled the save updates instantly, others see the change after their next restart.
| Level | Title | XP min | XP to next | Band size | |
|---|---|---|---|---|---|
| Loading… | |||||
| Student | Source | Severity | Category | Excerpt | Reason | Date | Status | Actions |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
Optionally add a note about the action taken, then dismiss this flag.
| # | Scenario | Category | Difficulty | Attempts | Completion | Mean | Stdev |
|---|
| Student | Sessions | Completed | Avg score | Trend | Top category | Last attempt | Cost |
|---|
| Started | Flags | Scenario ID | Scenario | Category | Difficulty | Mode | Duration | Score | AI score | Highlight | Improvement priority | Actions |
|---|
| Student ID ↕ | Name ↕ | Email ↕ | Role ↕ | Year ↕ | Status ↕ | Last Login ↕ | Credits ↕ | Level ↕ | Actions | |
|---|---|---|---|---|---|---|---|---|---|---|
Resetting password for:
CSV columns (header row optional):
student_id, display_name, year_group, email, password
Only student_id is required. Rows whose student ID already exists will be skipped.
⬇ Download CSV template
Build and switch between named prompt presets for Agent 1 (chat / patient persona), Agent 2 (assessment system prompt), and the assessor's tone instructions. The currently active preset of each kind is what live consultations actually use — switch active to A/B test different variants without losing the originals.
These instructions are appended to every patient prompt after the scenario-specific data (name, symptoms, history, etc.).
Use {patient_name} as a placeholder — it will be replaced with the scenario's patient name at runtime.
The full system prompt sent to the assessor agent. Use {tone} as a placeholder — it will be replaced with the appropriate tone instruction (from the active Tone preset) based on scenario difficulty. Use {{ and }} for literal braces in the JSON example.
When enabled, both agents retrieve relevant excerpts from uploaded documents. The patient agent uses documents tagged Patient to respond more accurately to clinical questions. The assessor uses documents tagged Assessor to write more clinically grounded feedback. Documents tagged Both are available to either agent. Tag documents in the Knowledge Builder tab.
When enabled the assessor receives relevant excerpts. When disabled, behaviour is identical to the standard model.
Changing provider or model requires reprocessing all existing documents. All chunks must use the same dimensions.
Target size of each text chunk in tokens. Smaller chunks are more precise; larger chunks preserve more context. Changing this requires reprocessing existing documents.
More chunks = richer context but higher token cost and latency.
If no chunks score above this threshold, no context is injected and the assessor falls back to standard behaviour.
Manage knowledge base documents in the Knowledge Builder tab.
Runs on every student turn (in parallel with the patient response) to detect which competencies have been demonstrated.
Uses the fast model (Agent 1 model) to avoid adding latency to the hot-path.
Required placeholders: {competency_list}
{student_utterance}
{awarded_list}
Called once at scenario load time when a scenario's YAML does not include explicit competencies.
Derives a weighted competency list from the scenario's expected outcomes.
Uses the quality model (Agent 2 model) — runs offline, not on the hot-path.
Required placeholders: {expected_outcomes}
{red_flags}
Used when Auto-derive Tags is clicked in the scenario builder.
Available placeholders: {category},
{subcategory},
{reason_for_visit},
{symptoms},
{expected_outcomes},
{difficulty}.
Return a JSON array of lowercase tag strings.
These tone strings replace the {tone} placeholder in the assessment system prompt, selected based on scenario difficulty.
Configure the speech-to-text provider and model used for transcribing student audio. The active preset is used globally for all consultations.
Configure the TTS model and output settings for each provider. The active preset is used globally for all consultations. Switch active to A/B test different models (e.g. Turbo v2.5 vs Flash v2.5).
How consistent the voice sounds between generations. Lower values give a wider emotional range.
How closely the output matches the original voice. Higher values sound more like the voice sample.
Amplifies the speaker's style. Values above 0 increase latency. Best left at 0 for most voices.
Playback speed multiplier. 1.0 is the natural pace of the voice.
Enhances clarity and presence of the voice. Adds a small amount of latency.
Controls variation in the generated speech. Lower values produce more predictable, consistent output.
Nucleus sampling diversity. Lower values keep speech more focused; higher values allow more variation in tone and pacing.
Speaking rate multiplier. 1.0 is natural pace. Adjusts prosody without changing pitch.
admin_settings.json — no server restart needed.
Consistency of the voice across utterances. Lower = more expressive.
How closely the output matches the original voice sample.
Silence appended after each utterance before the idle loop resumes.
Clinical reference material used by the RAG assessor to enrich feedback. Supported formats: PDF, DOCX, TXT, MD.
Accepted formats: PDF, DOCX, TXT, MD. The document will be automatically extracted, chunked, and embedded using the active embedding model.
Upload a CSV with dot-notation headers (e.g. patient.name, presentation.symptoms).
List fields use semicolon separators. Competencies are always auto-derived.
Paste the voice ID from fish.audio's library. Metadata (name / accent / gender / age) is auto-fetched from Fish Audio.