arshadrana's picture
Update app.py
3618cac verified
import gradio as gr
from PIL import Image
import os
from together import Together
import base64
import io
# Initialize Together client
client = None
def initialize_client(api_key=None):
global client
api_key = os.getenv("TOGETHER_API_KEY")
print(api_key)
client = Together()
def encode_image(image_path):
with Image.open(image_path) as img:
buffered = io.BytesIO()
img.save(buffered, format="PNG")
return base64.b64encode(buffered.getvalue()).decode("utf-8")
def bot_streaming(image_path, history):
max_new_tokens = 250
temperature = 0.7
if client is None:
try:
initialize_client()
except Exception as e:
history.append(("Error initializing client", f"{str(e)}"))
yield history
return
prompt = """
Determine if the Right Strut Tower Apron in the image shows signs of being involved in an accident or not
"""
messages = [{"role": "system", "content": prompt}]
# Encode the image and add to messages
image_base64 = encode_image(image_path)
messages.append({
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": f"data:image/png;base64,{image_base64}"}
}
]
})
history = history + [("Image uploaded", "")]
try:
stream = client.chat.completions.create(
model="meta-llama/Llama-Vision-Free",
messages=messages,
max_tokens=max_new_tokens,
temperature=temperature,
stream=True,
)
response = ""
for chunk in stream:
if chunk.choices and chunk.choices[0].delta and chunk.choices[0].delta.content is not None:
response += chunk.choices[0].delta.content
history[-1] = ("Image uploaded", response)
yield history
if not response:
history[-1] = ("Image uploaded", "No response generated. Please try again.")
yield history
except Exception as e:
error_message = (
"The image is too large. Please try with a smaller image or compress the existing one."
if "Request Entity Too Large" in str(e)
else f"An error occurred: {str(e)}"
)
history[-1] = ("Image uploaded", error_message)
yield history
# Set up Gradio interface
with gr.Blocks() as demo:
gr.Markdown("# Radiator Accident Detection")
gr.Markdown("Upload an image of a radiator to determine if it shows signs of an accident")
chatbot = gr.Chatbot()
img = gr.Image(type="filepath", label="Upload Radiator Image")
clear = gr.Button("Clear")
img.upload(bot_streaming, inputs=[img, chatbot], outputs=chatbot)
clear.click(lambda: None, None, chatbot, queue=False)
if __name__ == "__main__":
demo.launch(debug=True)