feat: Auswertung der Sprachnotizen mit Claude (T7 L4 Tasks 14, 15)
Task 14: Port StructuredModel mit Anthropic-Adapter (@anthropic-ai/sdk 0.131.0 exakt, Lieferkette geprüft), fester Endpunkt https://api.anthropic.com (Umgebungs-Header werden entfernt), feste Systemregeln ohne Datum/Volk/Person, Transkript als Daten in Tags, strukturierte Ausgabe per JSON-Schema mit effort low, serverseitiger Fallback per VOICE_SERVER_FALLBACK abschaltbar. Jeder Vorschlag wird geprüft: bekanntes Feld, Wert in den Formulargrenzen, Zitat steht wörtlich im Gesagten (Dezimalzahl als ein Wort), Korrektur gewinnt. Netzwächter: nur die Worker-Verdrahtung erreicht den Adapter (transitiv geprüft). Task 15: Worker-Schleife voice-extractions (LISTEN + 15-s-Abfrage, ein Lauf zugleich, höchstens 20 Notizen je Lauf), Modellaufruf außerhalb jeder Transaktion mit 240-s-Obergrenze, Ergebnis versiegelt mit Ereignis nur bei gehaltenem Claim; ohne Schlüssel EXTRACT_DISABLED ohne Versuch, Tageslimit zählt jeden bezahlten Aufruf über das neue Journal VoiceExtractionCall (nur IDs, Modell, Tokens, Ergebnis; 90 Tage, nicht im Backup). Nur der Worker-Container erhält ANTHROPIC_API_KEY aus dem Secret apicore-anthropic (optional); API- und Job-Rollen warnen, wenn der Schlüssel bei ihnen gesetzt ist. Gates: Backend lint, typecheck, 4589 Unit-Tests, build; e2e 104 Suites (nur der Wetter-Test gegen die echte API schwankt); Manifest-Policy 55. Refs #27 Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
1 parent
89a1546f15
commit
6a915aad9c
38 files changed
+3612
-33
No files matched your search
@@ -2357,3 +2357,32 @@ model VoiceCaptureAudio {
|
||||
dataEnc Bytes // key-ring ciphertext of the audio, at most 2 MB plaintext
|
||||
createdAt DateTime @default(now())
|
||||
}
|
||||
|
||||
// What a call to the language model counts as. The daily budget counts every
|
||||
// outcome except AUTH and ABORTED (those never reached the model).
|
||||
enum VoiceExtractionOutcome {
|
||||
OK
|
||||
REFUSED
|
||||
TRUNCATED
|
||||
INVALID
|
||||
RETRY
|
||||
BAD_REQUEST
|
||||
AUTH
|
||||
ABORTED
|
||||
}
|
||||
|
||||
// Ledger of paid model calls for voice extraction: the daily budget and the
|
||||
// cost card read it, not the notes (a retry or a refused call costs money
|
||||
// too). Ids and numbers only - no content, no foreign key (a note may be
|
||||
// deleted while the call stays counted). Rows go after 90 days (cleanup).
|
||||
model VoiceExtractionCall {
|
||||
id String @id @default(cuid())
|
||||
at DateTime @default(now())
|
||||
model String
|
||||
inputTokens Int @default(0)
|
||||
outputTokens Int @default(0)
|
||||
outcome VoiceExtractionOutcome
|
||||
captureId String?
|
||||
|
||||
@@index([at])
|
||||
}
|
||||
Reference in new issue
Block a user