mirror of
https://github.com/ollama/ollama.git
synced 2026-11-12 03:46:14 -06:00
53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
package decision
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/ollama/ollama/llm"
|
|
)
|
|
|
|
// encodeD1 validates the request as for every decision model, then passes its
|
|
// questions to the d1 model, which renders them and reads its own answers.
|
|
func encodeD1(req Request, c *Compiled) error {
|
|
if err := ValidateLimits(req, "d1"); err != nil {
|
|
return err
|
|
}
|
|
if err := validateImages(req.Images); err != nil {
|
|
return err
|
|
}
|
|
if _, err := Content(req.State); err != nil {
|
|
return fmt.Errorf("state: %w", err)
|
|
}
|
|
native := &llm.NativeDecision{State: req.State}
|
|
for name, q := range req.Questions.All() {
|
|
if _, err := compileField(name, q); err != nil {
|
|
return fmt.Errorf("question %q: %w", name, err)
|
|
}
|
|
raw, err := json.Marshal(q)
|
|
if err != nil {
|
|
return fmt.Errorf("question %q: %w", name, err)
|
|
}
|
|
native.Questions = append(native.Questions, llm.NativeQuestion{Name: name, Question: raw})
|
|
c.names = append(c.names, name)
|
|
}
|
|
c.Request.Native = native
|
|
c.Request.Images = req.Images
|
|
return nil
|
|
}
|
|
|
|
func (c *Compiled) answerD1(model string, result llm.ScoreResponse) (Response, error) {
|
|
response := Response{
|
|
Model: model, Answers: &Answers{},
|
|
Usage: Usage{InputTokens: result.InputTokens, OutputTokens: result.OutputTokens},
|
|
PromptEvalCachedCount: result.CachedTokens,
|
|
}
|
|
if len(result.Answers) != len(c.names) {
|
|
return response, fmt.Errorf("model returned %d answers for %d questions", len(result.Answers), len(c.names))
|
|
}
|
|
for i, name := range c.names {
|
|
response.Answers.Set(name, result.Answers[i])
|
|
}
|
|
return response, nil
|
|
}
|