feat: F019 AI monitoring layer — output transparency & governance workspace
Full 2-panel workspace at /ops/ai-monitoring: metrics strip (total, failed, pending, approval rate, top prompt version, active model), filterable output table by type/status/error, and detail panel with output preview, prompt versioning, error details, and role-aware review actions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,243 @@
|
||||
import type { AIOutput } from '../domain/aiOutput'
|
||||
|
||||
export const mockAIOutputs: AIOutput[] = [
|
||||
{
|
||||
id: 'aio-001',
|
||||
type: 'NEED_PARSE',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-5-sonnet-20241022',
|
||||
promptVersion: 'need-parse-v2.3',
|
||||
schemaVersion: 'schema-v4',
|
||||
inputHash: 'a7f3b2c1',
|
||||
outputPreview: '{"criteria":{"area":{"min":300,"max":800},"location":"Zürich","type":"Büro","budget":{"max":12000}},"confidence":0.94}',
|
||||
createdAt: '2026-05-17T10:24:00Z',
|
||||
latencyMs: 1240,
|
||||
costEstimate: 0.0034,
|
||||
reviewStatus: 'UNREVIEWED',
|
||||
relatedEntityType: 'NEED',
|
||||
relatedEntityId: 'need-001',
|
||||
},
|
||||
{
|
||||
id: 'aio-002',
|
||||
type: 'MATCH_EXPLANATION',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-5-sonnet-20241022',
|
||||
promptVersion: 'match-explain-v1.8',
|
||||
schemaVersion: 'schema-v3',
|
||||
inputHash: 'c8d4e9f2',
|
||||
outputPreview: 'Dieses Objekt erfüllt 4 von 5 Hardkriterien: Fläche 450m² (✓), Lage Zürich-Innenstadt (✓), Budget CHF 9\'500/Mt (✓), Parkplätze 2/3 (✗), Verfügbarkeit Q3 2026 (✓).',
|
||||
createdAt: '2026-05-17T09:15:00Z',
|
||||
latencyMs: 2100,
|
||||
costEstimate: 0.0089,
|
||||
reviewStatus: 'APPROVED',
|
||||
relatedEntityType: 'MATCH',
|
||||
relatedEntityId: 'match-003',
|
||||
},
|
||||
{
|
||||
id: 'aio-003',
|
||||
type: 'DATA_QUALITY_SUMMARY',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-haiku-20240307',
|
||||
promptVersion: 'dq-summary-v1.2',
|
||||
schemaVersion: 'schema-v2',
|
||||
inputHash: 'f1a2b3c4',
|
||||
outputPreview: '[FEHLER: Antwort nach 8.5s unterbrochen]',
|
||||
createdAt: '2026-05-17T08:45:00Z',
|
||||
latencyMs: 8500,
|
||||
reviewStatus: 'FLAGGED',
|
||||
relatedEntityType: 'PROPERTY',
|
||||
relatedEntityId: 'prop-007',
|
||||
error: {
|
||||
type: 'PROVIDER_TIMEOUT',
|
||||
message: 'Request timed out after 8500ms. Provider did not respond within the allowed window.',
|
||||
recoverable: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'aio-004',
|
||||
type: 'FOLLOW_UP_QUESTIONS',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-5-sonnet-20241022',
|
||||
promptVersion: 'follow-up-v1.5',
|
||||
schemaVersion: 'schema-v3',
|
||||
inputHash: 'b2c9d7e3',
|
||||
outputPreview: '["Welche Nutzungsart bevorzugen Sie: Open Space oder Einzelbüros?","Ist ein Außenbereich oder Dachterrasse gewünscht?","Bis wann benötigen Sie die Fläche?"]',
|
||||
createdAt: '2026-05-17T08:02:00Z',
|
||||
latencyMs: 890,
|
||||
costEstimate: 0.0021,
|
||||
reviewStatus: 'UNREVIEWED',
|
||||
relatedEntityType: 'NEED',
|
||||
relatedEntityId: 'need-002',
|
||||
},
|
||||
{
|
||||
id: 'aio-005',
|
||||
type: 'COMPARE_SUMMARY',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-5-sonnet-20241022',
|
||||
promptVersion: 'compare-v2.0',
|
||||
schemaVersion: 'schema-v4',
|
||||
inputHash: 'e4f5a6b7',
|
||||
outputPreview: 'Vergleich prop-001 vs prop-003: prop-001 bietet 15% mehr Fläche (+90m²), jedoch CHF 800/Mt höhere Mietkosten. prop-003 überzeugt durch Lage und Ausbaustandard.',
|
||||
createdAt: '2026-05-16T16:30:00Z',
|
||||
latencyMs: 3200,
|
||||
costEstimate: 0.0122,
|
||||
reviewStatus: 'IN_REVIEW',
|
||||
relatedEntityType: 'MATCH',
|
||||
relatedEntityId: 'match-001',
|
||||
},
|
||||
{
|
||||
id: 'aio-006',
|
||||
type: 'DECISION_BRIEF',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-opus-20240229',
|
||||
promptVersion: 'decision-v1.1',
|
||||
schemaVersion: 'schema-v2',
|
||||
inputHash: 'c3d2e1f0',
|
||||
outputPreview: 'Empfehlung: prop-002 priorisieren. Höchste Gesamtkongruenz (87%), einziges Objekt mit Außenfläche (250m²). Risiko: Mietpreiserhöhung +5% ab 2027 gemäß Mietvertrag.',
|
||||
createdAt: '2026-05-16T14:10:00Z',
|
||||
latencyMs: 4800,
|
||||
costEstimate: 0.0341,
|
||||
reviewStatus: 'UNREVIEWED',
|
||||
relatedEntityType: 'MATCH',
|
||||
relatedEntityId: 'match-005',
|
||||
},
|
||||
{
|
||||
id: 'aio-007',
|
||||
type: 'MATCH_EXPLANATION',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-5-sonnet-20241022',
|
||||
promptVersion: 'match-explain-v1.8',
|
||||
schemaVersion: 'schema-v3',
|
||||
inputHash: 'd9e8f7a6',
|
||||
outputPreview: '[Schema-Validierung fehlgeschlagen: Pflichtfeld \'hardCriteria\' nicht vorhanden im Output]',
|
||||
createdAt: '2026-05-16T11:55:00Z',
|
||||
latencyMs: 1850,
|
||||
reviewStatus: 'REJECTED',
|
||||
relatedEntityType: 'MATCH',
|
||||
relatedEntityId: 'match-002',
|
||||
error: {
|
||||
type: 'SCHEMA_VALIDATION',
|
||||
message: 'Output schema validation failed: required field \'hardCriteria\' missing. Output was not delivered to UI.',
|
||||
recoverable: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'aio-008',
|
||||
type: 'NEED_PARSE',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-haiku-20240307',
|
||||
promptVersion: 'need-parse-v2.2',
|
||||
schemaVersion: 'schema-v4',
|
||||
inputHash: 'a1b2c3d4',
|
||||
outputPreview: '{"criteria":{"area":{"min":500},"location":"Bern","type":"Logistik","budget":{"max":8000}},"confidence":0.91}',
|
||||
createdAt: '2026-05-16T09:40:00Z',
|
||||
latencyMs: 560,
|
||||
costEstimate: 0.0009,
|
||||
reviewStatus: 'APPROVED',
|
||||
relatedEntityType: 'NEED',
|
||||
relatedEntityId: 'need-003',
|
||||
},
|
||||
{
|
||||
id: 'aio-009',
|
||||
type: 'DATA_QUALITY_SUMMARY',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-haiku-20240307',
|
||||
promptVersion: 'dq-summary-v1.2',
|
||||
schemaVersion: 'schema-v2',
|
||||
inputHash: 'f8e7d6c5',
|
||||
outputPreview: 'Qualitätsscore: 72%. Fehlende Felder: Mietpreis/m² (kritisch), letzte Aktualisierung > 6 Monate. Empfehlung: Aktualisierung anfordern.',
|
||||
createdAt: '2026-05-16T08:15:00Z',
|
||||
latencyMs: 1100,
|
||||
costEstimate: 0.0018,
|
||||
reviewStatus: 'UNREVIEWED',
|
||||
relatedEntityType: 'PROPERTY',
|
||||
relatedEntityId: 'prop-003',
|
||||
},
|
||||
{
|
||||
id: 'aio-010',
|
||||
type: 'COMPARE_SUMMARY',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-5-sonnet-20241022',
|
||||
promptVersion: 'compare-v2.0',
|
||||
schemaVersion: 'schema-v4',
|
||||
inputHash: 'b5c4d3e2',
|
||||
outputPreview: '[Invalid JSON: unexpected token at position 142 — output truncated mid-generation]',
|
||||
createdAt: '2026-05-15T17:20:00Z',
|
||||
latencyMs: 2900,
|
||||
reviewStatus: 'FLAGGED',
|
||||
relatedEntityType: 'MATCH',
|
||||
relatedEntityId: 'match-007',
|
||||
error: {
|
||||
type: 'INVALID_JSON',
|
||||
message: 'Response contained malformed JSON: unexpected token at position 142. Likely caused by mid-stream truncation.',
|
||||
recoverable: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'aio-011',
|
||||
type: 'FOLLOW_UP_QUESTIONS',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-5-sonnet-20241022',
|
||||
promptVersion: 'follow-up-v1.5',
|
||||
schemaVersion: 'schema-v3',
|
||||
inputHash: 'c6d5e4f3',
|
||||
outputPreview: '["Welche ÖPNV-Anbindung ist Mindestanforderung?","Benötigen Sie eigene Ladeinfrastruktur für E-Fahrzeuge?","Ist Co-Working-Anteil vorstellbar?"]',
|
||||
createdAt: '2026-05-15T14:50:00Z',
|
||||
latencyMs: 1450,
|
||||
costEstimate: 0.0028,
|
||||
reviewStatus: 'IN_REVIEW',
|
||||
relatedEntityType: 'NEED',
|
||||
relatedEntityId: 'need-004',
|
||||
},
|
||||
{
|
||||
id: 'aio-012',
|
||||
type: 'DECISION_BRIEF',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-5-sonnet-20241022',
|
||||
promptVersion: 'decision-v1.2',
|
||||
schemaVersion: 'schema-v2',
|
||||
inputHash: 'd7e6f5a4',
|
||||
outputPreview: 'Empfehlung: Angebot annehmen. Match-Score 91%, alle Hardkriterien erfüllt. Fläche 680m² entspricht Profil (600–750m²). Nächste Schritte: Kontaktfreigabe beantragen.',
|
||||
createdAt: '2026-05-15T11:30:00Z',
|
||||
latencyMs: 3900,
|
||||
costEstimate: 0.0198,
|
||||
reviewStatus: 'APPROVED',
|
||||
relatedEntityType: 'MATCH',
|
||||
relatedEntityId: 'match-004',
|
||||
},
|
||||
{
|
||||
id: 'aio-013',
|
||||
type: 'NEED_PARSE',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-5-sonnet-20241022',
|
||||
promptVersion: 'need-parse-v2.3',
|
||||
schemaVersion: 'schema-v4',
|
||||
inputHash: 'e8f7a6b5',
|
||||
outputPreview: '[Leere Antwort empfangen — kein Output generiert]',
|
||||
createdAt: '2026-05-15T09:05:00Z',
|
||||
reviewStatus: 'FLAGGED',
|
||||
relatedEntityType: 'NEED',
|
||||
relatedEntityId: 'need-005',
|
||||
error: {
|
||||
type: 'EMPTY_RESPONSE',
|
||||
message: 'Provider returned an empty response body. No tokens were generated. Request may have been filtered.',
|
||||
recoverable: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'aio-014',
|
||||
type: 'MATCH_EXPLANATION',
|
||||
provider: 'anthropic',
|
||||
model: 'claude-3-opus-20240229',
|
||||
promptVersion: 'match-explain-v1.9',
|
||||
schemaVersion: 'schema-v3',
|
||||
inputHash: 'f9a8b7c6',
|
||||
outputPreview: 'Detailbegründung: Bürofläche 520m² entspricht exakt dem Suchprofil (500–600m²). Mietpreis CHF 11\'200/Mt liegt 6.7% über Budget, jedoch kompensiert durch Lagequalität Zürich City.',
|
||||
createdAt: '2026-05-15T08:00:00Z',
|
||||
latencyMs: 5200,
|
||||
costEstimate: 0.0412,
|
||||
reviewStatus: 'UNREVIEWED',
|
||||
relatedEntityType: 'MATCH',
|
||||
relatedEntityId: 'match-009',
|
||||
},
|
||||
]
|
||||
Reference in New Issue
Block a user