AgentTools / HFHub.py
Brunwo
add HF Token and load .env (local)
719e83e
#%%writefile HFHub.py
#utility file
from typing import List, Set
from smolagents.default_tools import __all__ as dft_tools
from huggingface_hub import login, InferenceClient
import logging
from smolagents import ToolCollection
from smolagents import HfApiModel, CodeAgent, Tool, LiteLLMModel
from smolagents import ToolCollection
from smolagents import HfApiModel, CodeAgent, Tool
publishtoken = None;
tool_Collections: dict[str, ToolCollection] = {}
loaded_tools: Set[Tool] = set()
#kueep separate list, maybe should only refer to agent tools merged list ?
# def all_tools_names2() -> list[Tool]:
# all_tools = []
# for collection in tool_Collections.values():
# if isinstance(collection, ToolCollection):
# for tool in collection.tools:
# all_tools.append(tool.name) #new we return key, not the tool
# else:
# for tool in collection: # base tools : only keys str
# all_tools.append(tool)
# return all_tools
def filter_tools(tools):
base_tools_names = ['web search']
filtered_tools = [tool for tool in tools if tool not in base_tools_names]
logging.warning(f"Number of tools after filtering: {len(filtered_tools)}") # Log the result
return filtered_tools
additional_authorized_imports=["smolagents","subprocess","typing","os", "inspect","open", "requests"]
litellm_api_keys = {
'xai': '',
'HF': '',
'grok': '',
'anthropic': '',
'openAI': '',
# ...
}
def get_litellm_api_key(key_name):
return litellm_api_keys.get(key_name, '')
def login_for_publication() :
login(publishtoken)
def load_collection_from_space(agent :CodeAgent, collection_slug: str = "Mightypeacock/agent-tools-6777c9699c231b7a1e87fa31" ) -> ToolCollection:
if collection_slug not in tool_Collections: #or overwite ?
tool_collection = ToolCollection(
collection_slug=collection_slug,
# token=publishtoken,
trust_remote_code=True
)
# tool_Collections[collection_slug] = tool_collection
#replace this by slug > tools names:
tool_Collections[collection_slug] = [tool.name for tool in tool_collection.tools]
for tool in tool_collection.tools:
if agent.tools.get(tool.name) is None: #or overwrite ?
agent.tools[tool.name]=tool
loaded_tools.add(tool)
else:
agent.tools[tool.name]=tool
return all_tools_names2()
def all_tools() -> List[Tool]:
return list(loaded_tools)
def createAgent():
agent = CodeAgent(
tools=filter_tools(all_tools()),
model=HfApiModel(
# Model configuration can be added here
),
additional_authorized_imports=additional_authorized_imports,
add_base_tools=True,
planning_interval=None,
)
# Update the base tools collection
for tool in agent.tools: # Changed from agent.toolbox.tools.values() to agent.tools
if tool not in all_tools():
if "base tools" not in tool_Collections:
tool_Collections["base tools"] = []
tool_Collections["base tools"].append(tool)
logging.debug(f"Base tool added: {tool}") # Debug line
return agent