Spaces:
Sleeping
Sleeping
| import json | |
| from langchain_core.messages import SystemMessage, HumanMessage | |
| from src.utils.config import get_llm | |
| from src.utils.prompt_loader import load_prompt | |
| from src.schema import HybridState, AgentState | |
| def planner_node(state: AgentState): | |
| state_wrapper = HybridState(state) | |
| topic = state_wrapper.get("topic") | |
| # Load your existing SOTA prompt | |
| system_prompt = load_prompt("planner.yaml") | |
| messages = [ | |
| SystemMessage(content=system_prompt), | |
| HumanMessage(content=f"Topic: {topic}") | |
| ] | |
| # Use Groq for speed | |
| llm = get_llm("planning") | |
| response = llm.invoke(messages) | |
| # Robust JSON parsing | |
| content = response.content.strip() | |
| if "```json" in content: | |
| content = content.split("```json")[1].split("```")[0] | |
| try: | |
| data = json.loads(content) | |
| outline = data.get("outline", "") | |
| # Ensure outline is string | |
| if isinstance(outline, list): | |
| outline = "\n".join(outline) | |
| return { | |
| "hook": data.get("hook"), | |
| "outline": outline, | |
| "cta": data.get("cta") | |
| } | |
| except: | |
| # Fallback if JSON fails | |
| return {"outline": content, "hook": f"News: {topic}"} | |