File size: 4,013 Bytes
422a94c
 
9b5b26a
 
 
c19d193
422a94c
 
8fe992b
422a94c
9b5b26a
422a94c
 
9b5b26a
 
 
 
 
 
422a94c
9b5b26a
 
 
 
 
 
 
 
 
 
 
 
8c01ffb
422a94c
6aae614
422a94c
 
 
 
ae7a494
422a94c
 
5d95245
 
ae7a494
e121372
422a94c
 
 
 
13d500a
8c01ffb
422a94c
 
 
 
 
 
 
 
 
 
8c01ffb
422a94c
8c01ffb
8fe992b
422a94c
 
 
 
 
 
 
 
 
 
 
8c01ffb
 
422a94c
 
 
8fe992b
 
422a94c
 
 
 
 
 
 
 
 
c9e689b
9b5b26a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 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.")