From ba460802c20311ac9c90e6a750df2939a3defa9b Mon Sep 17 00:00:00 2001 From: Eli Bendersky Date: Mon, 15 Apr 2024 15:34:54 -0700 Subject: [PATCH] examples: add more Go examples using the API (#3599) * examples: go-multimodal * examples: add go-pull-progress * examples: add go-chat * fix --- examples/go-chat/main.go | 51 +++++++++++++++++++++++++++++++ examples/go-multimodal/main.go | 47 ++++++++++++++++++++++++++++ examples/go-pull-progress/main.go | 31 +++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 examples/go-chat/main.go create mode 100644 examples/go-multimodal/main.go create mode 100644 examples/go-pull-progress/main.go diff --git a/examples/go-chat/main.go b/examples/go-chat/main.go new file mode 100644 index 00000000..83aaad3d --- /dev/null +++ b/examples/go-chat/main.go @@ -0,0 +1,51 @@ +package main + +import ( + "context" + "fmt" + "log" + + "github.com/ollama/ollama/api" +) + +func main() { + client, err := api.ClientFromEnvironment() + if err != nil { + log.Fatal(err) + } + + messages := []api.Message{ + api.Message{ + Role: "system", + Content: "Provide very brief, concise responses", + }, + api.Message{ + Role: "user", + Content: "Name some unusual animals", + }, + api.Message{ + Role: "assistant", + Content: "Monotreme, platypus, echidna", + }, + api.Message{ + Role: "user", + Content: "which of these is the most dangerous?", + }, + } + + ctx := context.Background() + req := &api.ChatRequest{ + Model: "llama2", + Messages: messages, + } + + respFunc := func(resp api.ChatResponse) error { + fmt.Print(resp.Message.Content) + return nil + } + + err = client.Chat(ctx, req, respFunc) + if err != nil { + log.Fatal(err) + } +} diff --git a/examples/go-multimodal/main.go b/examples/go-multimodal/main.go new file mode 100644 index 00000000..0b0f19ed --- /dev/null +++ b/examples/go-multimodal/main.go @@ -0,0 +1,47 @@ +package main + +import ( + "context" + "fmt" + "log" + "os" + + "github.com/ollama/ollama/api" +) + +func main() { + if len(os.Args) <= 1 { + log.Fatal("usage: ") + } + + imgData, err := os.ReadFile(os.Args[1]) + if err != nil { + log.Fatal(err) + } + + client, err := api.ClientFromEnvironment() + if err != nil { + log.Fatal(err) + } + + req := &api.GenerateRequest{ + Model: "llava", + Prompt: "describe this image", + Images: []api.ImageData{imgData}, + } + + ctx := context.Background() + respFunc := func(resp api.GenerateResponse) error { + // In streaming mode, responses are partial so we call fmt.Print (and not + // Println) in order to avoid spurious newlines being introduced. The + // model will insert its own newlines if it wants. + fmt.Print(resp.Response) + return nil + } + + err = client.Generate(ctx, req, respFunc) + if err != nil { + log.Fatal(err) + } + fmt.Println() +} diff --git a/examples/go-pull-progress/main.go b/examples/go-pull-progress/main.go new file mode 100644 index 00000000..74863368 --- /dev/null +++ b/examples/go-pull-progress/main.go @@ -0,0 +1,31 @@ +package main + +import ( + "context" + "fmt" + "log" + + "github.com/ollama/ollama/api" +) + +func main() { + client, err := api.ClientFromEnvironment() + if err != nil { + log.Fatal(err) + } + + ctx := context.Background() + + req := &api.PullRequest{ + Model: "mistral", + } + progressFunc := func(resp api.ProgressResponse) error { + fmt.Printf("Progress: status=%v, total=%v, completed=%v\n", resp.Status, resp.Total, resp.Completed) + return nil + } + + err = client.Pull(ctx, req, progressFunc) + if err != nil { + log.Fatal(err) + } +}