Chat & Generate#

Learn how to chat with LLMs in Xinference.

Introduction#

Models equipped with chat or generate abilities are frequently referred to as large language models (LLM) or text generation models. These models are designed to respond with text outputs to the inputs they receive, commonly known as “prompts”. Typically, one can direct these models using specific instructions or by providing concrete examples illustrating how to accomplish a task.

Models with generate capacities are typically pre-trained large language models. On the other hand, models equipped with chat capabilities are finely-tuned and aligned LLMs, optimized for dialogues use case. In most cases, models ending with “chat” (e.g. llama-2-chat, qwen-chat, etc) are identified as having chat capabilities.

The Chat API and Generate API offer two distinct approaches for interacting with LLMs:

  • The Chat API (like OpenAI’s Chat Completion API) can conduct multi-turn conversations.

  • The Generate API (like OpenAI’s legacy Completions API) allows you to generate text based on a text prompt.

MODEL ABILITY

API ENDPOINT

OpenAI-compatible ENDPOINT

chat

Chat API

/v1/chat/completions

generate

Generate API

/v1/completions

Supported models#

You can examine the abilities of all the builtin LLM models in Xinference.

Chat Models#

Chat API#

The Chat API mimics OpenAI’s Chat Completion API. We can try Chat API out either via cURL, OpenAI Client, or Xinference’s python client:

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/chat/completions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<MODEL_UID>",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "What is the largest animal?"
        }
    ],
    "max_tokens": 512,
    "temperature": 0.7
  }'

Hybrid Thinking Models#

Some LLMs are marked as hybrid and can run with or without thinking mode.

Added in version v1.17.0: Request-level enable_thinking is added in v1.17.0

Xinference exposes a request-level enable_thinking switch that works across different model templates (e.g. Qwen uses enable_thinking while some DeepSeek templates use thinking).

Usage examples:

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/chat/completions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<MODEL_UID>",
    "messages": [
        {"role": "user", "content": "What is the largest animal?"}
    ],
    "enable_thinking": false
  }'

DeepSeek-V4-Flash-0731#

DeepSeek-V4-Flash-0731 is a separate built-in model from the DeepSeek-V4-Flash preview entry. It uses the native FP8 checkpoint and requires vLLM 0.20.1 or newer.

Launch it with:

xinference launch \
    --model-engine vLLM \
    --model-name DeepSeek-V4-Flash-0731 \
    --size-in-billions 304 \
    --model-format fp8 \
    --quantization fp8

The upstream repository supplies DeepSeek-V4-specific encoding code. Enable trusted repository code before launch:

export XINFERENCE_TRUST_REMOTE_CODE=1

The chat_template_kwargs option selects thinking mode and reasoning level:

{
  "chat_template_kwargs": {
    "enable_thinking": true,
    "reasoning_effort": "high"
  }
}

Set enable_thinking to false for chat mode. Supported reasoning levels are provided by the model repository; low, high, and max are forwarded without Xinference rewriting them.

The checkpoint includes a DSpark speculative decoding module, but Xinference does not enable it automatically. Enable it through vLLM model configuration when supported:

{
  "speculative_config": {
    "method": "dspark",
    "num_speculative_tokens": 7,
    "draft_sample_method": "greedy"
  }
}

The following parameters are the upstream example for a single 4xGB300 node and are not Xinference defaults:

--kv-cache-dtype fp8 \
--block-size 256 \
--data-parallel-size 4 \
--enable-expert-parallel \
--moe-backend deep_gemm_mega_moe \
--attention-config '{"use_fp4_indexer_cache": true}'

Generate Models#

Generate API#

The Generate API mirrors OpenAI’s legacy Completions API.

The difference between the Generate API and the Chat API lies primarily in the form of input. Opposite to the Chat API that takes a list of messages as input, the Generate API accepts a freeform text string named “prompt”.

curl -X 'POST' \
  'http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1/completions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "<MODEL_UID>",
    "prompt": "What is the largest animal?",
    "max_tokens": 512,
    "temperature": 0.7
  }'

FAQ#

Does Xinference’s LLM provide integration methods for LangChain or LlamaIndex?#

Yes, you can refer to the related sections in their respective official Xinference documentation. Here are the links: