Spaces:
Runtime error
Runtime error
File size: 5,595 Bytes
7efd637 b6ef90b c33dbd2 ca8dc25 5ee7ec4 bd796ec ca8dc25 c33dbd2 c27316e e98c6cb c73a06f c27316e 04fcd0b c27316e 04fcd0b d107cdf b66c571 c73a06f b66c571 c73a06f c27316e efae69e c73a06f 5fc2eb2 efae69e c27316e 26df791 8362128 c73a06f 8362128 26df791 c73a06f deffb23 00c5acf c73a06f 8362128 c73a06f 00c5acf c73a06f 9dc7fb7 efae69e bd796ec 293451d bd796ec efae69e bd796ec 26df791 bd796ec c73a06f efae69e 20b1f08 c73a06f 5fc2eb2 82ee039 c73a06f 034341f 20b1f08 c73a06f efae69e c2ebbce c73a06f efae69e c73a06f efae69e 82c99b8 efae69e c73a06f efae69e c73a06f 034341f 66305c9 034341f 8362128 c73a06f 8362128 c73a06f 7efd637 c33dbd2 8362128 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
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
if api_key:
os.environ["TOGETHER_API_KEY"] = api_key
if "TOGETHER_API_KEY" in os.environ:
client = Together()
else:
raise ValueError("Please provide a Together API Key")
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(
message, history, together_api_key, max_new_tokens=250, temperature=0.7
):
if client is None:
try:
initialize_client(together_api_key)
except Exception as e:
history.append((message, f"Error initializing client: {str(e)}"))
yield history
return
prompt = "You are a helpful AI assistant. Analyze the image provided (if any) and respond to the user's query or comment."
messages = [{"role": "system", "content": prompt}]
# Add history to messages
for user_msg, assistant_msg in history:
if isinstance(user_msg, str): # Text message
messages.append(
{"role": "user", "content": [{"type": "text", "text": user_msg}]}
)
elif isinstance(user_msg, dict): # Image message
image_base64 = encode_image(user_msg["image_path"])
messages.append(
{
"role": "user",
"content": [
{"type": "text", "text": user_msg.get("text", "")},
{
"type": "image_url",
"image_url": {
"url": f"data:image/png;base64,{image_base64}"
},
},
],
}
)
messages.append(
{"role": "assistant", "content": [{"type": "text", "text": assistant_msg}]}
)
# Prepare the current message
user_message_content = []
if isinstance(message, dict):
if message.get("text"):
user_message_content.append({"type": "text", "text": message["text"]})
if message.get("files") and len(message["files"]) > 0:
image_path = message["files"][0]
image_base64 = encode_image(image_path)
user_message_content.append(
{
"type": "image_url",
"image_url": {"url": f"data:image/png;base64,{image_base64}"},
}
)
elif isinstance(message, str):
user_message_content.append({"type": "text", "text": message})
current_message = {"role": "user", "content": user_message_content}
messages.append(current_message)
# Add the user's message to the history
user_display_message = message["text"] if isinstance(message, dict) else message
history = history + [(user_display_message, "")]
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
# Update the assistant's response in the history
history[-1] = (user_display_message, response)
yield history
if not response:
history[-1] = (
user_display_message,
"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] = (user_display_message, error_message)
yield history
# The rest of your Gradio interface code remains the same
with gr.Blocks() as demo:
gr.Markdown("# Meta Llama-3.2-11B-Vision-Instruct (FREE)")
gr.Markdown(
"Try the new Llama 3.2 11B Vision API by Meta for free through Together AI. Upload an image, and start chatting about it. Just paste in your Together AI API key and get started!"
)
with gr.Row():
together_api_key = gr.Textbox(
label="Together API Key",
placeholder="Enter your TOGETHER_API_KEY here",
type="password",
)
with gr.Row():
max_new_tokens = gr.Slider(
minimum=10,
maximum=10000,
value=250,
step=10,
label="Maximum number of new tokens",
)
temperature = gr.Number(
value=0.7, minimum=0, maximum=1, step=0.1, label="Temperature"
)
chatbot = gr.Chatbot()
msg = gr.MultimodalTextbox(label="")
clear = gr.Button("Clear")
msg.submit(
bot_streaming,
[msg, chatbot, together_api_key, max_new_tokens, temperature],
chatbot,
)
clear.click(lambda: None, None, chatbot, queue=False)
if __name__ == "__main__":
demo.launch(debug=True)
|