# sashabaranov/go-openai architecture

> Architecture diagram of the GitHub repository sashabaranov/go-openai, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sashabaranov/go-openai
- Repository: https://github.com/sashabaranov/go-openai

## Overview

Go OpenAI is an unofficial Go SDK for calling OpenAI-compatible APIs. The principal workflow is an application constructing a configured client, invoking an API operation with typed input, and receiving a decoded result or stream. Separate surfaces cover Responses, Chat Completions, and the documented embeddings, images, audio, moderation, files, fine-tuning, batches, vector stores, and Assistants capabilities. Shared client transport builds and sends HTTP requests; sampled source confirms this boundary. Some capability-to-transport links reflect the documented client surface because their implementations were not sampled.

Main entry points: [`client.go`](https://github.com/sashabaranov/go-openai/blob/master/client.go) (Client), [`response.go`](https://github.com/sashabaranov/go-openai/blob/master/response.go) (Responses API), [`chat.go`](https://github.com/sashabaranov/go-openai/blob/master/chat.go) (Chat Completions), [`completion.go`](https://github.com/sashabaranov/go-openai/blob/master/completion.go) (Completions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client transport"]
  node_clientcore["Client<br/>[client.go]"]
  node_requestbuilder["Request builder<br/>[request_builder.go]"]
  node_formbuilder["Multipart builder<br/>[form_builder.go]"]
end

subgraph group_generation["Text generation"]
  node_response["Responses API<br/>[response.go]"]
  node_response_stream["Response streaming<br/>[response_stream.go]"]
  node_chat["Chat Completions<br/>[chat.go]"]
  node_completion["Completions<br/>[completion.go]"]
end

subgraph group_services["API services"]
  node_embeddings["Embeddings<br/>[embeddings.go]"]
  node_images["Images<br/>[image.go]"]
  node_audio["Audio<br/>[audio.go]"]
  node_speech["Speech<br/>[speech.go]"]
  node_moderation["Moderation<br/>[moderation.go]"]
  node_files["Files<br/>[files.go]"]
  node_finetunes["Fine-tuning<br/>[fine_tunes.go]"]
  node_batches["Batches<br/>[batch.go]"]
  node_vectorstores["Vector stores<br/>[vector_store.go]"]
  node_models["Models<br/>[models.go]"]
end

subgraph group_assistants["Assistants API"]
  node_assistants["Assistants<br/>[assistant.go]"]
  node_threads["Threads and messages<br/>[thread.go]"]
  node_runs["Runs and steps<br/>[run.go]"]
end

node_app(("Go application"))
node_openai{{"OpenAI API"}}

node_app -->|"configures"| node_clientcore
node_app -->|"requests"| node_response
node_app -->|"requests"| node_chat
node_app -->|"requests"| node_completion
node_app -->|"requests"| node_embeddings
node_app -->|"requests"| node_images
node_app -->|"requests"| node_audio
node_app -->|"requests"| node_speech
node_app -->|"requests"| node_moderation
node_app -->|"requests"| node_files
node_app -->|"requests"| node_finetunes
node_app -->|"requests"| node_batches
node_app -->|"requests"| node_vectorstores
node_app -->|"requests"| node_models
node_app -->|"requests"| node_assistants
node_app -->|"requests"| node_threads
node_app -->|"requests"| node_runs
node_response -->|"sends requests"| node_clientcore
node_response_stream -->|"opens stream"| node_clientcore
node_chat -->|"sends requests"| node_clientcore
node_completion -->|"sends requests"| node_clientcore
node_embeddings -->|"sends requests"| node_clientcore
node_images -->|"sends requests"| node_clientcore
node_audio -->|"sends requests"| node_clientcore
node_speech -->|"sends requests"| node_clientcore
node_moderation -->|"sends requests"| node_clientcore
node_files -->|"sends requests"| node_clientcore
node_finetunes -->|"sends requests"| node_clientcore
node_batches -->|"sends requests"| node_clientcore
node_vectorstores -->|"sends requests"| node_clientcore
node_models -->|"sends requests"| node_clientcore
node_assistants -->|"sends requests"| node_clientcore
node_threads -->|"sends requests"| node_clientcore
node_runs -->|"sends requests"| node_clientcore
node_clientcore -->|"builds request"| node_requestbuilder
node_clientcore -->|"builds multipart"| node_formbuilder
node_clientcore -->|"sends HTTP"| node_openai

click node_clientcore "https://github.com/sashabaranov/go-openai/blob/master/client.go"
click node_requestbuilder "https://github.com/sashabaranov/go-openai/blob/master/internal/request_builder.go"
click node_formbuilder "https://github.com/sashabaranov/go-openai/blob/master/internal/form_builder.go"
click node_response "https://github.com/sashabaranov/go-openai/blob/master/response.go"
click node_response_stream "https://github.com/sashabaranov/go-openai/blob/master/response_stream.go"
click node_chat "https://github.com/sashabaranov/go-openai/blob/master/chat.go"
click node_completion "https://github.com/sashabaranov/go-openai/blob/master/completion.go"
click node_embeddings "https://github.com/sashabaranov/go-openai/blob/master/embeddings.go"
click node_images "https://github.com/sashabaranov/go-openai/blob/master/image.go"
click node_audio "https://github.com/sashabaranov/go-openai/blob/master/audio.go"
click node_speech "https://github.com/sashabaranov/go-openai/blob/master/speech.go"
click node_moderation "https://github.com/sashabaranov/go-openai/blob/master/moderation.go"
click node_files "https://github.com/sashabaranov/go-openai/blob/master/files.go"
click node_finetunes "https://github.com/sashabaranov/go-openai/blob/master/fine_tunes.go"
click node_batches "https://github.com/sashabaranov/go-openai/blob/master/batch.go"
click node_vectorstores "https://github.com/sashabaranov/go-openai/blob/master/vector_store.go"
click node_models "https://github.com/sashabaranov/go-openai/blob/master/models.go"
click node_assistants "https://github.com/sashabaranov/go-openai/blob/master/assistant.go"
click node_threads "https://github.com/sashabaranov/go-openai/blob/master/thread.go"
click node_runs "https://github.com/sashabaranov/go-openai/blob/master/run.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_clientcore,node_requestbuilder,node_formbuilder toneBlue
class node_response,node_response_stream,node_chat,node_completion toneAmber
class node_embeddings,node_images,node_audio,node_speech,node_moderation,node_files,node_finetunes,node_batches,node_vectorstores,node_models,node_openai toneMint
class node_assistants,node_threads,node_runs toneRose
class node_app toneIndigo
```

## Components

### Client transport

- [Client](https://github.com/sashabaranov/go-openai/blob/master/client.go): `client.go`
- [Request builder](https://github.com/sashabaranov/go-openai/blob/master/internal/request_builder.go): `internal/request_builder.go`
- [Multipart builder](https://github.com/sashabaranov/go-openai/blob/master/internal/form_builder.go): `internal/form_builder.go`

### Text generation

- [Responses API](https://github.com/sashabaranov/go-openai/blob/master/response.go): `response.go`
- [Response streaming](https://github.com/sashabaranov/go-openai/blob/master/response_stream.go): `response_stream.go`
- [Chat Completions](https://github.com/sashabaranov/go-openai/blob/master/chat.go): `chat.go`
- [Completions](https://github.com/sashabaranov/go-openai/blob/master/completion.go): `completion.go`

### API services

- [Embeddings](https://github.com/sashabaranov/go-openai/blob/master/embeddings.go): `embeddings.go`
- [Images](https://github.com/sashabaranov/go-openai/blob/master/image.go): `image.go`
- [Audio](https://github.com/sashabaranov/go-openai/blob/master/audio.go): `audio.go`
- [Speech](https://github.com/sashabaranov/go-openai/blob/master/speech.go): `speech.go`
- [Moderation](https://github.com/sashabaranov/go-openai/blob/master/moderation.go): `moderation.go`
- [Files](https://github.com/sashabaranov/go-openai/blob/master/files.go): `files.go`
- [Fine-tuning](https://github.com/sashabaranov/go-openai/blob/master/fine_tunes.go): `fine_tunes.go`
- [Batches](https://github.com/sashabaranov/go-openai/blob/master/batch.go): `batch.go`
- [Vector stores](https://github.com/sashabaranov/go-openai/blob/master/vector_store.go): `vector_store.go`
- [Models](https://github.com/sashabaranov/go-openai/blob/master/models.go): `models.go`

### Assistants API

- [Assistants](https://github.com/sashabaranov/go-openai/blob/master/assistant.go): `assistant.go`
- [Threads and messages](https://github.com/sashabaranov/go-openai/blob/master/thread.go): `thread.go`
- [Runs and steps](https://github.com/sashabaranov/go-openai/blob/master/run.go): `run.go`

### Other components

- **Go application**
- **OpenAI API**

## Connections

- Go application → Client: configures
- Go application → Responses API: requests
- Go application → Chat Completions: requests
- Go application → Completions: requests
- Go application → Embeddings: requests
- Go application → Images: requests
- Go application → Audio: requests
- Go application → Speech: requests
- Go application → Moderation: requests
- Go application → Files: requests
- Go application → Fine-tuning: requests
- Go application → Batches: requests
- Go application → Vector stores: requests
- Go application → Models: requests
- Go application → Assistants: requests
- Go application → Threads and messages: requests
- Go application → Runs and steps: requests
- Responses API → Client: sends requests
- Response streaming → Client: opens stream
- Chat Completions → Client: sends requests
- Completions → Client: sends requests
- Embeddings → Client: sends requests
- Images → Client: sends requests
- Audio → Client: sends requests
- Speech → Client: sends requests
- Moderation → Client: sends requests
- Files → Client: sends requests
- Fine-tuning → Client: sends requests
- Batches → Client: sends requests
- Vector stores → Client: sends requests
- Models → Client: sends requests
- Assistants → Client: sends requests
- Threads and messages → Client: sends requests
- Runs and steps → Client: sends requests
- Client → Request builder: builds request
- Client → Multipart builder: builds multipart
- Client → OpenAI API: sends HTTP
