82 lines
2.3 KiB
Python
82 lines
2.3 KiB
Python
from openai import OpenAI
|
|
import openai
|
|
import base64
|
|
from typing import Dict, List
|
|
import mimetypes
|
|
|
|
def encode_image(image_path: str) -> str:
|
|
"""
|
|
Encode image file to base64 string.
|
|
|
|
Args:
|
|
image_path: Path to the image file
|
|
|
|
Returns:
|
|
Base64 encoded string of the image
|
|
"""
|
|
with open(image_path, "rb") as image_file:
|
|
return base64.b64encode(image_file.read()).decode('utf-8')
|
|
|
|
def create_chat_messages(image_path: str, prompt: str) -> List[Dict]:
|
|
"""
|
|
Create chat messages with image and prompt.
|
|
|
|
Args:
|
|
image_path: Path to the image file
|
|
prompt: Text prompt for the model
|
|
|
|
Returns:
|
|
List of message dictionaries
|
|
"""
|
|
mime, _ = mimetypes.guess_type(image_path)
|
|
if mime is None:
|
|
mime = "image/jpeg" # fallback
|
|
return [
|
|
{"role": "system", "content": ""},
|
|
{
|
|
"role": "user",
|
|
"content": [
|
|
{
|
|
"type": "image_url",
|
|
"image_url": {
|
|
"url": f"data:{mime};base64,{encode_image(image_path)}"
|
|
}
|
|
},
|
|
{"type": "text", "text": prompt}
|
|
]
|
|
}
|
|
]
|
|
|
|
PROMPT = '''Extract the text, then translate the text content into Vietnamese. If it is a document, ignore the header and footer. Formulas should be represented in LaTeX format, and tables should be represented in HTML format.'''
|
|
URL = "page1.PNG"
|
|
|
|
try:
|
|
client = OpenAI(
|
|
api_key="VLMcafebabe",
|
|
base_url="http://192.168.10.42:8081/v1",
|
|
timeout=3600
|
|
)
|
|
|
|
messages = create_chat_messages(URL, PROMPT)
|
|
|
|
response = client.chat.completions.create(
|
|
model="tencent/HunyuanOCR",
|
|
messages=messages,
|
|
temperature=0.0,
|
|
stream=False,
|
|
extra_body={
|
|
"top_k": 1,
|
|
"repetition_penalty": 1.0
|
|
},
|
|
)
|
|
print(f"Generated text: {response.choices[0].message.content}")
|
|
|
|
|
|
except openai.APIStatusError as e:
|
|
# Đây là phần quan trọng nhất để biết lỗi gì
|
|
print("--- LỖI TỪ SERVER VLLM ---")
|
|
print(f"Status Code: {e.status_code}")
|
|
print(f"Error Message: {e.message[:200]}")
|
|
print(f"Full Response: {e.response}") # In ra chi tiết JSON trả về
|
|
except Exception as e:
|
|
print(f"Lỗi khác: {e}") |