Go client for Dakera AI — the memory engine for AI agents
CI Go Reference License: MIT Docs LoCoMo 88.2%
| Dakera | Others | |
|---|---|---|
| LoCoMo accuracy | 88.2% (1,540 Q standard eval) | 60–92% |
| Deployment | Single binary, Docker one-liner | External vector DB + embedding service required |
| Embeddings | Built-in — no OpenAI key needed | Requires external embedding API |
| Search modes | Vector · BM25 · Hybrid · Knowledge Graph | Usually one or two |
| Dependencies | stdlib net/http only |
Often pulls in gRPC or third-party HTTP clients |
→ Full benchmark results · dakera.ai
docker run -d \
--name dakera \
-p 3000:3000 \
-e DAKERA_ROOT_API_KEY=dk-mykey \
ghcr.io/dakera-ai/dakera:latest
curl http://localhost:3000/health # → {"status":"ok"}For persistent storage with Docker Compose:
curl -sSfL https://raw.githubusercontent.com/Dakera-AI/dakera-deploy/main/docker-compose.yml \ -o docker-compose.yml DAKERA_API_KEY=dk-mykey docker compose up -d
Full deployment guide (Docker Compose, Kubernetes, Helm): dakera-deploy
go get github.com/dakera-ai/dakera-go@latest
Requires Go 1.21+. Uses only the standard library — no external runtime dependencies.
package main import ( "context" "fmt" dakera "github.com/dakera-ai/dakera-go" ) func main() { client := dakera.NewClientWithOptions(dakera.ClientOptions{ BaseURL: "http://localhost:3000", APIKey: "dk-mykey", }) ctx := context.Background() // Store an agent memory imp := float32(0.9) mem, _ := client.StoreMemory(ctx, "my-agent", dakera.StoreMemoryRequest{ Content: "User prefers concise responses with code examples", Importance: &imp, }) fmt.Println("Stored:", mem.Memory.ID) // Recall memories (semantic search) resp, _ := client.Recall(ctx, "my-agent", dakera.RecallRequest{ Query: "what does the user prefer?", TopK: 5, }) for _, m := range resp.Memories { fmt.Printf("[%.2f] %s\n", m.Score, m.Content) } // Upsert vectors client.Upsert(ctx, "my-namespace", []dakera.VectorInput{ {ID: "vec1", Values: []float32{0.1, 0.2, 0.3}}, }) // Hybrid search (vector + BM25) results, _ := client.HybridSearch(ctx, "my-namespace", nil, "completed task", &dakera.HybridSearchOptions{ TopK: 5, VectorWeight: 0.7, }) for _, r := range results { fmt.Println(r.ID, r.Score) } }
All methods accept a context.Context — use it for timeouts, deadlines, or cancellation:
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() resp, err := client.Recall(ctx, "my-agent", dakera.RecallRequest{Query: "preferences", TopK: 3})
Send raw text without pre-computing embeddings — Dakera embeds server-side:
client.UpsertText(ctx, "my-namespace", []dakera.TextInput{ {ID: "doc1", Text: "Agent completed onboarding flow successfully"}, })
- Agent Memory — store, recall, search, and forget memories with importance scoring
- Sessions — group memories by conversation with auto-consolidation on session end
- Knowledge Graph — traverse memory relationships, find paths, export graphs
- Vector Search — ANN queries with metadata filters and batch operations
- Full-Text Search — BM25 ranking with stemming and stop-word filtering
- Hybrid Search — combine vector similarity with keyword matching
- Text Auto-Embedding — server-side embedding generation (no local model needed)
- Namespaces — isolated vector stores per project, tenant, or use case
- Feedback Loop — upvote/downvote/flag memories to improve recall quality
- T-I-F Reliability —
TifScorestruct andEvaluateTif()for Truth-Indeterminacy-Falsity scoring of memory reliability - Entity Extraction — GLiNER NER for automatic entity detection
- SSE Streaming — Server-sent event subscriptions for real-time memory updates
- Typed Filters —
Eq(),Gt(),Contains(),ArrayContains()and more - Context-Based — all methods accept
context.Contextfor cancellation and timeouts - Retry & Rate Limiting — built-in exponential backoff and rate-limit header tracking
- Zero Dependencies — standard library
net/httpclient, no external runtime deps
// Self-hosted client := dakera.NewClientWithOptions(dakera.ClientOptions{ BaseURL: "http://your-server:3000", APIKey: "your-key", }) // Cloud (early access) client := dakera.NewClientWithOptions(dakera.ClientOptions{ BaseURL: "http://<your-server-ip>:3000", APIKey: "your-key", }) // With custom retry config client := dakera.NewClientWithOptions(dakera.ClientOptions{ BaseURL: "http://localhost:3000", APIKey: "your-key", RetryConfig: &dakera.RetryConfig{MaxRetries: 5, BaseDelayMs: 200}, })
See the examples/ directory:
basic/— vectors, namespaces, queries, filtersmemory/— store/recall memories, sessions, agent statsadvanced/— text embedding, full-text, hybrid search, analytics
| Documentation | Full API reference and guides |
| Go SDK docs | pkg.go.dev reference |
| Benchmark | LoCoMo evaluation results |
| dakera.ai | Website and early access |
| GitHub Org | All public repos |
| dakera-deploy | Self-hosting guide |
| SDK | Package |
|---|---|
| dakera-py | dakera (PyPI) |
| dakera-js | @dakera-ai/dakera (npm) |
| dakera-rs | dakera-client (crates.io) |
| dakera-cli | CLI tool |
| dakera-mcp | MCP server for Claude/Cursor |
dakera.ai · Docs · Benchmark · Request Early Access
Built with Rust. Single binary. Zero external dependencies.