File size: 3,677 Bytes
4311668
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1deac58
4311668
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251a318
4311668
 
 
 
 
 
 
 
 
 
8db4875
ca1d2f5
dd49910
ca1d2f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75478a8
4311668
 
 
 
 
 
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
import streamlit as st # type: ignore
from translate_app import tr
import numpy as np
import openai
from dotenv import load_dotenv
import os
import warnings
warnings.filterwarnings('ignore')

title = "Playground ChatGPT"
sidebar_name = "Playground"

def display_proba_next_token(prompt,temperature,max_token):

    # Définir un ou plusieurs motifs d'arrêt
    stop_sequences = [".","\n", "FIN", "Merci"]  # Ajoutez d'autres motifs selon vos besoins
    response = openai.Completion.create(
        engine="davinci-002",
        prompt=prompt,
        max_tokens=max_token,       # Limite à un seul token pour voir uniquement la probabilité du prochain
        logprobs=5,                 # Obtenir les 5 tokens les plus probables
        temperature=temperature,     # Contrôle la créativité, 0 pour des réponses plus prédictibles
        stop=stop_sequences 
    )

    # Mettre logprobs dans un dictionnaire
    if response['choices'][0]['text'] !="":
        logprobs = response['choices'][0]['logprobs']['top_logprobs'][0]
        logprobs_dict = dict(logprobs)

        # Convertir logprobs en probabilités
        probabilities = {key: np.exp(value) for key, value in logprobs_dict.items()}

        # Afficher le texte de la réponse
        st.write("Token suivant : ->"+list(probabilities.keys())[0]+"<-")  # Afficher le texte de la réponse
        # st.write("Texte de la réponse : ->"+response['choices'][0]['text'][0]+"<-")  # Afficher le texte de la réponse
        st.write("")

        # Afficher les probabilités pour le prochain token
        for token, proba in probabilities.items():
            st.write(f"Token: ->{token}<- ; proba: {proba:.2f}")

        # Afficher le texte de la réponse complete
        st.write("")
        try:
            text = response['choices'][0]['text']
            st.write("Texte de la réponse complète: ->" + str(text) + "<-")
        except KeyError:
            st.error("La réponse ne contient pas de texte supplémentaire.")
    else:
        st.error("La réponse ne contient pas de texte supplémentaire.")
    # st.write("Texte de la réponse complete: ->"+str(response['choices'][0]['text'])+"<-")  # Afficher le texte de la réponse
    # st.write("")
    # st.write(response)


def run():
    global temperature, max_token
    
    st.write("")
    st.write("")

    st.title(tr(title))
    st.markdown('''
                ---
                ''')
    st.header("**"+tr("Prédiction du token suivant")+"**")
    st.markdown(tr(
        """
        Cet espace a pour objectif d'observer la génération de token par ChatGPT'
        """)
    , unsafe_allow_html=True)
    if 'OPENAI_API_KEY' in st.session_state:
        try:
            openai.api_key = st.session_state['OPENAI_API_KEY'] 
            col1, col2 = st.columns([3, 1])
            with col2:
                temperature = st.slider(
                    label=tr("Temperature"),
                    min_value=0.0,
                    max_value=1.0,
                    value=0.0  # Valeur initiale
                    )
                max_token = st.slider(
                    label=tr("Max tokens"),
                    min_value=1,
                    max_value=500,
                    value=100 # Valeur initiale
                    ) 
            with col1:
                prompt = st.text_area(label=tr("Prompt:"), value="La souris est mangée par le",height=100)
                display_proba_next_token(prompt,temperature,max_token)
        except Exception as e:
            st.error(f"An unexpected error occurred: {e}")
    else:
        st.write(tr("Saisissez d'abord votre clé API OpenAI !"))