CoolFace
Apppublic

AMdevIA/HFlearningPathAgent

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
final_answer.py68 linesDownload Raw Back to tools
1from smolagents.tools import Tool2 3class FinalAnswerTool(Tool):4    def __init__(self):5 6        self.name="final_answer"7        self.description="Provides the final response to the user"8        self.inputs = {9            'answer': {10                'type': 'any', 11                'description': 'The final answer to provide to the user'12            }13        }14        self.output_type="string"15 16        super().__init__()17 18 19    def forward(self, answer):20        # If it's a learning path dictionary, format it nicely21        if isinstance(answer, dict) and 'title' in answer:22            formatted_answer = f"# {answer.get('title', 'Learning Path')}\n\n"23            formatted_answer += f"**Level:** {answer.get('level', 'N/A')}\n"24            formatted_answer += f"**Duration:** {answer.get('estimated_duration', 'N/A')}\n\n"25            26            # Handle both 'modules' and 'module' keys (there seems to be an inconsistency)27            modules = answer.get('modules', answer.get('module', []))28            29            for i, module in enumerate(modules, 1):30                formatted_answer += f"## Module {i}: {module.get('title', 'Untitled')}\n\n"31                formatted_answer += f"*{module.get('description', '')}*\n\n"32                33                # Handle both 'resources' and 'ressources' keys34                resources = module.get('resources', module.get('ressources', []))35                36                for j, resource in enumerate(resources, 1):37                    formatted_answer += f"### {j}. {resource.get('title', 'Untitled Resource')}\n"38                    39                    if 'link' in resource:40                        formatted_answer += f"**Link:** [{resource.get('link')}]({resource.get('link')})\n"41                    42                    formatted_answer += f"**Type:** {resource.get('type', 'N/A')}\n"43                    44                    if 'level' in resource:45                        formatted_answer += f"**Level:** {resource.get('level', 'N/A')}\n"46                    47                    if 'estimated_time' in resource:48                        # Handle if estimated_time is accidentally a tuple49                        est_time = resource.get('estimated_time')50                        if isinstance(est_time, tuple) and len(est_time) > 0:51                            est_time = est_time[0]52                        formatted_answer += f"**Time:** {est_time}\n"53                    54                    if 'description' in resource:55                        formatted_answer += f"\n{resource.get('description')}\n"56                    57                    if 'suggested_steps' in resource:58                        formatted_answer += "\n**Steps:**\n"59                        for step in resource.get('suggested_steps', []):60                            formatted_answer += f"- {step}\n"61                    62                    formatted_answer += "\n"63            64            return formatted_answer65 66        # For any other type of answer, just return as is67        return str(answer)68