Spaces:
Sleeping
Sleeping
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() | |