Yet another API client for api.openai.com.
This library is community-maintained, NOT officially supported by OpenAI.
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.goSee test app as a working example.
Visit https://beta.openai.com/account/api-keys and you can create your own API key to get started for free.
- Models
- Text Completions
- Chat Completions
- Edits
- Images
- Embeddings
- Files
- Fine-tunes
- Moderation
Engines(deprecated)
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.
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 }, }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!Report any issue here or any feedback is welcomed.