327 lines
12 KiB
Go
327 lines
12 KiB
Go
package config
|
|
|
|
// Config is the resolved combined configuration from pipeline.yml,
|
|
// campaign.yml, and session.yml.
|
|
type Config struct {
|
|
Pipeline *PipelineConfig
|
|
Campaign *CampaignConfig
|
|
Session *SessionConfig
|
|
PipelinePath string
|
|
CampaignPath string
|
|
SessionPath string
|
|
|
|
StableInputs ResolvedStableInputs
|
|
SessionSource SessionSource
|
|
}
|
|
|
|
// PipelineConfig contains durable pipeline-level settings.
|
|
type PipelineConfig struct {
|
|
Workspace WorkspaceConfig `yaml:"workspace"`
|
|
Campaigns CampaignsConfig `yaml:"campaigns"`
|
|
Storage StorageConfig `yaml:"storage"`
|
|
Spool SpoolConfig `yaml:"spool"`
|
|
Cache CacheConfig `yaml:"cache"`
|
|
Publish *PublishConfig `yaml:"publish"`
|
|
Secrets *SecretsConfig `yaml:"secrets"`
|
|
WhisperX WhisperXConfig `yaml:"whisperx"`
|
|
Seriatim SeriatimConfig `yaml:"seriatim"`
|
|
Audita AuditaConfig `yaml:"audita"`
|
|
Normalize *NormalizeConfig `yaml:"normalize"`
|
|
Trim *TrimConfig `yaml:"trim"`
|
|
Render *RenderConfig `yaml:"render"`
|
|
Scriptorium *ScriptoriumConfig `yaml:"scriptorium"`
|
|
Notarius *NotariusConfig `yaml:"notarius"`
|
|
Notification NotificationConfig `yaml:"notification"`
|
|
}
|
|
|
|
// CampaignsConfig configures the local campaign registry.
|
|
type CampaignsConfig struct {
|
|
Root string `yaml:"root"`
|
|
DefaultCampaignID string `yaml:"default_campaign_id"`
|
|
}
|
|
|
|
// CampaignConfig contains stable campaign-level identity and input defaults.
|
|
type CampaignConfig struct {
|
|
CampaignID string `yaml:"campaign_id"`
|
|
SessionTemplateFile string `yaml:"session_template_file"`
|
|
Inputs CampaignInputsConfig `yaml:"inputs"`
|
|
}
|
|
|
|
// CampaignInputsConfig contains stable campaign-level input file references.
|
|
type CampaignInputsConfig struct {
|
|
SpeakersFile string `yaml:"speakers_file"`
|
|
AutocorrectFile string `yaml:"autocorrect_file"`
|
|
GlossaryFile string `yaml:"glossary_file"`
|
|
PlayersFile string `yaml:"players_file"`
|
|
PartyFile string `yaml:"party_file"`
|
|
}
|
|
|
|
// SessionConfig contains per-session inputs and metadata.
|
|
type SessionConfig struct {
|
|
SessionID string `yaml:"session_id"`
|
|
PreviousSessionID string `yaml:"previous_session_id"`
|
|
Campaign string `yaml:"campaign"`
|
|
Date string `yaml:"date"`
|
|
Title string `yaml:"title"`
|
|
Inputs SessionInputsConfig `yaml:"inputs"`
|
|
}
|
|
|
|
// WorkspaceConfig configures local workspace behavior.
|
|
type WorkspaceConfig struct {
|
|
Root string `yaml:"root"`
|
|
CleanupAfterPublish bool `yaml:"cleanup_after_publish"`
|
|
}
|
|
|
|
// SecretsConfig configures optional local filesystem secret loading.
|
|
type SecretsConfig struct {
|
|
EnvDir string `yaml:"env_dir"`
|
|
}
|
|
|
|
// StorageConfig configures storage backends and related parameters.
|
|
type StorageConfig struct {
|
|
Backend string `yaml:"backend"`
|
|
S3 *StorageS3Config `yaml:"s3"`
|
|
}
|
|
|
|
// StorageS3Config configures S3 storage coordinates.
|
|
type StorageS3Config struct {
|
|
Bucket string `yaml:"bucket"`
|
|
RootPrefix string `yaml:"root_prefix"`
|
|
Region string `yaml:"region"`
|
|
Endpoint string `yaml:"endpoint"`
|
|
ForcePathStyle bool `yaml:"force_path_style"`
|
|
AccessKeyIDEnv string `yaml:"access_key_id_env"`
|
|
SecretKeyEnv string `yaml:"secret_access_key_env"`
|
|
}
|
|
|
|
// SpoolConfig configures local spool storage for staged data.
|
|
type SpoolConfig struct {
|
|
Root string `yaml:"root"`
|
|
DeleteAudioAfterPublish bool `yaml:"delete_audio_after_publish"`
|
|
}
|
|
|
|
// CacheConfig configures durable local caches for reusable remote inputs.
|
|
type CacheConfig struct {
|
|
Root string `yaml:"root"`
|
|
S3Audio *bool `yaml:"s3_audio"`
|
|
}
|
|
|
|
// PublishConfig configures publish behavior and source-based output uploads.
|
|
type PublishConfig struct {
|
|
Enabled *bool `yaml:"enabled"`
|
|
UploadRun *bool `yaml:"upload_run"`
|
|
Outputs []PublishOutputRule `yaml:"outputs"`
|
|
Locks []PublishLockRule `yaml:"locks"`
|
|
}
|
|
|
|
// PublishOutputRule configures one source-to-destination publish mapping.
|
|
type PublishOutputRule struct {
|
|
Source string `yaml:"source"`
|
|
Dest string `yaml:"dest"`
|
|
Required *bool `yaml:"required"`
|
|
}
|
|
|
|
// PublishLockRule prevents one source from overwriting its top-level published
|
|
// destination.
|
|
type PublishLockRule struct {
|
|
Source string `yaml:"source"`
|
|
Reason string `yaml:"reason"`
|
|
}
|
|
|
|
// PublishLockStore is the mutable per-session remote lock store.
|
|
type PublishLockStore struct {
|
|
Locks []PublishLockRule `yaml:"locks"`
|
|
}
|
|
|
|
// WhisperXConfig configures WhisperX adapter settings.
|
|
type WhisperXConfig struct {
|
|
TranscribeURL string `yaml:"transcribe_url"`
|
|
Language string `yaml:"language"`
|
|
Timeout string `yaml:"timeout"`
|
|
Retries *int `yaml:"retries"`
|
|
RetryDelay string `yaml:"retry_delay"`
|
|
Concurrency *int `yaml:"concurrency"`
|
|
}
|
|
|
|
// SeriatimConfig configures seriatim adapter settings.
|
|
type SeriatimConfig struct {
|
|
Binary string `yaml:"binary"`
|
|
Timeout string `yaml:"timeout"`
|
|
OutputSchema string `yaml:"output_schema"`
|
|
CoalesceGap *float64 `yaml:"coalesce_gap"`
|
|
Report *bool `yaml:"report"`
|
|
Env SeriatimEnvConfig `yaml:"env"`
|
|
}
|
|
|
|
// SeriatimEnvConfig configures optional advanced seriatim environment tuning.
|
|
type SeriatimEnvConfig struct {
|
|
OverlapWordRunGap *float64 `yaml:"overlap_word_run_gap"`
|
|
OverlapWordRunReorderWindow *float64 `yaml:"overlap_word_run_reorder_window"`
|
|
BackchannelMaxDuration *float64 `yaml:"backchannel_max_duration"`
|
|
FillerMaxDuration *float64 `yaml:"filler_max_duration"`
|
|
}
|
|
|
|
// AuditaConfig configures audita adapter settings.
|
|
type AuditaConfig struct {
|
|
Binary string `yaml:"binary"`
|
|
Timeout string `yaml:"timeout"`
|
|
LLMAPIKeyEnv string `yaml:"llm_api_key_env"`
|
|
Modules []string `yaml:"modules"`
|
|
BaseURL string `yaml:"base_url"`
|
|
Model string `yaml:"model"`
|
|
TotalLLMConcurrency *int `yaml:"total_llm_concurrency"`
|
|
ProposalLLMConcurrency *int `yaml:"proposal_llm_concurrency"`
|
|
ValidationModel string `yaml:"validation_model"`
|
|
ValidationLLMConcurrency *int `yaml:"validation_llm_concurrency"`
|
|
TranscriptDescription string `yaml:"transcript_description"`
|
|
ConfigPath string `yaml:"config_path"`
|
|
OutputSchema string `yaml:"output_schema"`
|
|
WorkDirRetention string `yaml:"work_dir_retention"`
|
|
Report *bool `yaml:"report"`
|
|
}
|
|
|
|
// NormalizeConfig configures normalize-stage transcript schema/output behavior.
|
|
type NormalizeConfig struct {
|
|
OutputPath string `yaml:"output_path"`
|
|
OutputSchema string `yaml:"output_schema"`
|
|
Report *bool `yaml:"report"`
|
|
|
|
outputPathSet bool `yaml:"-"`
|
|
}
|
|
|
|
// TrimConfig configures trim-stage transcript boundary behavior.
|
|
type TrimConfig struct {
|
|
Enabled *bool `yaml:"enabled"`
|
|
OutputPath string `yaml:"output_path"`
|
|
Bounds TrimBoundsConfig `yaml:"bounds"`
|
|
Seriatim TrimSeriatimConfig `yaml:"seriatim"`
|
|
}
|
|
|
|
// TrimBoundsConfig configures Scriptorium bounds prompt execution for trim.
|
|
type TrimBoundsConfig struct {
|
|
PromptID string `yaml:"prompt_id"`
|
|
ProfileID string `yaml:"profile_id"`
|
|
TranscriptInputName string `yaml:"transcript_input_name"`
|
|
OutputPath string `yaml:"output_path"`
|
|
Timeout string `yaml:"timeout"`
|
|
RenderDebug bool `yaml:"render_debug"`
|
|
RenderOutputPath string `yaml:"render_output_path"`
|
|
}
|
|
|
|
// TrimSeriatimConfig configures Seriatim options for trim output construction.
|
|
type TrimSeriatimConfig struct {
|
|
Report *bool `yaml:"report"`
|
|
}
|
|
|
|
// RenderConfig configures render-stage output formatting behavior.
|
|
type RenderConfig struct {
|
|
Enabled *bool `yaml:"enabled"`
|
|
Format string `yaml:"format"`
|
|
Title string `yaml:"title"`
|
|
IncludeTimestamps *bool `yaml:"include_timestamps"`
|
|
IncludeSegmentIDs *bool `yaml:"include_segment_ids"`
|
|
IncludeMetadata bool `yaml:"include_metadata"`
|
|
}
|
|
|
|
// ScriptoriumConfig configures Scriptorium-backed artifact generation.
|
|
type ScriptoriumConfig struct {
|
|
Binary string `yaml:"binary"`
|
|
ConfigPath string `yaml:"config_path"`
|
|
Timeout string `yaml:"timeout"`
|
|
RenderDebug bool `yaml:"render_debug"`
|
|
Artifacts map[string]ScriptoriumArtifactConfig `yaml:"artifacts"`
|
|
}
|
|
|
|
// ScriptoriumArtifactConfig configures one named output artifact workflow.
|
|
type ScriptoriumArtifactConfig struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
DependsOn []string `yaml:"depends_on"`
|
|
RenderDebug *bool `yaml:"render_debug"`
|
|
PromptID string `yaml:"prompt_id"`
|
|
ProfileID string `yaml:"profile_id"`
|
|
OutputPath string `yaml:"output_path"`
|
|
Timeout string `yaml:"timeout"`
|
|
Inputs map[string]ScriptoriumInputConfig `yaml:"inputs"`
|
|
Vars map[string]any `yaml:"vars"`
|
|
}
|
|
|
|
// ScriptoriumInputConfig configures one named prompt input source.
|
|
type ScriptoriumInputConfig struct {
|
|
Source string `yaml:"source"`
|
|
Artifact string `yaml:"artifact"`
|
|
Path string `yaml:"path"`
|
|
Required bool `yaml:"required"`
|
|
}
|
|
|
|
// NotariusConfig configures structured artifact extraction by Notarius.
|
|
type NotariusConfig struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
Binary string `yaml:"binary"`
|
|
ConfigPath string `yaml:"config_path"`
|
|
PipelineID string `yaml:"pipeline_id"`
|
|
Timeout string `yaml:"timeout"`
|
|
WorkingDirectory string `yaml:"working_directory"`
|
|
Outputs map[string]NotariusOutputConfig `yaml:"outputs"`
|
|
}
|
|
|
|
// NotariusOutputConfig declares one required extraction lane contract.
|
|
type NotariusOutputConfig struct {
|
|
LaneID string `yaml:"lane_id"`
|
|
MediaType string `yaml:"media_type"`
|
|
SchemaID string `yaml:"schema_id"`
|
|
SchemaVersion string `yaml:"schema_version"`
|
|
ModuleKey string `yaml:"module_key"`
|
|
}
|
|
|
|
// NotificationConfig configures notification backend settings.
|
|
type NotificationConfig struct {
|
|
Backend string `yaml:"backend"`
|
|
Recipient string `yaml:"recipient"`
|
|
Timeout string `yaml:"timeout"`
|
|
}
|
|
|
|
// SessionInputsConfig contains per-session input references.
|
|
type SessionInputsConfig struct {
|
|
AudioDir string `yaml:"audio_dir"`
|
|
AudioFiles []string `yaml:"audio_files"`
|
|
AudioS3 *SessionAudioS3Input `yaml:"audio_s3"`
|
|
SpeakersFile string `yaml:"speakers_file"`
|
|
AutocorrectFile string `yaml:"autocorrect_file"`
|
|
GlossaryFile string `yaml:"glossary_file"`
|
|
PlayersFile string `yaml:"players_file"`
|
|
PartyFile string `yaml:"party_file"`
|
|
}
|
|
|
|
// SessionAudioS3Input configures S3 session-audio input discovery.
|
|
type SessionAudioS3Input struct {
|
|
Prefix string `yaml:"prefix"`
|
|
}
|
|
|
|
// ResolvedStableInputs records where stable input file paths came from after
|
|
// campaign/session merge.
|
|
type ResolvedStableInputs struct {
|
|
SpeakersFile ResolvedInputFile
|
|
AutocorrectFile ResolvedInputFile
|
|
GlossaryFile ResolvedInputFile
|
|
PlayersFile ResolvedInputFile
|
|
PartyFile ResolvedInputFile
|
|
}
|
|
|
|
// ResolvedInputFile records one merged config path and its source config file.
|
|
type ResolvedInputFile struct {
|
|
Path string
|
|
ConfigPath string
|
|
Source string
|
|
}
|
|
|
|
// SessionSource records where session.yml came from before materialization.
|
|
type SessionSource struct {
|
|
Source string
|
|
LocalPath string
|
|
S3Bucket string
|
|
S3Key string
|
|
S3Size int64
|
|
S3ETag string
|
|
SpoolPath string
|
|
}
|