Single entry point for all inference calls.
Pipeline: auth (credential resolution) → adapter (wire protocol) → normalizer (post-processing).
Callers never touch adapters, profiles, or normalizers directly.
Summary
Functions
Synchronous chat completion.
Accepts optional adapter override for testing.
Generates embeddings.
Lists available models from the provider.
Streaming chat completion.
Functions
@spec chat(map(), Arcanum.Intent.t(), keyword()) :: {:ok, Arcanum.Response.t()} | {:error, term()}
Synchronous chat completion.
Accepts optional adapter override for testing.
Generates embeddings.
Lists available models from the provider.
Each adapter handles its own endpoint format and filtering internally.
@spec stream(map(), Arcanum.Intent.t(), keyword()) :: {:ok, Enumerable.t()} | {:error, term()}
Streaming chat completion.
Returns a normalized stream. Each delta has content fallback applied.
The caller is responsible for merging deltas; the final merged response
should be passed through Normalizer.normalize/2 for tool-call extraction.