File size: 6,177 Bytes
e0559c2 4b0d7e0 e0559c2 e9027dc e0559c2 |
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 |
import gradio as gr
import requests
import os
import base64
from PIL import Image
import io
import json
def resize_image(image_path, max_size=(512, 512), quality=85):
with Image.open(image_path) as img:
img.thumbnail(max_size, Image.Resampling.LANCZOS)
buffer = io.BytesIO()
img.save(buffer, format="JPEG", quality=quality)
return buffer.getvalue()
def filepath_to_base64(image_path):
img_bytes = resize_image(image_path)
img_base64 = base64.b64encode(img_bytes)
return f"data:image/jpeg;base64,{img_base64.decode('utf-8')}"
api_key = os.getenv('API_KEY')
def call_neva_22b_api(image_path, content, temperature=0.2, top_p=0.7, max_tokens=512, quality=6, humor=0, creativity=6, helpfulness=6):
print(f"Caminho da imagem recebida: {image_path}")
print(f"Conteúdo: {content}")
# Imprime os novos parâmetros
print(f"Quality: {quality}, Humor: {humor}, Creativity: {creativity}, Helpfulness: {helpfulness}")
image_base64 = filepath_to_base64(image_path)
invoke_url = "https://api.nvcf.nvidia.com/v2/nvcf/pexec/functions/8bf70738-59b9-4e5f-bc87-7ab4203be7a0"
headers = {
"Authorization": f"Bearer {api_key}",
"accept": "text/event-stream",
"content-type": "application/json",
}
payload = {
"messages": [
{
"content": f"{content} <img src=\"{image_base64}\" />",
"role": "user"
},
{
"labels": {
"creativity": creativity,
"helpfulness": helpfulness,
"humor": humor,
"quality": quality
},
"role": "assistant"
}
],
"temperature": temperature,
"top_p": top_p,
"max_tokens": max_tokens,
"stream": True
}
response = requests.post(invoke_url, headers=headers, json=payload, stream=True)
if response.status_code != 200:
print(f"Erro na requisição: {response.status_code}")
try:
error_details = response.json()
print(error_details)
except ValueError:
print(response.text)
else:
response_text = ""
for line in response.iter_lines():
if line:
try:
# Decode the line from bytes to string
decoded_line = line.decode('utf-8')
# Remove the "data: " prefix
if decoded_line.startswith('data: '):
json_str = decoded_line[6:] # Remove the first 6 characters ('data: ')
json_line = json.loads(json_str)
# Assuming the structure is consistent with the examples you provided.
content_parts = json_line.get("choices", [{}])[0].get("delta", {}).get("content", "")
response_text += content_parts
else:
print(f"Unexpected line format: {decoded_line}")
except json.JSONDecodeError as e:
print(f"Error decoding JSON from response line: {e}")
print(f"Faulty line: {line}")
return response_text
content_input = gr.Textbox(lines=2, placeholder="Enter your content here...", label="Content")
image_input = gr.Image(type="filepath", label="Upload Image")
temperature_input = gr.Slider(minimum=0, maximum=1, step=0.01, value=0.2, label="Temperature")
top_p_input = gr.Slider(minimum=0, maximum=1, step=0.01, value=0.7, label="Top P")
max_tokens_input = gr.Slider(minimum=1, maximum=512, step=1, value=512, label="Max Tokens")
quality_input = gr.Slider(minimum=0, maximum=9, step=1, value=6, label="Quality")
humor_input = gr.Slider(minimum=0, maximum=9, step=1, value=0, label="Humor")
creativity_input = gr.Slider(minimum=0, maximum=9, step=1, value=6, label="Creativity")
helpfulness_input = gr.Slider(minimum=0, maximum=9, step=1, value=6, label="Helpfulness")
iface = gr.Interface(fn=call_neva_22b_api,
inputs=[image_input, content_input, temperature_input, top_p_input, max_tokens_input, quality_input, humor_input, creativity_input, helpfulness_input],
outputs="text",
title="NEVA 22B DEMO",
description="""
<div style="text-align: center; font-size: 1.5em; margin-bottom: 20px;">
<strong>Unlock the Power of AI with NeVA-22B Vision-Language Model</strong>
</div>
<p>
Dive into the next generation of AI with NeVA-22B, an advanced multi-modal vision-language model that redefines the boundaries of technology. Developed with a 22 billion parameter architecture, NeVA-22B excels in understanding and generating responses that incorporate both text and images, offering a groundbreaking platform for multi-modal AI exploration.
</p>
<p>
<strong>How to Use:</strong>
</p>
<ol>
<li>Upload an <strong>image</strong> to provide visual context.</li>
<li>Enter your <strong>content</strong> in the textbox to pose a question or prompt.</li>
<li>Utilize the <strong>Temperature</strong> and <strong>Top P</strong> sliders to adjust the creativity and diversity of the responses.</li>
<li>Choose the <strong>Max Tokens</strong> to control the response length.</li>
<li>Modify <strong>Quality</strong>, <strong>Humor</strong>, <strong>Creativity</strong>, and <strong>Helpfulness</strong> sliders to fine-tune the model's output according to your needs.</li>
<li>Hit <strong>Submit</strong> to experience the model's capability to generate insightful responses based on your textual and visual inputs.</li>
</ol>
<p>
<strong>Empowered by NVIDIA's cutting-edge AI technologies, NeVA-22B API Explorer opens up new avenues for engaging with multi-modal AI, accessible to everyone at no cost.</strong>
</p>
<p>
<strong>HF Created by:</strong> @artificialguybr (<a href="https://twitter.com/artificialguybr">Twitter</a>)
</p>
<p>
<strong>Explore further:</strong> <a href="https://artificialguy.com">artificialguy.com</a>
</p>
"""
)
iface.launch() |