Malofi's picture
Update app.py
5d95245 verified
Raw
History Blame Contribute Delete
4.01 kB
# Importiere die notwendigen Bibliotheken und Tools
from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool # Stellt sicher, dass FinalAnswerTool importiert wird
from Gradio_UI import GradioUI # Stellt sicher, dass die UI importiert wird
# Definiere dein benutzerdefiniertes Tool (optional, kann später angepasst werden)
@tool
def my_custom_tool(arg1:str, arg2:int)-> str:
"""A tool that does nothing yet
Args:
arg1: the first argument
arg2: the second argument
"""
return "What magic will you build ?"
# Definiere das Zeitzonen-Tool
@tool
def get_current_time_in_timezone(timezone: str) -> str:
"""A tool that fetches the current local time in a specified timezone.
Args:
timezone: A string representing a valid timezone (e.g., 'America/New_York').
"""
try:
tz = pytz.timezone(timezone)
local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
return f"The current local time in {timezone} is: {local_time}"
except Exception as e:
return f"Error fetching time for timezone '{timezone}': {str(e)}"
# --- Initialisiere die benötigten Tool-Instanzen ---
final_answer = FinalAnswerTool()
search_tool = DuckDuckGoSearchTool() # Erstelle eine Instanz des Such-Tools
# Lade das Bildgenerierungs-Tool vom Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)
# --- Konfiguriere das Sprachmodell ---
# Wähle das Modell (Standard oder Fallback-Endpunkt, falls nötig)
model_id='Qwen/Qwen2.5-Coder-32B-Instruct' # Standardmodell
#model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud' # Fallback Endpunkt, falls Standard überlastet ist
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id=model_id, # Verwende die ausgewählte Modell-ID
custom_role_conversions=None,
)
# --- Lade die Prompt-Vorlagen ---
try:
with open("prompts.yaml", 'r') as stream:
prompt_templates = yaml.safe_load(stream)
except FileNotFoundError:
print("FEHLER: prompts.yaml nicht gefunden! Stelle sicher, dass die Datei im Space vorhanden ist.")
prompt_templates = {} # Setze leeres Dict, um Absturz zu vermeiden, aber Agent wird nicht richtig funktionieren
except yaml.YAMLError as e:
print(f"FEHLER beim Lesen von prompts.yaml: {e}")
prompt_templates = {} # Setze leeres Dict
# --- Initialisiere den CodeAgent mit den hinzugefügten Tools ---
agent = CodeAgent(
model=model,
# *** HIER IST DIE WICHTIGE ÄNDERUNG ***
# Füge die Variablen/Funktionen der Tools zur Liste hinzu
tools=[
final_answer, # Nicht entfernen!
get_current_time_in_timezone, # Das Zeit-Tool (direkt die Funktion)
search_tool, # Das Web-Such-Tool (die erstellte Instanz)
image_generation_tool # Das Bildgenerierungs-Tool (die geladene Instanz)
# my_custom_tool # Könntest du auch hinzufügen, wenn du es benutzt
],
max_steps=6, # Maximale Anzahl an Zyklen (Thought/Action/Observation)
verbosity_level=1, # Wie gesprächig der Agent ist (0=wenig, 1=mittel, 2=viel)
grammar=None,
planning_interval=None,
name="MyFirstAgent", # Gib deinem Agenten einen Namen (optional)
description="An agent capable of checking time, searching the web, and generating images.", # Beschreibung (optional)
prompt_templates=prompt_templates # Übergib die geladenen Prompts
)
# --- Starte die Gradio Web-Oberfläche ---
# Stelle sicher, dass die GradioUI-Klasse korrekt importiert wurde
if 'GradioUI' in globals():
try:
ui = GradioUI(agent)
ui.launch() # Starte die UI
except Exception as e:
print(f"FEHLER beim Starten der Gradio UI: {e}")
else:
print("FEHLER: GradioUI konnte nicht importiert werdenn.")