feat: better onboarding
This commit is contained in:
@@ -291,154 +291,3 @@ func selectPostProcessingOptions(current config.LLMPostProcessingConfig) (config
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func configureLLM(configuredProviders []string, cfg *config.Config) (bool, string, string, config.LLMPostProcessingConfig, config.LLMCustomPromptConfig, error) {
|
||||
var llmProviders []string
|
||||
for _, name := range configuredProviders {
|
||||
p := provider.GetProvider(name)
|
||||
if p != nil && p.SupportsLLM() {
|
||||
llmProviders = append(llmProviders, name)
|
||||
}
|
||||
}
|
||||
|
||||
postProcessing := config.LLMPostProcessingConfig{
|
||||
RemoveStutters: true,
|
||||
AddPunctuation: true,
|
||||
FixGrammar: true,
|
||||
RemoveFillerWords: true,
|
||||
}
|
||||
customPrompt := config.LLMCustomPromptConfig{
|
||||
Enabled: false,
|
||||
Prompt: "",
|
||||
}
|
||||
|
||||
if len(llmProviders) == 0 {
|
||||
return false, "", "", postProcessing, customPrompt, nil
|
||||
}
|
||||
|
||||
var enableLLM bool = true
|
||||
enableForm := huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewConfirm().
|
||||
Title("Enable LLM Post-Processing? (Recommended)").
|
||||
Description("LLM improves transcription by fixing grammar, removing stutters, and cleaning up text").
|
||||
Affirmative("Yes (Recommended)").
|
||||
Negative("No").
|
||||
Value(&enableLLM),
|
||||
),
|
||||
).WithTheme(getTheme())
|
||||
|
||||
if err := enableForm.Run(); err != nil {
|
||||
return false, "", "", postProcessing, customPrompt, err
|
||||
}
|
||||
|
||||
if !enableLLM {
|
||||
return false, "", "", postProcessing, customPrompt, nil
|
||||
}
|
||||
|
||||
var llmOptions []huh.Option[string]
|
||||
for _, name := range llmProviders {
|
||||
p := provider.GetProvider(name)
|
||||
if p != nil {
|
||||
switch name {
|
||||
case "openai":
|
||||
llmOptions = append(llmOptions, huh.NewOption("OpenAI GPT", "openai"))
|
||||
case "groq":
|
||||
llmOptions = append(llmOptions, huh.NewOption("Groq Llama (fast)", "groq"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var selectedProvider string
|
||||
if cfg.LLM.Provider != "" {
|
||||
selectedProvider = cfg.LLM.Provider
|
||||
} else if len(llmOptions) > 0 {
|
||||
selectedProvider = llmOptions[0].Value
|
||||
}
|
||||
|
||||
providerForm := huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewSelect[string]().
|
||||
Title("LLM Provider").
|
||||
Description("Choose which service to use for text post-processing").
|
||||
Options(llmOptions...).
|
||||
Value(&selectedProvider),
|
||||
),
|
||||
).WithTheme(getTheme())
|
||||
|
||||
if err := providerForm.Run(); err != nil {
|
||||
return false, "", "", postProcessing, customPrompt, err
|
||||
}
|
||||
|
||||
modelOptions := getLLMModelOptions(selectedProvider)
|
||||
var selectedModel string
|
||||
if cfg.LLM.Model != "" {
|
||||
selectedModel = cfg.LLM.Model
|
||||
} else if len(modelOptions) > 0 {
|
||||
selectedModel = modelOptions[0].Value
|
||||
}
|
||||
|
||||
modelForm := huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewSelect[string]().
|
||||
Title("LLM Model").
|
||||
Options(modelOptions...).
|
||||
Value(&selectedModel),
|
||||
),
|
||||
).WithTheme(getTheme())
|
||||
|
||||
if err := modelForm.Run(); err != nil {
|
||||
return false, "", "", postProcessing, customPrompt, err
|
||||
}
|
||||
|
||||
if cfg.LLM.PostProcessing.RemoveStutters || cfg.LLM.PostProcessing.AddPunctuation ||
|
||||
cfg.LLM.PostProcessing.FixGrammar || cfg.LLM.PostProcessing.RemoveFillerWords {
|
||||
postProcessing = cfg.LLM.PostProcessing
|
||||
}
|
||||
|
||||
var ppErr error
|
||||
postProcessing, ppErr = selectPostProcessingOptions(postProcessing)
|
||||
if ppErr != nil {
|
||||
return false, "", "", postProcessing, customPrompt, ppErr
|
||||
}
|
||||
|
||||
var enableCustomPrompt bool
|
||||
var customPromptText string
|
||||
if cfg.LLM.CustomPrompt.Enabled {
|
||||
enableCustomPrompt = true
|
||||
customPromptText = cfg.LLM.CustomPrompt.Prompt
|
||||
}
|
||||
|
||||
customForm := huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewConfirm().
|
||||
Title("Add custom prompt?").
|
||||
Description("Add extra instructions for the LLM").
|
||||
Value(&enableCustomPrompt),
|
||||
),
|
||||
).WithTheme(getTheme())
|
||||
|
||||
if err := customForm.Run(); err != nil {
|
||||
return false, "", "", postProcessing, customPrompt, err
|
||||
}
|
||||
|
||||
if enableCustomPrompt {
|
||||
promptForm := huh.NewForm(
|
||||
huh.NewGroup(
|
||||
huh.NewText().
|
||||
Title("Custom Prompt").
|
||||
Description("Additional instructions (e.g., 'Format as bullet points')").
|
||||
Value(&customPromptText).
|
||||
CharLimit(500),
|
||||
),
|
||||
).WithTheme(getTheme())
|
||||
|
||||
if err := promptForm.Run(); err != nil {
|
||||
return false, "", "", postProcessing, customPrompt, err
|
||||
}
|
||||
customPrompt.Enabled = true
|
||||
customPrompt.Prompt = customPromptText
|
||||
}
|
||||
|
||||
return true, selectedProvider, selectedModel, postProcessing, customPrompt, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user