|
package openai |
|
|
|
import ( |
|
"github.com/mudler/LocalAI/core/backend" |
|
"github.com/mudler/LocalAI/core/config" |
|
|
|
"github.com/mudler/LocalAI/core/schema" |
|
model "github.com/mudler/LocalAI/pkg/model" |
|
) |
|
|
|
func ComputeChoices( |
|
req *schema.OpenAIRequest, |
|
predInput string, |
|
config *config.BackendConfig, |
|
o *config.ApplicationConfig, |
|
loader *model.ModelLoader, |
|
cb func(string, *[]schema.Choice), |
|
tokenCallback func(string, backend.TokenUsage) bool) ([]schema.Choice, backend.TokenUsage, error) { |
|
n := req.N |
|
result := []schema.Choice{} |
|
|
|
if n == 0 { |
|
n = 1 |
|
} |
|
|
|
images := []string{} |
|
for _, m := range req.Messages { |
|
images = append(images, m.StringImages...) |
|
} |
|
|
|
|
|
predFunc, err := backend.ModelInference(req.Context, predInput, req.Messages, images, loader, *config, o, tokenCallback) |
|
if err != nil { |
|
return result, backend.TokenUsage{}, err |
|
} |
|
|
|
tokenUsage := backend.TokenUsage{} |
|
|
|
for i := 0; i < n; i++ { |
|
prediction, err := predFunc() |
|
if err != nil { |
|
return result, backend.TokenUsage{}, err |
|
} |
|
|
|
tokenUsage.Prompt += prediction.Usage.Prompt |
|
tokenUsage.Completion += prediction.Usage.Completion |
|
|
|
finetunedResponse := backend.Finetune(*config, predInput, prediction.Response) |
|
cb(finetunedResponse, &result) |
|
|
|
|
|
|
|
} |
|
return result, tokenUsage, err |
|
} |
|
|