61 lines
2.7 KiB
Python
61 lines
2.7 KiB
Python
"""Как собирается системный промпт каждой роли из гранул vault.
|
|
|
|
Гранула - чистый markdown; xml-тег, в который она заворачивается, задаётся
|
|
здесь. Голос идёт первым и одинаков у всех, кто говорит с Бобром; окружение
|
|
зависит от вида окна (мастер, ветка, глубокий, джоб); оверлей - от роли.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from beaver_gateway.agents.claude import Prompts
|
|
from beaver_gateway.agents.prompts import assemble
|
|
|
|
from beaver_agent.vault import GRANULES, PROMPTS
|
|
|
|
VOICE = tuple(
|
|
(tag, GRANULES / "голос" / f"{tag}.md")
|
|
for tag in (
|
|
"role",
|
|
"philosophy",
|
|
"user_profile",
|
|
"operating_modes",
|
|
"how_you_operate",
|
|
"interaction_guidelines",
|
|
)
|
|
)
|
|
PROFILE = ("profile", PROMPTS / "профиль.md")
|
|
CORRECTIONS = ("corrections", PROMPTS / "поправки.md")
|
|
VAULT_MAP = ("vault_map", GRANULES / "карта-vault.md")
|
|
|
|
|
|
def environment(window: str) -> tuple[str, str]:
|
|
return ("environment", str(GRANULES / "окружения" / f"{window}.md"))
|
|
|
|
|
|
def overlay(tag: str, name: str) -> tuple[str, str]:
|
|
return (tag, str(GRANULES / f"{name}.md"))
|
|
|
|
|
|
BASE = (*VOICE, PROFILE, CORRECTIONS, VAULT_MAP)
|
|
"""Голос, профиль Бобра, его поправки и карта vault - у всех, кто с ним говорит."""
|
|
|
|
DISTILL_AS_JOB = (*BASE, environment("джоб"), overlay("distiller", "дистиллятор"))
|
|
"""Форк ветки пишет слив: тот же голос, окружение джоба, оверлей дистиллятора."""
|
|
|
|
DISPATCHER = Prompts(
|
|
master=(*BASE, environment("мастер"), overlay("dispatcher", "диспетчер")),
|
|
branch=(*BASE, environment("ветка"), overlay("branch", "ветка")),
|
|
fork=DISTILL_AS_JOB,
|
|
job=DISTILL_AS_JOB,
|
|
)
|
|
DEEP = Prompts(deep=(*BASE, environment("глубокий"), overlay("deep", "глубокий")))
|
|
|
|
DISTILLER_ONLY = (PROFILE, environment("джоб"), overlay("distiller", "дистиллятор"))
|
|
"""Дистиллятор без голоса - иначе выжимки получаются с матом."""
|
|
DISTILLER = Prompts(fork=DISTILLER_ONLY, job=DISTILLER_ONLY)
|
|
TRIAGE = Prompts(job=(PROFILE, environment("джоб"), overlay("triage", "триаж")))
|
|
CURATOR = Prompts(job=(*BASE, environment("джоб"), overlay("curator", "куратор")))
|
|
|
|
QUICK = assemble((*VOICE, PROFILE, overlay("quick", "быстрый")))
|
|
"""Raycast-агенты: голос и профиль одной строкой, без vault."""
|