29 lines
819 B
Python
29 lines
819 B
Python
from __future__ import annotations
|
|
|
|
from typing import Iterable
|
|
|
|
from providers.prompt_loader import load_prompt
|
|
from skills import SkillStore
|
|
from tools.registry import ToolRegistry
|
|
|
|
|
|
DEFAULT_SYSTEM_PROMPT = load_prompt("base")["system"]
|
|
|
|
|
|
def build_system_prompt(
|
|
*,
|
|
skill_store: SkillStore,
|
|
active_skills: Iterable[str],
|
|
tool_registry: ToolRegistry,
|
|
workspace: str | None = None,
|
|
base_prompt: str = DEFAULT_SYSTEM_PROMPT,
|
|
) -> str:
|
|
tool_fragment = ", ".join(tool_registry.names())
|
|
prompt = f"{base_prompt}\nAvailable tools: {tool_fragment}."
|
|
if workspace:
|
|
prompt += f"\nWorkspace root: {workspace}."
|
|
skill_fragment = skill_store.build_prompt_fragment(active_skills)
|
|
if skill_fragment:
|
|
prompt += f"\n\nLoaded skills:\n{skill_fragment}"
|
|
return prompt
|