Spaces:
Sleeping
Sleeping
| import os | |
| from smolagents import CodeAgent, DuckDuckGoSearchTool, tool, InferenceClientModel, OpenAIServerModel, SpeechToTextTool, WikipediaSearchTool | |
| from dotenv import load_dotenv | |
| load_dotenv() | |
| OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") | |
| def add(a: int, b: int) -> int: | |
| """ | |
| Adds two numbers together. | |
| Args: | |
| a (int): The first number. | |
| b (int): The second number. | |
| Returns: | |
| int: The result of a + b. | |
| """ | |
| return a + b | |
| def subtract(a: int, b: int) -> int: | |
| """ | |
| Subtracts the second number from the first. | |
| Args: | |
| a (int): The number to subtract from. | |
| b (int): The number to subtract. | |
| Returns: | |
| int: The result of a - b. | |
| """ | |
| return a - b | |
| def multiply(a: int, b: int) -> int: | |
| """ | |
| Multiplies two numbers. | |
| Args: | |
| a (int): The first number. | |
| b (int): The second number. | |
| Returns: | |
| int: The product of a and b. | |
| """ | |
| return a * b | |
| def divide(a: int, b: int) -> float: | |
| """ | |
| Divides the first number by the second. | |
| Args: | |
| a (int): The numerator. | |
| b (int): The denominator. | |
| Returns: | |
| float: The result of a / b. | |
| Raises: | |
| ZeroDivisionError: If b is zero. | |
| """ | |
| return a / b | |
| prompt = "You are a general AI assistant. I will ask you a question. Report your thoughts, and finish your answer with the following template: FINAL ANSWER: [YOUR FINAL ANSWER]. YOUR FINAL ANSWER should be a number OR as few words as possible OR a comma separated list of numbers and/or strings. If you are asked for a number, don't use comma to write your number neither use units such as $ or percent sign unless specified otherwise. If you are asked for a string, don't use articles, neither abbreviations (e.g. for cities), and write the digits in plain text unless specified otherwise. If you are asked for a comma separated list, apply the above rules depending of whether the element to be put in the list is a number or a string." | |
| class BasicAgent: | |
| def __init__(self): | |
| print("BasicAgent initialized.") | |
| llm = OpenAIServerModel( | |
| model_id="gpt-4o", | |
| api_base="https://api.openai.com/v1", | |
| api_key=os.environ["OPENAI_API_KEY"], | |
| ) | |
| self.agent = CodeAgent( | |
| tools=[add,subtract,multiply,divide,DuckDuckGoSearchTool(),WikipediaSearchTool(),SpeechToTextTool()], | |
| model=llm, | |
| ) | |
| def __call__(self, question: str) -> str: | |
| print(f"Agent received question (first 50 chars): {question[:50]}...") | |
| # Prepend the prompt to the question with a clear separator | |
| full_input = prompt + "\n\nQuestion: " + question | |
| fixed_answer = self.agent.run(full_input) | |
| print(f"Agent returning fixed answer: {fixed_answer}") | |
| return fixed_answer |