import streamlit as st from textwrap import dedent from utils.audit.rag import get_text_from_content_for_doc,get_text_from_content_for_audio from utils.audit.response_llm import generate_response_via_langchain from langchain_core.messages import AIMessage, HumanMessage def cr_main(): st.title("Compte rendu") if "audit" not in st.session_state or st.session_state.audit == {}: st.error("Veuillez d'abord effectuer un audit pour générer un compte rendu.") return if "cr" not in st.session_state: st.session_state.cr = "" if "cr_chat_history" not in st.session_state: st.session_state.cr_chat_history = [ ] audit = st.session_state.audit_simplified content = st.session_state.audit["content"] if audit["type de fichier"] == "pdf": text = get_text_from_content_for_doc(content) elif audit["type de fichier"] == "audio": text = get_text_from_content_for_audio(content) prompt_cr = dedent(f''' À partir du document ci-dessous, générez un compte rendu détaillé contenant les sections suivantes : 2. **Résumé** : Fournissez une synthèse du document, en mettant en avant les points principaux, les relations essentielles, les concepts , les dates et les lieux, les conclusions et les détails importants. 3. **Notes** : - Présentez les points clés sous forme de liste à puces avec des émojis pertinents pour souligner la nature de chaque point. - N'oubliez pas de relever tout les entités et les relations. - Incluez des sous-points (sans émojis) sous les points principaux pour offrir des détails ou explications supplémentaires. 4. **Actions** : Identifiez et listez les actions spécifiques, tâches ou étapes recommandées ou nécessaires selon le contenu du document. **Document :** {text} **Format de sortie :** ### Résumé : [Fournissez un résumé concis du document ici;n'oubliez pas de relever tout les entités et les relations.] ### Notes : - 📌 **Point Principal 1** - Sous-point A - Sous-point B - 📈 **Point Principal 2** - Sous-point C - Sous-point D - 📝 **Point Principal 3** - Sous-point E - Sous-point F ### Actions : 1. [Action 1] 2. [Action 2] 3. [Action 3] 4. ... --- ''') if st.button("Générer compte rendu"): with st.spinner("Génération du compte rendu..."): cr = generate_response_via_langchain(prompt_cr,stream=False,model="gpt-4o") st.session_state.cr = cr st.session_state.cr_chat_history = [] else: cr = st.session_state.cr if cr: col1, col2 = st.columns([2.5, 1.5]) with col1.container(border=True,height=800): st.markdown("##### Compte rendu") st.markdown("### Mots clés extraits:") st.write(f"- {audit['Mots clés'].strip()}") st.write(cr) # if st.button("📋",key="copy_transcription"): # #pyperclip.copy(cr) # st.success("Transcription copiée dans le presse-papier") with col2.container(border=True,height=800): st.markdown("##### Dialoguer avec le CR") user_query = st.chat_input("Par ici ...") if user_query is not None and user_query != "": st.session_state.cr_chat_history.append(HumanMessage(content=user_query)) with st.container(height=650, border=False): for message in st.session_state.cr_chat_history: if isinstance(message, AIMessage): with st.chat_message("AI"): st.markdown(message.content) elif isinstance(message, HumanMessage): with st.chat_message("Moi"): st.write(message.content) #check if last message is human message if len(st.session_state.cr_chat_history) > 0: last_message = st.session_state.cr_chat_history[-1] if isinstance(last_message, HumanMessage): with st.chat_message("AI"): retreive = st.session_state.vectorstore.as_retriever() context = retreive.invoke(last_message.content) wrapped_prompt = f'''Étant donné le contexte suivant {context} et le compte rendu du document {cr}, {last_message.content}''' response = st.write_stream(generate_response_via_langchain(wrapped_prompt,stream=True)) st.session_state.cr_chat_history.append(AIMessage(content=response)) cr_main()