Spaces:
Sleeping
Sleeping
File size: 4,857 Bytes
56a3465 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
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()
|