Call language models, stream responses, execute tools, and serve AI-powered endpoints from Go. Use the SDK on its own or pair it with an AI SDK React frontend.
The SDK gives Go applications one API for model calls, streaming, tools,
structured output, and multi-step agents across supported providers. It follows
the design of Vercel's AI SDK and stays wire-compatible
with its TypeScript frontend hooks. A Go endpoint can stream Server-Sent Events
(SSE) directly to hooks such as useChat
.
Go backend React frontend
ββββββββββ ββββββββββββββ
aisdk.StreamText(...) ββ SSE βββΆ useChat({ transport })
aisdk.WriteUIMessageStream(w, β¦) // same protocol
See How a request runs for the generation, tool, and streaming flow. Reuse an existing AI SDK React frontend or replace a TypeScript backend with Go without adding a protocol adapter.
β stream a response or wait for the complete result, with retries and multi-step tool executionStreamText
/GenerateText
React compatibilityβ serveuseChat
,useCompletion
, anduseObject
Composable toolsβ call plain Go functions from a model and require approval for consequential actions** Structured output**β generate schema-validated objects, arrays, and choices** Multiple providers**β call Anthropic, Amazon Bedrock, OpenAI, OpenAI-compatible APIs, and Grafana's hosted endpoint from internal services** Production controls**β configure timeouts, fallback, logging, Prometheus metrics, andAgent Observability
Create a Go project and install the core module and one provider:
mkdir ai-sdk-quickstart
cd ai-sdk-quickstart
go mod init example.com/ai-sdk-quickstart
go get github.com/grafana/ai-sdk
go get github.com/grafana/ai-sdk/providers/anthropic
See Choose a provider for Amazon Bedrock, OpenAI, OpenAI-compatible APIs, and the internally provisioned Grafana hosted endpoint.
Save this complete program as main.go
. It makes one model call and prints the response:
package main
import (
"context"
"fmt"
"log"
"os"
aisdk "github.com/grafana/ai-sdk"
"github.com/grafana/ai-sdk/provider"
"github.com/grafana/ai-sdk/providers/anthropic"
)
func main() {
apiKey := os.Getenv("ANTHROPIC_API_KEY")
if apiKey == "" {
log.Fatal("ANTHROPIC_API_KEY is required")
}
model := anthropic.New(apiKey, "claude-sonnet-5")
result, err := aisdk.GenerateText(context.Background(), model,
aisdk.WithModelMessages(provider.UserText("Explain goroutines in one sentence.")),
)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Text)
}
Run it with an Anthropic API key:
ANTHROPIC_API_KEY=sk-... go run .
For project initialization and credential guidance, follow Installation. To stream this response to a React client, continue with Build a full-stack chat.
| Goal | Start here |
|---|---|
| Make model calls from Go | |
Full-stack chatStructured outputToolsAgent loopsProvider overviewMiddleware overviewProduction checklistFull index: ** Documentation** Β· Runnable code:
Β· Exact APIs:
pkg.go.devContributions are welcome. CONTRIBUTING.md covers the development setup, the two conventions that make this repository unusual β upstream parity with the Vercel AI SDK, and spec-driven development with OpenSpec β and the pull request checklist. All participants follow our Code of Conduct.
Apache License 2.0. This SDK follows the design of Vercel's AI SDK, also Apache-2.0 licensed; attribution is recorded in NOTICE.