Spaces:
Configuration error
Configuration error
| package base | |
| // This is a wrapper to statisfy the GRPC service interface | |
| // It is meant to be used by the main executable that is the server for the specific backend type (falcon, gpt3, etc) | |
| import ( | |
| "fmt" | |
| "os" | |
| pb "github.com/mudler/LocalAI/pkg/grpc/proto" | |
| gopsutil "github.com/shirou/gopsutil/v3/process" | |
| ) | |
| // Base is a base class for all backends to implement | |
| // Note: the backends that does not support multiple requests | |
| // should use SingleThread instead | |
| type Base struct { | |
| } | |
| func (llm *Base) Locking() bool { | |
| return false | |
| } | |
| func (llm *Base) Lock() { | |
| panic("not implemented") | |
| } | |
| func (llm *Base) Unlock() { | |
| panic("not implemented") | |
| } | |
| func (llm *Base) Busy() bool { | |
| return false | |
| } | |
| func (llm *Base) Load(opts *pb.ModelOptions) error { | |
| return fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) Predict(opts *pb.PredictOptions) (string, error) { | |
| return "", fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) PredictStream(opts *pb.PredictOptions, results chan string) error { | |
| close(results) | |
| return fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) Embeddings(opts *pb.PredictOptions) ([]float32, error) { | |
| return []float32{}, fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) GenerateImage(*pb.GenerateImageRequest) error { | |
| return fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) AudioTranscription(*pb.TranscriptRequest) (pb.TranscriptResult, error) { | |
| return pb.TranscriptResult{}, fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) TTS(*pb.TTSRequest) error { | |
| return fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) SoundGeneration(*pb.SoundGenerationRequest) error { | |
| return fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) TokenizeString(opts *pb.PredictOptions) (pb.TokenizationResponse, error) { | |
| return pb.TokenizationResponse{}, fmt.Errorf("unimplemented") | |
| } | |
| // backends may wish to call this to capture the gopsutil info, then enhance with additional memory usage details? | |
| func (llm *Base) Status() (pb.StatusResponse, error) { | |
| return pb.StatusResponse{ | |
| Memory: memoryUsage(), | |
| }, nil | |
| } | |
| func (llm *Base) StoresSet(*pb.StoresSetOptions) error { | |
| return fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) StoresGet(*pb.StoresGetOptions) (pb.StoresGetResult, error) { | |
| return pb.StoresGetResult{}, fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) StoresDelete(*pb.StoresDeleteOptions) error { | |
| return fmt.Errorf("unimplemented") | |
| } | |
| func (llm *Base) StoresFind(*pb.StoresFindOptions) (pb.StoresFindResult, error) { | |
| return pb.StoresFindResult{}, fmt.Errorf("unimplemented") | |
| } | |
| func memoryUsage() *pb.MemoryUsageData { | |
| mud := pb.MemoryUsageData{ | |
| Breakdown: make(map[string]uint64), | |
| } | |
| pid := int32(os.Getpid()) | |
| backendProcess, err := gopsutil.NewProcess(pid) | |
| if err == nil { | |
| memInfo, err := backendProcess.MemoryInfo() | |
| if err == nil { | |
| mud.Total = memInfo.VMS // TEST, but rss seems reasonable first guess. Does include swap, but we might care about that. | |
| mud.Breakdown["gopsutil-RSS"] = memInfo.RSS | |
| } | |
| } | |
| return &mud | |
| } | |