AMdevIA/HFlearningPathAgent
0
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 