| import os |
| import base64 |
| from io import BytesIO |
| from PIL import Image |
| from openai import OpenAI |
|
|
| from .._utils import _pil_to_base64 |
|
|
|
|
|
|
| class Qwen3VLModel: |
| def __init__(self, model_name: str = None, base_url: str = None, api_key: str = None, **kwargs): |
| self.model_name = model_name or os.getenv("VLM_MODEL_NAME", "Qwen3-VL-2B-Instruct") |
| base_url = base_url or os.getenv("VLM_API_BASE_URL", "http://localhost:8001/v1") |
|
|
| api_key = api_key or os.getenv("VLM_API_KEY", "EMPTY") |
| self.client = OpenAI(base_url=base_url, api_key=api_key) |
|
|
|
|
|
|
| def generate_result( |
| self, |
| messages, |
| max_new_tokens=1024, |
| temperature=0.7, |
| top_p=0.9, |
| **kwargs |
| ) -> str: |
|
|
|
|
| response = self.client.chat.completions.create( |
| model=self.model_name, |
| messages=messages, |
| max_tokens=max_new_tokens, |
| temperature=temperature, |
| top_p=top_p, |
| ) |
| return response.choices[0].message.content |
|
|
| def generate_result_stream(self, messages, max_new_tokens: int = 1024) -> str: |
| response = self.client.chat.completions.create( |
| model=self.model_name, |
| messages=messages, |
| max_tokens=max_new_tokens, |
| stream=True, |
| ) |
| result = "" |
| for chunk in response: |
| delta = chunk.choices[0].delta |
| if delta.content: |
| print(delta.content, end="", flush=True) |
| result += delta.content |
| print() |
| return result |
|
|