feat: expose agent collaboration metadata
This commit is contained in:
@@ -26,6 +26,26 @@ class AgentService:
|
||||
def __init__(self, db: Optional[AsyncSession] = None):
|
||||
self._db = db
|
||||
self.llm_service = LLMService(db)
|
||||
|
||||
def _agent_collaboration_metadata(self, agent: Agent) -> Dict[str, Any]:
|
||||
metadata = {
|
||||
"agent_id": str(agent.id),
|
||||
"agent_code": agent.code,
|
||||
"agent_name": agent.name,
|
||||
"collaboration_role": agent.name or agent.code,
|
||||
"collaboration_mode": agent.mode,
|
||||
}
|
||||
if agent.model_id:
|
||||
metadata["model_id"] = str(agent.model_id)
|
||||
return {key: value for key, value in metadata.items() if value}
|
||||
|
||||
def _attach_agent_collaboration(self, event: Dict[str, Any], agent: Agent) -> Dict[str, Any]:
|
||||
enriched = dict(event)
|
||||
collaboration = dict(enriched.get("collaboration") or {})
|
||||
for key, value in self._agent_collaboration_metadata(agent).items():
|
||||
collaboration.setdefault(key, value)
|
||||
enriched["collaboration"] = collaboration
|
||||
return enriched
|
||||
|
||||
async def chat(
|
||||
self,
|
||||
@@ -52,12 +72,15 @@ class AgentService:
|
||||
"""
|
||||
if agent.mode == 'autonomous':
|
||||
async for event in self._chat_autonomous(agent, conversation, user_message, attachments):
|
||||
yield event
|
||||
yield self._attach_agent_collaboration(event, agent)
|
||||
elif agent.mode == 'dialog_flow':
|
||||
async for event in self._chat_dialog_flow(agent, conversation, user_message, application_id, form_code, attachments):
|
||||
yield event
|
||||
yield self._attach_agent_collaboration(event, agent)
|
||||
else:
|
||||
yield {'type': 'error', 'content': f'不支持的模式: {agent.mode}'}
|
||||
yield self._attach_agent_collaboration(
|
||||
{'type': 'error', 'content': f'不支持的模式: {agent.mode}'},
|
||||
agent,
|
||||
)
|
||||
|
||||
async def _chat_autonomous(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user