Files
hyprvoice/internal/llm/llm.go
T
thread 034ee026b1
CI / Test (push) Successful in 46s
LLMIFY THIS MOFO
2026-09-01 01:36:17 -04:00

52 lines
1.2 KiB
Go

package llm
import (
"context"
"fmt"
)
// Adapter interface for LLM text processing
type Adapter interface {
Process(ctx context.Context, text string) (string, error)
}
// Config holds LLM adapter configuration
type Config struct {
Provider string
APIKey string
Model string
RemoveStutters bool
AddPunctuation bool
FixGrammar bool
RemoveFillerWords bool
CustomPrompt string
Keywords []string
BaseURL string
}
// NewAdapter creates an LLM adapter based on the provider
func NewAdapter(cfg Config) (Adapter, error) {
switch cfg.Provider {
case "openai":
if cfg.APIKey == "" {
return nil, fmt.Errorf("OpenAI API key required")
}
return NewOpenAIAdapter(cfg), nil
case "groq":
if cfg.APIKey == "" {
return nil, fmt.Errorf("Groq API key required")
}
return NewGroqAdapter(cfg), nil
case "llama-swap":
if cfg.APIKey == "" {
return nil, fmt.Errorf("LlamaSwap API key required")
}
if cfg.BaseURL == "" {
return nil, fmt.Errorf("LlamaSwap base_url required")
}
return NewOpenAIAdapter(cfg), nil
default:
return nil, fmt.Errorf("unsupported LLM provider: %s", cfg.Provider)
}
}