Tinkex.API.Sampling (Tinkex v0.3.4)

View Source

Sampling API endpoints.

Uses :sampling pool (high concurrency). Pool size: 100 connections.

Summary

Functions

Async sample request.

Streaming sample request via SSE.

Functions

sample_async(request, opts)

@spec sample_async(
  map(),
  keyword()
) :: {:ok, map()} | {:error, Tinkex.Error.t()}

Async sample request.

Uses :sampling pool (high concurrency). Sets max_retries: 0 - Phase 4's SamplingClient will implement client-side rate limiting and retry logic via RateLimiter. The HTTP layer doesn't retry so that the higher-level client can make intelligent retry decisions based on rate limit state.

Note: Named sample_async for consistency with Elixir naming conventions (adjective_noun or verb_object patterns). The API endpoint remains /api/v1/asample.

Examples

Tinkex.API.Sampling.sample_async(
  %{session_id: "...", prompts: [...]},
  config: config
)

sample_stream(request, opts)

@spec sample_stream(
  map(),
  keyword()
) :: {:ok, Enumerable.t()} | {:error, Tinkex.Error.t()}

Streaming sample request via SSE.

Returns a stream of SampleStreamChunk structs that can be consumed incrementally for real-time token generation.

Uses :sampling pool (high concurrency). Does not retry - streaming responses cannot be reliably retried mid-stream.

Examples

{:ok, stream} = Tinkex.API.Sampling.sample_stream(request, config: config)
Enum.each(stream, fn chunk -> IO.write(chunk.token) end)