renovate/github.com-nomic-ai-gpt4all-gpt4all-bindings-golang-digest
parent
1d2ae46ddc
commit
94916749c5
@ -0,0 +1,42 @@ |
|||||||
|
package backend |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
"fmt" |
||||||
|
|
||||||
|
config "github.com/go-skynet/LocalAI/api/config" |
||||||
|
|
||||||
|
"github.com/go-skynet/LocalAI/api/options" |
||||||
|
"github.com/go-skynet/LocalAI/pkg/grpc/proto" |
||||||
|
"github.com/go-skynet/LocalAI/pkg/grpc/whisper/api" |
||||||
|
model "github.com/go-skynet/LocalAI/pkg/model" |
||||||
|
) |
||||||
|
|
||||||
|
func ModelTranscription(audio, language string, loader *model.ModelLoader, c config.Config, o *options.Option) (*api.Result, error) { |
||||||
|
opts := []model.Option{ |
||||||
|
model.WithBackendString(model.WhisperBackend), |
||||||
|
model.WithModelFile(c.Model), |
||||||
|
model.WithContext(o.Context), |
||||||
|
model.WithThreads(uint32(c.Threads)), |
||||||
|
model.WithAssetDir(o.AssetsDestination), |
||||||
|
} |
||||||
|
|
||||||
|
for k, v := range o.ExternalGRPCBackends { |
||||||
|
opts = append(opts, model.WithExternalBackend(k, v)) |
||||||
|
} |
||||||
|
|
||||||
|
whisperModel, err := o.Loader.BackendLoader(opts...) |
||||||
|
if err != nil { |
||||||
|
return nil, err |
||||||
|
} |
||||||
|
|
||||||
|
if whisperModel == nil { |
||||||
|
return nil, fmt.Errorf("could not load whisper model") |
||||||
|
} |
||||||
|
|
||||||
|
return whisperModel.AudioTranscription(context.Background(), &proto.TranscriptRequest{ |
||||||
|
Dst: audio, |
||||||
|
Language: language, |
||||||
|
Threads: uint32(c.Threads), |
||||||
|
}) |
||||||
|
} |
@ -0,0 +1,72 @@ |
|||||||
|
package backend |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
"fmt" |
||||||
|
"os" |
||||||
|
"path/filepath" |
||||||
|
|
||||||
|
"github.com/go-skynet/LocalAI/api/options" |
||||||
|
"github.com/go-skynet/LocalAI/pkg/grpc/proto" |
||||||
|
model "github.com/go-skynet/LocalAI/pkg/model" |
||||||
|
"github.com/go-skynet/LocalAI/pkg/utils" |
||||||
|
) |
||||||
|
|
||||||
|
func generateUniqueFileName(dir, baseName, ext string) string { |
||||||
|
counter := 1 |
||||||
|
fileName := baseName + ext |
||||||
|
|
||||||
|
for { |
||||||
|
filePath := filepath.Join(dir, fileName) |
||||||
|
_, err := os.Stat(filePath) |
||||||
|
if os.IsNotExist(err) { |
||||||
|
return fileName |
||||||
|
} |
||||||
|
|
||||||
|
counter++ |
||||||
|
fileName = fmt.Sprintf("%s_%d%s", baseName, counter, ext) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
func ModelTTS(text, modelFile string, loader *model.ModelLoader, o *options.Option) (string, *proto.Result, error) { |
||||||
|
opts := []model.Option{ |
||||||
|
model.WithBackendString(model.PiperBackend), |
||||||
|
model.WithModelFile(modelFile), |
||||||
|
model.WithContext(o.Context), |
||||||
|
model.WithAssetDir(o.AssetsDestination), |
||||||
|
} |
||||||
|
|
||||||
|
for k, v := range o.ExternalGRPCBackends { |
||||||
|
opts = append(opts, model.WithExternalBackend(k, v)) |
||||||
|
} |
||||||
|
|
||||||
|
piperModel, err := o.Loader.BackendLoader(opts...) |
||||||
|
if err != nil { |
||||||
|
return "", nil, err |
||||||
|
} |
||||||
|
|
||||||
|
if piperModel == nil { |
||||||
|
return "", nil, fmt.Errorf("could not load piper model") |
||||||
|
} |
||||||
|
|
||||||
|
if err := os.MkdirAll(o.AudioDir, 0755); err != nil { |
||||||
|
return "", nil, fmt.Errorf("failed creating audio directory: %s", err) |
||||||
|
} |
||||||
|
|
||||||
|
fileName := generateUniqueFileName(o.AudioDir, "piper", ".wav") |
||||||
|
filePath := filepath.Join(o.AudioDir, fileName) |
||||||
|
|
||||||
|
modelPath := filepath.Join(o.Loader.ModelPath, modelFile) |
||||||
|
|
||||||
|
if err := utils.VerifyPath(modelPath, o.Loader.ModelPath); err != nil { |
||||||
|
return "", nil, err |
||||||
|
} |
||||||
|
|
||||||
|
res, err := piperModel.TTS(context.Background(), &proto.TTSRequest{ |
||||||
|
Text: text, |
||||||
|
Model: modelPath, |
||||||
|
Dst: filePath, |
||||||
|
}) |
||||||
|
|
||||||
|
return filePath, res, err |
||||||
|
} |
@ -0,0 +1,37 @@ |
|||||||
|
package utils |
||||||
|
|
||||||
|
import ( |
||||||
|
"time" |
||||||
|
|
||||||
|
"github.com/rs/zerolog/log" |
||||||
|
) |
||||||
|
|
||||||
|
var lastProgress time.Time = time.Now() |
||||||
|
var startTime time.Time = time.Now() |
||||||
|
|
||||||
|
func ResetDownloadTimers() { |
||||||
|
lastProgress = time.Now() |
||||||
|
startTime = time.Now() |
||||||
|
} |
||||||
|
|
||||||
|
func DisplayDownloadFunction(fileName string, current string, total string, percentage float64) { |
||||||
|
currentTime := time.Now() |
||||||
|
|
||||||
|
if currentTime.Sub(lastProgress) >= 5*time.Second { |
||||||
|
|
||||||
|
lastProgress = currentTime |
||||||
|
|
||||||
|
// calculate ETA based on percentage and elapsed time
|
||||||
|
var eta time.Duration |
||||||
|
if percentage > 0 { |
||||||
|
elapsed := currentTime.Sub(startTime) |
||||||
|
eta = time.Duration(float64(elapsed)*(100/percentage) - float64(elapsed)) |
||||||
|
} |
||||||
|
|
||||||
|
if total != "" { |
||||||
|
log.Debug().Msgf("Downloading %s: %s/%s (%.2f%%) ETA: %s", fileName, current, total, percentage, eta) |
||||||
|
} else { |
||||||
|
log.Debug().Msgf("Downloading: %s", current) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
name: code-search-ada-code-001 |
||||||
|
backend: huggingface |
||||||
|
embeddings: true |
||||||
|
parameters: |
||||||
|
model: all-MiniLM-L6-v2 |
Loading…
Reference in new issue