Spaces:
Running
Running
| from __future__ import annotations | |
| import time | |
| from ..state import AgentState | |
| from ..models import LLMClient, WRITER_PROMPT_TEMPLATE | |
| from ..tools import get_logger, log_state_summary | |
| logger = get_logger() | |
| def writer_node(state: AgentState) -> AgentState: | |
| start = time.time() | |
| topic = state.get("topic", "") | |
| snippets = state.get("research_snippets", []) or [] | |
| joined_snippets = "\n\n".join( | |
| f"- {s['snippet']} (source: {s['title']} – {s['url']})" for s in snippets | |
| ) | |
| client = LLMClient() | |
| system_prompt = "You are a precise and structured writer who follows instructions carefully." | |
| user_prompt = WRITER_PROMPT_TEMPLATE.format(topic=topic, snippets=joined_snippets) | |
| logger.info("Writer: generating first draft...") | |
| draft = client.generate(system_prompt=system_prompt, user_prompt=user_prompt) | |
| meta = state.get("meta", {}) or {} | |
| meta["writer_time_sec"] = round(time.time() - start, 3) | |
| new_state: AgentState = { | |
| **state, | |
| "draft": draft, | |
| "meta": meta, | |
| } | |
| log_state_summary(new_state, prefix="Writer") | |
| return new_state | |