Skip to content

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

ParameterAnthropicOpenAI ChatOpenAI ResponsesGooglepi-go option
temperature✅ (options.go)
max_tokensmax_completion_tokensmax_output_tokensmaxOutputTokens
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

ProviderAPIpi-go
Anthropicstop_sequences
OpenAI Chatstop
OpenAI Responses
Google GeministopSequences

Seed / Reproducibility

ProviderAPIpi-go
Anthropic
OpenAI Chatseed + returns system_fingerprint
OpenAI Responses
Google Gemini

Logprobs

ProviderAPIpi-go
Anthropic
OpenAI Chatlogprobs + top_logprobs
OpenAI Responses
Google Gemini⚠️ responseLogprobs (preview)

Safety / Moderation

ProviderAPIpi-go
Anthropic⚠️ policy-driven; no per-call thresholds
OpenAI Chat⚠️ built-in filter; separate Moderation API
OpenAI Responses⚠️ same
Google GeminisafetySettings per harm category (HARASSMENT, HATE_SPEECH, SEXUALLY_EXPLICIT, DANGEROUS_CONTENT, CIVIC_INTEGRITY) with thresholds

Provider Documentation

pi-go Gaps

  • top_p, top_k, frequency_penalty, presence_penalty not exposed for any provider that supports them.
  • Stop sequences missing entirely; StopReason has no value distinguishing “matched stop sequence” from regular stop.
  • seed missing; no SystemFingerprint on returned messages.
  • Logprobs: no content type or message field for per-token logprobs. Adding requires extending ai.Text or a parallel metadata field.
  • Safety settings: no SafetySettings option; no way to surface a safety_ratings / blocked-output reason from Gemini responses; StopReason has no safety value.
  • MaxTokens override when thinking is on (Anthropic) is silent — caller’s intent isn’t preserved.