|
from smolagents import tool |
|
|
|
@tool |
|
def final_answer(answer: str) -> str: |
|
""" |
|
Tool to provide the final, precise answer to a test question. |
|
|
|
IMPORTANT: This tool should receive only the direct answer without any explanations, |
|
prefixes like "The answer is", or additional formatting. |
|
|
|
Args: |
|
answer: The precise, direct answer (e.g., "42", "Paris", "Yes", "2023-10-15") |
|
|
|
Returns: |
|
The clean final answer string |
|
""" |
|
|
|
clean_answer = str(answer).strip() |
|
|
|
|
|
prefixes_to_remove = [ |
|
"the answer is ", |
|
"based on my research, ", |
|
"according to my findings, ", |
|
"the result is ", |
|
"my answer is ", |
|
"i found that ", |
|
"the correct answer is ", |
|
"after searching, ", |
|
] |
|
|
|
lower_answer = clean_answer.lower() |
|
for prefix in prefixes_to_remove: |
|
if lower_answer.startswith(prefix): |
|
clean_answer = clean_answer[len(prefix):] |
|
break |
|
|
|
|
|
if len(clean_answer.split()) == 1 and clean_answer.endswith('.'): |
|
clean_answer = clean_answer[:-1] |
|
|
|
return clean_answer.strip() |
|
|
|
class FinalAnswerTool: |
|
"""Compatibility class for the final answer tool""" |
|
|
|
def __call__(self, answer: str) -> str: |
|
result = final_answer(answer) |
|
if isinstance(result, str): |
|
return result |
|
elif isinstance(result, NotImplementedError): |
|
raise result |
|
else: |
|
return str(result) |
|
|