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.go
See 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.