Spaces:
Runtime error
Runtime error
from smolagents import CodeAgent, InferenceClientModel, WebSearchTool | |
import os | |
from dotenv import load_dotenv | |
load_dotenv() | |
# Configure the underlying LLM model for the agent | |
smol_model = InferenceClientModel(token=os.getenv("HF_TOKEN")) # You can choose to not pass any model_id to InferenceClientModel to use a default model | |
# you can also specify a particular provider e.g. provider="together" or provider="sambanova" | |
# Instantiate the CodeAgent with authorized imports for file operations | |
# WebSearchTool is kept as an example, you might want to add/remove tools as needed. | |
smol_code_agent_instance = CodeAgent( | |
tools=[WebSearchTool()], | |
model=smol_model, | |
add_base_tools=True, | |
additional_authorized_imports=["os", "io"] # Authorize os and io for file access | |
) | |
# This is the agent class that app.py will instantiate and use. | |
# It wraps the smolagents.CodeAgent. | |
class BasicAgent: | |
def __init__(self): | |
self.smol_agent = smol_code_agent_instance | |
print("BasicAgent (using smolagents.CodeAgent) initialized.") | |
def __call__(self, question: str, file_path: str | None = None) -> str: | |
print(f"BasicAgent received question (first 100 chars): {question[:100]}...") | |
task_description = question | |
run_additional_args = {} | |
if file_path: | |
print(f"BasicAgent received file_path: {file_path}") | |
# Augment the task description to inform the agent about the file | |
# and how to access it via additional_args. | |
task_description += ( | |
f"\n\nA file relevant to this task has been provided. " | |
f"You can access this file's content using standard Python file operations (e.g., open(), read()). " | |
f"The path to this file is available in the 'additional_args' dictionary, passed to the run method, under the key 'task_file'. " | |
f"The value is: '{file_path}'." | |
) | |
run_additional_args["additional_args"] = {"task_file": file_path} | |
print(f"Passing to smolagent: task='{task_description[:150]}...', additional_args={run_additional_args['additional_args']}") | |
else: | |
print("BasicAgent received no file_path.") | |
print(f"Passing to smolagent: task='{task_description[:150]}...'") | |
try: | |
# The CodeAgent's .run() method returns the final answer. | |
# Pass additional_args if they exist. | |
if run_additional_args: | |
answer = self.smol_agent.run(task_description, **run_additional_args) | |
else: | |
answer = self.smol_agent.run(task_description) | |
print(f"smolagents.CodeAgent returned: {str(answer)[:200]}...") # Log a snippet of the answer | |
return str(answer) # Ensure the output is a string | |
except Exception as e: | |
print(f"Error during smolagents.CodeAgent run: {e}") | |
# It's often good to return a more informative error message | |
return f"AGENT_ERROR: An error occurred while processing with CodeAgent: {str(e)}" | |
# Example test run (optional, can be commented out for deployment) | |
# if __name__ == '__main__': | |
# print("Testing CodeAgent with a simple task...") | |
# test_agent = BasicAgent() | |
# # Test without file | |
# # response = test_agent("What is the capital of France?") | |
# # print(f"Test response (no file): {response}") | |
# # To test with a file, you'd create a dummy file and pass its path: | |
# # with open("dummy_test_file.txt", "w") as f: | |
# # f.write("This is a test file for the agent.") | |
# # response_with_file = test_agent("Summarize the content of the provided file.", file_path="dummy_test_file.txt") | |
# # print(f"Test response (with file): {response_with_file}") | |
# # os.remove("dummy_test_file.txt") |