Admins
AI and usage
Watch today's AI spend against the daily budget, set provider keys and the per-student allowance, choose the speech model and keep the price table.
AI & Usage shows what the tutor costs and lets you set the daily budget. Every figure is a total. No prompt, reply or conversation is reachable from here.
Two other pages go deeper. Models is where you choose which model does each job, with backups. Costs shows spend by day, job, model and account. This page keeps the daily budget, the provider keys, the speech model and the price table.
- 1: Today's spend so far
- 2: What happens at 100%
- 3: Budget in dollars
- 4: Save with a reason
- 5: Tokens and cost
- 6: Tutor and speech status
The three cards at the top
Daily budget
- The top right shows today's spend against the budget, for example $3.18 / $25.00.
- The bar fills as the day's spend grows. It turns amber at 80% and red at 100%.
- Under the bar: Hard limit 100% → tutor pauses, you get one email and Safety replies always work.
- The box under it holds the budget in US dollars. Change it and select Update (reason).
Tokens shows tokens used Today and over 30 days, and Cost 30d.
Model & providers shows Tutor (Live or Stub) and Speech (Configured or Missing). When the tutor is not live, the page header also shows Tutor: stub (canned replies).
Below the cards, Tokens per day · 30d charts input and output tokens for each day.
Change the daily budget
- In the Daily budget card, type the new amount, for example 30.00. Use dollars and up to two decimals.
- Select Update (reason). It stays greyed out until the amount differs from the current one.
- Write the reason and select Update budget.
The Update daily budget box - 1: Why the budget changes
- 2: Applies within a minute
- The new budget applies within a minute.
The audit log records update_setting on llm_daily_budget_usd, with the old and new amounts.
What happens when the budget is reached
- 1: Budget used up
- 2: Safety replies still work
When today's spend reaches the budget:
- The tutor pauses. Students see TutorCat is taking a short break. Try again later. Voice transcription pauses too.
- Safety always works. Messages are still screened for safety, and safety replies with helplines are still sent. The budget never blocks them.
- You get one email that day, to support@tutorcat.ai, with the subject TutorCat reached its daily AI budget.
- On Overview, AI spend today turns red.
The budget counts one UTC day. The tutor starts again by itself when the UTC day turns, or within a minute of you raising the budget.
If the spend cannot be read for a moment, the tutor keeps working and Overview shows Spend unknown.
The per-student allowance
Each student also has their own daily allowance, so one very busy account cannot use up the whole day's budget and pause the tutor for everyone.
- The default is $0.50 per student per UTC day.
- A student who reaches it sees You've done a lot of learning today! TutorCat will be ready again tomorrow. Only that student is paused.
- Safety screening and safety replies always work, and never count against the allowance.
- Change it in Settings → Spending limits → Per-child daily allowance.
The allowance is counted in the server's memory, not stored per child. A server restart resets everyone's allowance for the day; the global budget still holds.
Provider keys
The keys are set in Settings, under Connections:
| Setting | What it is for |
|---|---|
Anthropic key (anthropic_api_key) |
The tutor's model provider. Without it the tutor runs as a stub with canned replies. |
Speech-to-text key (stt_api_key) |
Transcribing voice input. Without it, Speech shows Missing. |
Speech-to-text address (stt_base_url) |
The transcription service's address (an OpenAI-compatible transcription endpoint). |
OpenRouter key (openrouter_api_key) |
Reaches the other models. Easiest to set on Models, where it is explained. |
Keys are write-only: once saved, nobody can read them back from the console. See Settings and flags.
Speech-to-text model
- 1: Speech-to-text model id
- 2: Save with a reason
- 3: Other jobs are on Models
Which model does each job, and its backups, is now set on Models. The old Model routing section is gone from this page.
What stays here is the Speech-to-text model. Transcription is not a chain on Models (it shows there read-only). Out of the box it runs through OpenRouter with zero data retention, on the OpenRouter key: Whisper large v3 turbo, with Voxtral Mini 3B tried once if it fails. Setting an OpenAI key and address in Settings switches it to OpenAI direct (whisper-1 by default). A model typed here replaces the default and has no backup.
- Type the model id in Transcription.
- Select Save, write the reason, and select Save model.
compiled default means no choice has been saved and the built-in default applies. The change takes effect without a restart. The audit log records update_model_assignment.
Model prices
- 1: Input price per Mtok
- 2: Output price per Mtok
- 3: Save that row
Model prices sets what each direct model costs, in US dollars per million tokens, for input and output. The price table still drives the cost estimates: it is used whenever a provider does not report its own charge. OpenRouter reports what it charged for each call, and its model prices come from the catalogue on Models. The estimate is stored with each call, so a corrected price applies to new calls and to older calls stored without a cost. Costs shows how much of your spend is provider-reported and how much is estimated.
- Edit Input USD / Mtok and Output USD / Mtok for a model.
- Select Save on that row, give a reason, and select Save prices.
The budget uses the real charge where the provider reported one and these prices otherwise, so keep them in line with the provider's price list.
Usage and cost
- 1: Pick the window
- 2: Save as a spreadsheet
- 3: Totals for the window
- 4: Cost per day
At the bottom:
- 7d, 30d and 90d choose the window.
- Download CSV saves the usage for that window as a spreadsheet file.
- Input tokens, Output tokens, Total tokens and Cost (USD) for the window.
- Cost per day (USD) as a chart.
- A table of Requests, tokens and cost for each model.
If a note says Not in the price table: followed by model names, those models' tokens are counted but their cost is unknown, so totals show Not fully priced rather than a figure that is too low. Add their prices under Model prices.