|
import gradio as gr |
|
from huggingface_hub import InferenceClient |
|
import google.generativeai as genai |
|
import numpy as np |
|
import PIL.Image |
|
import io, os |
|
""" |
|
For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference |
|
""" |
|
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta") |
|
genai.configure(api_key='AIzaSyAtdSFdZ2WZv2TmJYijVz286JBX7HpddQk') |
|
|
|
|
|
def respond( |
|
message, |
|
history: list[tuple[str, str]], |
|
image, |
|
): |
|
messages = "" |
|
|
|
for val in history: |
|
if val[0]: |
|
messages += "{'role': 'user', 'content': "+val[0]+"}" |
|
if val[1]: |
|
messages += "{'role': 'user', 'content': "+val[1]+"}" |
|
|
|
messages += "{'role': 'user', 'content': "+message+"}" |
|
print (messages,image) |
|
|
|
if isinstance(image, np.ndarray): |
|
img = PIL.Image.fromarray(image) |
|
else: |
|
try: |
|
img = PIL.Image.open(image) |
|
except (AttributeError, IOError) as e: |
|
return f"Invalid image provided. Please provide a valid image file. Error: {e}" |
|
|
|
|
|
model = genai.GenerativeModel("gemini-pro-vision") |
|
|
|
response = model.generate_content([messages, img]) |
|
try: |
|
response = model.generate_content([messages, img]) |
|
if not response or not response.text: |
|
return "No valid response received. The response might have been blocked." |
|
|
|
|
|
formatted_response = "" |
|
for line in response.text.split("\n"): |
|
if line.strip().endswith(":"): |
|
formatted_response += f"**{line.strip()}**\n" |
|
else: |
|
formatted_response += line + "\n" |
|
|
|
return formatted_response |
|
except ValueError as e: |
|
return f"Error in generating response: {e}" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
""" |
|
For information on how to customize the ChatInterface, peruse the gradio docs: https://www.gradio.app/docs/chatinterface |
|
""" |
|
demo = gr.ChatInterface( |
|
respond, |
|
additional_inputs=[ |
|
gr.Image(show_label=False) |
|
], |
|
additional_inputs_accordion=gr.Accordion(open=True), |
|
theme=gr.themes.Soft(), |
|
retry_btn=None, |
|
undo_btn=None, |
|
clear_btn=None; |
|
css="""#component-2{ |
|
flex-direction:row !important; |
|
} |
|
#component-3{ |
|
min-height: 100% !important; |
|
width: 50% !important; |
|
} |
|
#component-6{ |
|
width: 50% !important; |
|
position: absolute !important; |
|
left: 50% !important; |
|
z-index: 100 !important; |
|
bottom: 45% !important; |
|
} |
|
#component-14{ |
|
width: 50% !important; |
|
height: 50% !important; |
|
}""" |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |