import os import requests import gradio as gr from dotenv import load_dotenv # Load API key dari file .env load_dotenv() OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") # GAIA API Endpoint GAIA_API = "https://agents-course-unit4-scoring.hf.space" # Ambil semua pertanyaan def get_questions(): response = requests.get(f"{GAIA_API}/questions") if response.status_code == 200: return response.json() else: raise Exception("Gagal mengambil pertanyaan dari GAIA API") # Ambil file multimodal (jika ada) def get_file(task_id): response = requests.get(f"{GAIA_API}/files/{task_id}") if response.status_code == 200: file_path = f"temp_{task_id}" with open(file_path, "wb") as f: f.write(response.content) return file_path else: return None # Gunakan OpenAI atau model Hugging Face untuk menjawab def generate_answer(question_text, context=None): prompt = f""" Jawablah pertanyaan berikut dengan jelas dan akurat: Pertanyaan: {question_text} Tambahan konteks: {context if context else "Tidak ada"} Jawaban: """ # Jika pakai OpenAI import openai openai.api_key = OPENAI_API_KEY response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "user", "content": prompt} ], temperature=0.7, max_tokens=300 ) return response.choices[0].message.content.strip() # Fungsi utama: ambil pertanyaan dan jawab def answer_question(index): try: questions = get_questions() if index < 0 or index >= len(questions): return "Indeks pertanyaan tidak valid", "", "" question = questions[index] task_id = question["task_id"] q_text = question["question"] # Cek dan ambil file multimodal jika ada file_path = None if question.get("has_file"): file_path = get_file(task_id) # Bisa dikembangkan: gunakan image/audio processing untuk context context = f"File tersedia: {file_path}" if file_path else "" # Generate jawaban answer = generate_answer(q_text, context) return q_text, context, answer except Exception as e: return f"Terjadi kesalahan: {str(e)}", "", "" # Untuk mengirim jawaban ke leaderboard (opsional) def submit_to_leaderboard(username, agent_code_url, task_id, answer): data = { "username": username, "agent_code": agent_code_url, "answers": [ { "task_id": task_id, "submitted_answer": answer } ] } response = requests.post(f"{GAIA_API}/submit", json=data) if response.status_code == 200: return f"Berhasil submit! Hasil: {response.json()}" else: return f"Gagal submit: {response.text}" # Gradio UI with gr.Blocks() as demo: gr.Markdown("# 🤖 GAIA Question Answering Agent") gr.Markdown("Masukkan indeks pertanyaan (0-19) untuk dijawab oleh agen AI.") index_input = gr.Number(label="Index Pertanyaan (0-19)", value=0, precision=0) get_answer_btn = gr.Button("Dapatkan Jawaban") q_output = gr.Textbox(label="Pertanyaan") file_info = gr.Textbox(label="Info File (jika ada)") answer_output = gr.Textbox(label="Jawaban Agen") get_answer_btn.click( fn=answer_question, inputs=[index_input], outputs=[q_output, file_info, answer_output] ) demo.launch()