| package backend |
|
|
| import ( |
| "context" |
| "fmt" |
| "time" |
|
|
| "github.com/mudler/LocalAI/core/config" |
| "github.com/mudler/LocalAI/core/schema" |
|
|
| "github.com/mudler/LocalAI/pkg/grpc/proto" |
| "github.com/mudler/LocalAI/pkg/model" |
| ) |
|
|
| func ModelTranscription(audio, language string, translate bool, diarize bool, prompt string, ml *model.ModelLoader, modelConfig config.ModelConfig, appConfig *config.ApplicationConfig) (*schema.TranscriptionResult, error) { |
|
|
| if modelConfig.Backend == "" { |
| modelConfig.Backend = model.WhisperBackend |
| } |
|
|
| opts := ModelOptions(modelConfig, appConfig) |
|
|
| transcriptionModel, err := ml.Load(opts...) |
| if err != nil { |
| return nil, err |
| } |
|
|
| if transcriptionModel == nil { |
| return nil, fmt.Errorf("could not load transcription model") |
| } |
|
|
| r, err := transcriptionModel.AudioTranscription(context.Background(), &proto.TranscriptRequest{ |
| Dst: audio, |
| Language: language, |
| Translate: translate, |
| Diarize: diarize, |
| Threads: uint32(*modelConfig.Threads), |
| Prompt: prompt, |
| }) |
| if err != nil { |
| return nil, err |
| } |
| tr := &schema.TranscriptionResult{ |
| Text: r.Text, |
| } |
| for _, s := range r.Segments { |
| var tks []int |
| for _, t := range s.Tokens { |
| tks = append(tks, int(t)) |
| } |
| tr.Segments = append(tr.Segments, |
| schema.TranscriptionSegment{ |
| Text: s.Text, |
| Id: int(s.Id), |
| Start: time.Duration(s.Start), |
| End: time.Duration(s.End), |
| Tokens: tks, |
| }) |
| } |
| return tr, err |
| } |
|
|