Spaces:
Sleeping
Sleeping
| """ | |
| Challenge Analyzer - Analisis jawaban user di fitur Challenge | |
| """ | |
| import os | |
| import json | |
| from typing import Dict, Any, Optional | |
| import google.generativeai as genai | |
| from .base_model import BaseAnalyzer, AnalysisResult | |
| class ChallengeAnalyzer(BaseAnalyzer): | |
| """ | |
| Analyzer untuk mengevaluasi jawaban user pada challenge/studi kasus | |
| """ | |
| def __init__(self): | |
| super().__init__("ChallengeAnalyzer") | |
| self.genai_model = None | |
| def initialize(self) -> bool: | |
| try: | |
| api_key = os.getenv('GEMINI_API_KEY') | |
| if not api_key: | |
| print("[ChallengeAnalyzer] No API Key found") | |
| return False | |
| genai.configure(api_key=api_key) | |
| self.genai_model = genai.GenerativeModel('models/gemini-flash-latest') | |
| self.is_initialized = True | |
| print("[ChallengeAnalyzer] Gemini Flash Latest initialized") | |
| return True | |
| except Exception as e: | |
| print(f"[ChallengeAnalyzer] Init failed: {e}") | |
| return False | |
| def evaluate(self, case_context: Dict[str, str], user_answer: str, user_sources: str) -> Dict[str, Any]: | |
| """ | |
| Evaluasi jawaban user | |
| """ | |
| if not self.is_initialized: | |
| return {"error": "Analyzer not initialized"} | |
| prompt = f""" | |
| Peran: Kamu adalah Sistem Evaluasi Verifikasi Fakta Tingkat Mahir (Advanced Fact-Checking Evaluation System). | |
| Tugas: Menilai akurasi dan kualitas investigasi pengguna terhadap kasus hoaks dengan standar profesional (Akurasi Tinggi). | |
| KONTEKS KASUS: | |
| [Topik]: {case_context.get('topic', 'General')} | |
| [Judul]: {case_context.get('title', '')} | |
| [Masalah]: {case_context.get('problem', '')} | |
| [Kebenaran]: {case_context.get('solution', '')} | |
| JAWABAN PENGGUNA: | |
| [Analisis]: "{user_answer}" | |
| [Sumber]: "{user_sources}" | |
| PEDOMAN PENILAIAN (PRESISI & STRICT): | |
| 1. KETEPATAN FAKTA (40%): Apakah pengguna berhasil membongkar hoaks tersebut dengan bukti yang benar-benar akurat sesuai 'Kebenaran'? | |
| 2. KEDAULATAN LOGIKA (30%): Apakah argumentasi logis? Apakah mereka menjelaskan MENGAPA itu hoaks (misal: analisis foto, cek tanggal)? | |
| 3. KUALITAS REFERENSI (20%): Apakah sumber yang disebut kredibel (Berita Mainstream/Jurnal)? Jika user menjawab "Google" atau kosong, nilai bagian ini 0. | |
| 4. OBYEKTIVITAS (10%): Gaya bahasa netral dan analitis. | |
| OUTPUT JSON: | |
| {{ | |
| "thought_process": "<Analisis singkat AI tentang jawaban user>", | |
| "score": <0-100>, | |
| "verdict": "<Sangat Bagus / Bagus / Cukup / Kurang / Gagal>", | |
| "strengths": ["<Poin positif 1>", "<Poin positif 2>"], | |
| "weaknesses": ["<Kekurangan 1>", "<Kekurangan 2>"], | |
| "feedback": "<Saran konstruktif dan cerdas untuk pengguna agar lebih baik.>", | |
| "detailed_scores": {{ | |
| "accuracy": <0-40>, | |
| "logic": <0-30>, | |
| "evidence": <0-20>, | |
| "attitude": <0-10> | |
| }} | |
| }} | |
| """ | |
| try: | |
| response = self.genai_model.generate_content(prompt) | |
| text = response.text.strip() | |
| # Clean JSON | |
| if "```json" in text: | |
| text = text.split("```json")[1].split("```")[0] | |
| elif "```" in text: | |
| text = text.split("```")[1].split("```")[0] | |
| return json.loads(text) | |
| except Exception as e: | |
| print(f"[ChallengeAnalyzer] Error: {e}") | |
| return { | |
| "score": 0, | |
| "error": str(e), | |
| "feedback": "Maaf, terjadi kesalahan teknis saat menilai." | |
| } | |
| def analyze(self, content: Any) -> AnalysisResult: | |
| # Not used directly, but required by BaseAnalyzer | |
| return AnalysisResult(0, 0, [], []) | |