|
|
from __future__ import annotations
|
|
|
|
|
|
import uuid
|
|
|
from typing import Optional
|
|
|
from pydantic import BaseModel
|
|
|
from contextvars import ContextVar
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GlobalBaselineState(BaseModel):
|
|
|
conversation_id: Optional[str] = None
|
|
|
baseline_task_id: Optional[str] = None
|
|
|
|
|
|
|
|
|
GLOBAL_BASELINE = GlobalBaselineState()
|
|
|
|
|
|
|
|
|
|
|
|
class BridgeState(BaseModel):
|
|
|
conversation_id: Optional[str] = None
|
|
|
baseline_task_id: Optional[str] = None
|
|
|
tool_call_id: Optional[str] = None
|
|
|
tool_message_id: Optional[str] = None
|
|
|
|
|
|
|
|
|
|
|
|
_state_context: ContextVar[BridgeState] = ContextVar('bridge_state', default=BridgeState())
|
|
|
|
|
|
|
|
|
def get_state() -> BridgeState:
|
|
|
"""获取当前请求的状态"""
|
|
|
return _state_context.get()
|
|
|
|
|
|
|
|
|
def set_state(state: BridgeState) -> None:
|
|
|
"""设置当前请求的状态"""
|
|
|
_state_context.set(state)
|
|
|
|
|
|
|
|
|
def ensure_tool_ids():
|
|
|
"""确保工具ID存在"""
|
|
|
state = get_state()
|
|
|
if not state.tool_call_id:
|
|
|
state.tool_call_id = str(uuid.uuid4())
|
|
|
if not state.tool_message_id:
|
|
|
state.tool_message_id = str(uuid.uuid4())
|
|
|
set_state(state)
|
|
|
|
|
|
|
|
|
|
|
|
class _StateProxy:
|
|
|
@property
|
|
|
def conversation_id(self):
|
|
|
return get_state().conversation_id
|
|
|
|
|
|
@conversation_id.setter
|
|
|
def conversation_id(self, value):
|
|
|
state = get_state()
|
|
|
state.conversation_id = value
|
|
|
set_state(state)
|
|
|
|
|
|
@property
|
|
|
def baseline_task_id(self):
|
|
|
return get_state().baseline_task_id
|
|
|
|
|
|
@baseline_task_id.setter
|
|
|
def baseline_task_id(self, value):
|
|
|
state = get_state()
|
|
|
state.baseline_task_id = value
|
|
|
set_state(state)
|
|
|
|
|
|
@property
|
|
|
def tool_call_id(self):
|
|
|
return get_state().tool_call_id
|
|
|
|
|
|
@tool_call_id.setter
|
|
|
def tool_call_id(self, value):
|
|
|
state = get_state()
|
|
|
state.tool_call_id = value
|
|
|
set_state(state)
|
|
|
|
|
|
@property
|
|
|
def tool_message_id(self):
|
|
|
return get_state().tool_message_id
|
|
|
|
|
|
@tool_message_id.setter
|
|
|
def tool_message_id(self, value):
|
|
|
state = get_state()
|
|
|
state.tool_message_id = value
|
|
|
set_state(state)
|
|
|
|
|
|
|
|
|
STATE = _StateProxy()
|
|
|
|