refactor(config): prompts per kind and frontend agents as parameters
This commit is contained in:
@@ -3,7 +3,7 @@ from datetime import date, timedelta
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from beaver_gateway.agents.base import BaseAgent, ExposedMcp
|
from beaver_gateway.agents.base import BaseAgent, ExposedMcp
|
||||||
from beaver_gateway.agents.claude import ClaudeAgent, ClaudeOptions
|
from beaver_gateway.agents.claude import ClaudeAgent, ClaudeOptions, Prompts
|
||||||
from beaver_gateway.agents.raycast import RaycastAgent, RemoteTool, UserPreferences
|
from beaver_gateway.agents.raycast import RaycastAgent, RemoteTool, UserPreferences
|
||||||
from beaver_gateway.core.conversations import ConversationTexts, SeedContext
|
from beaver_gateway.core.conversations import ConversationTexts, SeedContext
|
||||||
from beaver_gateway.core.prompt import assemble
|
from beaver_gateway.core.prompt import assemble
|
||||||
@@ -51,39 +51,24 @@ def overlay(tag: str, name: str) -> tuple[str, Path]:
|
|||||||
|
|
||||||
|
|
||||||
# §4.2: сборки промптов. Окружение kind'а - константная гранула, экземплярное
|
# §4.2: сборки промптов. Окружение kind'а - константная гранула, экземплярное
|
||||||
# (файл, топик) едет первым сообщением. Диспетчер/дистиллятор/триаж - M1b+.
|
# (файл, топик) едет первым сообщением. Какие kind агент обслуживает, следует
|
||||||
DEEP_PROMPT = (
|
# из того, какие промпты у него заданы (§3.12).
|
||||||
*VOICE,
|
_BASE = (*VOICE, PROFILE, CORRECTIONS, VAULT_MAP)
|
||||||
PROFILE,
|
_DISTILL = (*_BASE, environment("джоб"), overlay("distiller", "дистиллятор"))
|
||||||
CORRECTIONS,
|
|
||||||
VAULT_MAP,
|
DEEP_PROMPTS = Prompts(
|
||||||
environment("глубокий"),
|
deep=(*_BASE, environment("глубокий"), overlay("deep", "глубокий"))
|
||||||
overlay("deep", "глубокий"),
|
)
|
||||||
|
# Диспетчер: тот же голос, окружение по kind, оверлей по роли.
|
||||||
|
# Форк ветки (слив) думает как дистиллятор в окружении джоба.
|
||||||
|
DISPATCHER_PROMPTS = Prompts(
|
||||||
|
master=(*_BASE, environment("мастер"), overlay("dispatcher", "диспетчер")),
|
||||||
|
branch=(*_BASE, environment("ветка"), overlay("branch", "ветка")),
|
||||||
|
fork=_DISTILL,
|
||||||
|
job=_DISTILL,
|
||||||
)
|
)
|
||||||
QUICK_PROMPT = assemble((*VOICE, PROFILE, overlay("quick", "быстрый")))
|
QUICK_PROMPT = assemble((*VOICE, PROFILE, overlay("quick", "быстрый")))
|
||||||
|
|
||||||
# Диспетчер: тот же голос, окружение по kind (§3.12), оверлей по роли.
|
|
||||||
# Форк ветки (слив) думает как дистиллятор в окружении джоба.
|
|
||||||
_DISPATCHER_BASE = (*VOICE, PROFILE, CORRECTIONS, VAULT_MAP)
|
|
||||||
DISPATCHER_PROMPTS = {
|
|
||||||
"master": (
|
|
||||||
*_DISPATCHER_BASE,
|
|
||||||
environment("мастер"),
|
|
||||||
overlay("dispatcher", "диспетчер"),
|
|
||||||
),
|
|
||||||
"branch": (*_DISPATCHER_BASE, environment("ветка"), overlay("branch", "ветка")),
|
|
||||||
"fork": (
|
|
||||||
*_DISPATCHER_BASE,
|
|
||||||
environment("джоб"),
|
|
||||||
overlay("distiller", "дистиллятор"),
|
|
||||||
),
|
|
||||||
"job": (
|
|
||||||
*_DISPATCHER_BASE,
|
|
||||||
environment("джоб"),
|
|
||||||
overlay("distiller", "дистиллятор"),
|
|
||||||
),
|
|
||||||
}
|
|
||||||
|
|
||||||
# §4.3: наборы скиллов = папки = плагины. Глубокие грузят общие + vault.
|
# §4.3: наборы скиллов = папки = плагины. Глубокие грузят общие + vault.
|
||||||
DEEP_SKILLS = (SKILLS / "общие", SKILLS / "vault")
|
DEEP_SKILLS = (SKILLS / "общие", SKILLS / "vault")
|
||||||
DISPATCHER_SKILLS = (SKILLS / "общие", SKILLS / "диспетчер", SKILLS / "vault")
|
DISPATCHER_SKILLS = (SKILLS / "общие", SKILLS / "диспетчер", SKILLS / "vault")
|
||||||
@@ -155,8 +140,7 @@ def dispatcher(name: str, model: str, effort: str | None = None) -> ClaudeAgent:
|
|||||||
name=name,
|
name=name,
|
||||||
model=model,
|
model=model,
|
||||||
cwd=VAULT,
|
cwd=VAULT,
|
||||||
prompt_sources=DISPATCHER_PROMPTS["master"],
|
prompts=DISPATCHER_PROMPTS,
|
||||||
prompt_sources_by_kind=DISPATCHER_PROMPTS,
|
|
||||||
skill_sets=DISPATCHER_SKILLS,
|
skill_sets=DISPATCHER_SKILLS,
|
||||||
gateway_tools=("read_conversation", "spawn", "say", "schedule"),
|
gateway_tools=("read_conversation", "spawn", "say", "schedule"),
|
||||||
options=ClaudeOptions(
|
options=ClaudeOptions(
|
||||||
@@ -173,7 +157,7 @@ def deep(name: str, model: str, effort: str | None = None) -> ClaudeAgent:
|
|||||||
name=name,
|
name=name,
|
||||||
model=model,
|
model=model,
|
||||||
cwd=VAULT,
|
cwd=VAULT,
|
||||||
prompt_sources=DEEP_PROMPT,
|
prompts=DEEP_PROMPTS,
|
||||||
skill_sets=DEEP_SKILLS,
|
skill_sets=DEEP_SKILLS,
|
||||||
options=ClaudeOptions(
|
options=ClaudeOptions(
|
||||||
effort=effort,
|
effort=effort,
|
||||||
@@ -244,7 +228,8 @@ frontends: list[Frontend] = [
|
|||||||
host="0.0.0.0",
|
host="0.0.0.0",
|
||||||
port=62994,
|
port=62994,
|
||||||
public_base_url=_public("/api"),
|
public_base_url=_public("/api"),
|
||||||
default_agents={"master": "beaver-dispatcher", "branch": "beaver-dispatcher"},
|
master_agent="beaver-dispatcher",
|
||||||
|
branch_agent="beaver-dispatcher",
|
||||||
),
|
),
|
||||||
MarkdownFrontend(
|
MarkdownFrontend(
|
||||||
host="0.0.0.0",
|
host="0.0.0.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user