Closed
Conversation
…nd-quiz-features Add Hindi (hi-IN) locale, quiz & interview features, Google TTS, and language tooling
Implements POST /api/interview/turn using statelessGenerate() instead of
a direct callLLM() call, aligning the interview turn endpoint with the
same orchestration path used by /api/chat.
- Coach agent (turn 1): gives feedback on the candidate's latest answer
- Interviewer agent (turn 2): asks the next follow-up question
- Both agents are defined as inline agentConfigs (no registry required)
- Text deltas accumulated server-side; JSON response shape kept
compatible with existing frontend: { feedback, nextQuestion,
coachName, interviewerName }
- Provider config resolution (API key, baseUrl, SSRF guard) mirrors
the chat route exactly
https://claude.ai/code/session_019MGKMBhcRnwEkGCRdN1m77
The coding track was always scoring full marks (e.g. 3/3) regardless of
solution correctness because:
- score was set to reviews.length (= number of problems, always = total)
- percentage was hardcoded to 100%
- all problem topics were unconditionally added as weakAreas
- the review-code route silently returned {} on parse failure
Changes:
- Add score (0-10) and verdict (pass/fail) fields to CodeReviewResult
- Update buildCodeReviewPrompt to request score + verdict from the LLM
- review-code route: clamp/normalise score, return 502 if fields missing
- quiz-runner: derive real score from passed.length, compute real %, only
flag weak areas for problems with verdict=fail or score<5
- QuizResults display uses actual pass count instead of reviews.length
- CodeReviewPanel now shows per-problem score badge and missing points
https://claude.ai/code/session_019MGKMBhcRnwEkGCRdN1m77
…en quiz/interview flows, fix coding quiz scoring, refine color palette
…e, fix quiz scoring (pass/fail), refine code review panel
…d implementations from prior merges
- Add getEffectiveTTSApiKey/getEffectiveASRApiKey helpers that fall back to the matching LLM provider key when no provider-specific key is set (e.g. openai-tts and openai-whisper both fall back to the openai key) - Auto-switch TTS/ASR to the matching provider when user enters a main API key and hasn't manually configured a different provider - Show a notice in TTS settings when the main key is being used - All key-sending call sites updated to use the effective key
Claude/merge all branches be z0 b
Canvas element creation: - Double-click blank canvas to insert a text box - Draw-to-create now works for text, shape, and line elements - Custom polygon shape creation (ShapeCreateCanvas) now inserts the element - All new elements inherit slide theme colors/fonts Table cell editing: - Double-click any table cell to edit inline with a textarea - Changes saved on blur; history snapshot added for undo support Link dialog: - Clicking "Set Link" in element context menu now opens a real dialog - Supports setting/clearing web URL hyperlinks on any element Student-friendly UI theme: - Replace sad purple/violet palette with energetic sky blue + teal + emerald - Primary color: #1d7be8 (clean accessible blue, both light & dark) - Background: sky-50 → white gradient instead of slate-50 → slate-100 - Three-color decorative blobs: sky + emerald + amber - Input card: sky-tinted border + stronger focus ring - Quick-access buttons (Quiz, Interview) styled with colored backgrounds - All purple/violet classes swapped to sky-* across components https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
P0 - interview turn route: use UIMessage parts shape instead of legacy content/createdAt P0 - quiz types: remove duplicate score/verdict fields from CodeReviewResult, keep pass|fail verdict P1 - quiz-grade route: replace non-existent INVALID_LLM_RESPONSE with INVALID_RESPONSE P1 - quiz-dashboard: check response.ok before setting session; show recoverable error UI P1 - quiz-runner: handle debrief and review-code API failures gracefully, no bogus history P2 - quiz storage: count attempts for all topicsAttempted, not just weakAreas; add topicsAttempted to history items P3 - LinkDialog: stabilize effect dep to string primitive, add eslint-disable for exhaustive-deps https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
Claude/merge all branches be z0 b
Newer voices (ash, ballad, cedar, coral, marin, sage, verse) only exist on gpt-4o-mini-tts, not tts-1. Previous hardcoded tts-1 caused these voices to always fail. Now resolveOpenAITTSModel() picks gpt-4o-mini-tts for newer voices and tts-1 for legacy ones (alloy, echo, fable, nova, onyx, shimmer). Also adds a clearer error hint pointing to project Model Access settings when the API returns a "does not have access" 403. https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
The project's allowed model list includes tts-1 but not gpt-4o-mini-tts. Remove voices that require gpt-4o-mini-tts (marin, cedar, ash, ballad, coral, sage, verse) and keep only tts-1-compatible voices: alloy, echo, fable, nova, onyx, shimmer. Reverts the dynamic model selector back to hardcoded tts-1. https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
Adds a small "Fetch Voice List" button next to the voice dropdown in audio settings. When clicked (requires API key), it: 1. Tries GET /audio/voices (OpenAI-compatible proxies may expose this) 2. Falls back to GET /models, filters for TTS models, merges known voices Button states: idle → spinner while fetching → green "Voices fetched" on success → red "Failed to fetch voices" on error. Resets when provider changes. Azure and browser-native providers are excluded since they already have their own voice sources. New API route: POST /api/tts/voices https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
- Chat panel auto-expands (uncollapse) when a discussion or QA session starts (both roundtable-triggered and user message-triggered paths) - Chat panel auto-collapses when the session ends via stop button Panel still supports manual drag-to-resize and the collapse button for user control outside of discussions. https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
- Add "AI Classroom for Every Student" headline with gradient accent in hero - Update browser tab title to "OpenMAIC — AI Classroom for Every Student" - Make slogan line more visible (opacity 60 → 75) - Enhance footer with tagline alongside project name https://claude.ai/code/session_01Ny7QQK2SjNLXxmY26HZeBc
Contributor
|
Same feedback as #151 — this is a superset of that PR (105 files) and bundles multiple unrelated features. Please see the suggestions there: open issues/discussions for each feature first, then submit focused PRs. Thanks! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Related Issues
Changes
Type of Change
Verification
Steps to reproduce / test
What you personally verified
Evidence
pnpm check && pnpm lint && npx tsc --noEmit)Checklist