GitHub Hot Board

GitHub Hot Board · Архів репозиторію

sashabaranov/go-openai

OpenAI, GPT 6.1, GPT-Image-2, Whisper API clients for Go. Zero-dependency. (Опис узято з самого репозиторію.)

Go#chatgpt#chatgpt-api#dall-e

Дані на October 28sashabaranov

Найкраще місце

#409

Титани · Go за мовою

11K

Усього зірок

1.7K

Усього форків

0

Днів у рейтингах (30 дн.)

Ліцензія: Apache-2.0Останній push: September 29Відкриті issues (вкл. PR): 226Збирається з 2026-10-25; невідомо = ще не зібрано

Документація проєкту

Go OpenAI

Go Reference codecov

An unofficial Go client for the OpenAI API.

For new text-generation, reasoning, tool-calling, and multi-turn integrations, start with the Responses API. Chat Completions remains available for existing integrations.

The client also covers embeddings, images, audio, moderation, files, fine-tuning, batches, vector stores, and legacy Assistants API surfaces.

Building agents? Try Unreal Agent - Go-based, fully async harness that drives 40% cost savings compared to Codex!

Installation

go get github.com/sashabaranov/go-openai

Go OpenAI requires Go 1.18 or later.

Quick start: Responses API

Set an OpenAI API key in your environment:

export OPENAI_API_KEY="<your key>"

Then create a response and read its generated text:

package main

import (
	"context"
	"fmt"
	"log"
	"os"

	openai "github.com/sashabaranov/go-openai"
)

func main() {
	client := openai.NewClient(os.Getenv("OPENAI_API_KEY"))

	response, err := client.CreateResponse(context.Background(), openai.CreateResponseRequest{
		Model:        openai.GPT5Dot6Sol,
		Instructions: "You are a concise technical explainer.",
		Input:        "Why is the sky blue?",
	})
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(response.GetOutputText())
}

Input can be a string or a slice of typed input items. For reasoning, tools, multimodal output, or custom processing, inspect response.Output instead of using the GetOutputText convenience method.

Continue a conversation

Use PreviousResponseID when OpenAI should carry the earlier response context. Resend Instructions on each call when they should continue to apply.

store := true

first, err := client.CreateResponse(ctx, openai.CreateResponseRequest{
	Model:        openai.GPT5Dot6Sol,
	Instructions: "Answer as a travel guide.",
	Input:        "What should I see in Lisbon?",
	Store:        &store,
})
if err != nil {
	return err
}

second, err := client.CreateResponse(ctx, openai.CreateResponseRequest{
	Model:              openai.GPT5Dot6Sol,
	Instructions:       "Answer as a travel guide.",
	Input:              "Which one is best on a rainy day?",
	PreviousResponseID: first.ID,
	Store:              &store,
})
if err != nil {
	return err
}

fmt.Println(second.GetOutputText())

Stream output

stream, err := client.CreateResponseStream(ctx, openai.CreateResponseRequest{
	Model: openai.GPT5Dot6Sol,
	Input: "Write a short story about a curious gopher.",
})
if err != nil {
	return err
}
defer stream.Close()

for {
	event, err := stream.Recv()
	if errors.Is(err, io.EOF) {
		break
	}
	if err != nil {
		return err
	}
	if event.Type == openai.ResponseStreamEventOutputTextDelta {
		fmt.Print(event.Delta)
	}
}

Choosing a model

Choose a model based on the workload's reasoning, latency, and cost requirements.

Constant Model ID Typical use
GPT6Dot1Sol gpt-6.1-sol Complex coding and professional work
GPT6Astra gpt-6-astra Most demanding reasoning and coding
GPT6Sol gpt-6-sol Previous Sol model
GPT6Luna gpt-6-luna Focused, high-volume work

GPT-5.6 and earlier model constants remain available. GPT-6.1 Sol and Astra support low, medium (default), high, xhigh, and max reasoning; they do not support none or minimal. GPT-6 Sol and Luna also support none. Use Responses for tool calling with GPT-6.1 Sol or Astra, or when combining GPT-6 reasoning with tools. See GPT-6 guidance.

See the OpenAI model catalog for capabilities and availability. Model IDs are accepted as strings, so you can use a model before a named constant is added to this package.

Chat Completions

Chat Completions remains supported for existing integrations:

response, err := client.CreateChatCompletion(ctx, openai.ChatCompletionRequest{
	Model: openai.GPT4oMini,
	Messages: []openai.ChatCompletionMessage{
		{
			Role:    openai.ChatMessageRoleUser,
			Content: "Hello!",
		},
	},
})
if err != nil {
	return err
}

fmt.Println(response.Choices[0].Message.Content)

For a new integration, prefer Responses unless you specifically need the Chat Completions request or response shape.

Configuration

Use DefaultConfig to customize the HTTP client, base URL, organization, or headers before constructing a client:

config := openai.DefaultConfig(os.Getenv("OPENAI_API_KEY"))
config.BaseURL = "https://your-compatible-endpoint.example/v1"
client := openai.NewClientWithConfig(config)

For Azure OpenAI, start with DefaultAzureConfig and configure the deployment mapping or API version required by your Azure resource.

Error handling

API failures can be inspected with errors.As:

var apiError *openai.APIError
if errors.As(err, &apiError) {
	fmt.Printf("OpenAI error: status=%d code=%v message=%s\n",
		apiError.HTTPStatusCode, apiError.Code, apiError.Message)
}

Examples

Runnable examples live in examples/:

To run one:

go run ./examples/responses

Contributing

See the contributing guidelines before opening a pull request.

Thank you

Thank you to all of the project's contributors and sponsors, including Carson Kahn of Spindle AI.

Поточні місця

Динаміка за 30 днів

Немає записів за останні 30 днів.

Поставте бейдж у свій README · sashabaranov/go-openai[![Поставте бейдж у свій README](https://git.vaiox.xyz/api/badge/sashabaranov/go-openai.svg)](https://git.vaiox.xyz/uk/repo/sashabaranov/go-openai)

Badge · 任何仓库都可以挂 —— 未上榜的仓库显示灰章,上完榜会自动点亮。

<a href="https://git.vaiox.xyz/uk/repo/sashabaranov/go-openai"><img src="https://git.vaiox.xyz/api/badge/sashabaranov/go-openai.svg" alt="Поставте бейдж у свій README" height="20"></a>

← До рейтингів

GitHub Hot BoardМашина часуОгляд联系我们 · Contact