First AI generated version
This commit is contained in:
+78
@@ -0,0 +1,78 @@
|
||||
package gollama
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/ollama/ollama/api"
|
||||
)
|
||||
|
||||
// Complete sends a single prompt and returns the full response.
|
||||
func (c *Client) Complete(ctx context.Context, prompt string, opts ...CallOption) (*Result, error) {
|
||||
return c.generate(ctx, prompt, false, opts...)
|
||||
}
|
||||
|
||||
// CompleteWithSystem sends a system prompt and user prompt.
|
||||
func (c *Client) CompleteWithSystem(ctx context.Context, system, prompt string, opts ...CallOption) (*Result, error) {
|
||||
opts = append([]CallOption{WithSystem(system)}, opts...)
|
||||
return c.generate(ctx, prompt, false, opts...)
|
||||
}
|
||||
|
||||
// CompleteRaw sends a prompt without template formatting.
|
||||
func (c *Client) CompleteRaw(ctx context.Context, prompt string, opts ...CallOption) (*Result, error) {
|
||||
return c.generate(ctx, prompt, true, opts...)
|
||||
}
|
||||
|
||||
func (c *Client) generate(ctx context.Context, prompt string, raw bool, callOpts ...CallOption) (*Result, error) {
|
||||
cfg, err := c.mergeCallConfig(callOpts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
optMap, err := cfg.optionsMap()
|
||||
if err != nil {
|
||||
return nil, wrapError("complete", cfg.model, err)
|
||||
}
|
||||
|
||||
stream := false
|
||||
req := &api.GenerateRequest{
|
||||
Model: cfg.model,
|
||||
Prompt: prompt,
|
||||
System: cfg.system,
|
||||
Raw: raw,
|
||||
Stream: &stream,
|
||||
Options: optMap,
|
||||
KeepAlive: cfg.keepAlive,
|
||||
Think: cfg.think,
|
||||
Format: cfg.format,
|
||||
Truncate: cfg.truncate,
|
||||
Shift: cfg.shift,
|
||||
}
|
||||
|
||||
var text, thinking string
|
||||
var final api.GenerateResponse
|
||||
err = c.api.Generate(ctx, req, func(resp api.GenerateResponse) error {
|
||||
text += resp.Response
|
||||
thinking += resp.Thinking
|
||||
if resp.Done {
|
||||
final = resp
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, wrapError("complete", cfg.model, err)
|
||||
}
|
||||
if text == "" {
|
||||
text = final.Response
|
||||
}
|
||||
if thinking == "" {
|
||||
thinking = final.Thinking
|
||||
}
|
||||
|
||||
return &Result{
|
||||
Text: strings.TrimSpace(text),
|
||||
Model: cfg.model,
|
||||
Thinking: thinking,
|
||||
Metrics: final.Metrics,
|
||||
Raw: &final,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user