add simple transcription with adapters

This commit is contained in:
LeonardoTrapani
2025-08-16 18:45:30 +02:00
parent 0b64a71afd
commit 20516e8dc7
7 changed files with 323 additions and 338 deletions
+41 -19
View File
@@ -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
}