Signed-off-by: yuanheng <jonathan.zhaoyh@gmail.com> Signed-off-by: Yuanheng Zhao <jonathan.zhaoyh@gmail.com>
205 lines
7.0 KiB
Markdown
205 lines
7.0 KiB
Markdown
# Ming-flash-omni 2.0
|
|
|
|
## Installation
|
|
|
|
Please refer to [README.md](../../../README.md)
|
|
|
|
## Run examples (Ming-flash-omni 2.0)
|
|
|
|
### Launch the Server
|
|
|
|
```bash
|
|
vllm serve Jonathan1909/Ming-flash-omni-2.0 --omni --port 8091
|
|
```
|
|
|
|
If you have custom stage configs file, launch the server with command below
|
|
```bash
|
|
vllm serve Jonathan1909/Ming-flash-omni-2.0 --omni --port 8091 --stage-configs-path /path/to/stage_configs_file
|
|
```
|
|
|
|
### Send Multi-modal Request
|
|
|
|
#### Send request via python
|
|
|
|
```bash
|
|
python examples/online_serving/openai_chat_completion_client_for_multimodal_generation.py --model Jonathan1909/Ming-flash-omni-2.0 --query-type use_mixed_modalities --port 8091 --host "localhost" --modalities text
|
|
```
|
|
|
|
The Python client supports the following command-line arguments:
|
|
|
|
- `--query-type` (or `-q`): Query type. Options: `text`, `use_audio`, `use_image`, `use_video`, `use_mixed_modalities`
|
|
- `--video-path` (or `-v`): Path to local video file or URL. If not provided and query-type uses video, uses default video URL. Supports local file paths (automatically encoded to base64) or HTTP/HTTPS URLs. Example: `--video-path /path/to/video.mp4` or `--video-path https://example.com/video.mp4`
|
|
- `--image-path` (or `-i`): Path to local image file or URL. If not provided and query-type uses image, uses default image URL. Supports local file paths (automatically encoded to base64) or HTTP/HTTPS URLs and common image formats: JPEG, PNG, GIF, WebP. Example: `--image-path /path/to/image.jpg` or `--image-path https://example.com/image.png`
|
|
- `--audio-path` (or `-a`): Path to local audio file or URL. If not provided and query-type uses audio, uses default audio URL. Supports local file paths (automatically encoded to base64) or HTTP/HTTPS URLs and common audio formats: MP3, WAV, OGG, FLAC, M4A. Example: `--audio-path /path/to/audio.wav` or `--audio-path https://example.com/audio.mp3`
|
|
- `--prompt` (or `-p`): Custom text prompt/question. If not provided, uses default prompt for the selected query type. Example: `--prompt "What are the main activities shown in this video?"`
|
|
- `--modalities`: Output modalities. For now, only `text` is supported. Example: `--modalities text`
|
|
|
|
|
|
#### Send request via curl
|
|
|
|
```bash
|
|
bash run_curl_multimodal_generation.sh text
|
|
bash run_curl_multimodal_generation.sh use_image
|
|
bash run_curl_multimodal_generation.sh use_audio
|
|
bash run_curl_multimodal_generation.sh use_video
|
|
bash run_curl_multimodal_generation.sh use_mixed_modalities
|
|
```
|
|
|
|
## Modality control
|
|
|
|
Ming-flash-omni 2.0 currently supports text output only (thinker stage).
|
|
|
|
| Modalities | Output |
|
|
|------------|--------|
|
|
| `["text"]` | Text only |
|
|
| Not specified | Text only (default) |
|
|
|
|
### Using curl
|
|
|
|
```bash
|
|
curl http://localhost:8091/v1/chat/completions \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"model": "Jonathan1909/Ming-flash-omni-2.0",
|
|
"messages": [
|
|
{"role": "system", "content": [{"type": "text", "text": "你是一个友好的AI助手。\n\ndetailed thinking off"}]},
|
|
{"role": "user", "content": "请详细介绍鹦鹉的生活习性。"}
|
|
],
|
|
"modalities": ["text"]
|
|
}'
|
|
```
|
|
|
|
### Using OpenAI Python SDK
|
|
|
|
```python
|
|
from openai import OpenAI
|
|
|
|
client = OpenAI(base_url="http://localhost:8091/v1", api_key="EMPTY")
|
|
|
|
response = client.chat.completions.create(
|
|
model="Jonathan1909/Ming-flash-omni-2.0",
|
|
messages=[
|
|
{"role": "system", "content": [{"type": "text", "text": "你是一个友好的AI助手。\n\ndetailed thinking off"}]},
|
|
{"role": "user", "content": "请详细介绍鹦鹉的生活习性。"},
|
|
],
|
|
modalities=["text"],
|
|
)
|
|
print(response.choices[0].message.content)
|
|
```
|
|
|
|
### Multi-modal input with OpenAI Python SDK
|
|
|
|
```python
|
|
from openai import OpenAI
|
|
|
|
client = OpenAI(base_url="http://localhost:8091/v1", api_key="EMPTY")
|
|
|
|
response = client.chat.completions.create(
|
|
model="Jonathan1909/Ming-flash-omni-2.0",
|
|
messages=[
|
|
{"role": "system", "content": [{"type": "text", "text": "你是一个友好的AI助手。\n\ndetailed thinking off"}]},
|
|
{
|
|
"role": "user",
|
|
"content": [
|
|
{"type": "image_url", "image_url": {"url": "https://vllm-public-assets.s3.us-west-2.amazonaws.com/vision_model_images/cherry_blossom.jpg"}},
|
|
{"type": "text", "text": "Describe this image in detail."},
|
|
],
|
|
},
|
|
],
|
|
modalities=["text"],
|
|
)
|
|
print(response.choices[0].message.content)
|
|
```
|
|
|
|
## Streaming Output
|
|
|
|
To enable streaming output:
|
|
|
|
```bash
|
|
python examples/online_serving/openai_chat_completion_client_for_multimodal_generation.py \
|
|
--query-type use_image \
|
|
--model Jonathan1909/Ming-flash-omni-2.0 \
|
|
--modalities text \
|
|
--stream
|
|
```
|
|
|
|
Or with the OpenAI Python SDK:
|
|
|
|
```python
|
|
from openai import OpenAI
|
|
|
|
client = OpenAI(base_url="http://localhost:8091/v1", api_key="EMPTY")
|
|
|
|
response = client.chat.completions.create(
|
|
model="Jonathan1909/Ming-flash-omni-2.0",
|
|
messages=[
|
|
{"role": "system", "content": [{"type": "text", "text": "你是一个友好的AI助手。\n\ndetailed thinking off"}]},
|
|
{"role": "user", "content": "请详细介绍鹦鹉的生活习性。"},
|
|
],
|
|
modalities=["text"],
|
|
stream=True,
|
|
)
|
|
for chunk in response:
|
|
for choice in chunk.choices:
|
|
if hasattr(choice, "delta") and choice.delta.content:
|
|
print(choice.delta.content, end="", flush=True)
|
|
print()
|
|
```
|
|
|
|
Or using curl:
|
|
|
|
```bash
|
|
curl http://localhost:8091/v1/chat/completions \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"model": "Jonathan1909/Ming-flash-omni-2.0",
|
|
"messages": [
|
|
{"role": "system", "content": [{"type": "text", "text": "你是一个友好的AI助手。\n\ndetailed thinking off"}]},
|
|
{"role": "user", "content": "请详细介绍鹦鹉的生活习性。"}
|
|
],
|
|
"modalities": ["text"],
|
|
"stream": true,
|
|
}'
|
|
```
|
|
|
|
|
|
## Reasoning (Thinking Mode)
|
|
|
|
To enable reasoning/thinking mode, change `detailed thinking off` to `detailed thinking on` in the system prompt:
|
|
|
|
### Using curl
|
|
|
|
```bash
|
|
curl http://localhost:8091/v1/chat/completions \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"model": "Jonathan1909/Ming-flash-omni-2.0",
|
|
"messages": [
|
|
{"role": "system", "content": [{"type": "text", "text": "你是一个友好的AI助手。\n\ndetailed thinking on"}]},
|
|
{"role": "user", "content": [
|
|
{"type": "image_url", "image_url": {"url": "https://example.com/math_problem.png"}},
|
|
{"type": "text", "text": "Solve this math problem step by step."}
|
|
]}
|
|
],
|
|
"modalities": ["text"]
|
|
}'
|
|
```
|
|
|
|
### Using OpenAI Python SDK
|
|
|
|
```python
|
|
from openai import OpenAI
|
|
|
|
client = OpenAI(base_url="http://localhost:8091/v1", api_key="EMPTY")
|
|
|
|
response = client.chat.completions.create(
|
|
model="Jonathan1909/Ming-flash-omni-2.0",
|
|
messages=[
|
|
{"role": "system", "content": [{"type": "text", "text": "你是一个友好的AI助手。\n\ndetailed thinking on"}]},
|
|
{"role": "user", "content": "If a train travels 120 km in 2 hours, what is its average speed?"},
|
|
],
|
|
modalities=["text"],
|
|
)
|
|
print(response.choices[0].message.content)
|
|
```
|