from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool, TransformersModel from smolagents.models.base import Model import datetime import requests import pytz import yaml from tools.final_answer import FinalAnswerTool import os from transformers import AutoTokenizer, AutoModelForCausalLM from Gradio_UI import GradioUI # Below is an example of a tool that does nothing. Amaze us with your creativity ! @tool def my_custom_tool(arg1:str, arg2:int)-> str: #it's import to specify the return type #Keep this format for the description / args / args description but feel free to modify the tool """A tool that does nothing yet Args: arg1: the first argument arg2: the second argument """ return "What magic will you build ?" @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: # Create timezone object tz = pytz.timezone(timezone) # Get current time in that 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)}" final_answer = FinalAnswerTool() # If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder: # model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud' with open("prompts.yaml", 'r') as stream: prompt_templates = yaml.safe_load(stream) # Carga del modelo gratuito (no requiere token si es público y el Space también lo es) model_name = "tiiuae/falcon-rw-1b" tokenizer = AutoTokenizer.from_pretrained(model_name) raw_model = AutoModelForCausalLM.from_pretrained(model_name) # Wrapper para adaptarlo a smolagents class FalconModel(Model): def __init__(self, raw_model, tokenizer, max_new_tokens=128): self.raw_model = raw_model self.tokenizer = tokenizer self.max_new_tokens = max_new_tokens def generate(self, messages, stop_sequences=None): # Combina el contenido de los mensajes en un prompt string prompt = "" for msg in messages: prompt += f"{msg['role']}: {msg['content']}\n" prompt += "assistant: " inputs = self.tokenizer(prompt, return_tensors="pt") outputs = self.raw_model.generate( **inputs, max_new_tokens=self.max_new_tokens, do_sample=True, top_p=0.95, temperature=0.8 ) text = self.tokenizer.decode(outputs[0], skip_special_tokens=True) # Si hay secuencias de parada, corta la salida ahí if stop_sequences: for stop_seq in stop_sequences: if stop_seq in text: text = text.split(stop_seq)[0] # Retornar un objeto con .content class Response: def __init__(self, content): self.content = content return Response(text.strip()) model = FalconWrapper(raw_model, tokenizer) # Instancia del agente agent = CodeAgent( model=model, tools=[final_answer], max_steps=6, verbosity_level=1, grammar=None, planning_interval=None, name=None, description=None, prompt_templates=prompt_templates ) # Interfaz de Gradio GradioUI(agent).launch()