Capabilities
Sampling Controls
Temperature, top-p/k, penalties, stop sequences, seed, logprobs, safety
Read this when
- Tuning generation behavior for a feature
- Building eval harnesses that need determinism
Today StreamOptions exposes only Temperature and MaxTokens. Most other sampling knobs are unwired even where the provider supports them.
Core Sampling Parameters
| Parameter | Anthropic | OpenAI Chat | OpenAI Responses | pi-go option | |
|---|---|---|---|---|---|
temperature | ✅ | ✅ | ✅ | ✅ | ✅ (options.go) |
max_tokens | ✅ | ✅ max_completion_tokens | ✅ max_output_tokens | ✅ maxOutputTokens | ✅ |
top_p | ❌ | ✅ | ✅ | ✅ | ❌ |
top_k | ❌ | ❌ | ❌ | ✅ | ❌ |
frequency_penalty | ❌ | ✅ | ✅ | ❌ | ❌ |
presence_penalty | ❌ | ✅ | ✅ | ❌ | ❌ |
OpenAI reasoning models lock temperature; pi-go gates this through compat.SupportsTemperature (openai.go:304-305). MaxTokens is forced upward when thinking is enabled on Anthropic (anthropic.go:256) — caller’s request is silently overridden.
Stop Sequences
| Provider | API | pi-go |
|---|---|---|
| Anthropic | ✅ stop_sequences | ❌ |
| OpenAI Chat | ✅ stop | ❌ |
| OpenAI Responses | ✅ | ❌ |
| Google Gemini | ✅ stopSequences | ❌ |
Seed / Reproducibility
| Provider | API | pi-go |
|---|---|---|
| Anthropic | ❌ | — |
| OpenAI Chat | ✅ seed + returns system_fingerprint | ❌ |
| OpenAI Responses | ✅ | ❌ |
| Google Gemini | ❌ | — |
Logprobs
| Provider | API | pi-go |
|---|---|---|
| Anthropic | ❌ | — |
| OpenAI Chat | ✅ logprobs + top_logprobs | ❌ |
| OpenAI Responses | ✅ | ❌ |
| Google Gemini | ⚠️ responseLogprobs (preview) | ❌ |
Safety / Moderation
| Provider | API | pi-go |
|---|---|---|
| Anthropic | ⚠️ policy-driven; no per-call thresholds | ❌ |
| OpenAI Chat | ⚠️ built-in filter; separate Moderation API | ❌ |
| OpenAI Responses | ⚠️ same | ❌ |
| Google Gemini | ✅ safetySettings per harm category (HARASSMENT, HATE_SPEECH, SEXUALLY_EXPLICIT, DANGEROUS_CONTENT, CIVIC_INTEGRITY) with thresholds | ❌ |
Provider Documentation
- Anthropic — Messages params
- OpenAI — Chat completions params
- OpenAI — Responses params
- OpenAI — Reproducible outputs (
seed) - OpenAI — Logprobs
- OpenAI — Moderation API
- Google Gemini — generationConfig
- Google Gemini — Safety settings
pi-go Gaps
top_p,top_k,frequency_penalty,presence_penaltynot exposed for any provider that supports them.- Stop sequences missing entirely;
StopReasonhas no value distinguishing “matched stop sequence” from regular stop. seedmissing; noSystemFingerprinton returned messages.- Logprobs: no content type or message field for per-token logprobs. Adding requires extending
ai.Textor a parallel metadata field. - Safety settings: no
SafetySettingsoption; no way to surface asafety_ratings/ blocked-output reason from Gemini responses;StopReasonhas nosafetyvalue. MaxTokensoverride when thinking is on (Anthropic) is silent — caller’s intent isn’t preserved.