feat(sprint6b): блок E — причина передачи оператору + саммари
- Роутер возвращает escalate_human|reason (acute_pain/surgery/angry/explicit_request/routing_loop) - RouterClient парсит reason; дефолт explicit_request при неразобранном - _format_state_context получает escalation_reason → подставляется в промпт escalate_human - Промпт escalate_human переписан: разное поведение по reason - _build_operator_summary: reason + 8 реплик истории + слоты, логируется при передаче - Message.escalation_reason (String 50, nullable) + миграция h4b52e9dc0f83 - ChatResponse и MessageInfo получили escalation_reason и operator_summary - Sandbox: красный блок «передача оператору · причина» в состоянии треда - Sandbox: блок саммари для оператора (предпросмотр) в панели отладки Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
"""add escalation_reason to messages (Спринт 6b блок E)
|
||||
|
||||
Revision ID: h4b52e9dc0f83
|
||||
Revises: g3a71d4fc285
|
||||
Create Date: 2026-04-26 10:00:00.000000
|
||||
|
||||
Причина передачи оператору: acute_pain / surgery / angry /
|
||||
explicit_request / routing_loop. Хранится на реплике ассистента,
|
||||
в которой ветка escalate_human первый раз ответила в треде.
|
||||
"""
|
||||
from typing import Sequence, Union
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
revision: str = 'h4b52e9dc0f83'
|
||||
down_revision: Union[str, None] = 'g3a71d4fc285'
|
||||
branch_labels: Union[str, Sequence[str], None] = None
|
||||
depends_on: Union[str, Sequence[str], None] = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
with op.batch_alter_table('messages', recreate='always') as batch:
|
||||
batch.add_column(sa.Column('escalation_reason', sa.String(50), nullable=True))
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
with op.batch_alter_table('messages', recreate='always') as batch:
|
||||
batch.drop_column('escalation_reason')
|
||||
Reference in New Issue
Block a user