"""
File: module_chat.py
Description: A module for chat using text (+images) with a multimodal interface.
Author: Didier Guillevic
Date: 2025-03-16
"""

import gradio as gr
import vlm

def process(message, history):
    """Generate the model response given message and history
    """
    messages = vlm.build_messages(message, history)
    yield from vlm.stream_response(messages)

#
# User interface
#
with gr.Blocks() as demo:
    chat_interface = gr.ChatInterface(
        fn=process,
        #description="Chat with text or text+image.",
        multimodal=True,
        examples=[
            "How can we rationalize quantum entanglement?",
            "Peux-tu expliquer le terme 'quantum spin'?",
            {
                'files': ['./passport_jp.png',],
                'text': 'Can you extract the information present in the image?'
            },
            {
                'files': ['./sample_ID.jpeg',], 'text':
                'Describe this image in a few words.'
            },
            {
                'files': ['./sample_ID.jpeg',],
                'text': 'Could you extract the information present in the image?'
            },
        ],
        cache_examples=False
    )

if __name__ == "__main__":
    demo.launch()