Spaces:
Sleeping
Sleeping
Commit ·
ed46021
1
Parent(s): 7202f20
Initial commit
Browse files
graph.py
CHANGED
|
@@ -18,6 +18,7 @@ from prompts import SUPERVISOR_PROMPT, ADS_ANALYST_PROMPT
|
|
| 18 |
class AgentState(TypedDict):
|
| 19 |
messages: Annotated[list[BaseMessage], add_messages]
|
| 20 |
next_node: str
|
|
|
|
| 21 |
|
| 22 |
# ==========================================
|
| 23 |
# 2. ИНИЦИАЛИЗАЦИЯ LLM (OpenRouter)
|
|
@@ -45,7 +46,7 @@ async def ads_node(state: AgentState):
|
|
| 45 |
# Отдаем агенту готовый массив
|
| 46 |
result = await ads_agent_runnable.ainvoke({"messages": messages_with_prompt})
|
| 47 |
|
| 48 |
-
return {"messages": [result["messages"][-1]]}
|
| 49 |
|
| 50 |
# ==========================================
|
| 51 |
# 4. УЗЕЛ: СУПЕРВАЙЗЕР (Оркестратор)
|
|
@@ -54,9 +55,12 @@ class RouterOutput(BaseModel):
|
|
| 54 |
next_node: Literal["Ads_Analyst", "FINISH"]
|
| 55 |
|
| 56 |
async def supervisor_node(state: AgentState):
|
|
|
|
|
|
|
|
|
|
| 57 |
messages = [SystemMessage(content=SUPERVISOR_PROMPT)] + state["messages"]
|
| 58 |
response = await llm.with_structured_output(RouterOutput).ainvoke(messages)
|
| 59 |
-
return {"next_node": response.next_node}
|
| 60 |
|
| 61 |
# ==========================================
|
| 62 |
# 5. СБОРКА ГРАФА СОСТОЯНИЙ
|
|
|
|
| 18 |
class AgentState(TypedDict):
|
| 19 |
messages: Annotated[list[BaseMessage], add_messages]
|
| 20 |
next_node: str
|
| 21 |
+
agent_responded: bool
|
| 22 |
|
| 23 |
# ==========================================
|
| 24 |
# 2. ИНИЦИАЛИЗАЦИЯ LLM (OpenRouter)
|
|
|
|
| 46 |
# Отдаем агенту готовый массив
|
| 47 |
result = await ads_agent_runnable.ainvoke({"messages": messages_with_prompt})
|
| 48 |
|
| 49 |
+
return {"messages": [result["messages"][-1]], "agent_responded": True}
|
| 50 |
|
| 51 |
# ==========================================
|
| 52 |
# 4. УЗЕЛ: СУПЕРВАЙЗЕР (Оркестратор)
|
|
|
|
| 55 |
next_node: Literal["Ads_Analyst", "FINISH"]
|
| 56 |
|
| 57 |
async def supervisor_node(state: AgentState):
|
| 58 |
+
# Если агент уже ответил — детерминированно завершаем, без вызова LLM
|
| 59 |
+
if state.get("agent_responded"):
|
| 60 |
+
return {"next_node": "FINISH", "agent_responded": False}
|
| 61 |
messages = [SystemMessage(content=SUPERVISOR_PROMPT)] + state["messages"]
|
| 62 |
response = await llm.with_structured_output(RouterOutput).ainvoke(messages)
|
| 63 |
+
return {"next_node": response.next_node, "agent_responded": False}
|
| 64 |
|
| 65 |
# ==========================================
|
| 66 |
# 5. СБОРКА ГРАФА СОСТОЯНИЙ
|