File size: 4,497 Bytes
13755f8
b7bf79a
 
c3c803a
b7bf79a
 
 
 
 
 
 
 
 
bf58062
21e96d1
 
b7bf79a
 
 
 
 
 
 
 
 
 
 
21e96d1
 
b7bf79a
 
 
 
 
21e96d1
b7bf79a
15b9880
b7bf79a
 
 
 
21e96d1
b7bf79a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b6da6a3
b7bf79a
 
21e96d1
b7bf79a
 
 
 
 
 
 
 
 
 
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
import os
import torch
from huggingface_hub import InferenceClient

# Importera smolagents komponenter
from smolagents import ToolCallingAgent, Tool, InferenceClientModel

# Importera dina befintliga, anpassade verktygsfunktioner
# Se till att dessa filer (tavily_search.py, asr_tool.py, etc.) finns i samma katalog eller är korrekt importerbara.
from tavily_search import search_tavily
from asr_tool import transcribe_audio
from excel_tool import analyze_excel
from math_tool import calculate_math

class GaiaAgent:
    def __init__(self, model_id: str = "google/gemma-2b-it"):
        """
        Initialiserar GaiaAgent, som nu använder smolagents.ToolCallingAgent internt.
        """
        print(f"Initialiserar GaiaAgent med modell: {model_id}")

        # Säkerställ att Hugging Face token är tillgänglig från miljön
        hf_token = os.getenv("HF_TOKEN") or os.getenv("HUGGING_FACE_HUB_TOKEN")
        if not hf_token:
            raise ValueError(
                "Hugging Face token (HF_TOKEN eller HUGGING_FACE_HUB_TOKEN) är inte konfigurerad i miljövariabler."
                "Vänligen lägg till din token som en 'Repository secret' i dina Space-inställningar."
            )

        # Initialisera InferenceClientModel för att kommunicera med Hugging Face Inference API
        try:
            # InferenceClientModel ansluter till en fjärrmodell, så lokal laddning av tokenizer/modell tas bort.
            self.llm_model = InferenceClientModel(
                model=InferenceClient(model=model_id, token=hf_token)
            )
            print("InferenceClientModel laddad framgångsrikt.")
        except Exception as e:
            raise RuntimeError(
                f"Misslyckades att initialisera InferenceClientModel: {e}."
                "Vänligen kontrollera din HF token och att modellen är tillgänglig/laddningsbar."
            )

        # Definiera dina anpassade verktyg som smolagents.Tool objekt
        # Detta gör dem kompatibla med ToolCallingAgent.
        tools_list = [
            Tool(
                name="search_tavily",
                description="Användbart för att söka information online med Tavily Search. Returnerar en sammanfattning av de mest relevanta resultaten från webben. Kräver en fråga som input.",
                function=search_tavily
            ),
            Tool(
                name="transcribe_audio",
                description="Transkriberar ljudfil till text. Användbart för att omvandla tal till text från en angiven ljudfilsväg. Kräver en filsökväg till ljudfilen som input.",
                function=transcribe_audio
            ),
            Tool(
                name="analyze_excel",
                description="Analysera Excel-filer och returnera detaljerad information om rader, kolumner, datatyper och statistik (summa, medelvärde, max, min för numeriska kolumner). Kan ta både en lokal filväg eller en URL till Excel-filen som input.",
                function=analyze_excel
            ),
            Tool(
                name="calculate_math",
                description="Beräkna matematiska uttryck. Användbart för att utföra aritmetiska operationer som addition, subtraktion, multiplikation, division och potenser. Tar ett matematiskt uttryck som en sträng som input.",
                function=calculate_math
            )
        ]
        print(f"Laddade {len(tools_list)} anpassade verktyg.")

        # Initialisera ToolCallingAgent med dina verktyg och din modell
        self.agent = ToolCallingAgent(
            tools=tools_list,
            model=self.llm_model,
            verbosity_level=2 # Ställ in detaljnivå för att se agentens tankeprocess
        )
        print("ToolCallingAgent initialiserad.")

    def process_task(self, task_prompt: str) -> str:
        """
        Bearbetar en uppgift med den interna ToolCallingAgent.
        Denna metod ersätter den tidigare manuella verktygsexekveringsloopen.
        """
        print(f"\nBearbetar uppgift med ToolCallingAgent: '{task_prompt}'")
        try:
            final_answer = self.agent.run(task_prompt)
            print(f"\nToolCallingAgent avslutad. Slutgiltigt svar: {final_answer}")
            return final_answer
        except Exception as e:
            error_message = f"Ett fel uppstod under agentens bearbetning: {e}"
            print(error_message)
            return f"Agenten kunde inte slutföra uppgiften på grund av ett fel: {error_message}"