feat: enhance agent orchestration, knowledge flow and UI refinements

This commit is contained in:
2026-03-29 20:31:13 +08:00
parent d85cb9cf35
commit e0fe3ca623
301 changed files with 1197804 additions and 7863 deletions

View File

@@ -1,32 +1,19 @@
from dataclasses import dataclass
from typing import TypedDict, Annotated
from dataclasses import dataclass, field
from typing import TypedDict, Annotated, Sequence
from enum import Enum
from langchain_core.messages import HumanMessage
from langchain_core.messages import BaseMessage
from langgraph.graph.message import add_messages
class AgentRole(str, Enum):
MASTER = "master"
PLANNER = "planner"
SCHEDULE_PLANNER = "schedule_planner"
EXECUTOR = "executor"
LIBRARIAN = "librarian"
ANALYST = "analyst"
@dataclass
class AgentInfo:
name: str
role: AgentRole
description: str
@dataclass
class ToolCall:
tool: str
args: dict
result: str | None = None
@dataclass
class ConversationTurn:
role: str # "user" | "assistant"
@@ -35,60 +22,41 @@ class ConversationTurn:
model: str | None = None
def turn_to_message(turn: ConversationTurn) -> HumanMessage:
return HumanMessage(content=turn.content)
def message_to_turn(msg, agent: AgentRole | None = None) -> ConversationTurn:
msg_type = getattr(msg, "type", None) or getattr(msg, "role", "assistant")
return ConversationTurn(
role="user" if msg_type in ("human", "user") else "assistant",
content=msg.content,
agent=agent,
model=getattr(msg, "model", None),
)
class AgentState(TypedDict):
messages: Annotated[list, None]
# Core message history with add_messages reducer
messages: Annotated[list[BaseMessage], add_messages]
# Session identifiers
user_id: str
conversation_id: str
# Agent routing
current_agent: AgentRole
active_agents: list[AgentRole]
current_sub_commander: str | None
active_sub_commanders: list[str]
sub_commander_trace: list[dict]
# Task tracking
# Agent routing state
current_agent: str | None
next_step: str | None # For explicit graph routing
# Traceability
agent_trace: list[str]
# Task & Entity Tracking (Business Logic)
pending_tasks: list[dict]
completed_tasks: list[dict]
created_entities: list[dict]
# Tool usage
tool_calls: list[ToolCall]
last_tool_result: str | None
# Knowledge context
# Context summaries (for long-term or cross-agent context)
knowledge_context: str | None
graph_context: str | None
# Planning
plan: str | None
plan_steps: list[dict]
# Analysis
schedule_context_summary: str | None
analysis_report: str | None
# Output control
final_response: str | None
should_respond: bool
# Memory context (injected at start of each conversation)
# Memory & Environment
memory_context: str | None
# User LLM config (for using user-configured models)
current_datetime_context: str | None
# Configuration
user_llm_config: dict | None
provider_capabilities: dict | None
def initial_state(user_id: str, conversation_id: str) -> AgentState:
@@ -96,22 +64,18 @@ def initial_state(user_id: str, conversation_id: str) -> AgentState:
messages=[],
user_id=user_id,
conversation_id=conversation_id,
current_agent=AgentRole.MASTER,
active_agents=[AgentRole.MASTER],
current_sub_commander=None,
active_sub_commanders=[],
sub_commander_trace=[],
current_agent=AgentRole.MASTER.value,
next_step=None,
agent_trace=[AgentRole.MASTER.value],
pending_tasks=[],
completed_tasks=[],
tool_calls=[],
last_tool_result=None,
created_entities=[],
knowledge_context=None,
graph_context=None,
plan=None,
plan_steps=[],
schedule_context_summary=None,
analysis_report=None,
final_response=None,
should_respond=True,
memory_context=None,
current_datetime_context=None,
user_llm_config=None,
provider_capabilities=None,
)