model-gallery/deploy/mllm/openai_client.py (76 lines of code) (raw):
import base64
import requests
from openai import OpenAI
##### API 配置 #####
openai_api_key = "<EAS API KEY>"
openai_api_base = "<EAS API Endpoint>/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
models = client.models.list()
model = models.data[0].id
def encode_base64_content_from_url(content_url: str) -> str:
"""Encode a content retrieved from a remote url to base64 format."""
with requests.get(content_url) as response:
response.raise_for_status()
result = base64.b64encode(response.content).decode("utf-8")
return result
def infer_image():
image_url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/QVQ/demo.png"
stream = True
image_base64 = encode_base64_content_from_url(image_url)
chat_completion_from_base64 = client.chat.completions.create(
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "使用中文回答,图中方框处应该是数字多少?",
},
{
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{image_base64}"},
},
],
}
],
model=model,
max_completion_tokens=1024,
stream=stream,
)
if stream:
for chunk in chat_completion_from_base64:
print(chunk.choices[0].delta.content, end="")
else:
result = chat_completion_from_base64.choices[0].message.content
print(result)
def infer_video():
video_url = "https://pai-quickstart-predeploy-hangzhou.oss-cn-hangzhou.aliyuncs.com/modelscope/algorithms/ms-swift/video_demo.mp4"
stream = True
video_base64 = encode_base64_content_from_url(video_url)
chat_completion_from_base64 = client.chat.completions.create(
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "请描述下视频内容"},
{
"type": "video_url",
"video_url": {"url": f"data:video/mp4;base64,{video_base64}"},
},
],
}
],
model=model,
max_completion_tokens=512,
stream=stream,
)
if stream:
for chunk in chat_completion_from_base64:
print(chunk.choices[0].delta.content, end="")
else:
result = chat_completion_from_base64.choices[0].message.content
print(result)
if __name__ == "__main__":
infer_image()
infer_video()