add simple transcription with adapters
This commit is contained in:
@@ -2,38 +2,60 @@ package transcriber
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
"fmt"
|
||||
|
||||
"github.com/leonardotrapani/hyprvoice/internal/recording"
|
||||
)
|
||||
|
||||
type TranscriptionResult struct {
|
||||
Text string
|
||||
Timestamp time.Time
|
||||
IsFinal bool
|
||||
}
|
||||
|
||||
// Main transcriber interface
|
||||
type Transcriber interface {
|
||||
Start(ctx context.Context, frameCh <-chan recording.AudioFrame) (<-chan error, error)
|
||||
Stop() error
|
||||
Stop(ctx context.Context) error
|
||||
GetTranscription() (string, error)
|
||||
}
|
||||
|
||||
// Adapter interface for different transcription backends
|
||||
type TranscriptionAdapter interface {
|
||||
Transcribe(ctx context.Context, audioData []byte) (string, error)
|
||||
}
|
||||
|
||||
// Configuration for the transcriber
|
||||
type Config struct {
|
||||
Provider string
|
||||
APIKey string
|
||||
Language string
|
||||
ChunkSize int
|
||||
BufferTime time.Duration
|
||||
Model string
|
||||
Provider string
|
||||
APIKey string
|
||||
Language string
|
||||
Model string
|
||||
}
|
||||
|
||||
func DefaultConfig() Config {
|
||||
return Config{
|
||||
Provider: "openai",
|
||||
Language: "it",
|
||||
ChunkSize: 16384,
|
||||
BufferTime: 2 * time.Second,
|
||||
Model: "whisper-1",
|
||||
Provider: "openai",
|
||||
Language: "it",
|
||||
Model: "whisper-1",
|
||||
}
|
||||
}
|
||||
|
||||
// NewTranscriber creates a new simple transcriber
|
||||
func NewTranscriber(config Config) (Transcriber, error) {
|
||||
// Create the appropriate adapter
|
||||
var adapter TranscriptionAdapter
|
||||
|
||||
switch config.Provider {
|
||||
case "openai":
|
||||
if config.APIKey == "" {
|
||||
return nil, fmt.Errorf("OpenAI API key required")
|
||||
}
|
||||
adapter = NewOpenAIAdapter(config)
|
||||
|
||||
case "whisper.cpp":
|
||||
adapter = NewWhisperCppAdapter(config)
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported provider: %s", config.Provider)
|
||||
}
|
||||
|
||||
// Create simple transcriber that collects all audio
|
||||
transcriber := NewSimpleTranscriber(config, adapter)
|
||||
|
||||
return transcriber, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user