Initial commit: Air Agent Framework v2:全双工对话智能体(打断、插话、主动开口)
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
from __future__ import annotations
|
||||
from enum import Enum
|
||||
|
||||
from .kernel import EventBus, Event, EventType, AgentRuntime
|
||||
from .llm import LLMClient
|
||||
from .personality import Personality
|
||||
from .conversation import ConversationManager
|
||||
from .interruption import InterruptionEngine
|
||||
from .thinker import Thinker
|
||||
|
||||
|
||||
class AgentState(Enum):
|
||||
IDLE = "idle"
|
||||
THINKING = "thinking"
|
||||
RESPONDING = "responding"
|
||||
QUESTIONING = "questioning"
|
||||
WAITING_INPUT = "waiting_input"
|
||||
|
||||
|
||||
class Orchestrator:
|
||||
def __init__(
|
||||
self,
|
||||
runtime: AgentRuntime,
|
||||
llm: LLMClient,
|
||||
personality: Personality,
|
||||
conversation: ConversationManager,
|
||||
interruption: InterruptionEngine,
|
||||
thinker: Thinker,
|
||||
):
|
||||
self.runtime = runtime
|
||||
self.bus = runtime.bus
|
||||
self.llm = llm
|
||||
self.personality = personality
|
||||
self.conversation = conversation
|
||||
self.interruption = interruption
|
||||
self.thinker = thinker
|
||||
self.state = AgentState.IDLE
|
||||
self._response_task = None
|
||||
|
||||
async def generate_response(self, messages: list[dict]) -> str:
|
||||
system_prompt = self.personality.build_system_prompt()
|
||||
full = [{"role": "system", "content": system_prompt}] + messages
|
||||
resp = await self.llm.chat(full, stream=False)
|
||||
return resp.content
|
||||
|
||||
async def stream_response(self, messages: list[dict]) -> str:
|
||||
system_prompt = self.personality.build_system_prompt()
|
||||
full = [{"role": "system", "content": system_prompt}] + messages
|
||||
full_text = ""
|
||||
async for chunk in self.llm.chat_stream_iter(full):
|
||||
full_text += chunk
|
||||
await self.bus.emit(Event(
|
||||
EventType.AGENT_STREAM_CHUNK,
|
||||
{"chunk": chunk, "full": full_text},
|
||||
))
|
||||
return full_text
|
||||
|
||||
async def generate_single_response(self, messages: list[dict]) -> str:
|
||||
return await self.generate_response(messages)
|
||||
Reference in New Issue
Block a user