hasanain9's picture
test1
904e0bd verified
raw
history blame
3.47 kB
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()