Spaces:
Runtime error
Runtime error
""" | |
Test the OpenAI compatible server | |
Launch: | |
python3 launch_openai_api_test_server.py --multimodal | |
""" | |
import openai | |
from fastchat.utils import run_cmd | |
openai.api_key = "EMPTY" # Not support yet | |
openai.base_url = "http://localhost:8000/v1/" | |
def encode_image(image): | |
import base64 | |
from io import BytesIO | |
import requests | |
from PIL import Image | |
if image.startswith("http://") or image.startswith("https://"): | |
response = requests.get(image) | |
image = Image.open(BytesIO(response.content)).convert("RGB") | |
else: | |
image = Image.open(image).convert("RGB") | |
buffered = BytesIO() | |
image.save(buffered, format="PNG") | |
img_b64_str = base64.b64encode(buffered.getvalue()).decode("utf-8") | |
return img_b64_str | |
def test_list_models(): | |
model_list = openai.models.list() | |
names = [x.id for x in model_list.data] | |
return names | |
def test_chat_completion(model): | |
image_url = "https://picsum.photos/seed/picsum/1024/1024" | |
base64_image_url = f"data:image/jpeg;base64,{encode_image(image_url)}" | |
# No Image | |
completion = openai.chat.completions.create( | |
model=model, | |
messages=[ | |
{ | |
"role": "user", | |
"content": [ | |
{"type": "text", "text": "Tell me about alpacas."}, | |
], | |
} | |
], | |
temperature=0, | |
) | |
print(completion.choices[0].message.content) | |
print("=" * 25) | |
# Image using url link | |
completion = openai.chat.completions.create( | |
model=model, | |
messages=[ | |
{ | |
"role": "user", | |
"content": [ | |
{"type": "text", "text": "What’s in this image?"}, | |
{"type": "image_url", "image_url": {"url": image_url}}, | |
], | |
} | |
], | |
temperature=0, | |
) | |
print(completion.choices[0].message.content) | |
print("=" * 25) | |
# Image using base64 image url | |
completion = openai.chat.completions.create( | |
model=model, | |
messages=[ | |
{ | |
"role": "user", | |
"content": [ | |
{"type": "text", "text": "What’s in this image?"}, | |
{"type": "image_url", "image_url": {"url": base64_image_url}}, | |
], | |
} | |
], | |
temperature=0, | |
) | |
print(completion.choices[0].message.content) | |
print("=" * 25) | |
def test_chat_completion_stream(model): | |
image_url = "https://picsum.photos/seed/picsum/1024/1024" | |
messages = [ | |
{ | |
"role": "user", | |
"content": [ | |
{"type": "text", "text": "What’s in this image?"}, | |
{"type": "image_url", "image_url": {"url": image_url}}, | |
], | |
} | |
] | |
res = openai.chat.completions.create( | |
model=model, messages=messages, stream=True, temperature=0 | |
) | |
for chunk in res: | |
try: | |
content = chunk.choices[0].delta.content | |
if content is None: | |
content = "" | |
except Exception as e: | |
content = chunk.choices[0].delta.get("content", "") | |
print(content, end="", flush=True) | |
print() | |
def test_openai_curl(): | |
run_cmd( | |
"""curl http://localhost:8000/v1/chat/completions \ | |
-H "Content-Type: application/json" \ | |
-d '{ | |
"model": "llava-v1.5-7b", | |
"messages": [ | |
{ | |
"role": "user", | |
"content": [ | |
{ | |
"type": "text", | |
"text": "What’s in this image?" | |
}, | |
{ | |
"type": "image_url", | |
"image_url": { | |
"url": "https://picsum.photos/seed/picsum/1024/1024" | |
} | |
} | |
] | |
} | |
], | |
"max_tokens": 300 | |
}' | |
""" | |
) | |
print() | |
if __name__ == "__main__": | |
models = test_list_models() | |
print(f"models: {models}") | |
for model in models: | |
print(f"===== Test {model} ======") | |
test_chat_completion(model) | |
test_chat_completion_stream(model) | |
test_openai_curl() | |