Smolagents / mock_smolagents.py
Jovynne's picture
Create mock_smolagents.py
866a942 verified
# mock_smolagents.py
# Minimal mock implementation for environments where smolagents is unavailable
from typing import Callable, List
def tool(func: Callable) -> Callable:
"""Mock @tool decorator"""
func.name = func.__name__
return func
class LiteLLMModel:
"""Mock LLM model"""
def __init__(self, model_id: str, api_key: str = None):
self.model_id = model_id
self.api_key = api_key
class ToolCallingAgent:
def __init__(
self,
model,
tools,
max_steps=5,
verbose=False,
add_base_tools=False,
):
self.tools = tools
self.verbose = verbose
def run(self, task: str) -> str:
task_lower = task.lower()
# -------- Calculator --------
if "calculate" in task_lower or any(op in task_lower for op in ["+", "-", "*", "/"]):
for tool in self.tools:
if tool.name == "calculator":
import re
expr = re.sub(r"[^\d\+\-\*\/\(\)\.\s]", "", task)
return tool(expr)
# -------- Dataset Info --------
if "dataset" in task_lower or "mnist" in task_lower or "glue" in task_lower:
for tool in self.tools:
if tool.name == "get_hf_dataset_info":
if "mnist" in task_lower:
return tool("mnist")
elif "glue" in task_lower:
return tool("glue")
return tool("mnist")
# -------- Translation --------
if "translate" in task_lower:
for tool in self.tools:
if tool.name == "translate_text":
try:
parts = task_lower.replace("translate", "").split("to")
text = parts[0].strip()
lang = parts[1].strip().title()
return tool(text, lang)
except Exception:
return tool("hello", "Spanish")
# -------- Web Search --------
if "search" in task_lower or "find" in task_lower:
for tool in self.tools:
if tool.name == "search_web":
query = task_lower.replace("search", "").replace("find", "").strip()
return tool(query)
# -------- Fallback --------
return (
"🤖 **Mock Agent Response**\n\n"
"I couldn’t understand the request.\n\n"
"Try:\n"
"- `calculate 2 + 2`\n"
"- `translate hello to French`\n"
"- `tell me about mnist dataset`\n"
"- `search machine learning`"
)