package llm import ( "context" "time" ) // VoiceInterval is the minimum gap between voice-consistency passes for one // document. The pass is whole-document and slow, and it runs on an explicit // user action rather than a typing cadence, so this floor only guards the // inference endpoint against the button being mashed. const VoiceInterval = 20 * time.Second // RunVoice sends the WHOLE document — deliberately NOT TruncateDoc'd, since // voice consistency is judged against the established voice everywhere else — // for a Tier-1 voice pass and parses the JSON result. It reuses the checkpoint's // tolerant parser and a larger token budget, since one pass may flag several // passages. Each flag carries a null replacement (awareness-only). // The tone argument is accepted for a uniform pass signature but ignored: voice // consistency is judged against the document's own established voice, not an // externally-chosen register. func RunVoice(ctx context.Context, client LLMClient, contentText, _ string) ([]RawSuggestion, error) { raw, err := client.Complete(ctx, CompletionRequest{ Messages: VoiceMessages(contentText), MaxTokens: 2048, Temperature: 0.3, RepetitionPenalty: 1.15, TopP: 0.9, Stop: []string{"```", "\n\n\n\n"}, }) if err != nil { return nil, err } return ParseCheckpoint(raw) }