Spaces:
Sleeping
Sleeping
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() | |