Spaces:
Sleeping
Sleeping
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}"
|