pdf-quiz-generator/backend/app/routers
Daniel 954b13e7b3 fix: a speech model is added with its voices, and Orpheus is sent where it works
An Orpheus id (groq-orpheus-english) did not start with "local-", so
generate_tts_audio sent it down the OpenAI path and every call failed. It
also could be added with no voice, and the "local-%" filters in /tts/voices
and the default lookup hid any non-local voice from learners even when it
was added and marked default.

services/tts_voices.py is the one table of which voices belong to which
model (Kokoro, Orpheus English/Arabic, Fish), the same table the scribe app
keeps. Anything the table knows, or anything local-*, goes through the
LiteLLM gateway with the options its family needs (Orpheus: wav). Adding a
bare model id creates one row per voice with friendly names, so an
administrator adds "groq-orpheus-english" and six voices appear to test one
by one; a voice from another family is refused, naming the ones that work.
Learners are offered every active voice, each saying which model serves it,
and /tts/speak answers with the media type the model actually returned.
Kitten and Supertonic tables go — those models left the gateway.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dv6sqaY6Vq3ChZHMem3cnU
2026-09-13 05:04:37 +02:00
..
__init__.py Initial commit: PDF Quiz Generator app 2026-03-30 20:04:53 +00:00
access.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
admin.py fix: a speech model is added with its voices, and Orpheus is sent where it works 2026-09-13 05:04:37 +02:00
ai_mode.py fix: moderator flag in /auth/me, and AI Mode answers that go wrong 2026-09-12 23:05:55 +02:00
articles.py fix: a question's figure says what the question says, not what the library says 2026-09-13 04:26:59 +02:00
attempts.py refactor: remove the LMS 2026-09-12 23:27:51 +02:00
auth.py feat: a versioned API, refresh tokens, and an end-to-end stack that found four bugs 2026-09-13 01:23:38 +02:00
categories.py Major: categories, question bank, security fixes, mobile layout, UX improvements 2026-03-31 20:08:05 +02:00
collections.py feat: articles are collectible, and Summary is a toggle 2026-09-12 14:52:20 +02:00
contact.py fix: the contact form's messages were readable by anyone 2026-09-12 22:37:28 +02:00
documents.py Tag filtering, multi-category, bug fixes, image validation, docs 2026-04-04 22:48:26 +02:00
drafts.py feat: extracted questions are staged, and only acceptance takes an id 2026-09-11 22:57:08 +02:00
exams.py feat: exams are a group you can build, with the board's own blueprint 2026-09-11 20:27:48 +02:00
favorites.py Add switchable embedding model, Polly toggle, job cancellation, and UI fixes 2026-04-03 20:44:11 +02:00
feedback.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
flashcards.py fix: a deck keeps the article's filing, and the card fills the window 2026-09-13 03:58:59 +02:00
folders.py feat: question folders, per-section notes, and two feedback paths 2026-09-12 18:37:43 +02:00
login_code.py feat: sign in with a code sent by email 2026-09-12 17:29:28 +02:00
media.py feat: figures are thumbnails that open into a viewer, with source and overlay 2026-09-12 20:33:00 +02:00
mynote.py Add persistent MyNote for quizzes 2026-05-12 17:51:23 +02:00
nextcloud.py Security hardening, async TeachChat, rate limit UX, unthrottle 2026-04-04 01:09:42 +02:00
public.py feat: the objective is not optional, and the site can count itself 2026-09-12 06:40:48 +02:00
question_categories.py feat: retire the tags, and stop settings from hiding from the page that 2026-09-12 05:06:58 +02:00
questions.py fix: the answer side of a question needs an attempt, or the job of writing it 2026-09-13 00:13:43 +02:00
quizzes.py feat: jobs move to the workbench, with their logs and a way to clear them 2026-09-13 03:41:22 +02:00
search.py feat: rerank what a learner is shown, with Cohere through the proxy 2026-09-12 18:23:06 +02:00
share.py refactor: remove the LMS 2026-09-12 23:27:51 +02:00
study_plans.py feat: study plans built to the board's content outline 2026-09-11 21:40:17 +02:00
study_tools.py feat: a versioned API, refresh tokens, and an end-to-end stack that found four bugs 2026-09-13 01:23:38 +02:00
tags.py fix: put the disciplines and diseases back, and order Performance as shown 2026-09-12 05:39:22 +02:00
teach.py fix: WebP figures, the openai SDK removed, and a voice a site can add to 2026-09-12 17:13:05 +02:00
tts.py fix: a speech model is added with its voices, and Orpheus is sent where it works 2026-09-13 05:04:37 +02:00
uploads.py feat: a versioned API, refresh tokens, and an end-to-end stack that found four bugs 2026-09-13 01:23:38 +02:00