|
|
|
import sys |
|
import gradio as gr |
|
import spaces |
|
|
|
|
|
from src.config import ( |
|
device, |
|
model_name, |
|
sampling, |
|
stream, |
|
top_p, |
|
top_k, |
|
temperature, |
|
repetition_penalty, |
|
max_new_tokens, |
|
) |
|
from src.app.model import load_model_and_tokenizer |
|
from src.logger import logging |
|
from src.exception import CustomExceptionHandling |
|
|
|
|
|
|
|
model, tokenizer, processor = load_model_and_tokenizer(model_name, device) |
|
|
|
|
|
@spaces.GPU(duration=120) |
|
def describe_image(image: str, question: str) -> str: |
|
""" |
|
Generates an answer to a given question based on the provided image and question. |
|
|
|
Args: |
|
- image (str): The path to the image file. |
|
- question (str): The question text. |
|
|
|
Returns: |
|
str: The generated answer to the question. |
|
""" |
|
try: |
|
|
|
if not image or not question: |
|
gr.Warning("Please provide an image and a question.") |
|
|
|
|
|
msgs = [{"role": "user", "content": [image, question]}] |
|
|
|
|
|
answer = model.chat( |
|
image=None, |
|
msgs=msgs, |
|
tokenizer=tokenizer, |
|
processor=processor, |
|
sampling=sampling, |
|
stream=stream, |
|
top_p=top_p, |
|
top_k=top_k, |
|
temperature=temperature, |
|
repetition_penalty=repetition_penalty, |
|
max_new_tokens=max_new_tokens, |
|
) |
|
|
|
|
|
logging.info("Answer generated successfully.") |
|
|
|
|
|
return "".join(answer) |
|
|
|
|
|
except Exception as e: |
|
|
|
raise CustomExceptionHandling(e, sys) from e |
|
|