| | 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) |
| |
|