feat(agent-runner): expose effective prompt pull api

This commit is contained in:
huanghuoguoguo
2026-06-13 15:31:54 +08:00
parent 3984e0fe40
commit d0b0a682c7
6 changed files with 77 additions and 2 deletions
@@ -283,6 +283,7 @@ class TestContextAccessOtherAPIs:
# Real call
context_access = await builder._build_context_access(mock_event, mock_descriptor, binding)
assert context_access['available_apis']['prompt_get'] is False
assert context_access['available_apis']['history_page'] is True
assert context_access['available_apis']['history_search'] is True
@@ -669,7 +669,7 @@ class TestQueryEntryAdapterParams:
@pytest.mark.asyncio
async def test_prompt_not_pushed_into_adapter_extra(self, clean_agent_state):
"""Pipeline prompt is not pushed into adapter.extra or exposed via prompt_get."""
"""Pipeline prompt is not pushed into adapter.extra; runners pull it through prompt_get."""
from langbot_plugin.api.entities.builtin.provider import prompt as provider_prompt
db_engine = clean_agent_state
@@ -699,7 +699,7 @@ class TestQueryEntryAdapterParams:
context = plugin_connector.contexts[0]
assert "prompt" not in context
assert "prompt" not in context["adapter"]["extra"]
assert "prompt_get" not in context["context"]["available_apis"]
assert context["context"]["available_apis"]["prompt_get"] is True
@pytest.mark.asyncio
async def test_params_filtering_keeps_public_param(self, clean_agent_state):
@@ -388,8 +388,45 @@ class TestAgentRunProxyActions:
def query(remove_think=True):
return SimpleNamespace(
pipeline_config={'output': {'misc': {'remove-think': remove_think}}},
prompt=SimpleNamespace(
messages=[provider_message.Message(role='system', content='effective prompt')]
),
)
@pytest.mark.asyncio
async def test_get_prompt_returns_query_effective_prompt(self, app):
"""GET_PROMPT returns the preprocessed Query prompt for the active run."""
from langbot.pkg.agent.runner.session_registry import get_session_registry
run_id = 'run_proxy_get_prompt'
query = self.query()
app.query_pool.cached_queries[900] = query
registry = get_session_registry()
await registry.unregister(run_id)
await registry.register(
run_id=run_id,
runner_id='plugin:test/runner/default',
query_id=900,
plugin_identity='test/runner',
resources=make_agent_resources(),
available_apis={'prompt_get': True},
)
runtime_handler = make_handler(app)
try:
response = await runtime_handler.actions[PluginToRuntimeAction.GET_PROMPT.value]({
'run_id': run_id,
'caller_plugin_identity': 'test/runner',
})
finally:
await registry.unregister(run_id)
assert response.code == 0
assert response.data['prompt'][0]['role'] == 'system'
assert response.data['prompt'][0]['content'] == 'effective prompt'
@pytest.mark.asyncio
async def test_invoke_llm_restores_query_and_model_options(self, app):
"""INVOKE_LLM passes Query, model extra_args and remove-think to provider."""