feat: CoachAnalyzer — post-hoc skill grading (extracted from lead-engine)#4
Conversation
Добавляет `CoachAnalyzer` class — post-hoc анализ closed-lead conversation'ов.
Для каждой пары (user-question, bot-reply) дёргает `gradeSkills`
(@chatman-media/rag) и пишет результаты в skill-outcomes repo. Используется:
- admin-UI: win-rate per skill для inspect'а
- coach-proposals: данные для proposeStyleEdits
- shadow-evaluations: pair-wise сравнения styles
Извлечён из чужого монорепо (chatman-media/lead-engine — SaaS-платформа).
Чтобы класс мог работать в любой DAL-shape (lead-engine использует Drizzle
multi-tenant repos; standalone tg-chatbot — что-то другое), все упоминания
конкретных типов БД заменены на in-file interfaces:
- CoachAnalyzerLead — { id, tenantId }
- CoachAnalyzerMessage — { id, role, text }
- CoachAnalyzerMessages — recent(conversationId, limit)
- CoachAnalyzerSkillOutcomes — record(...): Promise<boolean>
ChatClient + gradeSkills остаются из @chatman-media/rag (existing peer dep).
Также exported `extractUserAssistantPairs` для standalone использования —
свернуть flat-массив messages в alternating user→assistant pairs.
8 unit tests покрывают:
- extractUserAssistantPairs (alternating / human-role / два user подряд
/ system skip / пустой text)
- CoachAnalyzer (анализ пар + write outcomes, idempotency, no-pairs case)
Bump: 0.1.1 → 0.2.0 (minor — только additions, никаких breaking changes).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThis PR introduces a new ChangesCoach Analyzer Feature
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Poem
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 ESLint
ESLint skipped: no ESLint configuration detected in root package.json. To enable, add Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Summary
Добавляет
CoachAnalyzer— post-hoc анализ closed-lead conversation'ов: для каждой пары (user-question, bot-reply) дёргаетgradeSkillsи пишет результаты в skill-outcomes repo.Извлечён из chatman-media/lead-engine (SaaS-платформа, использующая sales как доменный модуль). Возвращён upstream чтобы npm-consumers пакета тоже могли использовать.
Decoupling
Lead-engine'овская версия импортировала DAL-типы напрямую из
@chatman-media/conversation-engine(LeadRow, MessageRow, MessagesRepo, SkillOutcomesRepo). Для package-agnostic использования заменено на in-file interfaces:```ts
export interface CoachAnalyzerLead { id: number; tenantId: number; }
export interface CoachAnalyzerMessage { id: number; role: string; text: string; }
export interface CoachAnalyzerMessages { recent(conversationId, limit): Promise<...> }
export interface CoachAnalyzerSkillOutcomes { record(opts): Promise }
```
Caller передаёт свои репы — sales остаётся schema-агностичен.
Tests
8 unit tests pass:
```
$ bun test src/tests/coach-analyzer.test.ts
8 pass / 0 fail
```
`bun typecheck` — clean.
Bump: 0.1.1 → 0.2.0
Minor — additions only, no breaking changes.
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Tests
Chores