Spaces:
Sleeping
Sleeping
| from langchain_core.tools import tool | |
| from typing import Optional | |
| from app.vectordatabase.pinecone import retriever | |
| from app.schemas.roadmap_agent_tools_argschema import LearningRoadmap,SearchCourse | |
| import json | |
| from typing import Dict, List,Any | |
| from pathlib import Path | |
| from typing import Annotated | |
| from langchain_core.messages import ToolMessage | |
| from langgraph.types import Command | |
| from langchain_core.tools import InjectedToolCallId | |
| BASE_DIR = Path(__file__).resolve().parent | |
| def search_courses(query: str): | |
| """ | |
| Search the course catalog for relevant modules based on a skill query | |
| """ | |
| results = retriever.invoke( | |
| query | |
| ) | |
| if not results: | |
| return f"No courses found for '{query}'." | |
| formatted_output = [] | |
| for doc in results: | |
| course_id = doc.metadata.get('course_id', 'N/A') | |
| course_block = ( | |
| f"ID: {course_id}\n" | |
| f"{doc.page_content}\n" | |
| "---" | |
| ) | |
| formatted_output.append(course_block) | |
| return "\n".join(formatted_output) | |
| def submit_final_roadmap( | |
| candidate_name, | |
| target_role, | |
| roadmap, | |
| onboarding_summary, | |
| tool_call_id: Annotated[str, InjectedToolCallId] # Injected automatically | |
| ): | |
| """ | |
| STRICTLY call this tool to submit the final structured learning roadmap. | |
| """ | |
| # 1. Construct the structured JSON | |
| result_data = { | |
| "candidate_name": candidate_name, | |
| "target_role": target_role, | |
| "onboarding_summary": onboarding_summary, | |
| "roadmap": [ | |
| step.model_dump() if hasattr(step, "model_dump") else step | |
| for step in roadmap | |
| ] | |
| } | |
| # 2. Return Command to update "final_roadmap" in state | |
| return Command( | |
| update={ | |
| "final_roadmap": result_data, # This updates your state key | |
| "messages": [ | |
| ToolMessage( | |
| content="SUCCESS: Final roadmap has been submitted and saved to state.", | |
| tool_call_id=tool_call_id | |
| ) | |
| ] | |
| } | |
| ) | |
| def submit_mermaid_visualization( | |
| mermaid_code: str, | |
| tool_call_id: Annotated[str, InjectedToolCallId] # Automatically injected by ToolNode | |
| ): | |
| """ | |
| STRICTLY call this tool to save the Mermaid.js visualization of the roadmap. | |
| """ | |
| if not mermaid_code: | |
| return "No Mermaid visualization found." | |
| # Return Command to update the state key 'mermaid_code' | |
| return Command( | |
| update={ | |
| "mermaid_code": mermaid_code, # Updates your graph state | |
| "messages": [ | |
| ToolMessage( | |
| content="SUCCESS: Mermaid visualization saved successfully.", | |
| tool_call_id=tool_call_id | |
| ) | |
| ] | |
| } | |
| ) | |
| roadmap_planner_agent_tools=[search_courses,submit_final_roadmap,submit_mermaid_visualization] | |