Spaces:
Sleeping
Sleeping
import pandas as pd | |
from smolagents import Tool | |
from typing import Any, Dict, Optional | |
class ReverseTextTool(Tool): | |
name = "reverse_text" | |
description = "Reverses the input text." | |
# tell the validator: I’m expecting a dict with key "text" | |
inputs = {"input": {"type": "any", "description": "The text to be reversed"}} | |
output_type = "string" | |
def forward(self, input: Any) -> Any: | |
return input[::-1] | |
class TableCommutativityTool(Tool): | |
name = "find_non_commutative_elements" | |
description = ( | |
"Given a multiplication table (2D list) and its header elements, " | |
"returns the elements involved in any a*b != b*a." | |
) | |
inputs = { | |
"input": { | |
"type": "any", | |
"description": "Dict with keys 'table' (list of lists) and 'elements' (list of strings)." | |
} | |
} | |
output_type = "string" | |
def forward(self, input: dict) -> list[str]: | |
table = input["table"] | |
elements = input["elements"] | |
non_comm = set() | |
for i, a in enumerate(elements): | |
for j, b in enumerate(elements): | |
if table[i][j] != table[j][i]: | |
non_comm.update({a, b}) | |
return str(sorted(non_comm)) | |
class VegetableListTool(Tool): | |
name = "list_vegetables" | |
description = ( | |
"From a list of grocery items, returns those that are true vegetables " | |
"(botanical definition), sorted alphabetically." | |
) | |
inputs = { | |
"input": { | |
"type": "any", | |
"description": "Dict with key 'items' containing a list of item strings." | |
} | |
} | |
output_type = "string" | |
_VEG_SET = { | |
"broccoli", "bell pepper", "celery", "corn", | |
"green beans", "lettuce", "sweet potatoes", "zucchini" | |
} | |
def forward(self, input: Any) -> Any: | |
items = input["items"] | |
return str(sorted(item for item in items if item in self._VEG_SET)) | |
class ExcelSumFoodTool(Tool): | |
name = "sum_food_sales" | |
description = ( | |
"Reads an Excel file with columns 'Category' and 'Sales', " | |
"and returns total sales where Category != 'Drink', rounded to two decimals." | |
) | |
inputs = { | |
"input": { | |
"type": "any", | |
"description": "Dict with key 'excel_path' pointing to the .xlsx file to read." | |
} | |
} | |
output_type = "string" | |
def forward(self, input: Any) -> Any: | |
excel_path = input["excel_path"] | |
df = pd.read_excel(excel_path) | |
total = df.loc[df["Category"] != "Drink", "Sales"].sum() | |
return str(round(float(total), 2)) | |