beyzapehlivan's picture
Update app.py
5fa53b8 verified
import os
import gradio as gr
import requests
import pandas as pd
from smolagents import CodeAgent, HfApiModel, VisitWebpageTool
# Model ve Token Ayarları
token = os.getenv("HF_TOKEN")
# 1. Modeli Qwen olarak değiştiriyoruz (Kota engeline takılmaz)
model = HfApiModel(model_id="Qwen/Qwen2.5-72B-Instruct", token=token)
class AlfredAgent:
def __init__(self):
# En basit, kütüphanenin en sevdiği prompt yapısı
CUSTOM_SYSTEM_PROMPT = """You are a GAIA expert. Solve the task using Python code.
{{managed_agents_descriptions}}
{{authorized_imports}}
Rules:
1. Use web_search or visit_webpage for information.
2. If you find a file (audio/video), search for its name on the web to get details.
3. The LAST LINE of your code must be the final answer variable.
4. Final answer must be short (e.g., '15', 'Paris')."""
self.agent = CodeAgent(
tools=[VisitWebpageTool()],
model=model,
max_steps=12, # Adım sayısını 12'de tutalım ki model yorulmasın
add_base_tools=True,
additional_authorized_imports=['requests', 'bs4', 'pandas', 'json', 'math', 're'],
system_prompt=CUSTOM_SYSTEM_PROMPT
)
def __call__(self, question: str) -> str:
try:
# Modelin doğal akışını bozmadan çalıştır
result = self.agent.run(question)
ans = str(result).strip()
# Sadece basit bir temizlik (Eğer çok uzunsa son satırı al)
if len(ans) > 50 and "\n" in ans:
ans = ans.split('\n')[-1].replace("Final Answer:", "").strip()
return ans[:50]
except Exception as e:
return "Unknown"
# --- Gönderim ve Arayüz Fonksiyonu ---
def run_and_submit_all(profile: gr.OAuthProfile | None):
if profile is None: return "Giriş gerekli.", None
questions_url = "https://agents-course-unit4-scoring.hf.space/questions"
submit_url = "https://agents-course-unit4-scoring.hf.space/submit"
agent = AlfredAgent()
try:
response = requests.get(questions_url, timeout=15)
questions_data = response.json()
except: return "Sorular alınamadı.", None
answers_payload = []
results_log = []
for item in questions_data:
task_id = item.get("task_id")
answer = agent(item.get("question"))
# Temiz ve kısa cevap formatı
clean_ans = str(answer).split('\n')[-1].replace("Final Answer:", "").strip(" .\"'")
answers_payload.append({"task_id": task_id, "submitted_answer": clean_ans[:100]})
results_log.append({"Task ID": task_id, "Submitted Answer": clean_ans[:100]})
submission_data = {
"username": profile.username,
"agent_code": f"https://huggingface.co/spaces/{os.getenv('SPACE_ID')}/tree/main",
"answers": answers_payload
}
try:
res = requests.post(submit_url, json=submission_data, timeout=60).json()
return f"Skor: {res.get('score')}% ({res.get('correct_count')}/20)", pd.DataFrame(results_log)
except: return "Gönderim başarısız.", pd.DataFrame(results_log)
# Gradio Arayüzü
with gr.Blocks() as demo:
gr.LoginButton()
btn = gr.Button("Sınavı Başlat")
out = gr.Textbox(label="Sonuç")
tab = gr.DataFrame()
btn.click(run_and_submit_all, outputs=[out, tab])
if __name__ == "__main__":
demo.launch()