File size: 2,024 Bytes
a3d26e6
 
ea077e1
72cdb72
 
a3d26e6
 
 
 
 
 
 
 
720c02e
a3d26e6
 
c7321da
 
a3d26e6
72cdb72
 
a3d26e6
 
72cdb72
 
a3d26e6
720c02e
72cdb72
 
 
 
 
 
 
 
 
720c02e
72cdb72
 
a3d26e6
 
 
 
720c02e
 
ea077e1
a3d26e6
 
 
72cdb72
 
a3d26e6
72cdb72
720c02e
72cdb72
 
a3d26e6
720c02e
72cdb72
a3d26e6
 
72cdb72
a3d26e6
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
import streamlit as st
from streamlit_chat import message
from model import selector
from util import getYamlConfig


def display_messages():
    for i, (msg, is_user) in enumerate(st.session_state["messages"]):
        message(msg, is_user=is_user, key=str(i))
    st.session_state["thinking_spinner"] = st.empty()


def process_input():
    if "user_input" in st.session_state and st.session_state["user_input"] and len(st.session_state["user_input"].strip()) > 0:
        user_text = st.session_state["user_input"].strip()

        prompt_sys = st.session_state.prompt_system if 'prompt_system' in st.session_state and st.session_state.prompt_system != '' else ""
    
        with st.session_state["thinking_spinner"], st.spinner(f"Je réfléchis"):
            agent_text = st.session_state["assistant"].ask(user_text, prompt_system=prompt_sys, messages=st.session_state["messages"] if "messages" in st.session_state else [], variables=st.session_state["data_dict"])
            
        st.session_state["messages"].append((user_text, True))
        st.session_state["messages"].append((agent_text, False))
        st.session_state["user_input"] = ""


def show_prompts():
    yaml_data = getYamlConfig()["prompts"]
    
    expander = st.expander("Prompts pré-définis")
    
    for categroy in yaml_data:
        expander.write(categroy.capitalize())

        for item in yaml_data[categroy]:
            if expander.button(item, key=f"button_{item}"):
                st.session_state["user_input"] = item
                process_input()


def page():
    st.subheader("Posez vos questions")

    if "user_input" in st.session_state:
        process_input()

    if "assistant" not in st.session_state:
        st.text("Assistant non initialisé")

    # Collpase for default prompts
    show_prompts()

    # Models selector
    selector.ModelSelector()
    
    # Displaying messages
    display_messages()

    # Input user query
    st.text_input("Message", key="user_input", on_change=process_input)


page()