mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-02 12:05:54 +00:00
- Add invoke_rerank action handler in plugin handler - Validate rerank model access via run session - Cap documents at 64 for API limit - Return sorted results by relevance score
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
"""Shared test fixtures for agent runner tests."""
|
|
from __future__ import annotations
|
|
|
|
import typing
|
|
|
|
|
|
def make_resources(
|
|
models: list[dict] | None = None,
|
|
tools: list[dict] | None = None,
|
|
knowledge_bases: list[dict] | None = None,
|
|
storage: dict | None = None,
|
|
files: list[dict] | None = None,
|
|
) -> dict[str, typing.Any]:
|
|
"""Create a minimal AgentResources dict for testing.
|
|
|
|
Args:
|
|
models: List of model dicts with 'model_id' key
|
|
tools: List of tool dicts with 'tool_name' key
|
|
knowledge_bases: List of KB dicts with 'kb_id' key
|
|
storage: Storage permissions dict
|
|
files: List of file dicts with 'file_id' key
|
|
|
|
Returns:
|
|
AgentResources dict with all required fields
|
|
"""
|
|
return {
|
|
'models': models or [],
|
|
'tools': tools or [],
|
|
'knowledge_bases': knowledge_bases or [],
|
|
'files': files or [],
|
|
'storage': storage or {'plugin_storage': False, 'workspace_storage': False},
|
|
'platform_capabilities': {},
|
|
}
|
|
|
|
|
|
def make_session(
|
|
run_id: str = 'test-run-id',
|
|
runner_id: str = 'plugin:test/test-runner/default',
|
|
query_id: int | None = 1,
|
|
plugin_identity: str = 'test/test-runner',
|
|
resources: dict | None = None,
|
|
) -> dict[str, typing.Any]:
|
|
"""Create a minimal AgentRunSession dict for testing.
|
|
|
|
Args:
|
|
run_id: Unique run identifier
|
|
runner_id: Runner descriptor ID
|
|
query_id: Pipeline query ID
|
|
plugin_identity: Plugin identifier (author/name)
|
|
resources: AgentResources dict (uses make_resources() default if None)
|
|
|
|
Returns:
|
|
AgentRunSession dict with all required fields including pre-computed _authorized_ids
|
|
"""
|
|
import time
|
|
now = int(time.time())
|
|
res = resources or make_resources()
|
|
|
|
# Pre-compute authorized IDs for O(1) lookup (matching production behavior)
|
|
authorized_ids: dict[str, set[str]] = {
|
|
'model': {m.get('model_id') for m in res.get('models', [])},
|
|
'tool': {t.get('tool_name') for t in res.get('tools', [])},
|
|
'knowledge_base': {kb.get('kb_id') for kb in res.get('knowledge_bases', [])},
|
|
'file': {f.get('file_id') for f in res.get('files', [])},
|
|
}
|
|
|
|
return {
|
|
'run_id': run_id,
|
|
'runner_id': runner_id,
|
|
'query_id': query_id,
|
|
'plugin_identity': plugin_identity,
|
|
'resources': res,
|
|
'status': {
|
|
'started_at': now,
|
|
'last_activity_at': now,
|
|
},
|
|
'_authorized_ids': authorized_ids,
|
|
} |