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()