feat(injects,conversations): configurable inject header, urgent inject marks the turn it cut
This commit is contained in:
@@ -39,6 +39,7 @@ from claude_agent_sdk import (
|
||||
)
|
||||
from sqlmodel import col, select
|
||||
|
||||
from beaver_gateway.core import injects
|
||||
from beaver_gateway.core.conversation_store import load_messages
|
||||
from beaver_gateway.core.distill import (
|
||||
Digest,
|
||||
@@ -52,7 +53,7 @@ from beaver_gateway.core.distill import (
|
||||
trim_summary,
|
||||
written_paths,
|
||||
)
|
||||
from beaver_gateway.core.injects import InjectQueue, inject_header
|
||||
from beaver_gateway.core.injects import InjectQueue
|
||||
from beaver_gateway.core.kinds import KINDS, Kind, as_kind
|
||||
from beaver_gateway.core.transcript import (
|
||||
messages_from_entries,
|
||||
@@ -157,6 +158,8 @@ class ConversationTexts:
|
||||
"""
|
||||
|
||||
merge_prompt: str = _DEFAULT_MERGE_PROMPT
|
||||
inject_header: Callable[[injects.InjectContext], str] = injects.inject_header
|
||||
"""Framing line(s) above each inject: who it is from, whether it cut a turn."""
|
||||
interrupted: str = "прервано"
|
||||
answered: str = "Пользователь ответил: {answer}"
|
||||
unanswered: str = (
|
||||
@@ -857,6 +860,7 @@ class Conversations:
|
||||
_log.info(
|
||||
"conversation %s: interrupted for urgent inject", conv.external_id
|
||||
)
|
||||
await self._queue.mark_interrupting(item)
|
||||
self._ensure_worker(cast("int", conv.id))
|
||||
return item
|
||||
|
||||
@@ -1650,7 +1654,10 @@ class Conversations:
|
||||
prompt += "\n\n" + _bundle(batch[1:])
|
||||
else:
|
||||
origin = "inject"
|
||||
prompt = "\n\n".join(f"{inject_header(i.origin)}\n{i.text}" for i in batch)
|
||||
prompt = "\n\n".join(
|
||||
f"{self._texts.inject_header(injects.context_of(i))}\n{i.text}"
|
||||
for i in batch
|
||||
)
|
||||
seed = await self._pending_seed(conv)
|
||||
if seed:
|
||||
prompt = f"{seed}\n\n{prompt}"
|
||||
|
||||
Reference in New Issue
Block a user