Documentation
¶
Overview ¶
Package store is the durable backend for transcriptions, quick notes, voice-agent session summaries, persona catalog (M5b), and wake-word activation audio. SQLite is the default for the Wails desktop bundle; PostgreSQL is used by the Linux Server-Target behind the Render private network. Same Store interface; the backend is picked from StoreConfig.Backend.
Audit 2026-05-24 maintainability sweep.
Index ¶
- Constants
- Variables
- func RegisterBackend(name string, factory BackendFactory)
- func ValidWakewordLabel(s string) bool
- func WithRecordOwner(ctx context.Context, owner RecordOwner) context.Context
- type AudioAsset
- type AudioAssetInput
- type AudioAssetStore
- type AudioStorageKind
- type BackendFactory
- type CustomizationListOpts
- type CustomizationReplaceOpts
- type CustomizationSourceStore
- type CustomizationStore
- type DeleteResult
- type LexiconStore
- type ListOpts
- type PostgresStore
- func (s PostgresStore) AppendRecordingSessionSegment(ctx context.Context, sessionID int64, segment RecordingSessionSegment) (int64, error)
- func (s PostgresStore) Close() error
- func (s PostgresStore) CountWakewordActivationsForUser(ctx context.Context, ownerUserID, ownerOrgID string) (int64, error)
- func (s PostgresStore) DB() *sql.DB
- func (s PostgresStore) DeleteQuickNote(ctx context.Context, id int64) error
- func (s PostgresStore) DeleteRecordingSession(ctx context.Context, id int64) error
- func (s PostgresStore) DeleteScope(ctx context.Context, scope speechstorage.Scope) (DeleteResult, error)
- func (s PostgresStore) DeleteWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (string, error)
- func (s PostgresStore) ExportScope(ctx context.Context, scope speechstorage.Scope) (*ScopeExport, error)
- func (s PostgresStore) FinishRecordingSession(ctx context.Context, id int64, summary string, endedAt time.Time) error
- func (s *PostgresStore) GetAudioAsset(ctx context.Context, ownerKind string, ownerID int64) (*AudioAsset, error)
- func (s PostgresStore) GetQuickNote(ctx context.Context, id int64) (*QuickNote, error)
- func (s PostgresStore) GetRecordingSession(ctx context.Context, id int64) (*RecordingSession, error)
- func (s PostgresStore) GetTranscription(ctx context.Context, id int64) (*Transcription, error)
- func (s PostgresStore) GetVoiceAgentSession(ctx context.Context, id int64) (*VoiceAgentSession, error)
- func (s PostgresStore) GetWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (*WakewordActivation, error)
- func (s PostgresStore) ListLexicons(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Lexicon, error)
- func (s PostgresStore) ListQuickNotes(ctx context.Context, opts ListOpts) ([]QuickNote, error)
- func (s PostgresStore) ListRecordingSessions(ctx context.Context, opts ListOpts) ([]RecordingSession, error)
- func (s PostgresStore) ListReplacements(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Replacement, error)
- func (s PostgresStore) ListRulesets(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Ruleset, error)
- func (s PostgresStore) ListTranscriptions(ctx context.Context, opts ListOpts) ([]Transcription, error)
- func (s PostgresStore) ListUserDictionaryEntries(ctx context.Context, language string) ([]UserDictionaryEntry, error)
- func (s PostgresStore) ListVoiceAgentSessions(ctx context.Context, opts ListOpts) ([]VoiceAgentSession, error)
- func (s PostgresStore) ListWakewordActivations(ctx context.Context, ownerUserID, ownerOrgID string, opts ListOpts) ([]WakewordActivation, error)
- func (s PostgresStore) ListWords(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Word, error)
- func (s PostgresStore) PinQuickNote(ctx context.Context, id int64, pinned bool) error
- func (s PostgresStore) QuickNoteCount(ctx context.Context) (int, error)
- func (s PostgresStore) RecordReplacementUsage(ctx context.Context, id string) error
- func (s PostgresStore) RecordUserDictionaryUsage(ctx context.Context, canonical, language string) error
- func (s PostgresStore) RecordWordUsage(ctx context.Context, term, language string) error
- func (s PostgresStore) ReplaceLexicons(ctx context.Context, language string, lexicons []speechcustomize.Lexicon) error
- func (s PostgresStore) ReplaceLexiconsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, ...) error
- func (s PostgresStore) ReplaceReplacements(ctx context.Context, language string, ...) error
- func (s PostgresStore) ReplaceReplacementsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, ...) error
- func (s PostgresStore) ReplaceRulesets(ctx context.Context, language string, rulesets []speechcustomize.Ruleset) error
- func (s PostgresStore) ReplaceRulesetsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, ...) error
- func (s PostgresStore) ReplaceUserDictionaryEntries(ctx context.Context, language string, entries []UserDictionaryEntry) error
- func (s PostgresStore) ReplaceWords(ctx context.Context, language string, words []speechcustomize.Word) error
- func (s PostgresStore) ReplaceWordsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, ...) error
- func (s PostgresStore) SaveQuickNote(ctx context.Context, text, language, provider string, ...) (int64, error)
- func (s PostgresStore) SaveRecordingSession(ctx context.Context, session RecordingSession) (int64, error)
- func (s PostgresStore) SaveTranscription(ctx context.Context, text, language, provider, model string, ...) error
- func (s PostgresStore) SaveTranscriptionWithAudio(ctx context.Context, text, language, provider, model string, ...) error
- func (s PostgresStore) SaveTranscriptionWithAudioAndSpeakers(ctx context.Context, text, language, provider, model string, ...) error
- func (s PostgresStore) SaveVoiceAgentSession(ctx context.Context, session VoiceAgentSession) (int64, error)
- func (s PostgresStore) SaveWakewordActivation(ctx context.Context, a WakewordActivation) (*WakewordActivation, error)
- func (s PostgresStore) SemanticCapabilities(context.Context) SemanticCapabilities
- func (s PostgresStore) Stats(ctx context.Context) (Stats, error)
- func (s PostgresStore) SumWakewordActivationBytesForUser(ctx context.Context, ownerUserID, ownerOrgID string) (int64, error)
- func (s PostgresStore) TranscriptionCount(ctx context.Context) (int, error)
- func (s PostgresStore) UpdateQuickNote(ctx context.Context, id int64, text string) error
- func (s PostgresStore) UpdateQuickNoteCapture(ctx context.Context, id int64, text, provider string, ...) error
- func (s PostgresStore) UpdateRecordingSessionCaptureStatus(ctx context.Context, id int64, status RecordingSessionCaptureStatus, ...) error
- func (s PostgresStore) UpdateRecordingSessionSummary(ctx context.Context, id int64, summary string) error
- func (s PostgresStore) UpdateRecordingSessionSummaryStatus(ctx context.Context, id int64, status RecordingSessionSummaryStatus, ...) error
- func (s PostgresStore) UpdateWakewordActivationLabel(ctx context.Context, id, ownerUserID, ownerOrgID, label string) error
- type QuickNote
- type RecordOwner
- type RecordingSession
- type RecordingSessionCaptureStatus
- type RecordingSessionKind
- type RecordingSessionSegment
- type RecordingSessionStatus
- type RecordingSessionStore
- type RecordingSessionSummaryStatus
- type ReplacementStore
- type RulesetStore
- type SQLiteStore
- func (s SQLiteStore) AppendRecordingSessionSegment(ctx context.Context, sessionID int64, segment RecordingSessionSegment) (int64, error)
- func (s SQLiteStore) Close() error
- func (s SQLiteStore) CountWakewordActivationsForUser(ctx context.Context, ownerUserID, ownerOrgID string) (int64, error)
- func (s SQLiteStore) DB() *sql.DB
- func (s SQLiteStore) DeleteQuickNote(ctx context.Context, id int64) error
- func (s SQLiteStore) DeleteRecordingSession(ctx context.Context, id int64) error
- func (s SQLiteStore) DeleteScope(ctx context.Context, scope speechstorage.Scope) (DeleteResult, error)
- func (s SQLiteStore) DeleteWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (string, error)
- func (s SQLiteStore) ExportScope(ctx context.Context, scope speechstorage.Scope) (*ScopeExport, error)
- func (s SQLiteStore) FinishRecordingSession(ctx context.Context, id int64, summary string, endedAt time.Time) error
- func (s *SQLiteStore) GetAudioAsset(ctx context.Context, ownerKind string, ownerID int64) (*AudioAsset, error)
- func (s SQLiteStore) GetQuickNote(ctx context.Context, id int64) (*QuickNote, error)
- func (s SQLiteStore) GetRecordingSession(ctx context.Context, id int64) (*RecordingSession, error)
- func (s SQLiteStore) GetTranscription(ctx context.Context, id int64) (*Transcription, error)
- func (s SQLiteStore) GetVoiceAgentSession(ctx context.Context, id int64) (*VoiceAgentSession, error)
- func (s SQLiteStore) GetWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (*WakewordActivation, error)
- func (s SQLiteStore) ListLexicons(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Lexicon, error)
- func (s SQLiteStore) ListQuickNotes(ctx context.Context, opts ListOpts) ([]QuickNote, error)
- func (s SQLiteStore) ListRecordingSessions(ctx context.Context, opts ListOpts) ([]RecordingSession, error)
- func (s SQLiteStore) ListReplacements(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Replacement, error)
- func (s SQLiteStore) ListRulesets(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Ruleset, error)
- func (s SQLiteStore) ListTranscriptions(ctx context.Context, opts ListOpts) ([]Transcription, error)
- func (s SQLiteStore) ListUserDictionaryEntries(ctx context.Context, language string) ([]UserDictionaryEntry, error)
- func (s SQLiteStore) ListVoiceAgentSessions(ctx context.Context, opts ListOpts) ([]VoiceAgentSession, error)
- func (s SQLiteStore) ListWakewordActivations(ctx context.Context, ownerUserID, ownerOrgID string, opts ListOpts) ([]WakewordActivation, error)
- func (s SQLiteStore) ListWords(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Word, error)
- func (s SQLiteStore) PinQuickNote(ctx context.Context, id int64, pinned bool) error
- func (s SQLiteStore) QuickNoteCount(ctx context.Context) (int, error)
- func (s SQLiteStore) RecordReplacementUsage(ctx context.Context, id string) error
- func (s SQLiteStore) RecordUserDictionaryUsage(ctx context.Context, canonical, language string) error
- func (s SQLiteStore) RecordWordUsage(ctx context.Context, term, language string) error
- func (s SQLiteStore) ReplaceLexicons(ctx context.Context, language string, lexicons []speechcustomize.Lexicon) error
- func (s SQLiteStore) ReplaceLexiconsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, ...) error
- func (s SQLiteStore) ReplaceReplacements(ctx context.Context, language string, ...) error
- func (s SQLiteStore) ReplaceReplacementsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, ...) error
- func (s SQLiteStore) ReplaceRulesets(ctx context.Context, language string, rulesets []speechcustomize.Ruleset) error
- func (s SQLiteStore) ReplaceRulesetsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, ...) error
- func (s SQLiteStore) ReplaceUserDictionaryEntries(ctx context.Context, language string, entries []UserDictionaryEntry) error
- func (s SQLiteStore) ReplaceWords(ctx context.Context, language string, words []speechcustomize.Word) error
- func (s SQLiteStore) ReplaceWordsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, ...) error
- func (s SQLiteStore) SaveQuickNote(ctx context.Context, text, language, provider string, ...) (int64, error)
- func (s SQLiteStore) SaveRecordingSession(ctx context.Context, session RecordingSession) (int64, error)
- func (s SQLiteStore) SaveTranscription(ctx context.Context, text, language, provider, model string, ...) error
- func (s SQLiteStore) SaveTranscriptionWithAudio(ctx context.Context, text, language, provider, model string, ...) error
- func (s SQLiteStore) SaveTranscriptionWithAudioAndSpeakers(ctx context.Context, text, language, provider, model string, ...) error
- func (s SQLiteStore) SaveVoiceAgentSession(ctx context.Context, session VoiceAgentSession) (int64, error)
- func (s SQLiteStore) SaveWakewordActivation(ctx context.Context, a WakewordActivation) (*WakewordActivation, error)
- func (s SQLiteStore) SemanticCapabilities(context.Context) SemanticCapabilities
- func (s SQLiteStore) Stats(ctx context.Context) (Stats, error)
- func (s SQLiteStore) SumWakewordActivationBytesForUser(ctx context.Context, ownerUserID, ownerOrgID string) (int64, error)
- func (s SQLiteStore) TranscriptionCount(ctx context.Context) (int, error)
- func (s SQLiteStore) UpdateQuickNote(ctx context.Context, id int64, text string) error
- func (s SQLiteStore) UpdateQuickNoteCapture(ctx context.Context, id int64, text, provider string, ...) error
- func (s SQLiteStore) UpdateRecordingSessionCaptureStatus(ctx context.Context, id int64, status RecordingSessionCaptureStatus, ...) error
- func (s SQLiteStore) UpdateRecordingSessionSummary(ctx context.Context, id int64, summary string) error
- func (s SQLiteStore) UpdateRecordingSessionSummaryStatus(ctx context.Context, id int64, status RecordingSessionSummaryStatus, ...) error
- func (s SQLiteStore) UpdateWakewordActivationLabel(ctx context.Context, id, ownerUserID, ownerOrgID, label string) error
- type Scope
- type ScopeExport
- type ScopePrivacyStore
- type SemanticCapabilities
- type SemanticCapabilityProvider
- type SemanticProvider
- type Stats
- type Store
- type StoreConfig
- type Transcription
- type TranscriptionAudioStore
- type TranscriptionSpeakerStore
- type UserDictionaryEntry
- type UserDictionaryStore
- type VoiceAgentSession
- type VoiceAgentSessionStore
- type VoiceAgentSessionSummary
- type VoiceAgentTurn
- type WakewordActivation
- type WakewordActivationStore
- type WordStore
Constants ¶
const ( WakewordLabelCorrect = "correct" WakewordLabelFalsePositive = "false_positive" WakewordLabelUnknown = "" )
Valid wake-word activation label values. Empty string means "unlabeled" — the user has not yet reviewed the clip. Any other value is rejected by UpdateWakewordActivationLabel.
Variables ¶
var ErrInvalidWakewordActivation = errors.New("store: wakeword activation missing required fields (id, owner_user_id, owner_org_id, audio_path)")
ErrInvalidWakewordActivation signals that a SaveWakewordActivation call was passed a row missing one of the required fields (id, owner_user_id, owner_org_id, audio_path). Returned before any database touch so the REST handler can surface a clear 400.
Functions ¶
func RegisterBackend ¶
func RegisterBackend(name string, factory BackendFactory)
RegisterBackend allows external modules (e.g. kombify) to register custom backends. Called from init() in private modules -- SpeechKit itself never knows about kombify.
func ValidWakewordLabel ¶ added in v0.37.8
ValidWakewordLabel reports whether s is one of the three canonical label values. Exported so the REST handler can reject bad PATCH payloads with a clear 400 before reaching the store.
func WithRecordOwner ¶ added in v0.30.0
func WithRecordOwner(ctx context.Context, owner RecordOwner) context.Context
Types ¶
type AudioAsset ¶
type AudioAsset struct {
StorageKind AudioStorageKind `json:"storageKind"`
Path string `json:"-"`
MimeType string `json:"mimeType"`
SizeBytes int64 `json:"sizeBytes"`
DurationMs int64 `json:"durationMs"`
}
type AudioAssetInput ¶ added in v0.30.0
type AudioAssetStore ¶ added in v0.31.0
type AudioAssetStore interface {
GetAudioAsset(ctx context.Context, ownerKind string, ownerID int64) (*AudioAsset, error)
}
AudioAssetStore is an optional extension for backends that persist first-class audio asset metadata alongside legacy audio_path columns.
type AudioStorageKind ¶
type AudioStorageKind string
const (
AudioStorageLocalFile AudioStorageKind = "local-file"
)
type BackendFactory ¶
type BackendFactory func(cfg StoreConfig) (Store, error)
BackendFactory creates a Store from config.
type CustomizationListOpts ¶ added in v0.45.0
type CustomizationListOpts = speechcustomize.ListOptions
type CustomizationReplaceOpts ¶ added in v0.45.0
type CustomizationReplaceOpts = speechcustomize.ReplaceOptions
type CustomizationSourceStore ¶ added in v0.45.0
type CustomizationSourceStore interface {
ReplaceWordsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, words []speechcustomize.Word) error
ReplaceReplacementsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, replacements []speechcustomize.Replacement) error
ReplaceLexiconsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, lexicons []speechcustomize.Lexicon) error
ReplaceRulesetsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, rulesets []speechcustomize.Ruleset) error
}
type CustomizationStore ¶ added in v0.45.0
type CustomizationStore interface {
WordStore
ReplacementStore
LexiconStore
RulesetStore
}
type DeleteResult ¶ added in v0.35.0
type DeleteResult struct {
RowsDeleted int `json:"rows_deleted"`
AudioFilePaths []string `json:"audio_file_paths"`
}
DeleteResult is returned by DeleteScope. The caller is responsible for unlinking AudioFilePaths from disk; the store only removes DB rows.
type LexiconStore ¶ added in v0.45.0
type LexiconStore interface {
ReplaceLexicons(ctx context.Context, language string, lexicons []speechcustomize.Lexicon) error
ListLexicons(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Lexicon, error)
}
type ListOpts ¶
type ListOpts struct {
Limit int
Offset int
Language string
After time.Time
OwnerUserID string
OwnerOrgID string
IncludeOwnerless bool
IncludeAllOwners bool
}
ListOpts controls pagination and filtering for list queries.
type PostgresStore ¶
type PostgresStore struct {
// contains filtered or unexported fields
}
PostgresStore implements Store using PostgreSQL for metadata and the local filesystem for optional raw WAV persistence. All query logic lives in the embedded *sqlStore; this type only owns connection setup and migrations.
func NewPostgresStore ¶
func NewPostgresStore(cfg StoreConfig) (*PostgresStore, error)
NewPostgresStore creates a PostgreSQL-backed store.
func (PostgresStore) AppendRecordingSessionSegment ¶ added in v0.48.0
func (PostgresStore) CountWakewordActivationsForUser ¶ added in v0.37.8
func (PostgresStore) DB ¶ added in v0.29.0
DB exposes the underlying *sql.DB so adjacent packages can build their own table-scoped persisters without the base Store interface enumerating every optional capability. Callers must treat the handle as read-mostly: it is owned by the Store and must not be closed.
func (PostgresStore) DeleteQuickNote ¶
func (PostgresStore) DeleteRecordingSession ¶ added in v0.48.0
func (PostgresStore) DeleteScope ¶ added in v0.35.0
func (s PostgresStore) DeleteScope(ctx context.Context, scope speechstorage.Scope) (DeleteResult, error)
DeleteScope removes all user-owned DB rows for the given scope across every scoped table and returns a DeleteResult with the total count of deleted rows and the distinct audio file paths that were stored under that scope (GDPR Art. 17).
Deletion order respects foreign-key constraints:
- Collect audio file paths (before rows are gone)
- Link tables (transcription_audio_assets, quick_note_audio_assets)
- audio_assets
- voice_agent_session_turns, voice_agent_session_summary_items
- recording_session_segments, recording_sessions
- voice_agent_sessions
- transcriptions
- quick_notes
- user_dictionary_entries
- store_stats row (reset to zero counts)
NOTE: Audio files on disk are NOT deleted here; only DB rows are removed. The caller receives AudioFilePaths in the returned DeleteResult and is responsible for unlinking them.
func (PostgresStore) DeleteWakewordActivation ¶ added in v0.37.8
func (s PostgresStore) DeleteWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (string, error)
DeleteWakewordActivation removes the row and returns its audio_path via a single DELETE ... RETURNING — supported by PostgreSQL and SQLite 3.35+ (modernc.org/sqlite), so both backends share one statement.
func (PostgresStore) ExportScope ¶ added in v0.35.0
func (s PostgresStore) ExportScope(ctx context.Context, scope speechstorage.Scope) (*ScopeExport, error)
ExportScope returns all user-owned records for the given scope (GDPR Art. 15).
Implementation notes:
- Fetches all rows for the scope without pagination (no LIMIT imposed).
- Audio file paths are collected from audio_assets so the caller can stream raw bytes alongside the exported JSON if needed.
- Read-only; never modifies data.
func (PostgresStore) FinishRecordingSession ¶ added in v0.48.0
func (*PostgresStore) GetAudioAsset ¶ added in v0.31.0
func (s *PostgresStore) GetAudioAsset(ctx context.Context, ownerKind string, ownerID int64) (*AudioAsset, error)
func (PostgresStore) GetQuickNote ¶
func (PostgresStore) GetRecordingSession ¶ added in v0.48.0
func (s PostgresStore) GetRecordingSession(ctx context.Context, id int64) (*RecordingSession, error)
func (PostgresStore) GetTranscription ¶
func (s PostgresStore) GetTranscription(ctx context.Context, id int64) (*Transcription, error)
func (PostgresStore) GetVoiceAgentSession ¶ added in v0.30.0
func (s PostgresStore) GetVoiceAgentSession(ctx context.Context, id int64) (*VoiceAgentSession, error)
func (PostgresStore) GetWakewordActivation ¶ added in v0.37.8
func (s PostgresStore) GetWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (*WakewordActivation, error)
func (PostgresStore) ListLexicons ¶ added in v0.45.0
func (s PostgresStore) ListLexicons(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Lexicon, error)
func (PostgresStore) ListQuickNotes ¶
func (PostgresStore) ListRecordingSessions ¶ added in v0.48.0
func (s PostgresStore) ListRecordingSessions(ctx context.Context, opts ListOpts) ([]RecordingSession, error)
func (PostgresStore) ListReplacements ¶ added in v0.45.0
func (s PostgresStore) ListReplacements(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Replacement, error)
func (PostgresStore) ListRulesets ¶ added in v0.45.0
func (s PostgresStore) ListRulesets(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Ruleset, error)
func (PostgresStore) ListTranscriptions ¶
func (s PostgresStore) ListTranscriptions(ctx context.Context, opts ListOpts) ([]Transcription, error)
func (PostgresStore) ListUserDictionaryEntries ¶ added in v0.22.4
func (s PostgresStore) ListUserDictionaryEntries(ctx context.Context, language string) ([]UserDictionaryEntry, error)
func (PostgresStore) ListVoiceAgentSessions ¶ added in v0.24.0
func (s PostgresStore) ListVoiceAgentSessions(ctx context.Context, opts ListOpts) ([]VoiceAgentSession, error)
func (PostgresStore) ListWakewordActivations ¶ added in v0.37.8
func (PostgresStore) ListWords ¶ added in v0.45.0
func (s PostgresStore) ListWords(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Word, error)
func (PostgresStore) PinQuickNote ¶
func (PostgresStore) QuickNoteCount ¶
func (PostgresStore) RecordReplacementUsage ¶ added in v0.45.0
func (PostgresStore) RecordUserDictionaryUsage ¶ added in v0.22.4
func (PostgresStore) RecordWordUsage ¶ added in v0.45.0
func (PostgresStore) ReplaceLexicons ¶ added in v0.45.0
func (PostgresStore) ReplaceLexiconsWithOptions ¶ added in v0.45.0
func (s PostgresStore) ReplaceLexiconsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, lexicons []speechcustomize.Lexicon) error
func (PostgresStore) ReplaceReplacements ¶ added in v0.45.0
func (s PostgresStore) ReplaceReplacements(ctx context.Context, language string, replacements []speechcustomize.Replacement) error
func (PostgresStore) ReplaceReplacementsWithOptions ¶ added in v0.45.0
func (s PostgresStore) ReplaceReplacementsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, replacements []speechcustomize.Replacement) error
func (PostgresStore) ReplaceRulesets ¶ added in v0.45.0
func (PostgresStore) ReplaceRulesetsWithOptions ¶ added in v0.45.0
func (s PostgresStore) ReplaceRulesetsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, rulesets []speechcustomize.Ruleset) error
func (PostgresStore) ReplaceUserDictionaryEntries ¶ added in v0.22.4
func (s PostgresStore) ReplaceUserDictionaryEntries(ctx context.Context, language string, entries []UserDictionaryEntry) error
func (PostgresStore) ReplaceWords ¶ added in v0.45.0
func (PostgresStore) ReplaceWordsWithOptions ¶ added in v0.45.0
func (s PostgresStore) ReplaceWordsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, words []speechcustomize.Word) error
func (PostgresStore) SaveQuickNote ¶
func (PostgresStore) SaveRecordingSession ¶ added in v0.48.0
func (s PostgresStore) SaveRecordingSession(ctx context.Context, session RecordingSession) (int64, error)
func (PostgresStore) SaveTranscription ¶
func (PostgresStore) SaveTranscriptionWithAudio ¶ added in v0.30.0
func (PostgresStore) SaveTranscriptionWithAudioAndSpeakers ¶ added in v0.42.0
func (s PostgresStore) SaveTranscriptionWithAudioAndSpeakers(ctx context.Context, text, language, provider, model string, durationMs, latencyMs int64, audio AudioAssetInput, speakers *speaker.DiarizationResult) error
func (PostgresStore) SaveVoiceAgentSession ¶ added in v0.24.0
func (s PostgresStore) SaveVoiceAgentSession(ctx context.Context, session VoiceAgentSession) (int64, error)
func (PostgresStore) SaveWakewordActivation ¶ added in v0.37.8
func (s PostgresStore) SaveWakewordActivation(ctx context.Context, a WakewordActivation) (*WakewordActivation, error)
func (PostgresStore) SemanticCapabilities ¶
func (s PostgresStore) SemanticCapabilities(context.Context) SemanticCapabilities
func (PostgresStore) SumWakewordActivationBytesForUser ¶ added in v0.37.8
func (PostgresStore) TranscriptionCount ¶
func (PostgresStore) UpdateQuickNote ¶
func (PostgresStore) UpdateQuickNoteCapture ¶
func (PostgresStore) UpdateRecordingSessionCaptureStatus ¶ added in v0.48.0
func (PostgresStore) UpdateRecordingSessionSummary ¶ added in v0.48.0
func (PostgresStore) UpdateRecordingSessionSummaryStatus ¶ added in v0.48.0
type QuickNote ¶
type QuickNote struct {
ID int64
Text string
Language string
Provider string
DurationMs int64
LatencyMs int64
AudioPath string
Audio *AudioAsset
Pinned bool
CreatedAt time.Time
UpdatedAt time.Time
}
QuickNote represents a user-created dictation note.
type RecordOwner ¶ added in v0.30.0
RecordOwner captures the caller identity persisted with server-owned records. Store does not import server middleware, so HTTP handlers translate auth identity into this small value.
func RecordOwnerFromContext ¶ added in v0.30.0
func RecordOwnerFromContext(ctx context.Context) (RecordOwner, bool)
type RecordingSession ¶ added in v0.48.0
type RecordingSession struct {
ID int64 `json:"id"`
ExternalID string `json:"externalId,omitempty"`
Kind RecordingSessionKind `json:"kind"`
Status RecordingSessionStatus `json:"status"`
CaptureStatus RecordingSessionCaptureStatus `json:"captureStatus"`
SummaryStatus RecordingSessionSummaryStatus `json:"summaryStatus"`
SummaryError string `json:"summaryError,omitempty"`
Title string `json:"title,omitempty"`
Language string `json:"language"`
Provider string `json:"provider,omitempty"`
Model string `json:"model,omitempty"`
InputSource string `json:"inputSource,omitempty"`
ProcessingMode string `json:"processingMode,omitempty"`
Summary string `json:"summary,omitempty"`
StartedAt time.Time `json:"startedAt"`
EndedAt time.Time `json:"endedAt,omitempty"`
CaptureStartedAt time.Time `json:"captureStartedAt,omitempty"`
CapturePausedAt time.Time `json:"capturePausedAt,omitempty"`
CaptureStoppedAt time.Time `json:"captureStoppedAt,omitempty"`
SummaryUpdatedAt time.Time `json:"summaryUpdatedAt,omitempty"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
OwnerUserID string `json:"ownerUserId,omitempty"`
OwnerOrgID string `json:"ownerOrgId,omitempty"`
OwnerSource string `json:"ownerSource,omitempty"`
Segments []RecordingSessionSegment `json:"segments,omitempty"`
}
type RecordingSessionCaptureStatus ¶ added in v0.48.0
type RecordingSessionCaptureStatus string
const ( RecordingSessionCaptureIdle RecordingSessionCaptureStatus = "idle" RecordingSessionCaptureRecording RecordingSessionCaptureStatus = "recording" RecordingSessionCapturePaused RecordingSessionCaptureStatus = "paused" RecordingSessionCaptureStopped RecordingSessionCaptureStatus = "stopped" )
type RecordingSessionKind ¶ added in v0.48.0
type RecordingSessionKind string
const ( RecordingSessionKindDictation RecordingSessionKind = "dictation" RecordingSessionKindMeeting RecordingSessionKind = "meeting" )
type RecordingSessionSegment ¶ added in v0.48.0
type RecordingSessionSegment struct {
ID int64 `json:"id"`
SessionID int64 `json:"sessionId"`
SegmentIndex int `json:"segmentIndex"`
TranscriptionID int64 `json:"transcriptionId,omitempty"`
ProviderItemID string `json:"providerItemId,omitempty"`
Text string `json:"text"`
IsFinal bool `json:"isFinal"`
StartedMs int64 `json:"startedMs"`
EndedMs int64 `json:"endedMs"`
CreatedAt time.Time `json:"createdAt"`
}
type RecordingSessionStatus ¶ added in v0.48.0
type RecordingSessionStatus string
const ( RecordingSessionStatusActive RecordingSessionStatus = "active" RecordingSessionStatusFinished RecordingSessionStatus = "finished" RecordingSessionStatusFailed RecordingSessionStatus = "failed" )
type RecordingSessionStore ¶ added in v0.48.0
type RecordingSessionStore interface {
SaveRecordingSession(ctx context.Context, session RecordingSession) (int64, error)
ListRecordingSessions(ctx context.Context, opts ListOpts) ([]RecordingSession, error)
AppendRecordingSessionSegment(ctx context.Context, sessionID int64, segment RecordingSessionSegment) (int64, error)
UpdateRecordingSessionSummary(ctx context.Context, id int64, summary string) error
UpdateRecordingSessionCaptureStatus(ctx context.Context, id int64, status RecordingSessionCaptureStatus, at time.Time) error
UpdateRecordingSessionSummaryStatus(ctx context.Context, id int64, status RecordingSessionSummaryStatus, message string, at time.Time) error
FinishRecordingSession(ctx context.Context, id int64, summary string, endedAt time.Time) error
GetRecordingSession(ctx context.Context, id int64) (*RecordingSession, error)
DeleteRecordingSession(ctx context.Context, id int64) error
}
RecordingSessionStore is an optional extension for long-running dictation and meeting capture sessions. Segment rows can link to ordinary transcriptions, so the existing dashboard/library records stay reusable.
type RecordingSessionSummaryStatus ¶ added in v0.48.0
type RecordingSessionSummaryStatus string
const ( RecordingSessionSummaryIdle RecordingSessionSummaryStatus = "idle" RecordingSessionSummaryRunning RecordingSessionSummaryStatus = "running" RecordingSessionSummaryReady RecordingSessionSummaryStatus = "ready" RecordingSessionSummaryFailed RecordingSessionSummaryStatus = "failed" )
type ReplacementStore ¶ added in v0.45.0
type ReplacementStore interface {
ReplaceReplacements(ctx context.Context, language string, replacements []speechcustomize.Replacement) error
ListReplacements(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Replacement, error)
RecordReplacementUsage(ctx context.Context, id string) error
}
type RulesetStore ¶ added in v0.45.0
type RulesetStore interface {
ReplaceRulesets(ctx context.Context, language string, rulesets []speechcustomize.Ruleset) error
ListRulesets(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Ruleset, error)
}
type SQLiteStore ¶
type SQLiteStore struct {
// contains filtered or unexported fields
}
SQLiteStore implements Store using a local SQLite database via modernc.org/sqlite (pure Go, no CGo required). All query logic lives in the embedded *sqlStore; this type only owns connection setup and migrations.
func NewSQLiteStore ¶
func NewSQLiteStore(cfg StoreConfig) (*SQLiteStore, error)
NewSQLiteStore opens or creates a SQLite feedback database.
func (SQLiteStore) AppendRecordingSessionSegment ¶ added in v0.48.0
func (SQLiteStore) CountWakewordActivationsForUser ¶ added in v0.37.8
func (SQLiteStore) DB ¶ added in v0.26.0
DB exposes the underlying *sql.DB so adjacent packages can build their own table-scoped persisters without the base Store interface enumerating every optional capability. Callers must treat the handle as read-mostly: it is owned by the Store and must not be closed.
func (SQLiteStore) DeleteQuickNote ¶
func (SQLiteStore) DeleteRecordingSession ¶ added in v0.48.0
func (SQLiteStore) DeleteScope ¶ added in v0.35.0
func (s SQLiteStore) DeleteScope(ctx context.Context, scope speechstorage.Scope) (DeleteResult, error)
DeleteScope removes all user-owned DB rows for the given scope across every scoped table and returns a DeleteResult with the total count of deleted rows and the distinct audio file paths that were stored under that scope (GDPR Art. 17).
Deletion order respects foreign-key constraints:
- Collect audio file paths (before rows are gone)
- Link tables (transcription_audio_assets, quick_note_audio_assets)
- audio_assets
- voice_agent_session_turns, voice_agent_session_summary_items
- recording_session_segments, recording_sessions
- voice_agent_sessions
- transcriptions
- quick_notes
- user_dictionary_entries
- store_stats row (reset to zero counts)
NOTE: Audio files on disk are NOT deleted here; only DB rows are removed. The caller receives AudioFilePaths in the returned DeleteResult and is responsible for unlinking them.
func (SQLiteStore) DeleteWakewordActivation ¶ added in v0.37.8
func (s SQLiteStore) DeleteWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (string, error)
DeleteWakewordActivation removes the row and returns its audio_path via a single DELETE ... RETURNING — supported by PostgreSQL and SQLite 3.35+ (modernc.org/sqlite), so both backends share one statement.
func (SQLiteStore) ExportScope ¶ added in v0.35.0
func (s SQLiteStore) ExportScope(ctx context.Context, scope speechstorage.Scope) (*ScopeExport, error)
ExportScope returns all user-owned records for the given scope (GDPR Art. 15).
Implementation notes:
- Fetches all rows for the scope without pagination (no LIMIT imposed).
- Audio file paths are collected from audio_assets so the caller can stream raw bytes alongside the exported JSON if needed.
- Read-only; never modifies data.
func (SQLiteStore) FinishRecordingSession ¶ added in v0.48.0
func (*SQLiteStore) GetAudioAsset ¶ added in v0.31.0
func (s *SQLiteStore) GetAudioAsset(ctx context.Context, ownerKind string, ownerID int64) (*AudioAsset, error)
func (SQLiteStore) GetQuickNote ¶
func (SQLiteStore) GetRecordingSession ¶ added in v0.48.0
func (s SQLiteStore) GetRecordingSession(ctx context.Context, id int64) (*RecordingSession, error)
func (SQLiteStore) GetTranscription ¶
func (s SQLiteStore) GetTranscription(ctx context.Context, id int64) (*Transcription, error)
func (SQLiteStore) GetVoiceAgentSession ¶ added in v0.30.0
func (s SQLiteStore) GetVoiceAgentSession(ctx context.Context, id int64) (*VoiceAgentSession, error)
func (SQLiteStore) GetWakewordActivation ¶ added in v0.37.8
func (s SQLiteStore) GetWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (*WakewordActivation, error)
func (SQLiteStore) ListLexicons ¶ added in v0.45.0
func (s SQLiteStore) ListLexicons(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Lexicon, error)
func (SQLiteStore) ListQuickNotes ¶
func (SQLiteStore) ListRecordingSessions ¶ added in v0.48.0
func (s SQLiteStore) ListRecordingSessions(ctx context.Context, opts ListOpts) ([]RecordingSession, error)
func (SQLiteStore) ListReplacements ¶ added in v0.45.0
func (s SQLiteStore) ListReplacements(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Replacement, error)
func (SQLiteStore) ListRulesets ¶ added in v0.45.0
func (s SQLiteStore) ListRulesets(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Ruleset, error)
func (SQLiteStore) ListTranscriptions ¶
func (s SQLiteStore) ListTranscriptions(ctx context.Context, opts ListOpts) ([]Transcription, error)
func (SQLiteStore) ListUserDictionaryEntries ¶ added in v0.22.4
func (s SQLiteStore) ListUserDictionaryEntries(ctx context.Context, language string) ([]UserDictionaryEntry, error)
func (SQLiteStore) ListVoiceAgentSessions ¶ added in v0.24.0
func (s SQLiteStore) ListVoiceAgentSessions(ctx context.Context, opts ListOpts) ([]VoiceAgentSession, error)
func (SQLiteStore) ListWakewordActivations ¶ added in v0.37.8
func (SQLiteStore) ListWords ¶ added in v0.45.0
func (s SQLiteStore) ListWords(ctx context.Context, opts CustomizationListOpts) ([]speechcustomize.Word, error)
func (SQLiteStore) PinQuickNote ¶
func (SQLiteStore) QuickNoteCount ¶
func (SQLiteStore) RecordReplacementUsage ¶ added in v0.45.0
func (SQLiteStore) RecordUserDictionaryUsage ¶ added in v0.22.4
func (SQLiteStore) RecordWordUsage ¶ added in v0.45.0
func (SQLiteStore) ReplaceLexicons ¶ added in v0.45.0
func (SQLiteStore) ReplaceLexiconsWithOptions ¶ added in v0.45.0
func (s SQLiteStore) ReplaceLexiconsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, lexicons []speechcustomize.Lexicon) error
func (SQLiteStore) ReplaceReplacements ¶ added in v0.45.0
func (s SQLiteStore) ReplaceReplacements(ctx context.Context, language string, replacements []speechcustomize.Replacement) error
func (SQLiteStore) ReplaceReplacementsWithOptions ¶ added in v0.45.0
func (s SQLiteStore) ReplaceReplacementsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, replacements []speechcustomize.Replacement) error
func (SQLiteStore) ReplaceRulesets ¶ added in v0.45.0
func (SQLiteStore) ReplaceRulesetsWithOptions ¶ added in v0.45.0
func (s SQLiteStore) ReplaceRulesetsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, rulesets []speechcustomize.Ruleset) error
func (SQLiteStore) ReplaceUserDictionaryEntries ¶ added in v0.22.4
func (s SQLiteStore) ReplaceUserDictionaryEntries(ctx context.Context, language string, entries []UserDictionaryEntry) error
func (SQLiteStore) ReplaceWords ¶ added in v0.45.0
func (SQLiteStore) ReplaceWordsWithOptions ¶ added in v0.45.0
func (s SQLiteStore) ReplaceWordsWithOptions(ctx context.Context, opts CustomizationReplaceOpts, words []speechcustomize.Word) error
func (SQLiteStore) SaveQuickNote ¶
func (SQLiteStore) SaveRecordingSession ¶ added in v0.48.0
func (s SQLiteStore) SaveRecordingSession(ctx context.Context, session RecordingSession) (int64, error)
func (SQLiteStore) SaveTranscription ¶
func (SQLiteStore) SaveTranscriptionWithAudio ¶ added in v0.30.0
func (SQLiteStore) SaveTranscriptionWithAudioAndSpeakers ¶ added in v0.42.0
func (s SQLiteStore) SaveTranscriptionWithAudioAndSpeakers(ctx context.Context, text, language, provider, model string, durationMs, latencyMs int64, audio AudioAssetInput, speakers *speaker.DiarizationResult) error
func (SQLiteStore) SaveVoiceAgentSession ¶ added in v0.24.0
func (s SQLiteStore) SaveVoiceAgentSession(ctx context.Context, session VoiceAgentSession) (int64, error)
func (SQLiteStore) SaveWakewordActivation ¶ added in v0.37.8
func (s SQLiteStore) SaveWakewordActivation(ctx context.Context, a WakewordActivation) (*WakewordActivation, error)
func (SQLiteStore) SemanticCapabilities ¶
func (s SQLiteStore) SemanticCapabilities(context.Context) SemanticCapabilities
func (SQLiteStore) SumWakewordActivationBytesForUser ¶ added in v0.37.8
func (SQLiteStore) TranscriptionCount ¶
func (SQLiteStore) UpdateQuickNote ¶
func (SQLiteStore) UpdateQuickNoteCapture ¶
func (SQLiteStore) UpdateRecordingSessionCaptureStatus ¶ added in v0.48.0
func (SQLiteStore) UpdateRecordingSessionSummary ¶ added in v0.48.0
func (SQLiteStore) UpdateRecordingSessionSummaryStatus ¶ added in v0.48.0
type Scope ¶ added in v0.35.0
type Scope = speechstorage.Scope
Scope is an alias for the public speechkit storage Scope, re-exported so callers within this package (and callers that only import store) do not need to reference the pkg/speechkit/storage sub-package directly.
type ScopeExport ¶ added in v0.35.0
type ScopeExport struct {
Scope Scope `json:"scope"`
Transcriptions []Transcription `json:"transcriptions"`
QuickNotes []QuickNote `json:"quick_notes"`
VoiceAgentSessions []VoiceAgentSession `json:"voice_agent_sessions"`
RecordingSessions []RecordingSession `json:"recording_sessions,omitempty"`
DictionaryEntries []UserDictionaryEntry `json:"dictionary_entries,omitempty"`
AudioAssetPaths []string `json:"audio_asset_paths"`
}
ScopeExport is the structured payload returned by ExportScope (GDPR Art. 15).
type ScopePrivacyStore ¶ added in v0.35.0
type ScopePrivacyStore interface {
// ExportScope returns all user-owned records for the given scope. The
// returned ScopeExport includes audio asset paths; the caller is
// responsible for streaming the raw audio bytes if needed.
ExportScope(ctx context.Context, scope Scope) (*ScopeExport, error)
// DeleteScope removes all user-owned DB rows for the given scope across
// every scoped table. Returns a DeleteResult with the total row count and
// the distinct audio file paths that were associated with those rows.
// The caller must unlink AudioFilePaths from disk; the store does not.
DeleteScope(ctx context.Context, scope Scope) (DeleteResult, error)
}
ScopePrivacyStore is an optional extension for backends that implement GDPR Subject-Rights operations scoped to a Storage-3.0 scope.
Both methods operate entirely within the scope boundaries — no cross-scope data is ever returned or deleted. Audio files on disk are NOT removed by DeleteScope (only the database rows are deleted). The caller receives the paths in DeleteResult and is responsible for unlinking them. Disk cleanup for ExportScope is the caller's responsibility (stream the paths returned in AudioAssetPaths alongside the JSON).
type SemanticCapabilities ¶
type SemanticCapabilities struct {
Provider SemanticProvider `json:"provider"`
FullText bool `json:"fullText"`
Embeddings bool `json:"embeddings"`
VectorSearch bool `json:"vectorSearch"`
}
type SemanticCapabilityProvider ¶
type SemanticCapabilityProvider interface {
SemanticCapabilities(ctx context.Context) SemanticCapabilities
}
SemanticCapabilityProvider is an optional extension for stores that can advertise indexing/vector capabilities without forcing every backend to implement semantic features immediately.
type SemanticProvider ¶
type SemanticProvider string
const (
SemanticProviderNone SemanticProvider = "none"
)
type Store ¶
type Store interface {
// Transcriptions
SaveTranscription(ctx context.Context, text, language, provider, model string, durationMs, latencyMs int64, audioData []byte) error
GetTranscription(ctx context.Context, id int64) (*Transcription, error)
ListTranscriptions(ctx context.Context, opts ListOpts) ([]Transcription, error)
TranscriptionCount(ctx context.Context) (int, error)
// Quick Notes
SaveQuickNote(ctx context.Context, text, language, provider string, durationMs, latencyMs int64, audioData []byte) (int64, error)
GetQuickNote(ctx context.Context, id int64) (*QuickNote, error)
ListQuickNotes(ctx context.Context, opts ListOpts) ([]QuickNote, error)
UpdateQuickNote(ctx context.Context, id int64, text string) error
UpdateQuickNoteCapture(ctx context.Context, id int64, text, provider string, durationMs, latencyMs int64, audioData []byte) error
PinQuickNote(ctx context.Context, id int64, pinned bool) error
DeleteQuickNote(ctx context.Context, id int64) error
QuickNoteCount(ctx context.Context) (int, error)
Stats(ctx context.Context) (Stats, error)
// Lifecycle
Close() error
}
Store is the central storage abstraction. Each backend (SQLite, PostgreSQL, kombify Cloud) implements this interface.
func New ¶
func New(cfg StoreConfig) (Store, error)
New creates a Store backend based on the config.
type StoreConfig ¶
type StoreConfig struct {
Backend string `toml:"backend"` // "sqlite" | "postgres" | registered name
SQLitePath string `toml:"sqlite_path"`
PostgresDSN string `toml:"postgres_dsn"`
SaveAudio bool `toml:"save_audio"`
AudioRetentionDays int `toml:"audio_retention_days"`
MaxAudioStorageMB int `toml:"max_audio_storage_mb"`
TranscriptionModelHints map[string]string
DefaultScope speechstorage.Scope
ScopePolicy speechstorage.ScopePolicy
}
StoreConfig holds configuration for store backend selection.
type Transcription ¶
type Transcription struct {
ID int64 `json:"id"`
Text string `json:"text"`
Language string `json:"language"`
Provider string `json:"provider"`
Model string `json:"model"`
DurationMs int64 `json:"durationMs"`
LatencyMs int64 `json:"latencyMs"`
AudioPath string `json:"audioPath,omitempty"`
Audio *AudioAsset `json:"audio,omitempty"`
CreatedAt time.Time `json:"createdAt"`
OwnerUserID string `json:"ownerUserId,omitempty"`
OwnerOrgID string `json:"ownerOrgId,omitempty"`
OwnerSource string `json:"ownerSource,omitempty"`
Speakers *speaker.DiarizationResult `json:"speakers,omitempty"`
}
Transcription represents a saved transcription record.
type TranscriptionAudioStore ¶ added in v0.30.0
type TranscriptionAudioStore interface {
SaveTranscriptionWithAudio(ctx context.Context, text, language, provider, model string, durationMs, latencyMs int64, audio AudioAssetInput) error
}
TranscriptionAudioStore is implemented by stores that can persist transcription audio with accurate source metadata.
type TranscriptionSpeakerStore ¶ added in v0.42.0
type TranscriptionSpeakerStore interface {
SaveTranscriptionWithAudioAndSpeakers(ctx context.Context, text, language, provider, model string, durationMs, latencyMs int64, audio AudioAssetInput, speakers *speaker.DiarizationResult) error
}
TranscriptionSpeakerStore is implemented by stores that can persist normalized speaker diarization metadata alongside a transcription.
type UserDictionaryEntry ¶ added in v0.22.4
type UserDictionaryStore ¶ added in v0.22.4
type UserDictionaryStore interface {
ReplaceUserDictionaryEntries(ctx context.Context, language string, entries []UserDictionaryEntry) error
ListUserDictionaryEntries(ctx context.Context, language string) ([]UserDictionaryEntry, error)
RecordUserDictionaryUsage(ctx context.Context, canonical, language string) error
}
UserDictionaryStore is an optional extension for stores that persist user-specific dictation terms outside config.toml.
type VoiceAgentSession ¶ added in v0.24.0
type VoiceAgentSession struct {
ID int64 `json:"id"`
StartedAt time.Time `json:"startedAt"`
EndedAt time.Time `json:"endedAt"`
Language string `json:"language"`
ProviderProfileID string `json:"providerProfileId,omitempty"`
RuntimeKind string `json:"runtimeKind,omitempty"`
Transcript string `json:"transcript,omitempty"`
Turns []VoiceAgentTurn `json:"turns,omitempty"`
Summary VoiceAgentSessionSummary `json:"summary"`
CreatedAt time.Time `json:"createdAt"`
OwnerUserID string `json:"ownerUserId,omitempty"`
OwnerOrgID string `json:"ownerOrgId,omitempty"`
OwnerSource string `json:"ownerSource,omitempty"`
}
type VoiceAgentSessionStore ¶ added in v0.24.0
type VoiceAgentSessionStore interface {
SaveVoiceAgentSession(ctx context.Context, session VoiceAgentSession) (int64, error)
GetVoiceAgentSession(ctx context.Context, id int64) (*VoiceAgentSession, error)
ListVoiceAgentSessions(ctx context.Context, opts ListOpts) ([]VoiceAgentSession, error)
}
VoiceAgentSessionStore is an optional extension for backends that persist Voice Agent dialogue summaries.
type VoiceAgentSessionSummary ¶ added in v0.24.0
type VoiceAgentSessionSummary struct {
Title string `json:"title,omitempty"`
Summary string `json:"summary"`
Ideas []string `json:"ideas,omitempty"`
Decisions []string `json:"decisions,omitempty"`
OpenQuestions []string `json:"openQuestions,omitempty"`
NextSteps []string `json:"nextSteps,omitempty"`
RawText string `json:"rawText,omitempty"`
}
type VoiceAgentTurn ¶ added in v0.24.0
type WakewordActivation ¶ added in v0.37.8
type WakewordActivation struct {
ID string `json:"id"`
OwnerUserID string `json:"owner_user_id"`
OwnerOrgID string `json:"owner_org_id"`
PhraseID string `json:"phrase_id"`
Phrase string `json:"phrase"`
Backend string `json:"backend"`
Score float64 `json:"score"`
CapturedAt time.Time `json:"captured_at"`
UploadedAt time.Time `json:"uploaded_at"`
Label string `json:"label,omitempty"`
AudioPath string `json:"audio_path"`
AudioBytes int64 `json:"audio_bytes"`
SampleRate int `json:"sample_rate"`
PreRollMs int `json:"pre_roll_ms"`
PostRollMs int `json:"post_roll_ms"`
MetadataJSON string `json:"metadata_json,omitempty"`
}
WakewordActivation is the metadata row for one captured + uploaded wake-word activation. Audio bytes live on the filesystem under AudioPath (relative to <server.training_data.audio_dir>).
type WakewordActivationStore ¶ added in v0.37.8
type WakewordActivationStore interface {
// SaveWakewordActivation inserts a new activation row. Returns
// the activation as stored (with uploaded_at populated by the
// store). The ID field must be set by the caller (client-
// generated ULIDs / sortable timestamps); empty ID is rejected.
SaveWakewordActivation(ctx context.Context, a WakewordActivation) (*WakewordActivation, error)
// GetWakewordActivation returns one activation by ID, scoped to
// the supplied owner. Returns sql.ErrNoRows when the ID belongs
// to a different scope so callers cannot leak existence info
// across tenants.
GetWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (*WakewordActivation, error)
// ListWakewordActivations returns the caller's activations
// (paginated newest-first). Use ListOpts.Limit + .Cursor for
// pagination — the cursor is the captured_at timestamp of the
// last item from the previous page.
ListWakewordActivations(ctx context.Context, ownerUserID, ownerOrgID string, opts ListOpts) ([]WakewordActivation, error)
// UpdateWakewordActivationLabel sets the label field (empty
// string clears the label). Scoped to owner — returns
// sql.ErrNoRows when the ID is in a different scope.
UpdateWakewordActivationLabel(ctx context.Context, id, ownerUserID, ownerOrgID, label string) error
// DeleteWakewordActivation removes the row + returns the
// audio_path so the caller can unlink the file from disk. The
// store itself does not touch the filesystem.
DeleteWakewordActivation(ctx context.Context, id, ownerUserID, ownerOrgID string) (audioPath string, err error)
// CountWakewordActivationsForUser returns the row count for one
// owner. Used by quota enforcement (per_user_quota_bytes) and
// the admin dashboard.
CountWakewordActivationsForUser(ctx context.Context, ownerUserID, ownerOrgID string) (int64, error)
// SumWakewordActivationBytesForUser returns the total audio_bytes
// of all activations one owner has stored. Used by the quota
// gate in the upload endpoint.
SumWakewordActivationBytesForUser(ctx context.Context, ownerUserID, ownerOrgID string) (int64, error)
}
WakewordActivationStore is the v0.37.5+ extension for backends that persist wake-word activation training-data uploads. Audio bytes live on the filesystem; this interface manages only metadata + relative paths. Every method is scoped to an Identity{User,Org} so multi-tenant installs cannot cross-share recordings.
SaveWakewordActivation expects the caller to have already written the audio file to disk under audio_path. Implementations refuse inserts where audio_path is empty.