94057c3d3e
PR Test (NPU) / check-changes (push) Has been cancelled
PR Test (NPU) / pr-gate (push) Has been cancelled
PR Test (NPU) / set-image-config (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-4-npu-a3 (push) Has been cancelled
PR Test (NPU) / stage-b-test-16-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-1-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-2-npu-a3 (push) Has been cancelled
PR Test (Arm64) / pr-gate (push) Has been cancelled
PR Test (Arm64) / check-changes (push) Has been cancelled
PR Test (Arm64) / build-test (push) Has been cancelled
PR Test (sgl-router) / gate (push) Has been cancelled
PR Test (sgl-router) / tier-1 — lint (push) Has been cancelled
PR Test (sgl-router) / tier-2 — build + test (push) Has been cancelled
PR Test (sgl-router) / tier-3 — docker (placeholder) (push) Has been cancelled
PR Test (sgl-router) / tier-3 — k8s integration (push) Has been cancelled
PR Test (sgl-router) / tier-3 — e2e (push) Has been cancelled
PR Test (sgl-router) / finish (push) Has been cancelled
PR Test (NPU) / single-node-poc (map[name:qwen3_6_27b_w8a8_1p_in64k_out1k_50ms runner:linux-aarch64-a3-2 test_case:test/registered/ascend/performance/qwen3_6_27b/test_npu_qwen3_6_27b_w8a8_1p_in64k_out1k_50ms.py test_type:perf]) (push) Has been cancelled
PR Test (NPU) / pr-test-npu-finish (push) Has been cancelled
PR Test (Xeon) / pr-gate (push) Has been cancelled
PR Test (Xeon) / check-changes (push) Has been cancelled
PR Test (Xeon) / build-test (, xeon-gnr, base-b-test-cpu) (push) Has been cancelled
PR Test (XPU) / check-changes (push) Has been cancelled
PR Test (XPU) / pr-gate (push) Has been cancelled
PR Test (XPU) / stage-a-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / wait-for-stage-a (push) Has been cancelled
PR Test (XPU) / stage-b-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / finish (push) Has been cancelled
CI Model Inventory / build-inventory (push) Has been cancelled
Lint / lint (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Compilation Check (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Manual Policy (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Request Processing (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Summary (push) Has been cancelled
PR Test (SMG) / build-wheel (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on windows (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (x86_64 - auto) (push) Has been cancelled
PR Test (SMG) / python-unit-tests (push) Has been cancelled
PR Test (SMG) / unit-tests (push) Has been cancelled
PR Test (SMG) / benchmarks (push) Has been cancelled
PR Test (SMG) / chat-completions (push) Has been cancelled
PR Test (SMG) / chat-completions-4gpu (push) Has been cancelled
PR Test (SMG) / e2e (push) Has been cancelled
PR Test (SMG) / docker-build-test (push) Has been cancelled
PR Test (SMG) / k8s-integration (push) Has been cancelled
PR Test (SMG) / finish (push) Has been cancelled
PR Test (SMG) / summarize-benchmarks (push) Has been cancelled
Release SGLang Model Gateway Docker Image / publish (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Build SDist (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Upload to PyPI (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (aarch64, 12.9, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (x86_64, 12.9, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu129 (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (aarch64, 13.0, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (x86_64, 13.0, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu130 (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 700) (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 720) (push) Has been cancelled
Release SGLang Kernels / release-rocm700 (push) Has been cancelled
Release SGLang Kernels / release-rocm720 (push) Has been cancelled
Release SGLang Kernels / build-musa43 (43, 3.10) (push) Has been cancelled
Release SGLang Kernels / release-musa43 (push) Has been cancelled
164 lines
4.8 KiB
Plaintext
164 lines
4.8 KiB
Plaintext
---
|
|
title: Classification Models
|
|
---
|
|
This document describes the `/v1/classify` API endpoint implementation in SGLang, which is compatible with vLLM's classification API format.
|
|
|
|
## Overview
|
|
|
|
The classification API allows you to classify text inputs using classification models. This implementation follows the same format as vLLM's 0.7.0 classification API.
|
|
|
|
## API Endpoint
|
|
|
|
```text Output
|
|
POST /v1/classify
|
|
```
|
|
|
|
## Request Format
|
|
|
|
```json Config
|
|
{
|
|
"model": "model_name",
|
|
"input": "text to classify"
|
|
}
|
|
```
|
|
|
|
### Parameters
|
|
|
|
- `model` (string, required): The name of the classification model to use
|
|
- `input` (string, required): The text to classify
|
|
- `user` (string, optional): User identifier for tracking
|
|
- `rid` (string, optional): Request ID for tracking
|
|
- `priority` (integer, optional): Request priority
|
|
|
|
## Response Format
|
|
|
|
```json Config
|
|
{
|
|
"id": "classify-9bf17f2847b046c7b2d5495f4b4f9682",
|
|
"object": "list",
|
|
"created": 1745383213,
|
|
"model": "jason9693/Qwen2.5-1.5B-apeach",
|
|
"data": [
|
|
{
|
|
"index": 0,
|
|
"label": "Default",
|
|
"probs": [0.565970778465271, 0.4340292513370514],
|
|
"num_classes": 2
|
|
}
|
|
],
|
|
"usage": {
|
|
"prompt_tokens": 10,
|
|
"total_tokens": 10,
|
|
"completion_tokens": 0,
|
|
"prompt_tokens_details": null
|
|
}
|
|
}
|
|
```
|
|
|
|
### Response Fields
|
|
|
|
- `id`: Unique identifier for the classification request
|
|
- `object`: Always "list"
|
|
- `created`: Unix timestamp when the request was created
|
|
- `model`: The model used for classification
|
|
- `data`: Array of classification results
|
|
- `index`: Index of the result
|
|
- `label`: Predicted class label
|
|
- `probs`: Array of probabilities for each class
|
|
- `num_classes`: Total number of classes
|
|
- `usage`: Token usage information
|
|
- `prompt_tokens`: Number of input tokens
|
|
- `total_tokens`: Total number of tokens
|
|
- `completion_tokens`: Number of completion tokens (always 0 for classification)
|
|
- `prompt_tokens_details`: Additional token details (optional)
|
|
|
|
## Example Usage
|
|
|
|
### Using curl
|
|
|
|
```bash Command
|
|
curl -v "http://127.0.0.1:8000/v1/classify" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"model": "jason9693/Qwen2.5-1.5B-apeach",
|
|
"input": "Loved the new café—coffee was great."
|
|
}'
|
|
```
|
|
|
|
### Using Python
|
|
|
|
```python Example
|
|
import requests
|
|
import json
|
|
|
|
# Make classification request
|
|
response = requests.post(
|
|
"http://127.0.0.1:8000/v1/classify",
|
|
headers={"Content-Type": "application/json"},
|
|
json={
|
|
"model": "jason9693/Qwen2.5-1.5B-apeach",
|
|
"input": "Loved the new café—coffee was great."
|
|
}
|
|
)
|
|
|
|
# Parse response
|
|
result = response.json()
|
|
print(json.dumps(result, indent=2))
|
|
```
|
|
|
|
## Supported Models
|
|
|
|
The classification API works with any classification model supported by SGLang, including:
|
|
|
|
### Classification Models (Multi-class)
|
|
- `LlamaForSequenceClassification` - Multi-class classification
|
|
- `Qwen2ForSequenceClassification` - Multi-class classification
|
|
- `Qwen3ForSequenceClassification` - Multi-class classification
|
|
- `BertForSequenceClassification` - Multi-class classification
|
|
- `Gemma2ForSequenceClassification` - Multi-class classification
|
|
|
|
**Label Mapping**: The API automatically uses the `id2label` mapping from the model's `config.json` file to provide meaningful label names instead of generic class names. If `id2label` is not available, it falls back to `LABEL_0`, `LABEL_1`, etc., or `Class_0`, `Class_1` as a last resort.
|
|
|
|
### Reward Models (Single score)
|
|
- `InternLM2ForRewardModel` - Single reward score
|
|
- `Qwen2ForRewardModel` - Single reward score
|
|
- `LlamaForSequenceClassificationWithNormal_Weights` - Special reward model
|
|
|
|
**Note**: The `/classify` endpoint in SGLang was originally designed for reward models but now supports all non-generative models. Our `/v1/classify` endpoint provides a standardized vLLM-compatible interface for classification tasks.
|
|
|
|
## Error Handling
|
|
|
|
The API returns appropriate HTTP status codes and error messages:
|
|
|
|
- `400 Bad Request`: Invalid request format or missing required fields
|
|
- `500 Internal Server Error`: Server-side processing error
|
|
|
|
Error response format:
|
|
```json Config
|
|
{
|
|
"error": "Error message",
|
|
"type": "error_type",
|
|
"code": 400
|
|
}
|
|
```
|
|
|
|
## Implementation Details
|
|
|
|
The classification API is implemented using:
|
|
|
|
1. **Rust Model Gateway**: Handles routing and request/response models in `sgl-model-gateway/src/protocols/spec.rs`
|
|
2. **Python HTTP Server**: Implements the actual endpoint in `python/sglang/srt/entrypoints/http_server.py`
|
|
3. **Classification Service**: Handles the classification logic in `python/sglang/srt/entrypoints/openai/serving_classify.py`
|
|
|
|
## Testing
|
|
|
|
Use the provided test script to verify the implementation:
|
|
|
|
```bash Command
|
|
python test_classify_api.py
|
|
```
|
|
|
|
## Compatibility
|
|
|
|
This implementation is compatible with vLLM's classification API format, allowing seamless migration from vLLM to SGLang for classification tasks.
|