File size: 2,911 Bytes
34d197c 9d098dd 34d197c 9d098dd 34d197c 9d098dd 34d197c 9d098dd 34d197c 9d098dd |
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 |
import os
import logging
import sys
import smolagents
LOG = logging.getLogger(__name__)
SYSTEM_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.
Take the time to plan the steps to reach the solution. Show the steps and then execute the steps.
"""
# --- Basic Agent Definition ---
# ----- THIS IS WERE YOU CAN BUILD WHAT YOU WANT ------
class BasicAgent:
def __init__(self, model_id=None):
print("BasicAgent initialized.")
LOG.warning("logging BasicAgent initialized.")
if model_id:
self.model_id = model_id
else:
self.model_id = "HuggingFaceTB/SmolLM2-1.7B-Instruct"
# Run locally.
self.model = smolagents.TransformersModel(
model_id=self.model_id,
max_new_tokens=8000,
)
#self.model = smolagents.HfApiModel(
# max_tokens=8000,
# temperature=0.1,
# model_id=self.model_id,
# custom_role_conversions=None,
# )
ddg = smolagents.DuckDuckGoSearchTool()
self.tools = [smolagents.DuckDuckGoSearchTool(), smolagents.VisitWebpageTool(), smolagents.FinalAnswerTool()]
self.search_agent = smolagents.CodeAgent(
name="search_agent",
description="Search the web",
model=self.model,
tools=self.tools,
max_steps=6,
verbosity_level=2,
planning_interval=None,
additional_authorized_imports=["duckduckgo_search"],
)
self.manager_agent = smolagents.CodeAgent(
name="manager_agent",
description="Manger of other agents",
tools=[smolagents.FinalAnswerTool()],
model=self.model,
max_steps=6,
verbosity_level=2,
planning_interval=None,
additional_authorized_imports=["duckduckgo_search"],
managed_agents=[self.search_agent]
)
def __call__(self, question: str) -> str:
print(f"Agent received question (first 50 chars): {question[:50]}...")
prompt = f"{SYSTEM_PROMPT}\n\n{question}"
answer = self.manager_agent.run(prompt)
LOG.warning(f"{answer=}")
return answer
|