fjarsra commited on
Commit
2f62783
·
verified ·
1 Parent(s): 7da61c8

Upload schemas.py

Browse files
Files changed (1) hide show
  1. app/schemas.py +87 -0
app/schemas.py ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from pydantic import BaseModel
2
+ from typing import List, Optional, Dict, Any
3
+
4
+ # ==========================================
5
+ # 1. CHAT & ROUTING SYSTEM
6
+ # ==========================================
7
+
8
+ class ChatMessage(BaseModel):
9
+ """Format pesan tunggal untuk riwayat chat (History)."""
10
+ role: str # "user" atau "assistant"
11
+ content: str
12
+
13
+ class ChatRequest(BaseModel):
14
+ """
15
+ Payload utama yang dikirim Frontend saat user chatting.
16
+ Backend butuh 'current_skills' dan 'role' karena Backend tidak punya Database.
17
+ """
18
+ message: str # Pesan user saat ini
19
+ role: str # Contoh: "AI Engineer"
20
+ history: List[ChatMessage] = [] # 5 pesan terakhir untuk konteks percakapan
21
+ current_skills: Dict[str, str] = {} # Contoh: {"python": "intermediate", "nlp": "beginner"}
22
+
23
+ class ChatResponse(BaseModel):
24
+ """Balasan dari Backend ke Frontend."""
25
+ reply: str # Teks balasan bot
26
+ action_type: str # "START_EXAM", "GET_RECOMMENDATION", "CASUAL_CHAT", "START_PSYCH_TEST"
27
+ data: Optional[Dict[str, Any]] = None # Data tambahan (Soal ujian / List Rekomendasi)
28
+
29
+ # ==========================================
30
+ # 2. EXAM SYSTEM (UJIAN)
31
+ # ==========================================
32
+
33
+ class QuestionResponse(BaseModel):
34
+ """Output soal dari LLM."""
35
+ question_text: str
36
+ question_context: Dict[str, Any] # Kunci jawaban/Rubrik (Frontend wajib simpan ini)
37
+ skill_id: str
38
+
39
+ class AnswerSubmission(BaseModel):
40
+ """Payload saat user mengirim jawaban ujian."""
41
+ user_answer: str
42
+ question_context: Dict[str, Any] # Kunci jawaban yang dikirim balik oleh Frontend
43
+
44
+ class EvaluationResponse(BaseModel):
45
+ """Hasil penilaian AI Judge."""
46
+ is_correct: bool
47
+ score: int
48
+ feedback: str
49
+ passed: bool # True jika score >= 70
50
+ suggested_new_level: Optional[str] = None # Saran level baru (misal: "intermediate")
51
+
52
+ # ==========================================
53
+ # 3. RECOMMENDATION SYSTEM (ML POWERED)
54
+ # ==========================================
55
+
56
+ class SkillGap(BaseModel):
57
+ skill_name: str # Contoh: "SQL"
58
+ target_level: str # Contoh: "Pemula"
59
+
60
+ class UserProfile(BaseModel):
61
+ name: str # Contoh: "Siti Adaptive"
62
+ active_path: str # Contoh: "Data Scientist"
63
+ missing_skills: List[SkillGap] # List of objects
64
+ completed_courses: List[int] = []
65
+
66
+ class RecommendationItem(BaseModel):
67
+ skill: str
68
+ current_level: str
69
+ course_to_take: str
70
+ chapters: List[str]
71
+ match_score: float
72
+ badge: str
73
+ # ==========================================
74
+ # 4. PROGRESS SYSTEM
75
+ # ==========================================
76
+
77
+ class ProgressRequest(BaseModel):
78
+ """Request untuk hitung progress bar."""
79
+ role: str
80
+ current_skills: Dict[str, str]
81
+
82
+ class ProgressItem(BaseModel):
83
+ """Format satu item progress skill."""
84
+ skill_name: str
85
+ current_level: str
86
+ progress_percent: int # 0 - 100
87
+ remaining_tutorials: int