mirror of
https://github.com/mudler/LocalAI.git
synced 2024-12-22 14:02:24 +00:00
530bec9c64
* feat(initializer): do not specify backends to autoload We can simply try to autoload the backends extracted in the asset dir. This will allow to build variants of the same backend (for e.g. with different instructions sets), so to have a single binary for all the variants. Signed-off-by: mudler <mudler@localai.io> * refactor(prepare): refactor out llama.cpp prepare steps Make it so are idempotent and that we can re-build Signed-off-by: mudler <mudler@localai.io> * [TEST] feat(build): build noavx version along Signed-off-by: mudler <mudler@localai.io> * build: make build parallel Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * build: do not override CMAKE_ARGS Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * build: add fallback variant Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Fixups Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix(huggingface-langchain): fail if no token is set Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix(huggingface-langchain): rename Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix: do not autoload local-store Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix: give priority between the listed backends Signed-off-by: Ettore Di Giacinto <mudler@localai.io> --------- Signed-off-by: mudler <mudler@localai.io> Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
package main
|
|
|
|
// 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"
|
|
|
|
"github.com/go-skynet/LocalAI/pkg/grpc/base"
|
|
pb "github.com/go-skynet/LocalAI/pkg/grpc/proto"
|
|
"github.com/go-skynet/LocalAI/pkg/langchain"
|
|
)
|
|
|
|
type LLM struct {
|
|
base.Base
|
|
|
|
langchain *langchain.HuggingFace
|
|
model string
|
|
}
|
|
|
|
func (llm *LLM) Load(opts *pb.ModelOptions) error {
|
|
var err error
|
|
hfToken := os.Getenv("HUGGINGFACEHUB_API_TOKEN")
|
|
if hfToken == "" {
|
|
return fmt.Errorf("no huggingface token provided")
|
|
}
|
|
llm.langchain, err = langchain.NewHuggingFace(opts.Model, hfToken)
|
|
llm.model = opts.Model
|
|
return err
|
|
}
|
|
|
|
func (llm *LLM) Predict(opts *pb.PredictOptions) (string, error) {
|
|
o := []langchain.PredictOption{
|
|
langchain.SetModel(llm.model),
|
|
langchain.SetMaxTokens(int(opts.Tokens)),
|
|
langchain.SetTemperature(float64(opts.Temperature)),
|
|
langchain.SetStopWords(opts.StopPrompts),
|
|
}
|
|
pred, err := llm.langchain.PredictHuggingFace(opts.Prompt, o...)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return pred.Completion, nil
|
|
}
|
|
|
|
func (llm *LLM) PredictStream(opts *pb.PredictOptions, results chan string) error {
|
|
o := []langchain.PredictOption{
|
|
langchain.SetModel(llm.model),
|
|
langchain.SetMaxTokens(int(opts.Tokens)),
|
|
langchain.SetTemperature(float64(opts.Temperature)),
|
|
langchain.SetStopWords(opts.StopPrompts),
|
|
}
|
|
go func() {
|
|
res, err := llm.langchain.PredictHuggingFace(opts.Prompt, o...)
|
|
|
|
if err != nil {
|
|
fmt.Println("err: ", err)
|
|
}
|
|
results <- res.Completion
|
|
close(results)
|
|
}()
|
|
|
|
return nil
|
|
}
|