muhammadsalmanalfaridzi's picture
Update app.py
bcec267 verified
raw
history blame
2.69 kB
import os
import gradio as gr
from argparse import ArgumentParser
from groq import Groq
from PIL import Image
import base64
import io
# Initialize Groq client
API_KEY = os.environ['GROQ_API_KEY']
client = Groq(api_key=API_KEY)
REVISION = 'v1.0.4'
def _get_args():
parser = ArgumentParser()
parser.add_argument("--revision", type=str, default=REVISION)
parser.add_argument("--share", action="store_true", default=False, help="Create a publicly shareable link for the interface.")
return parser.parse_args()
def process_image(image):
# Convert image to bytes for Groq API
buffered = io.BytesIO()
image.save(buffered, format="JPEG")
return buffered.getvalue()
def create_messages(query, image_data):
messages = []
# User query as text
if query:
messages.append({'role': 'user', 'content': query})
# Include image if provided
if image_data:
image_base64 = f"data:image/jpeg;base64,{base64.b64encode(image_data).decode()}"
messages.append({
'role': 'user',
'content': [
{"type": "text", "text": "Please analyze this image."},
{"type": "image_url", "image_url": {"url": image_base64}}
]
})
return messages
def predict(chat_history, query, image):
# Process the image if provided
image_data = process_image(image) if image else None
messages = create_messages(query, image_data)
# Call the Groq API with the messages
try:
completion = client.chat.completions.create(
model="llama-3.2-90b-vision-preview",
messages=messages,
temperature=1,
max_tokens=1500,
top_p=1,
stream=False,
)
response_text = completion.choices[0].message.content.strip()
except Exception as e:
response_text = f"Error: {str(e)}"
chat_history.append((query, response_text))
return chat_history
def clear_history():
return []
def main():
args = _get_args()
with gr.Blocks() as demo:
gr.Markdown("<h1 style='text-align: center;'>Llama-3.2-90b-vision-preview</h1>")
chatbox = gr.Chatbot()
query = gr.Textbox(label="Input", placeholder="Type your query here...")
image_input = gr.Image(type="pil", label="Upload Image")
submit_btn = gr.Button("Submit")
clear_btn = gr.Button("Clear History")
submit_btn.click(predict, inputs=[chatbox, query, image_input], outputs=chatbox)
clear_btn.click(clear_history, outputs=chatbox)
demo.launch(share=args.share)
if __name__ == '__main__':
main()