Skip to content

OpenAI GPT3/3.5 and GPT4 ChatGPT API Client Library for Go, simple, less dependencies, and well-tested

License

Notifications You must be signed in to change notification settings

otiai10/openaigo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

12adbec · May 13, 2024
May 8, 2024
May 13, 2024
May 13, 2024
May 13, 2024
Aug 25, 2023
Dec 10, 2022
Dec 10, 2022
May 13, 2024
Aug 25, 2023
Jun 24, 2023
Jun 24, 2023
Apr 5, 2023
Dec 11, 2022
Jun 18, 2023
May 13, 2024
Jun 18, 2023
Dec 11, 2022
Dec 10, 2022
Dec 11, 2022
May 13, 2024
Apr 5, 2023
Dec 11, 2022
Apr 5, 2023
Dec 10, 2022
Dec 11, 2022
Aug 25, 2023
Aug 25, 2023
Jun 24, 2023
Jun 24, 2023
Dec 11, 2022
Dec 11, 2022
May 13, 2024
Dec 11, 2022
Dec 10, 2022
Dec 11, 2022
Dec 10, 2022
Dec 10, 2022
Jun 18, 2023

Repository files navigation

openaigo

Go CodeQL App Test over API License FOSSA Status
Maintainability Go Report Card codecov
Reference GoDoc

Yet another API client for api.openai.com.

This library is community-maintained, NOT officially supported by OpenAI.

Usage Example

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/otiai10/openaigo"
)

func main() {
	client := openaigo.NewClient(os.Getenv("OPENAI_API_KEY"))
	request := openaigo.ChatRequest{
		Model: "gpt-4o",
		Messages: []openaigo.Message{
			{Role: "user", Content: "Hello!"},
		},
	}
	ctx := context.Background()
	response, err := client.Chat(ctx, request)
	fmt.Println(response, err)
}

if you just want to try, hit commands below.

git clone https://github.com/otiai10/openaigo.git
cd openaigo
OPENAI_API_KEY=YourAPIKey go run ./testapp/main.go

See test app as a working example.

API Keys?

Visit https://beta.openai.com/account/api-keys and you can create your own API key to get started for free.

Endpoint Support

Need function_call?

request := openaigo.ChatRequest{
  Messages: []openaigo.Message{
    {Role: "user", Content: "How's the weather today in Tokyo?"},
  },
  Functions: []openaigo.Function{
    {
      Name: "get_weather",
      Parameters: openaigo.Parameters{
        Type:       "object",
        Properties: map[string]map[string]any{
          "location": {"type": "string"},
          "date":     {"type": "string", "description": "ISO 8601 date string"},
        },
        Required: []string{"location"},
      },
    }
  },
}

if you want shorthand, use functioncall.

import fc "github.com/otiai10/openaigo/functioncall"

request.Functions = fc.Funcs{
  "get_weather": {GetWeather, "Get weather of the location", fc.Params{
    {"location", "string", "location of the weather", true},
    {"date", "string", "ISO 8601 date string", true},
  }},
}

See test app as a working example.

Need stream?

client := openaigo.NewClient(OPENAI_API_KEY)
request := openaigo.ChatRequest{
  Stream: true,
  StreamCallback: func(res ChatCompletionResponse, done bool, err error) {
    // Do what you want!
    // You might need chan handling here.
    // See test app how you can do it.
    // https://github.com/otiai10/openaigo/search?q=chat_completion_stream
  },
}

Need Proxy?

client := openaigo.NewClient(OPENAI_API_KEY)
// You can set whatever you want
transport := &http.Transport{ Proxy: http.ProxyFromEnvironment }
client.HTTPClient = &http.Client{ Transport: transport }
// Done!

Issues

Report any issue here or any feedback is welcomed.