H022329's picture
Upload folder using huggingface_hub
9cf08e9 verified
Raw
History Blame Contribute Delete
3.04 kB
import os
from openai import OpenAI
from modelscope.hub.file_download import model_file_download
from .._utils import logger
class Qwen3:
def __init__(self, model_name: str = None, base_url: str = None, api_key: str = None):
self.model_name = model_name or os.getenv("LLM_MODEL_NAME", "Qwen3-4B-Instruct-2507")
self.base_url = base_url or os.getenv("LLM_API_BASE_URL", "http://localhost:8000/v1")
self.api_key = api_key or os.getenv("LLM_API_KEY", "EMPTY")
self.client = OpenAI(base_url=self.base_url, api_key=self.api_key, timeout=250000.0)
def generate_result(self, messages, max_new_tokens: int = 16384) -> str:
response = self.client.chat.completions.create(
model=self.model_name,
messages=messages,
max_tokens=max_new_tokens,
extra_body={"enable_thinking": False},
)
return response.choices[0].message.content
def generate_result_stream(self, messages, max_new_tokens: int = 32768):
response = self.client.chat.completions.create(
model=self.model_name,
messages=messages,
max_tokens=max_new_tokens,
stream=True,
extra_body={"enable_thinking": False},
)
for chunk in response:
delta = chunk.choices[0].delta
# 遍历 delta 所有属性,收集所有非空字符串字段
text = None
for field in ("content", "reasoning_content", "reasoning", "thinking", "text"):
val = getattr(delta, field, None)
if isinstance(val, str) and val:
text = val
break
# 兜底:如果以上都没有,遍历所有属性找字符串
if text is None:
for attr in dir(delta):
if attr.startswith("_"):
continue
try:
val = getattr(delta, attr)
if isinstance(val, str) and val:
text = val
break
except Exception:
pass
if text:
yield text
if chunk.choices[0].finish_reason:
finish = chunk.choices[0].finish_reason
if finish == "length":
yield "\n\n[⚠️ 输出因达到长度限制({} tokens)被截断]".format(max_new_tokens)
break
def generate_result_stream2(self, messages, max_new_tokens: int = 16384):
response = self.client.chat.completions.create(
model=self.model_name,
messages=messages,
stream=True,
)
for ev in response:
delta = getattr(ev.choices[0], "delta", None)
# print(delta)
if delta and getattr(delta, "content", None):
print(delta.content, end="", flush=True)
print(" ")