refactor: 优化文件系统后端结构
This commit is contained in:
parent
1a1f86209f
commit
69281f6fe1
@ -4,7 +4,6 @@ from fastapi import FastAPI
|
|||||||
|
|
||||||
from src.services.task_service import tasker
|
from src.services.task_service import tasker
|
||||||
from src.services.mcp_service import init_mcp_servers
|
from src.services.mcp_service import init_mcp_servers
|
||||||
from src.services.skill_service import init_skills_cache
|
|
||||||
from src.services.run_queue_service import close_queue_clients, get_redis_client
|
from src.services.run_queue_service import close_queue_clients, get_redis_client
|
||||||
from src.storage.postgres.manager import pg_manager
|
from src.storage.postgres.manager import pg_manager
|
||||||
from src.knowledge import knowledge_base
|
from src.knowledge import knowledge_base
|
||||||
|
|||||||
@ -1,6 +1,11 @@
|
|||||||
from .skills_backend import SelectedSkillsReadonlyBackend, create_agent_composite_backend
|
from deepagents.backends import CompositeBackend, StateBackend
|
||||||
|
|
||||||
|
from .composite import create_agent_composite_backend
|
||||||
|
from .skills_backend import SelectedSkillsReadonlyBackend
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
"CompositeBackend",
|
||||||
|
"StateBackend",
|
||||||
"SelectedSkillsReadonlyBackend",
|
"SelectedSkillsReadonlyBackend",
|
||||||
"create_agent_composite_backend",
|
"create_agent_composite_backend",
|
||||||
]
|
]
|
||||||
|
|||||||
29
src/agents/common/backends/composite.py
Normal file
29
src/agents/common/backends/composite.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
from deepagents.backends import CompositeBackend, StateBackend
|
||||||
|
|
||||||
|
from src.services.skill_resolver import normalize_selected_skills
|
||||||
|
from src.services.skill_service import is_valid_skill_slug
|
||||||
|
|
||||||
|
from .skills_backend import SelectedSkillsReadonlyBackend
|
||||||
|
|
||||||
|
|
||||||
|
def _get_visible_skills_from_runtime(runtime) -> list[str]:
|
||||||
|
context = getattr(runtime, "context", None)
|
||||||
|
snapshot = getattr(context, "skill_session_snapshot", None)
|
||||||
|
if isinstance(snapshot, dict):
|
||||||
|
visible = snapshot.get("visible_skills")
|
||||||
|
if isinstance(visible, list):
|
||||||
|
return [slug for slug in visible if isinstance(slug, str) and is_valid_skill_slug(slug)]
|
||||||
|
|
||||||
|
selected = getattr(context, "skills", None) or []
|
||||||
|
return normalize_selected_skills(selected)
|
||||||
|
|
||||||
|
|
||||||
|
def create_agent_composite_backend(runtime) -> CompositeBackend:
|
||||||
|
"""为 agent 构建 backend:默认 StateBackend + /skills 路由只读 backend。"""
|
||||||
|
visible_skills = _get_visible_skills_from_runtime(runtime)
|
||||||
|
return CompositeBackend(
|
||||||
|
default=StateBackend(runtime),
|
||||||
|
routes={
|
||||||
|
"/skills/": SelectedSkillsReadonlyBackend(selected_slugs=visible_skills),
|
||||||
|
},
|
||||||
|
)
|
||||||
@ -3,10 +3,9 @@ from __future__ import annotations
|
|||||||
from pathlib import PurePosixPath
|
from pathlib import PurePosixPath
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from deepagents.backends import CompositeBackend, FilesystemBackend, StateBackend
|
from deepagents.backends import FilesystemBackend
|
||||||
from deepagents.backends.protocol import EditResult, FileDownloadResponse, FileUploadResponse, WriteResult
|
from deepagents.backends.protocol import EditResult, FileDownloadResponse, FileUploadResponse, WriteResult
|
||||||
|
|
||||||
from src.services.skill_resolver import normalize_selected_skills
|
|
||||||
from src.services.skill_service import get_skills_root_dir, is_valid_skill_slug
|
from src.services.skill_service import get_skills_root_dir, is_valid_skill_slug
|
||||||
|
|
||||||
|
|
||||||
@ -118,26 +117,3 @@ class SelectedSkillsReadonlyBackend(FilesystemBackend):
|
|||||||
continue
|
continue
|
||||||
responses.append(FileDownloadResponse(path=path, content=target.read_bytes(), error=None))
|
responses.append(FileDownloadResponse(path=path, content=target.read_bytes(), error=None))
|
||||||
return responses
|
return responses
|
||||||
|
|
||||||
|
|
||||||
def create_agent_composite_backend(runtime) -> CompositeBackend:
|
|
||||||
"""为 agent 构建 backend:默认 StateBackend + /skills 路由只读 backend。"""
|
|
||||||
visible_skills = _get_visible_skills_from_runtime(runtime)
|
|
||||||
return CompositeBackend(
|
|
||||||
default=StateBackend(runtime),
|
|
||||||
routes={
|
|
||||||
"/skills/": SelectedSkillsReadonlyBackend(selected_slugs=visible_skills),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def _get_visible_skills_from_runtime(runtime) -> list[str]:
|
|
||||||
context = getattr(runtime, "context", None)
|
|
||||||
snapshot = getattr(context, "skill_session_snapshot", None)
|
|
||||||
if isinstance(snapshot, dict):
|
|
||||||
visible = snapshot.get("visible_skills")
|
|
||||||
if isinstance(visible, list):
|
|
||||||
return [slug for slug in visible if isinstance(slug, str) and is_valid_skill_slug(slug)]
|
|
||||||
|
|
||||||
selected = getattr(context, "skills", None) or []
|
|
||||||
return normalize_selected_skills(selected)
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user