Spaces:
Sleeping
Sleeping
from dotenv import load_dotenv | |
import os | |
# import openai | |
from openai import OpenAI | |
from models import FormDetails, TranslateDetails | |
from prompts import system_prompt_template, prompt, translate_system_prompt, translation_prompt | |
import base64 | |
from io import BytesIO | |
import anthropic | |
import nest_asyncio | |
from llama_parse import LlamaParse | |
nest_asyncio.apply() | |
load_dotenv() | |
# set up parser | |
parser = LlamaParse( | |
result_type="markdown" # "markdown" and "text" are available | |
) | |
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY') | |
# Function to encode the image | |
def encode_image(image): | |
buffer = BytesIO() | |
# Save the image to the buffer in its format (e.g., PNG, JPEG) | |
image.save(buffer, format=image.format) | |
# Get the byte data | |
image_bytes = buffer.getvalue() | |
return base64.b64encode(image_bytes).decode("utf-8") | |
def get_text(image, filename, model, fields="ALL"): | |
# print(model) | |
# Getting the base64 string | |
base64_image = encode_image(image) | |
# check if model name starts with gpt | |
if model.startswith("gpt"): | |
print("gpt") | |
client = OpenAI(api_key = OPENAI_API_KEY) | |
response = client.beta.chat.completions.parse( | |
model=model, | |
messages=[ | |
{ | |
"role":"system", | |
"content":system_prompt_template.format(filename,FormDetails.schema_json()) | |
}, | |
{ | |
"role": "user", | |
"content": [ | |
{ | |
"type": "text", | |
"text": prompt.format(fields), | |
}, | |
{ | |
"type": "image_url", | |
"image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}, | |
}, | |
], | |
} | |
], | |
response_format=FormDetails, | |
temperature=0.0, | |
) | |
response = response.choices[0].message.content | |
# check if model name starts with claude | |
elif model.startswith("claude"): | |
print("claude") | |
client = anthropic.Anthropic() | |
message = client.messages.create( | |
model=model, | |
max_tokens=1024, | |
system= system_prompt_template.format(filename,FormDetails.schema_json()) + " In following Json format,class FormDetails(BaseModel):\nfields: List[str]\nvalues: List[str] ", | |
messages=[ | |
{ | |
"role": "user", | |
"content": [ | |
{ | |
"type": "image", | |
"source": { | |
"type": "base64", | |
"media_type": "image/png", | |
"data": base64_image, | |
}, | |
}, | |
{ | |
"type": "text", | |
"text": prompt.format(fields), | |
} | |
], | |
} | |
], | |
temperature=0.0, | |
) | |
response = message.content[0].text | |
# check if model name starts with llama_llm | |
elif model.startswith("llama_llm"): | |
print("llama_llm") | |
# Ensure the image is in RGB mode (to handle RGBA images) | |
if image.mode == "RGBA": | |
image = image.convert("RGB") | |
# save image to a file | |
image.save("image.jpg") | |
# parse the image | |
text = parser.load_data("image.jpg") | |
if model == "llama_llm_o": | |
client = OpenAI(api_key = OPENAI_API_KEY) | |
response = client.beta.chat.completions.parse( | |
model="gpt-4o-mini", | |
messages=[ | |
{ | |
"role":"system", | |
"content":system_prompt_template.format(filename,FormDetails.schema_json()) | |
}, | |
{ | |
"role": "user", | |
"content": f"{prompt.format(fields)} \n Knowledge Base {text}" | |
} | |
], | |
response_format=FormDetails, | |
temperature=0.0, | |
) | |
response = response.choices[0].message.content | |
elif model == "llama_llm_d": | |
#deepseek | |
print("deepseek") | |
client = OpenAI(api_key=os.getenv('DEEPSEEK_API_KEY'), base_url=os.getenv('DEEPSEEK_API_URL')) | |
response = client.chat.completions.create( | |
model="deepseek-chat", | |
messages=[ | |
{ | |
"role":"system", | |
"content":system_prompt_template.format(filename,FormDetails.schema_json()) | |
}, | |
{ | |
"role": "user", | |
"content": f"{prompt.format(fields)} \n Knowledge Base {text}" | |
} | |
], | |
stream=False, | |
response_format={ | |
'type': 'json_object' | |
} | |
) | |
response = response.choices[0].message.content | |
# print(response) | |
return response | |
def translate_text(text, target_language): | |
# print("translating") | |
client = OpenAI(api_key = OPENAI_API_KEY) | |
# print("hi") | |
response = client.beta.chat.completions.parse( | |
model="gpt-4o", | |
messages=[ | |
{ | |
"role":"system", | |
"content":translate_system_prompt.format(target_language,TranslateDetails.schema_json()) | |
}, | |
{ | |
"role": "user", | |
"content": translation_prompt.format(target_language,text) | |
}, | |
], | |
response_format=TranslateDetails, | |
temperature=0.0, | |
) | |
# print(response.choices[0].message.content) | |
response = response.choices[0].message.content | |
return response | |
def chat_text(system,query,history): | |
client = OpenAI() | |
completion = client.chat.completions.create( | |
model="gpt-4o", | |
messages=[ | |
{"role": "system", "content": f"Here is the text you have to answer based on this. Knowledge Base:-{system}. \n History: {history}"}, | |
{ | |
"role": "user", | |
"content": query | |
} | |
] | |
) | |
return completion.choices[0].message |