mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-09 23:36:02 +00:00
refactor(agent-runner): remove protocol_version from various components and update related documentation
This commit is contained in:
@@ -124,7 +124,6 @@ class AgentRuntimeContext(typing.TypedDict):
|
||||
"""Agent runtime context."""
|
||||
|
||||
langbot_version: str | None
|
||||
protocol_version: str
|
||||
trace_id: str | None
|
||||
deadline_at: float | None
|
||||
metadata: dict[str, typing.Any]
|
||||
@@ -272,7 +271,6 @@ class AgentRunContextBuilder:
|
||||
# Build runtime context
|
||||
runtime: AgentRuntimeContext = {
|
||||
'langbot_version': self.ap.ver_mgr.get_current_version(),
|
||||
'protocol_version': descriptor.protocol_version,
|
||||
'trace_id': run_id,
|
||||
'deadline_at': self._build_deadline_from_binding(binding),
|
||||
'metadata': {
|
||||
@@ -424,6 +422,5 @@ class AgentRunContextBuilder:
|
||||
'artifact_read': artifact_read_enabled,
|
||||
'state': state_enabled,
|
||||
'storage': True,
|
||||
'prompt_get': False,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -36,9 +36,6 @@ class AgentRunnerDescriptor(pydantic.BaseModel):
|
||||
plugin_version: str | None = None
|
||||
"""Optional plugin version"""
|
||||
|
||||
protocol_version: str = '1'
|
||||
"""SDK protocol version, default '1'"""
|
||||
|
||||
config_schema: list[dict[str, typing.Any]] = []
|
||||
"""Configuration schema using DynamicForm format"""
|
||||
|
||||
@@ -69,4 +66,4 @@ class AgentRunnerDescriptor(pydantic.BaseModel):
|
||||
|
||||
def supports_knowledge_retrieval(self) -> bool:
|
||||
"""Check if runner supports knowledge retrieval."""
|
||||
return self.capabilities.get('knowledge_retrieval', False)
|
||||
return self.capabilities.get('knowledge_retrieval', False)
|
||||
|
||||
@@ -97,8 +97,6 @@ class AgentRunOrchestrator:
|
||||
session_query_id = adapter_context.get('query_id')
|
||||
if 'params' in adapter_context:
|
||||
context['adapter']['extra']['params'] = adapter_context['params']
|
||||
if adapter_context.get('prompt_get'):
|
||||
context['context']['available_apis']['prompt_get'] = True
|
||||
|
||||
state_context = build_state_context(event, binding, descriptor)
|
||||
run_id = context['run_id']
|
||||
|
||||
@@ -149,7 +149,6 @@ class QueryEntryAdapter:
|
||||
return {
|
||||
'params': cls.build_params(query),
|
||||
'query_id': getattr(query, 'query_id', None),
|
||||
'prompt_get': cls._has_effective_prompt(query),
|
||||
}
|
||||
|
||||
@classmethod
|
||||
@@ -187,12 +186,6 @@ class QueryEntryAdapter:
|
||||
)
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def _has_effective_prompt(cls, query: pipeline_query.Query) -> bool:
|
||||
prompt = getattr(query, 'prompt', None)
|
||||
messages = getattr(prompt, 'messages', None) if prompt is not None else None
|
||||
return isinstance(messages, list)
|
||||
|
||||
# Private helper methods
|
||||
|
||||
@classmethod
|
||||
|
||||
@@ -80,7 +80,7 @@ class AgentRunnerRegistry:
|
||||
runner_data: Raw runner data from plugin runtime with fields:
|
||||
- plugin_author, plugin_name, runner_name
|
||||
- manifest (full component manifest dict)
|
||||
- protocol_version, capabilities, permissions, config (extracted from spec)
|
||||
- capabilities, permissions, config (extracted from spec)
|
||||
|
||||
Returns:
|
||||
AgentRunnerDescriptor if valid, None if invalid
|
||||
@@ -114,7 +114,6 @@ class AgentRunnerRegistry:
|
||||
|
||||
# SDK now provides these directly extracted from spec. Fall back to
|
||||
# manifest.spec for older runtimes/tests that return the raw manifest.
|
||||
protocol_version = runner_data.get('protocol_version') or spec.get('protocol_version', '1')
|
||||
config_schema = runner_data.get('config') or spec.get('config', [])
|
||||
capabilities = runner_data.get('capabilities') or spec.get('capabilities', {})
|
||||
permissions = runner_data.get('permissions') or spec.get('permissions', {})
|
||||
@@ -136,7 +135,6 @@ class AgentRunnerRegistry:
|
||||
plugin_name=plugin_name,
|
||||
runner_name=runner_name,
|
||||
plugin_version=runner_data.get('plugin_version'),
|
||||
protocol_version=protocol_version,
|
||||
config_schema=config_schema,
|
||||
capabilities=capabilities,
|
||||
permissions=permissions,
|
||||
|
||||
@@ -378,25 +378,6 @@ def _resolve_remove_think(data: dict[str, Any], query: Any | None) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
def _dump_prompt_messages(query: Any) -> list[dict[str, Any]]:
|
||||
"""Serialize the current effective prompt from a cached Query."""
|
||||
prompt = getattr(query, 'prompt', None)
|
||||
messages = getattr(prompt, 'messages', None) if prompt is not None else None
|
||||
if not isinstance(messages, list):
|
||||
return []
|
||||
|
||||
dumped: list[dict[str, Any]] = []
|
||||
for message in messages:
|
||||
if hasattr(message, 'model_dump'):
|
||||
try:
|
||||
dumped.append(message.model_dump(mode='json'))
|
||||
except TypeError:
|
||||
dumped.append(message.model_dump())
|
||||
elif isinstance(message, dict):
|
||||
dumped.append(message)
|
||||
return dumped
|
||||
|
||||
|
||||
def _merge_model_extra_args(model: Any, call_extra_args: Any) -> dict[str, Any]:
|
||||
"""Merge persisted model extra_args with action-level overrides."""
|
||||
merged: dict[str, Any] = {}
|
||||
@@ -1250,7 +1231,7 @@ class RuntimeConnectionHandler(handler.Handler):
|
||||
except Exception as e:
|
||||
return _make_rag_error_response(e, 'VectorStoreError', collection_id=collection_id)
|
||||
|
||||
@self.action(PluginToRuntimeAction.GET_KNOWLEDGE_FILE_STREAM)
|
||||
@self.action(PluginToRuntimeAction.GET_KNOWLEDEGE_FILE_STREAM)
|
||||
async def get_knowledge_file_stream(data: dict[str, Any]) -> handler.ActionResponse:
|
||||
storage_path = data['storage_path']
|
||||
try:
|
||||
@@ -1458,32 +1439,6 @@ class RuntimeConnectionHandler(handler.Handler):
|
||||
|
||||
# ================= Agent History/Event APIs =================
|
||||
|
||||
@self.action(PluginToRuntimeAction.PROMPT_GET)
|
||||
async def prompt_get(data: dict[str, Any]) -> handler.ActionResponse:
|
||||
"""Return the post-preprocessing effective prompt for a query-backed run."""
|
||||
run_id = data.get('run_id')
|
||||
caller_plugin_identity = data.get('caller_plugin_identity')
|
||||
|
||||
if not run_id:
|
||||
return handler.ActionResponse.error(message='run_id is required')
|
||||
|
||||
session, error = await _validate_agent_run_session(
|
||||
run_id,
|
||||
caller_plugin_identity,
|
||||
self.ap,
|
||||
'Prompt get',
|
||||
)
|
||||
if error:
|
||||
return error
|
||||
|
||||
query = _resolve_action_query(data, session, self.ap)
|
||||
if query is None:
|
||||
return handler.ActionResponse.error(
|
||||
message='Prompt get is only available for query-backed agent runs',
|
||||
)
|
||||
|
||||
return handler.ActionResponse.success(data={'prompt': _dump_prompt_messages(query)})
|
||||
|
||||
@self.action(PluginToRuntimeAction.HISTORY_PAGE)
|
||||
async def history_page(data: dict[str, Any]) -> handler.ActionResponse:
|
||||
"""Page through transcript history for a conversation.
|
||||
@@ -2236,7 +2191,6 @@ class RuntimeConnectionHandler(handler.Handler):
|
||||
- runner_name
|
||||
- runner_description
|
||||
- manifest
|
||||
- protocol_version
|
||||
- capabilities
|
||||
- permissions
|
||||
- config
|
||||
|
||||
@@ -107,7 +107,7 @@ class RAGRuntimeService:
|
||||
)
|
||||
|
||||
async def get_file_stream(self, storage_path: str) -> bytes:
|
||||
"""Handle GET_KNOWLEDGE_FILE_STREAM action.
|
||||
"""Handle GET_KNOWLEDEGE_FILE_STREAM action.
|
||||
|
||||
Uses the storage manager abstraction to load file content,
|
||||
regardless of the underlying storage provider.
|
||||
|
||||
Reference in New Issue
Block a user