diff --git a/app/backend/main.py b/app/backend/main.py index 50876a8c..586cb07f 100644 --- a/app/backend/main.py +++ b/app/backend/main.py @@ -18,6 +18,7 @@ from haiku.rag.config import load_yaml_config from haiku.rag.config.models import AppConfig from haiku.rag.skills.rag import AGENT_PREAMBLE, create_skill from haiku.skills import SkillDeps, SkillToolset +from haiku.skills.prompts import build_system_prompt load_dotenv(find_dotenv(usecwd=True)) @@ -68,7 +69,7 @@ toolset = SkillToolset(skills=[skill]) agent = Agent( os.getenv("HAIKU_CHAT_MODEL", "openai:gpt-4o"), - instructions=AGENT_PREAMBLE + toolset.system_prompt, + instructions=build_system_prompt(toolset.skill_catalog, preamble=AGENT_PREAMBLE), toolsets=[toolset], deps_type=SkillDeps, ) diff --git a/docs/python.md b/docs/python.md index 3035fb73..f507c636 100644 --- a/docs/python.md +++ b/docs/python.md @@ -457,13 +457,14 @@ haiku.rag provides a RAG skill built on [haiku.skills](https://github.com/ggozad from pydantic_ai import Agent from haiku.rag.skills.rag import create_skill from haiku.skills.agent import SkillToolset +from haiku.skills.prompts import build_system_prompt skill = create_skill(db_path=db_path, config=config) toolset = SkillToolset(skills=[skill]) agent = Agent( "openai:gpt-4o", - instructions=toolset.system_prompt, + instructions=build_system_prompt(toolset.skill_catalog), toolsets=[toolset], ) diff --git a/docs/skills/index.md b/docs/skills/index.md index e405782e..f43210b1 100644 --- a/docs/skills/index.md +++ b/docs/skills/index.md @@ -24,6 +24,7 @@ haiku-skills list --use-entrypoints ```python from haiku.rag.skills.rag import create_skill from haiku.skills.agent import SkillToolset +from haiku.skills.prompts import build_system_prompt from pydantic_ai import Agent skill = create_skill(db_path=db_path, config=config) @@ -31,7 +32,7 @@ toolset = SkillToolset(skills=[skill]) agent = Agent( "openai:gpt-4o", - instructions=toolset.system_prompt, + instructions=build_system_prompt(toolset.skill_catalog), toolsets=[toolset], ) diff --git a/docs/skills/rlm.md b/docs/skills/rlm.md index 416f5d6d..fb0fa8de 100644 --- a/docs/skills/rlm.md +++ b/docs/skills/rlm.md @@ -51,6 +51,7 @@ Combine both skills to give the agent full RAG + analysis capabilities: from haiku.rag.skills.rag import create_skill as create_rag_skill from haiku.rag.skills.rlm import create_skill as create_rlm_skill from haiku.skills.agent import SkillToolset +from haiku.skills.prompts import build_system_prompt from pydantic_ai import Agent rag = create_rag_skill(db_path=db_path) @@ -59,7 +60,7 @@ toolset = SkillToolset(skills=[rag, rlm]) agent = Agent( "openai:gpt-4o", - instructions=toolset.system_prompt, + instructions=build_system_prompt(toolset.skill_catalog), toolsets=[toolset], ) ``` diff --git a/examples/custom_agent.py b/examples/custom_agent.py index 52238b9a..b50ec834 100644 --- a/examples/custom_agent.py +++ b/examples/custom_agent.py @@ -20,6 +20,7 @@ from pydantic_ai import Agent from haiku.rag.skills.rag import create_skill from haiku.skills.agent import SkillToolset +from haiku.skills.prompts import build_system_prompt async def main(db_path: str) -> None: @@ -28,7 +29,7 @@ async def main(db_path: str) -> None: agent = Agent( "anthropic:claude-haiku-4-5-20251001", - instructions=toolset.system_prompt, + instructions=build_system_prompt(toolset.skill_catalog), toolsets=[toolset], ) diff --git a/examples/custom_agent_agui.py b/examples/custom_agent_agui.py index 5ca7069e..105ca04a 100644 --- a/examples/custom_agent_agui.py +++ b/examples/custom_agent_agui.py @@ -25,6 +25,7 @@ from starlette.routing import Route from haiku.rag.skills.rag import create_skill from haiku.skills.agent import SkillToolset +from haiku.skills.prompts import build_system_prompt db_path = os.environ.get("DB_PATH") if not db_path: @@ -38,7 +39,7 @@ toolset = SkillToolset(skills=[skill]) agent = Agent( "anthropic:claude-haiku-4-5-20251001", - instructions=toolset.system_prompt, + instructions=build_system_prompt(toolset.skill_catalog), toolsets=[toolset], ) diff --git a/haiku_rag_slim/haiku/rag/chat/app.py b/haiku_rag_slim/haiku/rag/chat/app.py index 708fae41..23a12ba0 100644 --- a/haiku_rag_slim/haiku/rag/chat/app.py +++ b/haiku_rag_slim/haiku/rag/chat/app.py @@ -12,6 +12,7 @@ from haiku.rag.config import get_config from haiku.rag.skills.rag import AGENT_PREAMBLE, RAGState from haiku.skills.agent import SkillToolset from haiku.skills.models import Skill +from haiku.skills.prompts import build_system_prompt if TYPE_CHECKING: from textual.app import ComposeResult @@ -161,7 +162,9 @@ class ChatApp(App): self._toolset = SkillToolset(skills=[self._skill]) self._agent = Agent( self._model, - instructions=AGENT_PREAMBLE + self._toolset.system_prompt, + instructions=build_system_prompt( + self._toolset.skill_catalog, preamble=AGENT_PREAMBLE + ), toolsets=[self._toolset], ) self._state = self._toolset.build_state_snapshot() diff --git a/haiku_rag_slim/pyproject.toml b/haiku_rag_slim/pyproject.toml index 4f678a0f..1d6cf330 100644 --- a/haiku_rag_slim/pyproject.toml +++ b/haiku_rag_slim/pyproject.toml @@ -24,7 +24,7 @@ classifiers = [ dependencies = [ "cachetools>=5.5.0", "docling-core==2.65.1", - "haiku.skills>=0.4.2", + "haiku.skills>=0.5.1", "httpx>=0.28.1", "jsonpatch>=1.33", "lancedb==0.29.2", diff --git a/uv.lock b/uv.lock index 8922c45a..10713dc8 100644 --- a/uv.lock +++ b/uv.lock @@ -1490,7 +1490,7 @@ requires-dist = [ { name = "cohere", marker = "extra == 'cohere'", specifier = ">=5.20.1" }, { name = "docling", marker = "extra == 'docling'", specifier = "==2.73.1" }, { name = "docling-core", specifier = "==2.65.1" }, - { name = "haiku-skills", specifier = ">=0.4.2" }, + { name = "haiku-skills", specifier = ">=0.5.1" }, { name = "httpx", specifier = ">=0.28.1" }, { name = "jsonpatch", specifier = ">=1.33" }, { name = "lancedb", specifier = "==0.29.2" }, @@ -1522,7 +1522,7 @@ provides-extras = ["docling", "voyageai", "mxbai", "cohere", "zeroentropy", "jin [[package]] name = "haiku-skills" -version = "0.4.2" +version = "0.5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, @@ -1530,9 +1530,9 @@ dependencies = [ { name = "pyyaml" }, { name = "skills-ref" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3b/13/96cb8124fd47d9f7b752f835b8c751bc67908a061a53a2ba392509d1fe68/haiku_skills-0.4.2.tar.gz", hash = "sha256:4846e7ebc1c7919faa576badd77723a0d681cf3a92d90f7b97edf3f6eca8ea8d", size = 119892, upload-time = "2026-02-20T11:18:47.434Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/4f/82d171478efe6c008705d3c2622009e5e5e18e6f4f2e4b9ad4916920d5d8/haiku_skills-0.5.1.tar.gz", hash = "sha256:8e46e7deac377a5f8fe7e4e61f8a3eca6328e069cd8b5aa63c4929a3b4f1bb6c", size = 122423, upload-time = "2026-02-27T09:31:30.785Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c5/77/2f94bf41b4b0f0af62431f9c9753db9343a44d1012cadb2e277210b69dae/haiku_skills-0.4.2-py3-none-any.whl", hash = "sha256:08ec15f3a9c894ef33d989850e2b73e78a2a9364056e997bff7cd910a0c4cfe9", size = 21077, upload-time = "2026-02-20T11:18:45.593Z" }, + { url = "https://files.pythonhosted.org/packages/18/98/99b1e5b0a2513abb82e7d8cd657d9ad548031c927344ca666eb92f588738/haiku_skills-0.5.1-py3-none-any.whl", hash = "sha256:662684ef13448c7b9c3c8c8d1f46256fe0a76bd5832dfb08a8f8933fc610e4c9", size = 23134, upload-time = "2026-02-27T09:31:29.624Z" }, ] [[package]]