|
@@ -1,3 +1,9 @@
|
|
|
+// Package api implements the client-side API for code wishing to interact
|
|
|
+// with the ollama service. The methods of the [Client] type correspond to
|
|
|
+// the ollama REST API as described in https://github.com/ollama/ollama/blob/main/docs/api.md
|
|
|
+//
|
|
|
+// The ollama command-line client itself uses this package to interact with
|
|
|
+// the backend service.
|
|
|
package api
|
|
|
|
|
|
import (
|
|
@@ -18,6 +24,8 @@ import (
|
|
|
"github.com/ollama/ollama/version"
|
|
|
)
|
|
|
|
|
|
+// Client encapsulates client state for interacting with the ollama
|
|
|
+// service. Use [ClientFromEnvironment] to create new Clients.
|
|
|
type Client struct {
|
|
|
base *url.URL
|
|
|
http *http.Client
|
|
@@ -39,6 +47,15 @@ func checkError(resp *http.Response, body []byte) error {
|
|
|
return apiError
|
|
|
}
|
|
|
|
|
|
+// ClientFromEnvironment creates a new [Client] using configuration from the
|
|
|
+// environment variable OLLAMA_HOST, which points to the network host and
|
|
|
+// port on which the ollama service is listenting. The format of this variable
|
|
|
+// is:
|
|
|
+//
|
|
|
+// <scheme>://<host>:<port>
|
|
|
+//
|
|
|
+// If the variable is not specified, a default ollama host and port will be
|
|
|
+// used.
|
|
|
func ClientFromEnvironment() (*Client, error) {
|
|
|
defaultPort := "11434"
|
|
|
|
|
@@ -190,8 +207,14 @@ func (c *Client) stream(ctx context.Context, method, path string, data any, fn f
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+// GenerateResponseFunc is a function that [Client.Generate] invokes every time
|
|
|
+// a response is received from the service. If this function returns an error,
|
|
|
+// [Client.Generate] will stop generating and return this error.
|
|
|
type GenerateResponseFunc func(GenerateResponse) error
|
|
|
|
|
|
+// Generate generates a response for a given prompt. The req parameter should
|
|
|
+// be populated with prompt details. fn is called for each response (there may
|
|
|
+// be multiple responses, e.g. in case streaming is enabled).
|
|
|
func (c *Client) Generate(ctx context.Context, req *GenerateRequest, fn GenerateResponseFunc) error {
|
|
|
return c.stream(ctx, http.MethodPost, "/api/generate", req, func(bts []byte) error {
|
|
|
var resp GenerateResponse
|
|
@@ -203,8 +226,15 @@ func (c *Client) Generate(ctx context.Context, req *GenerateRequest, fn Generate
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+// ChatResponseFunc is a function that [Client.Chat] invokes every time
|
|
|
+// a response is received from the service. If this function returns an error,
|
|
|
+// [Client.Chat] will stop generating and return this error.
|
|
|
type ChatResponseFunc func(ChatResponse) error
|
|
|
|
|
|
+// Chat generates the next message in a chat. [ChatRequest] may contain a
|
|
|
+// sequence of messages which can be used to maintain chat history with a model.
|
|
|
+// fn is called for each response (there may be multiple responses, e.g. if case
|
|
|
+// streaming is enabled).
|
|
|
func (c *Client) Chat(ctx context.Context, req *ChatRequest, fn ChatResponseFunc) error {
|
|
|
return c.stream(ctx, http.MethodPost, "/api/chat", req, func(bts []byte) error {
|
|
|
var resp ChatResponse
|
|
@@ -216,8 +246,14 @@ func (c *Client) Chat(ctx context.Context, req *ChatRequest, fn ChatResponseFunc
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+// PullProgressFunc is a function that [Client.Pull] invokes every time there
|
|
|
+// is progress with a "pull" request sent to the service. If this function
|
|
|
+// returns an error, [Client.Pull] will stop the process and return this error.
|
|
|
type PullProgressFunc func(ProgressResponse) error
|
|
|
|
|
|
+// Pull downloads a model from the ollama library. fn is called each time
|
|
|
+// progress is made on the request and can be used to display a progress bar,
|
|
|
+// etc.
|
|
|
func (c *Client) Pull(ctx context.Context, req *PullRequest, fn PullProgressFunc) error {
|
|
|
return c.stream(ctx, http.MethodPost, "/api/pull", req, func(bts []byte) error {
|
|
|
var resp ProgressResponse
|