Skip to main content
Both Hugging Face inference clients, huggingface_hub for Python and @huggingface/inference for JavaScript, accept an OpenAI-compatible base URL, so both call RunInfra today. RunInfra is not a registered Hugging Face Inference Provider, so provider="runinfra" does not resolve. Use the base-URL forms below.

Python

Streaming is the same call with stream=True, reading chunk.choices[0].delta.content.

JavaScript

Pass endpointUrl in the client options and your RunInfra key as the token. The client appends /v1/chat/completions for you, so give it the host with or without /v1.
chatCompletionStream takes the same arguments and yields deltas.
Do not combine endpointUrl with an explicit third-party provider. The client rejects that combination with Cannot use endpointUrl with a third-party provider. Pass endpointUrl alone.

Repository mappings

These clients normally take a Hugging Face repository id. In the base-URL forms above you pass the RunInfra model id, because you are talking to RunInfra directly. deepseek-v4-pro is also live for OpenAI-compatible chat completions. The table lists only the repository mappings currently published in these docs. Use GET /v1/models for the complete live catalog. For the mappings above, the gateway also accepts the repository id in the model field, so either string resolves. GET /v1/models returns the RunInfra ids and is the authoritative live list.

What each model does

What each live model doesGET /v1/models is the live listModelStreamingTool callingJSON modeReasoning offdeepseek-v4-flashyesyesconditionalyesdeepseek-v4-proyesyesyesalready offqwen3-8-27byesyesyesyesqwen3-8-2-4t-a95byesyesyesnonemotron-3-5-lightning-30byesyesconditionalyesornith-1-5-35byesyesyesyesglm-5-3-flashyesyesconditionalnoqwen3-8-flash-nextyesyesyesyesconditional means the model cannot hold a response format at its default reasoning effort: sendreasoning_effort “none” (deepseek-v4-flash, nemotron-3-5-lightning-30b) or “low” or “high”(glm-5-3-flash, which refuses “none”) in the same request as response_format. A feature a modeldoes not offer is refused with 400, never ignored.
What each live model doesGET /v1/models is the live listModelStreamingTool callingJSON modeReasoning offdeepseek-v4-flashyesyesconditionalyesdeepseek-v4-proyesyesyesalready offqwen3-8-27byesyesyesyesqwen3-8-2-4t-a95byesyesyesnonemotron-3-5-lightning-30byesyesconditionalyesornith-1-5-35byesyesyesyesglm-5-3-flashyesyesconditionalnoqwen3-8-flash-nextyesyesyesyesconditional means the model cannot hold a response format at its default reasoning effort: sendreasoning_effort “none” (deepseek-v4-flash, nemotron-3-5-lightning-30b) or “low” or “high”(glm-5-3-flash, which refuses “none”) in the same request as response_format. A feature a modeldoes not offer is refused with 400, never ignored.
Working snippets for the conditional JSON case are in Structured output. reasoning_effort is a plain top-level request field sent beside response_format in the same call.

Where the model’s thinking arrives

These models think before they answer. That text streams on delta.reasoning and appears on message.reasoning, never on content.

Which client should you use

If you already live inside the Hugging Face ecosystem, the clients on this page work and nothing here changes later. Otherwise use the OpenAI client, which is the shortest path and what the rest of these docs assume. See OpenAI compatibility. Either way, calls are billed by RunInfra against your workspace balance at the per-token price on each model’s page. See Pricing and credits and Rate limits.

OpenAI compatibility

The shortest path, and what the rest of these docs assume.

Chat completions

The full request contract.

Pricing and credits

How these calls are billed.