ai_agents / audit_page /compte_rendu.py
Ilyas KHIAT
first push
56a3465
raw
history blame
4.86 kB
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
import pyperclip
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()