feat(quizzes): integrate chainlearn-ai service for quiz generation (closes #3)#20
Merged
Merged
Conversation
closes ChainLearnOfficial#3 * add AI_SERVICE_URL env var (defaults to http://localhost:8000) * new ai-client.ts wrapping POST /generate-quiz on the AI service * generateQuiz calls the AI service and falls back to the existing placeholder questions if the service is unreachable * generateQuizSchema now accepts optional difficulty and numQuestions
DeFiVC
approved these changes
Jun 20, 2026
DeFiVC
left a comment
Contributor
There was a problem hiding this comment.
Clean implementation that fully addresses issue #3. The AI service integration with graceful fallback is well-structured.
What's Good
- Proper separation:
ai-client.tsencapsulates the AI service call cleanly, keepingquiz.service.tsfocused on business logic. - Graceful fallback: If the AI service is unreachable, placeholder questions are returned with a warn log — the dashboard never breaks.
- Type safety:
AiDifficultyenum andGenerateQuizFromAIParamsinterface exported from the client for consumers. - Schema updates:
difficultyandnumQuestionsadded as optional fields with proper Zod validation. - Field mapping: AI response (
prompt→text,minor→correctIndex) mapped correctly to the existingQuizQuestionformat.
Minor Observations (non-blocking)
config.AI_SERVICE_URLuses uppercase with underscores (env var convention) — good choice over the camelCase suggested in the issue.- The
AiQuizResponse.quiz_idfield from the AI service isn't stored locally — this is fine since the API generates its own quiz ID.
CI green, no conflicts, linked issue matched. Approving.
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.
closes #3
generateQuiz now calls the chainlearn-ai service (POST /generate-quiz) instead of returning the hardcoded Stellar questions. If the AI service is unreachable, it falls back to the existing placeholder set so the dashboard doesn't break on a transient outage.
what changed:
testing: