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 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.core.conversations import ConversationTexts, SeedContext
|
||||
from beaver_gateway.core.prompt import assemble
|
||||
@@ -51,39 +51,24 @@ def overlay(tag: str, name: str) -> tuple[str, Path]:
|
||||
|
||||
|
||||
# §4.2: сборки промптов. Окружение kind'а - константная гранула, экземплярное
|
||||
# (файл, топик) едет первым сообщением. Диспетчер/дистиллятор/триаж - M1b+.
|
||||
DEEP_PROMPT = (
|
||||
*VOICE,
|
||||
PROFILE,
|
||||
CORRECTIONS,
|
||||
VAULT_MAP,
|
||||
environment("глубокий"),
|
||||
overlay("deep", "глубокий"),
|
||||
# (файл, топик) едет первым сообщением. Какие kind агент обслуживает, следует
|
||||
# из того, какие промпты у него заданы (§3.12).
|
||||
_BASE = (*VOICE, PROFILE, CORRECTIONS, VAULT_MAP)
|
||||
_DISTILL = (*_BASE, environment("джоб"), overlay("distiller", "дистиллятор"))
|
||||
|
||||
DEEP_PROMPTS = Prompts(
|
||||
deep=(*_BASE, environment("глубокий"), 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", "быстрый")))
|
||||
|
||||
# Диспетчер: тот же голос, окружение по 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.
|
||||
DEEP_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,
|
||||
model=model,
|
||||
cwd=VAULT,
|
||||
prompt_sources=DISPATCHER_PROMPTS["master"],
|
||||
prompt_sources_by_kind=DISPATCHER_PROMPTS,
|
||||
prompts=DISPATCHER_PROMPTS,
|
||||
skill_sets=DISPATCHER_SKILLS,
|
||||
gateway_tools=("read_conversation", "spawn", "say", "schedule"),
|
||||
options=ClaudeOptions(
|
||||
@@ -173,7 +157,7 @@ def deep(name: str, model: str, effort: str | None = None) -> ClaudeAgent:
|
||||
name=name,
|
||||
model=model,
|
||||
cwd=VAULT,
|
||||
prompt_sources=DEEP_PROMPT,
|
||||
prompts=DEEP_PROMPTS,
|
||||
skill_sets=DEEP_SKILLS,
|
||||
options=ClaudeOptions(
|
||||
effort=effort,
|
||||
@@ -244,7 +228,8 @@ frontends: list[Frontend] = [
|
||||
host="0.0.0.0",
|
||||
port=62994,
|
||||
public_base_url=_public("/api"),
|
||||
default_agents={"master": "beaver-dispatcher", "branch": "beaver-dispatcher"},
|
||||
master_agent="beaver-dispatcher",
|
||||
branch_agent="beaver-dispatcher",
|
||||
),
|
||||
MarkdownFrontend(
|
||||
host="0.0.0.0",
|
||||
|
||||
Reference in New Issue
Block a user