Files
B2BCall-dialer/packages/ai/src/index.ts
Matheus d4e2513764 feat(ai): scorecards de QA, avaliacao automatica, dashboard (fase 21)
CRUD de QualityScorecard/Item (criterios por tenant, sem lista fixa
hardcoded), novo AIJobType.SCORECARD_EVALUATION encadeado junto com
ANALYSIS a partir da transcricao (mesma decisao de privacidade + exige
scorecard habilitado). apps/ai-worker avalia contra todos os scorecards
habilitados do tenant, prompt montado dinamicamente a partir dos itens de
cada um, nunca guarda chain-of-thought do modelo (so' o resultado final
validado). GET /reports/ai-dashboard agrega CallAIAnalysis+QualityEvaluation
do periodo (score medio, sentimento, assuntos/objecoes, compliance
alerts, ranking de agentes).

Testado ponta a ponta contra o ai-worker real e Postgres real com RLS
(scorecard real via API, prompt montado a partir dos itens reais, job
real reservado via SKIP LOCKED, retry+dead-letter corretos) — chamada de
rede real contra OpenAI/Anthropic continua nunca exercitada. Detalhes em
docs/QUALITY_SCORECARDS.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01X1HxY46WGU4G1zmVDNKcWw
2026-08-28 16:49:35 -03:00

36 lines
1.1 KiB
TypeScript

export type {
AIProvider,
AICapabilityName,
AIProviderCredentials,
TranscribeParams,
TranscribeResult,
TranscribeSegment,
AnalyzeParams,
AnalyzeResult,
} from "./types";
export { OpenAIProvider } from "./openai-provider";
export { AnthropicProvider } from "./anthropic-provider";
export { createAIProvider, SUPPORTED_PROVIDER_TYPES } from "./registry";
export { SensitiveDataRedactor } from "./redactor";
export {
CALL_ANALYSIS_JSON_SCHEMA,
validateCallAnalysisResult,
CallAnalysisValidationError,
type CallAnalysisResult,
} from "./call-analysis-schema";
export {
resolvePrivacyLevel,
allowsTranscription,
allowsAnalysis,
type AIPrivacyLevelName,
type ResolvePrivacyParams,
} from "./privacy";
export { computeBackoffDelayMs, computeNextScheduledAt, isDeadLetter } from "./retry";
export { splitStereoWav, type StereoSplitResult } from "./wav-stereo-split";
export {
QUALITY_EVALUATION_JSON_SCHEMA,
validateQualityEvaluationResult,
QualityEvaluationValidationError,
type QualityEvaluationResult,
} from "./quality-evaluation-schema";