Files
go-llm/v2/CLAUDE.md
T
steve 4522310f5a
CI / Root Module (pull_request) Failing after 3s
CI / Lint (pull_request) Failing after 3s
CI / V2 Module (pull_request) Successful in 1m25s
feat(v2): add Parse() function and extensible Registry for model string resolution
Introduces llm.Parse(spec) backed by an extensible Registry that resolves
model strings like "openai/gpt-4o", aliases like "fast", and named targets
like "m5/qwen3:30b" (via LLM_M5 env var DSNs) into ready-to-use *Model
objects. Extension points: RegisterProvider, RegisterAlias, RegisterResolver.
Adds Foreman constructor and sentinel errors ErrAliasLoop, ErrUnknownProvider,
ErrInvalidDSN.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 22:58:14 -04:00

2.9 KiB

CLAUDE.md for go-llm v2

Build and Test Commands

  • Build project: cd v2 && go build ./...
  • Run all tests: cd v2 && go test ./...
  • Run specific test: cd v2 && go test -v -run <TestName> ./...
  • Tidy dependencies: cd v2 && go mod tidy
  • Vet: cd v2 && go vet ./...

Code Style Guidelines

  • Indentation: Standard Go tabs
  • Naming: camelCase for unexported, PascalCase for exported
  • Error Handling: Always check and handle errors immediately. Wrap with fmt.Errorf("%w: ...", err)
  • Imports: Standard library first, then third-party, then internal packages

Package Structure

  • Root package llm — public API (Client, Model, Chat, ToolBox, Message types)
  • provider/ — Provider interface that backends implement
  • openai/, anthropic/, google/ — Provider implementations
  • ollama/ — Native /api/chat provider, used by both llm.Ollama() (local) and llm.OllamaCloud(apiKey) (cloud).
  • tools/ — Ready-to-use sample tools (WebSearch, Browser, Exec, ReadFile, WriteFile, HTTP)
  • sandbox/ — Isolated Linux container environments via Proxmox LXC + SSH
  • internal/schema/ — JSON Schema generation from Go structs
  • internal/imageutil/ — Image compression utilities

Key Design Decisions

  1. Unified Message type instead of marker interfaces
  2. map[string]any JSON Schema (no provider coupling)
  3. Tool functions return (string, error), use standard context.Context
  4. Chat.Send() auto-loops tool calls; Chat.SendRaw() for manual control
  5. MCP one-call connect: MCPStdioServer(ctx, cmd, args...)
  6. Streaming via pull-based StreamReader.Next()
  7. Middleware for logging, retry, timeout, usage tracking
  8. Ollama uses the native /api/chat API rather than the OpenAI-compat /v1 endpoint. Native API supports think: false for thinking-capable models, has more reliable tool calling, and is approximately 15-20% lower latency. Both local and cloud share the same provider; only the apiKey/baseURL differ. llm.Ollama() targets http://localhost:11434 with no Authorization header; llm.OllamaCloud(key) targets https://ollama.com with Authorization: Bearer <key>.

DD#9 — Parse() function and extensible Registry (2026-05-23)

Context: mort's ParseModelRequest resolves "provider/model" strings but is mort-specific. Multi-instance providers (foreman) need named targets. Decision: Add llm.Parse(spec) backed by an extensible Registry. Supports aliases, dynamic resolvers, and LLM_X env var DSNs for named targets. Provider/model syntax: "openai/gpt-4o", aliases: "fast", named targets: "m5/qwen3:30b" (reads LLM_M5 env var). Registry is extensible via RegisterProvider, RegisterAlias, RegisterResolver. Consequence: Any go-llm consumer gets model-string parsing. mort migrates by registering its tier aliases as resolvers. Foreman instances are addressed via LLM_X DSN env vars without code changes.