|
import os |
|
import tempfile |
|
import streamlit as st |
|
from streamlit_chat import message |
|
from rag import ChatPDF |
|
|
|
title = "Simulateur IA Grandes cultures" |
|
subtitle = "Poser vos questions" |
|
description = "Demonstrateur GC" |
|
LOGO = "images/agir.png" |
|
form_help ="Vous pouvez compléter les informations ci-dessous pour personnaliser votre expérience" |
|
placeholder = ( |
|
"Vous pouvez me posez une question sur vos attentes, appuyer sur Entrée pour valider" |
|
) |
|
placeholder_doc = ( |
|
"Vous pouvez charger un grand livre ou des écritures comptables au format PDF" |
|
) |
|
placeholder_url = "Récupérer les données de ce lien." |
|
|
|
|
|
|
|
st.set_page_config(page_title=title) |
|
|
|
def display_messages(): |
|
st.subheader(subtitle) |
|
for i, (msg, is_user) in enumerate(st.session_state["messages"]): |
|
message(msg, is_user=is_user, key=str(i)) |
|
st.session_state["thinking_spinner"] = st.empty() |
|
|
|
|
|
def process_input(): |
|
if st.session_state["user_input"] and len(st.session_state["user_input"].strip()) > 0: |
|
user_text = st.session_state["user_input"].strip() |
|
with st.session_state["thinking_spinner"], st.spinner(f"Je réfléchis"): |
|
agent_text = st.session_state["assistant"].ask(user_text) |
|
|
|
st.session_state["messages"].append((user_text, True)) |
|
st.session_state["messages"].append((agent_text, False)) |
|
|
|
|
|
def read_and_save_file(): |
|
st.session_state["assistant"].clear() |
|
st.session_state["messages"] = [] |
|
st.session_state["user_input"] = "" |
|
|
|
for file in st.session_state["file_uploader"]: |
|
with tempfile.NamedTemporaryFile(delete=False) as tf: |
|
tf.write(file.getbuffer()) |
|
file_path = tf.name |
|
|
|
with st.session_state["ingestion_spinner"], st.spinner(f"Chargement {file.name}"): |
|
st.session_state["assistant"].ingest(file_path) |
|
os.remove(file_path) |
|
|
|
|
|
def page(): |
|
if len(st.session_state) == 0: |
|
st.session_state["messages"] = [] |
|
st.session_state["assistant"] = ChatPDF() |
|
|
|
|
|
st.logo(LOGO) |
|
st.sidebar.markdown(form_help) |
|
info1 = st.sidebar.text_input("Info 1", type="default") |
|
info1 = st.sidebar.text_input("Info 2", type="default") |
|
info1 = st.sidebar.text_input("Info 3", type="default") |
|
|
|
st.header(title) |
|
|
|
st.subheader("Charger un ou plusieurs documents") |
|
st.caption(placeholder_doc) |
|
st.file_uploader( |
|
"Charger un document", |
|
type=["pdf"], |
|
key="file_uploader", |
|
on_change=read_and_save_file, |
|
label_visibility="collapsed", |
|
accept_multiple_files=True, |
|
) |
|
|
|
st.session_state["ingestion_spinner"] = st.empty() |
|
|
|
display_messages() |
|
st.caption(placeholder) |
|
st.text_input("Message", key="user_input", on_change=process_input) |
|
|
|
|
|
if __name__ == "__main__": |
|
page() |