Files
RAG_helper/migrations/versions/h4b52e9dc0f83_add_escalation_reason.py
AR 15 M4 231e1f2d01 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>
2026-04-26 20:45:09 +05:00

31 lines
1.0 KiB
Python

"""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')