import streamlit as st
from PIL import Image
import io
import base64
import time
from datetime import datetime
# --------------------------------------------------
# Configuration
# --------------------------------------------------
st.set_page_config(page_title="🤖 Chat IA - Analyseur d'Images", page_icon="🖼️", layout="wide")
# --------------------------------------------------
# CSS
# --------------------------------------------------
st.markdown("""
""", unsafe_allow_html=True)
# --------------------------------------------------
# State init
# --------------------------------------------------
if 'chat_history' not in st.session_state:
st.session_state.chat_history = []
if 'pending_image' not in st.session_state:
st.session_state.pending_image = None
if 'captioner' not in st.session_state:
st.session_state.captioner = None
if 'model_loaded' not in st.session_state:
st.session_state.model_loaded = False
# --------------------------------------------------
# Model loader
# --------------------------------------------------
@st.cache_resource
def _load_pipeline():
from transformers import pipeline
return pipeline("image-to-text", model="Salesforce/blip-image-captioning-base")
def get_captioner():
if not st.session_state.model_loaded or st.session_state.captioner is None:
st.session_state.captioner = _load_pipeline()
st.session_state.model_loaded = True
return st.session_state.captioner
# --------------------------------------------------
# Utils
# --------------------------------------------------
def add_message(sender, content, image=None):
st.session_state.chat_history.append({
'sender': sender,
'content': content,
'image': image,
'timestamp': datetime.now().strftime("%H:%M")
})
def display_chat():
for m in st.session_state.chat_history:
img_html = f'' if m.get('image') else ''
if m['sender'] == 'user':
st.markdown(f"