Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(application): introduce application global state #2072

Merged
merged 52 commits into from
Apr 29, 2024
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
85d0ebb
start breaking up the giant channel refactor now that it's better und…
dave-gray101 Apr 18, 2024
ba4d273
add concurrency and base64 back in, along with new base64 tests.
dave-gray101 Apr 18, 2024
ad601d2
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 19, 2024
7ba5c50
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 19, 2024
ed07390
Automatic rename of whisper.go's Result to TranscriptResult
dave-gray101 Apr 19, 2024
568721f
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 19, 2024
222c33b
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 20, 2024
e12b2da
remove pkg/concurrency - significant changes coming in split 2
dave-gray101 Apr 20, 2024
9594ccb
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 20, 2024
ead30a5
merge + minor removals from comments on #2077
dave-gray101 Apr 21, 2024
67ea9ef
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 21, 2024
65b0aff
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 22, 2024
e4515c7
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 22, 2024
4fd976d
fix comments
dave-gray101 Apr 22, 2024
2bbd734
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 23, 2024
8c8a658
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 23, 2024
a7f06ce
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 23, 2024
2fc1d48
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 23, 2024
255d45b
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 23, 2024
5e43406
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 23, 2024
ba490bb
add list_model service as another low-risk service to get it out of t…
dave-gray101 Apr 23, 2024
c5113b4
Merge branch 'rf-channel-split-1' of ghgray101:/dave-gray101/LocalAI …
dave-gray101 Apr 23, 2024
e1e37f5
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 24, 2024
c741502
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 24, 2024
11b7b49
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 24, 2024
4ed8952
split backend config loader into seperate file from the actual config…
dave-gray101 Apr 24, 2024
3c4cf11
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 24, 2024
f03c0d1
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 24, 2024
36c3308
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 24, 2024
6661bc1
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 25, 2024
b79c2b0
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 25, 2024
7561b80
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 25, 2024
61cb297
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 25, 2024
0c6694a
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 25, 2024
b1d501c
merge
dave-gray101 Apr 25, 2024
3d2f9a4
merge
dave-gray101 Apr 26, 2024
5fd329f
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 26, 2024
b186e4e
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 26, 2024
9d353dd
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 27, 2024
ed4acb8
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 27, 2024
8b740bb
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 27, 2024
a9ca0fa
rename state.go ==> application.go
dave-gray101 Apr 27, 2024
4a8035f
fix lost import?
dave-gray101 Apr 27, 2024
2b406e4
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 27, 2024
f1566f4
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 28, 2024
09ba132
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 28, 2024
d39ef5d
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 28, 2024
78bfa2e
merge: backend_config_loader.go replaced
dave-gray101 Apr 28, 2024
b1d4ee0
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 29, 2024
8a4de96
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 29, 2024
4300a78
Merge branch 'master' into rf-channel-split-1
dave-gray101 Apr 29, 2024
6dd72f7
Merge branch 'master' into rf-channel-split-1
mudler Apr 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions backend/go/transcribe/transcript.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,16 @@ func runCommand(command []string) (string, error) {
// AudioToWav converts audio to wav for transcribe.
// TODO: use https://github.com/mccoyst/ogg?
func audioToWav(src, dst string) error {
command := []string{"ffmpeg", "-i", src, "-format", "s16le", "-ar", "16000", "-ac", "1", "-acodec", "pcm_s16le", dst}
command := []string{"ffmpeg", "-i", src, "-format", "s16le", "-ar", "16000", "-ac", "1", "-acodec", "pcm_s16le", dst}
cryptk marked this conversation as resolved.
Show resolved Hide resolved
out, err := runCommand(command)
if err != nil {
return fmt.Errorf("error: %w out: %s", err, out)
}
return nil
}

func Transcript(model whisper.Model, audiopath, language string, threads uint) (schema.Result, error) {
res := schema.Result{}
func Transcript(model whisper.Model, audiopath, language string, threads uint) (schema.TranscriptionResult, error) {
res := schema.TranscriptionResult{}

dir, err := os.MkdirTemp("", "whisper")
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion backend/go/transcribe/whisper.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ func (sd *Whisper) Load(opts *pb.ModelOptions) error {
return err
}

func (sd *Whisper) AudioTranscription(opts *pb.TranscriptRequest) (schema.Result, error) {
func (sd *Whisper) AudioTranscription(opts *pb.TranscriptRequest) (schema.TranscriptionResult, error) {
return Transcript(sd.whisper, opts.Dst, opts.Language, uint(opts.Threads))
}
2 changes: 1 addition & 1 deletion core/backend/transcript.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
model "github.com/go-skynet/LocalAI/pkg/model"
)

func ModelTranscription(audio, language string, ml *model.ModelLoader, backendConfig config.BackendConfig, appConfig *config.ApplicationConfig) (*schema.Result, error) {
func ModelTranscription(audio, language string, ml *model.ModelLoader, backendConfig config.BackendConfig, appConfig *config.ApplicationConfig) (*schema.TranscriptionResult, error) {

opts := modelOpts(backendConfig, appConfig, []model.Option{
model.WithBackendString(model.WhisperBackend),
Expand Down
23 changes: 0 additions & 23 deletions core/http/app.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package http

import (
"encoding/json"
"errors"
"os"
"strings"

"github.com/go-skynet/LocalAI/pkg/utils"
Expand Down Expand Up @@ -124,20 +122,6 @@ func App(cl *config.BackendConfigLoader, ml *model.ModelLoader, appConfig *confi
return c.Next()
}

// Check for api_keys.json file
cryptk marked this conversation as resolved.
Show resolved Hide resolved
fileContent, err := os.ReadFile("api_keys.json")
if err == nil {
// Parse JSON content from the file
var fileKeys []string
err := json.Unmarshal(fileContent, &fileKeys)
if err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"message": "Error parsing api_keys.json"})
}

// Add file keys to options.ApiKeys
appConfig.ApiKeys = append(appConfig.ApiKeys, fileKeys...)
}

if len(appConfig.ApiKeys) == 0 {
return c.Next()
}
Expand Down Expand Up @@ -174,13 +158,6 @@ func App(cl *config.BackendConfigLoader, ml *model.ModelLoader, appConfig *confi
app.Use(c)
}

// Make sure directories exists
cryptk marked this conversation as resolved.
Show resolved Hide resolved
os.MkdirAll(appConfig.ImageDir, 0755)
os.MkdirAll(appConfig.AudioDir, 0755)
os.MkdirAll(appConfig.UploadDir, 0755)
os.MkdirAll(appConfig.ConfigsDir, 0755)
os.MkdirAll(appConfig.ModelPath, 0755)

// Load config jsons
utils.LoadConfig(appConfig.UploadDir, openai.UploadedFilesFile, &openai.UploadedFiles)
utils.LoadConfig(appConfig.ConfigsDir, openai.AssistantsConfigFile, &openai.Assistants)
Expand Down
4 changes: 2 additions & 2 deletions core/http/endpoints/localai/backend_monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"github.com/gofiber/fiber/v2"
)

func BackendMonitorEndpoint(bm services.BackendMonitor) func(c *fiber.Ctx) error {
func BackendMonitorEndpoint(bm *services.BackendMonitorService) func(c *fiber.Ctx) error {
return func(c *fiber.Ctx) error {

input := new(schema.BackendMonitorRequest)
Expand All @@ -23,7 +23,7 @@ func BackendMonitorEndpoint(bm services.BackendMonitor) func(c *fiber.Ctx) error
}
}

func BackendShutdownEndpoint(bm services.BackendMonitor) func(c *fiber.Ctx) error {
func BackendShutdownEndpoint(bm *services.BackendMonitorService) func(c *fiber.Ctx) error {
return func(c *fiber.Ctx) error {
input := new(schema.BackendMonitorRequest)
// Get input data from the request body
Expand Down
6 changes: 3 additions & 3 deletions core/http/routes/localai.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ func RegisterLocalAIRoutes(app *fiber.App,
app.Get("/metrics", auth, localai.LocalAIMetricsEndpoint())

// Experimental Backend Statistics Module
backendMonitor := services.NewBackendMonitor(cl, ml, appConfig) // Split out for now
app.Get("/backend/monitor", auth, localai.BackendMonitorEndpoint(backendMonitor))
app.Post("/backend/shutdown", auth, localai.BackendShutdownEndpoint(backendMonitor))
backendMonitorService := services.NewBackendMonitorService(ml, cl, appConfig) // Split out for now
app.Get("/backend/monitor", auth, localai.BackendMonitorEndpoint(backendMonitorService))
app.Post("/backend/shutdown", auth, localai.BackendShutdownEndpoint(backendMonitorService))

app.Get("/version", auth, func(c *fiber.Ctx) error {
return c.JSON(struct {
Expand Down
2 changes: 1 addition & 1 deletion core/schema/whisper.go → core/schema/transcription.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ type Segment struct {
Tokens []int `json:"tokens"`
}

type Result struct {
type TranscriptionResult struct {
Segments []Segment `json:"segments"`
Text string `json:"text"`
}
32 changes: 16 additions & 16 deletions core/services/backend_monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@ import (
gopsutil "github.com/shirou/gopsutil/v3/process"
)

type BackendMonitor struct {
type BackendMonitorService struct {
configLoader *config.BackendConfigLoader
dave-gray101 marked this conversation as resolved.
Show resolved Hide resolved
modelLoader *model.ModelLoader
options *config.ApplicationConfig // Taking options in case we need to inspect ExternalGRPCBackends, though that's out of scope for now, hence the name.
}

func NewBackendMonitor(configLoader *config.BackendConfigLoader, modelLoader *model.ModelLoader, appConfig *config.ApplicationConfig) BackendMonitor {
return BackendMonitor{
configLoader: configLoader,
func NewBackendMonitorService(modelLoader *model.ModelLoader, configLoader *config.BackendConfigLoader, appConfig *config.ApplicationConfig) *BackendMonitorService {
return &BackendMonitorService{
modelLoader: modelLoader,
configLoader: configLoader,
options: appConfig,
}
}

func (bm BackendMonitor) getModelLoaderIDFromModelName(modelName string) (string, error) {
config, exists := bm.configLoader.GetBackendConfig(modelName)
func (bms BackendMonitorService) getModelLoaderIDFromModelName(modelName string) (string, error) {
config, exists := bms.configLoader.GetBackendConfig(modelName)
var backendId string
if exists {
backendId = config.Model
Expand All @@ -46,8 +46,8 @@ func (bm BackendMonitor) getModelLoaderIDFromModelName(modelName string) (string
return backendId, nil
}

func (bm *BackendMonitor) SampleLocalBackendProcess(model string) (*schema.BackendMonitorResponse, error) {
config, exists := bm.configLoader.GetBackendConfig(model)
func (bms *BackendMonitorService) SampleLocalBackendProcess(model string) (*schema.BackendMonitorResponse, error) {
config, exists := bms.configLoader.GetBackendConfig(model)
var backend string
if exists {
backend = config.Model
Expand All @@ -60,7 +60,7 @@ func (bm *BackendMonitor) SampleLocalBackendProcess(model string) (*schema.Backe
backend = fmt.Sprintf("%s.bin", backend)
}

pid, err := bm.modelLoader.GetGRPCPID(backend)
pid, err := bms.modelLoader.GetGRPCPID(backend)

if err != nil {
log.Error().Err(err).Str("model", model).Msg("failed to find GRPC pid")
Expand Down Expand Up @@ -101,20 +101,20 @@ func (bm *BackendMonitor) SampleLocalBackendProcess(model string) (*schema.Backe
}, nil
}

func (bm BackendMonitor) CheckAndSample(modelName string) (*proto.StatusResponse, error) {
backendId, err := bm.getModelLoaderIDFromModelName(modelName)
func (bms BackendMonitorService) CheckAndSample(modelName string) (*proto.StatusResponse, error) {
backendId, err := bms.getModelLoaderIDFromModelName(modelName)
if err != nil {
return nil, err
}
modelAddr := bm.modelLoader.CheckIsLoaded(backendId)
modelAddr := bms.modelLoader.CheckIsLoaded(backendId)
if modelAddr == "" {
return nil, fmt.Errorf("backend %s is not currently loaded", backendId)
}

status, rpcErr := modelAddr.GRPC(false, nil).Status(context.TODO())
if rpcErr != nil {
log.Warn().Msgf("backend %s experienced an error retrieving status info: %s", backendId, rpcErr.Error())
val, slbErr := bm.SampleLocalBackendProcess(backendId)
val, slbErr := bms.SampleLocalBackendProcess(backendId)
if slbErr != nil {
return nil, fmt.Errorf("backend %s experienced an error retrieving status info via rpc: %s, then failed local node process sample: %s", backendId, rpcErr.Error(), slbErr.Error())
}
Expand All @@ -131,10 +131,10 @@ func (bm BackendMonitor) CheckAndSample(modelName string) (*proto.StatusResponse
return status, nil
}

func (bm BackendMonitor) ShutdownModel(modelName string) error {
backendId, err := bm.getModelLoaderIDFromModelName(modelName)
func (bms BackendMonitorService) ShutdownModel(modelName string) error {
backendId, err := bms.getModelLoaderIDFromModelName(modelName)
if err != nil {
return err
}
return bm.modelLoader.ShutdownModel(backendId)
return bms.modelLoader.ShutdownModel(backendId)
}
31 changes: 31 additions & 0 deletions core/startup/startup.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"os"

"github.com/go-skynet/LocalAI/core"
"github.com/go-skynet/LocalAI/core/config"
"github.com/go-skynet/LocalAI/core/services"
"github.com/go-skynet/LocalAI/internal"
Expand Down Expand Up @@ -127,3 +128,33 @@ func Startup(opts ...config.AppOption) (*config.BackendConfigLoader, *model.Mode
log.Info().Msg("core/startup process completed!")
return cl, ml, options, nil
}

// In Lieu of a proper DI framework, this function wires up the Application manually.
// This is in core/startup rather than core/state.go to keep package references clean!
func createApplication(appConfig *config.ApplicationConfig) *core.Application {
app := &core.Application{
ApplicationConfig: appConfig,
BackendConfigLoader: config.NewBackendConfigLoader(),
ModelLoader: model.NewModelLoader(appConfig.ModelPath),
}

var err error

// app.EmbeddingsBackendService = backend.NewEmbeddingsBackendService(app.ModelLoader, app.BackendConfigLoader, app.ApplicationConfig)
// app.ImageGenerationBackendService = backend.NewImageGenerationBackendService(app.ModelLoader, app.BackendConfigLoader, app.ApplicationConfig)
// app.LLMBackendService = backend.NewLLMBackendService(app.ModelLoader, app.BackendConfigLoader, app.ApplicationConfig)
// app.TranscriptionBackendService = backend.NewTranscriptionBackendService(app.ModelLoader, app.BackendConfigLoader, app.ApplicationConfig)
// app.TextToSpeechBackendService = backend.NewTextToSpeechBackendService(app.ModelLoader, app.BackendConfigLoader, app.ApplicationConfig)

app.BackendMonitorService = services.NewBackendMonitorService(app.ModelLoader, app.BackendConfigLoader, app.ApplicationConfig)
app.GalleryService = services.NewGalleryService(app.ApplicationConfig.ModelPath)
// app.ListModelsService = services.NewListModelsService(app.ModelLoader, app.BackendConfigLoader, app.ApplicationConfig)
// app.OpenAIService = services.NewOpenAIService(app.ModelLoader, app.BackendConfigLoader, app.ApplicationConfig, app.LLMBackendService)

app.LocalAIMetricsService, err = services.NewLocalAIMetricsService()
if err != nil {
log.Warn().Msg("Unable to initialize LocalAIMetricsService - non-fatal, optional service")
dave-gray101 marked this conversation as resolved.
Show resolved Hide resolved
}

return app
}
39 changes: 39 additions & 0 deletions core/state.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package core
dave-gray101 marked this conversation as resolved.
Show resolved Hide resolved

import (
"github.com/go-skynet/LocalAI/core/config"
"github.com/go-skynet/LocalAI/core/services"
"github.com/go-skynet/LocalAI/pkg/model"
)

// The purpose of this structure is to hold pointers to all initialized services, to make plumbing easy
// Perhaps a proper DI system is worth it in the future, but for now keep things simple.
type Application struct {

// Application-Level Config
ApplicationConfig *config.ApplicationConfig
// ApplicationState *ApplicationState

// Core Low-Level Services
BackendConfigLoader *config.BackendConfigLoader
ModelLoader *model.ModelLoader

// Backend Services
// EmbeddingsBackendService *backend.EmbeddingsBackendService
// ImageGenerationBackendService *backend.ImageGenerationBackendService
// LLMBackendService *backend.LLMBackendService
// TranscriptionBackendService *backend.TranscriptionBackendService
// TextToSpeechBackendService *backend.TextToSpeechBackendService

// LocalAI System Services
BackendMonitorService *services.BackendMonitorService
GalleryService *services.GalleryService
// ListModelsService *services.ListModelsService
LocalAIMetricsService *services.LocalAIMetricsService
// OpenAIService *services.OpenAIService
}

// TODO [NEXT PR?]: Break up ApplicationConfig.
// Migrate over stuff that is not set via config at all - especially runtime stuff
type ApplicationState struct {
}
2 changes: 1 addition & 1 deletion pkg/grpc/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ type Backend interface {
PredictStream(ctx context.Context, in *pb.PredictOptions, f func(s []byte), opts ...grpc.CallOption) error
GenerateImage(ctx context.Context, in *pb.GenerateImageRequest, opts ...grpc.CallOption) (*pb.Result, error)
TTS(ctx context.Context, in *pb.TTSRequest, opts ...grpc.CallOption) (*pb.Result, error)
AudioTranscription(ctx context.Context, in *pb.TranscriptRequest, opts ...grpc.CallOption) (*schema.Result, error)
AudioTranscription(ctx context.Context, in *pb.TranscriptRequest, opts ...grpc.CallOption) (*schema.TranscriptionResult, error)
TokenizeString(ctx context.Context, in *pb.PredictOptions, opts ...grpc.CallOption) (*pb.TokenizationResponse, error)
Status(ctx context.Context) (*pb.StatusResponse, error)

Expand Down
4 changes: 2 additions & 2 deletions pkg/grpc/base/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ func (llm *Base) GenerateImage(*pb.GenerateImageRequest) error {
return fmt.Errorf("unimplemented")
}

func (llm *Base) AudioTranscription(*pb.TranscriptRequest) (schema.Result, error) {
return schema.Result{}, fmt.Errorf("unimplemented")
func (llm *Base) AudioTranscription(*pb.TranscriptRequest) (schema.TranscriptionResult, error) {
return schema.TranscriptionResult{}, fmt.Errorf("unimplemented")
}

func (llm *Base) TTS(*pb.TTSRequest) error {
Expand Down
4 changes: 2 additions & 2 deletions pkg/grpc/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ func (c *Client) TTS(ctx context.Context, in *pb.TTSRequest, opts ...grpc.CallOp
return client.TTS(ctx, in, opts...)
}

func (c *Client) AudioTranscription(ctx context.Context, in *pb.TranscriptRequest, opts ...grpc.CallOption) (*schema.Result, error) {
func (c *Client) AudioTranscription(ctx context.Context, in *pb.TranscriptRequest, opts ...grpc.CallOption) (*schema.TranscriptionResult, error) {
if !c.parallel {
c.opMutex.Lock()
defer c.opMutex.Unlock()
Expand All @@ -231,7 +231,7 @@ func (c *Client) AudioTranscription(ctx context.Context, in *pb.TranscriptReques
if err != nil {
return nil, err
}
tresult := &schema.Result{}
tresult := &schema.TranscriptionResult{}
for _, s := range res.Segments {
tks := []int{}
for _, t := range s.Tokens {
Expand Down
4 changes: 2 additions & 2 deletions pkg/grpc/embed.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,12 @@ func (e *embedBackend) TTS(ctx context.Context, in *pb.TTSRequest, opts ...grpc.
return e.s.TTS(ctx, in)
}

func (e *embedBackend) AudioTranscription(ctx context.Context, in *pb.TranscriptRequest, opts ...grpc.CallOption) (*schema.Result, error) {
func (e *embedBackend) AudioTranscription(ctx context.Context, in *pb.TranscriptRequest, opts ...grpc.CallOption) (*schema.TranscriptionResult, error) {
r, err := e.s.AudioTranscription(ctx, in)
if err != nil {
return nil, err
}
tr := &schema.Result{}
tr := &schema.TranscriptionResult{}
for _, s := range r.Segments {
var tks []int
for _, t := range s.Tokens {
Expand Down
2 changes: 1 addition & 1 deletion pkg/grpc/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ type LLM interface {
Load(*pb.ModelOptions) error
Embeddings(*pb.PredictOptions) ([]float32, error)
GenerateImage(*pb.GenerateImageRequest) error
AudioTranscription(*pb.TranscriptRequest) (schema.Result, error)
AudioTranscription(*pb.TranscriptRequest) (schema.TranscriptionResult, error)
TTS(*pb.TTSRequest) error
TokenizeString(*pb.PredictOptions) (pb.TokenizationResponse, error)
Status() (pb.StatusResponse, error)
Expand Down
Loading