Spaces:
Paused
Paused
davidefiocco
commited on
Commit
•
21b7e19
1
Parent(s):
84375f1
Redo with openai
Browse files- app.py +19 -29
- config.yaml +11 -0
- context.json +3 -2
- requirements.txt +1 -2
- test_answers.py +51 -89
- utils.py +22 -34
app.py
CHANGED
@@ -1,40 +1,30 @@
|
|
1 |
-
import json
|
2 |
-
import logging
|
3 |
-
from logging import Logger
|
4 |
-
from logging.handlers import SysLogHandler
|
5 |
-
|
6 |
import streamlit as st
|
|
|
|
|
|
|
|
|
7 |
|
8 |
-
|
|
|
9 |
|
10 |
-
|
11 |
-
syslog = SysLogHandler(
|
12 |
-
address=(st.secrets["logging_address"], int(st.secrets["logging_port"]))
|
13 |
-
)
|
14 |
-
logger = logging.getLogger()
|
15 |
-
logger.setLevel(logging.INFO)
|
16 |
-
logger.addHandler(syslog)
|
17 |
-
st.session_state["syslog"] = syslog
|
18 |
-
st.session_state["logger"] = logger
|
19 |
|
20 |
-
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
23 |
|
24 |
-
|
25 |
-
context = get_context()
|
26 |
|
27 |
st.title("Le risposte alle tue domande personali")
|
28 |
|
29 |
input = st.text_input("Scrivi una domanda in italiano e comparirà la risposta!")
|
30 |
|
31 |
-
if
|
32 |
-
try:
|
33 |
-
answer = get_answer(input, context, engine)
|
34 |
-
st.subheader(answer)
|
35 |
-
st.session_state["logger"].info(f"{input} {answer}")
|
36 |
-
except:
|
37 |
|
38 |
-
|
39 |
-
|
40 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import streamlit as st
|
2 |
+
import streamlit_authenticator as stauth
|
3 |
+
import yaml
|
4 |
+
|
5 |
+
from utils import get_answer
|
6 |
|
7 |
+
with open('./config.yaml') as file:
|
8 |
+
config = yaml.load(file, Loader=stauth.SafeLoader)
|
9 |
|
10 |
+
print(st.secrets)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
+
authenticator = stauth.Authenticate(
|
13 |
+
config['credentials'],
|
14 |
+
config['cookie']['name'],
|
15 |
+
config['cookie']['key'],
|
16 |
+
config['cookie']['expiry_days']
|
17 |
+
)
|
18 |
|
19 |
+
name, authentication_status, username = authenticator.login('Login', 'main')
|
|
|
20 |
|
21 |
st.title("Le risposte alle tue domande personali")
|
22 |
|
23 |
input = st.text_input("Scrivi una domanda in italiano e comparirà la risposta!")
|
24 |
|
25 |
+
if authentication_status:
|
|
|
|
|
|
|
|
|
|
|
26 |
|
27 |
+
if input:
|
28 |
+
|
29 |
+
response = get_answer(input)
|
30 |
+
st.write(response)
|
config.yaml
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
credentials:
|
2 |
+
usernames:
|
3 |
+
giuseppe:
|
4 |
+
email: fioccogi@gmail.com
|
5 |
+
name: giuseppe
|
6 |
+
password: $2b$12$21WJTxnSoQ/yRgPz40Wwdezfwa/w0mjmWLLceNJTryzbl7Yqq8F9K
|
7 |
+
|
8 |
+
cookie:
|
9 |
+
expiry_days: 30
|
10 |
+
key: 1b9acd8d2d7d709a8be9ecbc9a3aad6d # Must be string
|
11 |
+
name: sonia
|
context.json
CHANGED
@@ -1,2 +1,3 @@
|
|
1 |
-
{"info": "
|
2 |
-
}
|
|
|
|
1 |
+
{"info": "Sono Giuseppe Fiocco. Ho [AGE] anni. Sono nato nel mese di maggio, nell'anno 1952. Sono nato a Verona. Ho perso la memoria a causa di un'encefalite virale a gennaio 2021. Siamo nell'anno [YEAR] e la data di oggi è [TODAY]. I medici dicono che sto migliorando lentamente. Il mio codice fiscale é FCCGPP52E0etcetc. Mi sono laureato in Ingegneria elettronica a Padova. Lavoravo come ingegnere elettronico, ora sono in pensione. Ho una passione per le radio, e il mio identificativo di radioamatore è IZ3CAQ. Mi piace giocare a biliardo e passo le mie giornate a fare puzzle o a giocare con le carte. Ho un figlio di nome Davide. Davide ha 38 anni. Davide si prende cura di me e vive con me a Villafranca di Verona. L'indirizzo di casa mia è Corso Vittorio Emanuele II. La mia ex-moglie si chiama Raffaella e vive a Verona. Con Raffaella ho rapporti cordiali. Raffaella sta bene. Alessandro, Giovanni e Grazia sono i miei fratelli e stanno bene. I miei genitori si chiamavano Gina e Davide. I miei cugini sono Giuliano, Maurizio, Paolo. La mia psicologa si chiama Ylenia."
|
2 |
+
}
|
3 |
+
|
requirements.txt
CHANGED
@@ -1,2 +1 @@
|
|
1 |
-
|
2 |
-
torch
|
|
|
1 |
+
openai
|
|
test_answers.py
CHANGED
@@ -1,187 +1,149 @@
|
|
1 |
-
import
|
2 |
-
|
3 |
-
from transformers import pipeline
|
4 |
-
|
5 |
-
from utils import get_answer, get_context
|
6 |
-
|
7 |
-
nlp_qa = pipeline(
|
8 |
-
"question-answering",
|
9 |
-
model="timpal0l/mdeberta-v3-base-squad2",
|
10 |
-
tokenizer="timpal0l/mdeberta-v3-base-squad2",
|
11 |
-
)
|
12 |
-
|
13 |
-
context = get_context()
|
14 |
-
|
15 |
|
16 |
def test_name():
|
17 |
q = "Come mi chiamo?"
|
18 |
-
a = get_answer(q
|
19 |
-
assert
|
20 |
-
|
21 |
-
|
22 |
-
def test_age():
|
23 |
-
q = "Quanti anni ho?"
|
24 |
-
a = get_answer(q, context, nlp_qa)
|
25 |
-
assert a == "69"
|
26 |
-
|
27 |
-
|
28 |
-
def test_weight():
|
29 |
-
q = "Quanto peso?"
|
30 |
-
a = get_answer(q, context, nlp_qa)
|
31 |
-
assert a == "85 kg"
|
32 |
-
|
33 |
|
34 |
def test_birthplace():
|
35 |
q = "Dove sono nato?"
|
36 |
-
a = get_answer(q
|
37 |
-
assert
|
38 |
|
39 |
|
40 |
def test_birthyear():
|
41 |
q = "In che anno sono nato?"
|
42 |
-
a = get_answer(q
|
43 |
-
assert
|
44 |
|
45 |
|
46 |
def test_birthmonth():
|
47 |
q = "In che mese sono nato?"
|
48 |
-
a = get_answer(q
|
49 |
-
assert
|
50 |
|
51 |
|
52 |
def test_year():
|
53 |
q = "In che anno siamo?"
|
54 |
-
a = get_answer(q
|
55 |
-
assert
|
56 |
-
|
57 |
-
|
58 |
-
def test_year_2():
|
59 |
-
q = "In che anno sono?"
|
60 |
-
a = get_answer(q, context, nlp_qa)
|
61 |
-
assert a == "2021"
|
62 |
|
63 |
|
64 |
def test_home():
|
65 |
q = "Dove vivo?"
|
66 |
-
a = get_answer(q
|
67 |
-
assert
|
68 |
|
69 |
|
70 |
def test_address():
|
71 |
q = "Qual è l'indirizzo di casa?"
|
72 |
-
a = get_answer(q
|
73 |
assert "Vittorio Emanuele II" in a
|
74 |
|
75 |
|
76 |
def test_history():
|
77 |
q = "Cosa mi è successo?"
|
78 |
-
a = get_answer(q
|
79 |
assert "encefalite" in a
|
80 |
|
81 |
|
82 |
def test_studies():
|
83 |
q = "Cosa ho studiato?"
|
84 |
-
a = get_answer(q
|
85 |
-
assert
|
86 |
|
87 |
|
88 |
def test_studies_2():
|
89 |
q = "Dove ho studiato?"
|
90 |
-
a = get_answer(q
|
91 |
assert "Padova" in a
|
92 |
|
93 |
|
94 |
def test_work():
|
95 |
q = "Che lavoro facevo?"
|
96 |
-
a = get_answer(q
|
97 |
-
assert
|
98 |
|
99 |
|
100 |
def test_caregiver():
|
101 |
q = "Chi si prende cura di me?"
|
102 |
-
a = get_answer(q
|
103 |
assert "Davide" in a
|
104 |
|
105 |
|
106 |
def test_recovery():
|
107 |
q = "Come va il mio recupero?"
|
108 |
-
a = get_answer(q
|
109 |
assert "migliorando" in a
|
110 |
|
111 |
|
112 |
def test_family():
|
113 |
q = "Con chi vivo?"
|
114 |
-
a = get_answer(q
|
115 |
-
assert
|
116 |
|
117 |
|
118 |
def test_family_2():
|
119 |
q = "Come si chiama mio figlio?"
|
120 |
-
a = get_answer(q
|
121 |
-
assert
|
122 |
|
123 |
|
124 |
def test_family_3():
|
125 |
-
q = "Quanti anni ha mio figlio?"
|
126 |
-
a = get_answer(q, context, nlp_qa)
|
127 |
-
assert a == "37"
|
128 |
-
|
129 |
-
|
130 |
-
def test_family_4():
|
131 |
q = "Come sta Raffaella?"
|
132 |
-
a = get_answer(q
|
133 |
-
assert
|
134 |
|
135 |
|
136 |
-
def
|
137 |
q = "In che rapporti sono con Raffaella?"
|
138 |
-
a = get_answer(q
|
139 |
-
assert
|
140 |
|
141 |
|
142 |
-
def
|
143 |
q = "Chi sono i miei fratelli?"
|
144 |
-
a = get_answer(q
|
145 |
-
assert
|
146 |
|
147 |
|
148 |
-
def
|
149 |
q = "Come stanno i miei fratelli?"
|
150 |
-
a = get_answer(q
|
151 |
-
assert
|
152 |
|
153 |
|
154 |
-
def
|
155 |
q = "Come si chiamava mia madre?"
|
156 |
-
a = get_answer(q
|
157 |
assert "Gina" in a
|
158 |
|
159 |
|
160 |
-
def
|
161 |
q = "Come si chiamava mio padre?"
|
162 |
-
a = get_answer(q
|
163 |
assert "Davide" in a
|
164 |
|
165 |
|
166 |
-
def
|
167 |
q = "Quanti figli ho?"
|
168 |
-
a = get_answer(q
|
169 |
assert "un" in a
|
170 |
|
171 |
|
172 |
-
def
|
173 |
q = "Come si chiama mia moglie?"
|
174 |
-
a = get_answer(q
|
175 |
-
assert
|
176 |
|
177 |
|
178 |
-
def
|
179 |
q = "Dove vive mia moglie?"
|
180 |
-
a = get_answer(q
|
181 |
-
assert
|
182 |
|
183 |
|
184 |
-
def
|
185 |
q = "Come si chiamano i miei cugini?"
|
186 |
-
a = get_answer(q
|
187 |
assert "Giuliano" in a and "Maurizio" in a
|
|
|
1 |
+
from utils import get_answer
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
3 |
def test_name():
|
4 |
q = "Come mi chiamo?"
|
5 |
+
a = get_answer(q)
|
6 |
+
assert "Giuseppe Fiocco" in a
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
8 |
def test_birthplace():
|
9 |
q = "Dove sono nato?"
|
10 |
+
a = get_answer(q)
|
11 |
+
assert "Verona" in a
|
12 |
|
13 |
|
14 |
def test_birthyear():
|
15 |
q = "In che anno sono nato?"
|
16 |
+
a = get_answer(q)
|
17 |
+
assert "1952" in a
|
18 |
|
19 |
|
20 |
def test_birthmonth():
|
21 |
q = "In che mese sono nato?"
|
22 |
+
a = get_answer(q)
|
23 |
+
assert "maggio" in a
|
24 |
|
25 |
|
26 |
def test_year():
|
27 |
q = "In che anno siamo?"
|
28 |
+
a = get_answer(q)
|
29 |
+
assert "2023" in a
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
|
31 |
|
32 |
def test_home():
|
33 |
q = "Dove vivo?"
|
34 |
+
a = get_answer(q)
|
35 |
+
assert "Villafranca di Verona" in a
|
36 |
|
37 |
|
38 |
def test_address():
|
39 |
q = "Qual è l'indirizzo di casa?"
|
40 |
+
a = get_answer(q)
|
41 |
assert "Vittorio Emanuele II" in a
|
42 |
|
43 |
|
44 |
def test_history():
|
45 |
q = "Cosa mi è successo?"
|
46 |
+
a = get_answer(q)
|
47 |
assert "encefalite" in a
|
48 |
|
49 |
|
50 |
def test_studies():
|
51 |
q = "Cosa ho studiato?"
|
52 |
+
a = get_answer(q)
|
53 |
+
assert "ingegneria elettronica" in a.lower()
|
54 |
|
55 |
|
56 |
def test_studies_2():
|
57 |
q = "Dove ho studiato?"
|
58 |
+
a = get_answer(q)
|
59 |
assert "Padova" in a
|
60 |
|
61 |
|
62 |
def test_work():
|
63 |
q = "Che lavoro facevo?"
|
64 |
+
a = get_answer(q)
|
65 |
+
assert "ingegnere elettronico" in a
|
66 |
|
67 |
|
68 |
def test_caregiver():
|
69 |
q = "Chi si prende cura di me?"
|
70 |
+
a = get_answer(q)
|
71 |
assert "Davide" in a
|
72 |
|
73 |
|
74 |
def test_recovery():
|
75 |
q = "Come va il mio recupero?"
|
76 |
+
a = get_answer(q)
|
77 |
assert "migliorando" in a
|
78 |
|
79 |
|
80 |
def test_family():
|
81 |
q = "Con chi vivo?"
|
82 |
+
a = get_answer(q)
|
83 |
+
assert "Davide" in a
|
84 |
|
85 |
|
86 |
def test_family_2():
|
87 |
q = "Come si chiama mio figlio?"
|
88 |
+
a = get_answer(q)
|
89 |
+
assert "Davide" in a
|
90 |
|
91 |
|
92 |
def test_family_3():
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
q = "Come sta Raffaella?"
|
94 |
+
a = get_answer(q)
|
95 |
+
assert "bene" in a
|
96 |
|
97 |
|
98 |
+
def test_family_4():
|
99 |
q = "In che rapporti sono con Raffaella?"
|
100 |
+
a = get_answer(q)
|
101 |
+
assert "cordiali" in a
|
102 |
|
103 |
|
104 |
+
def test_family_5():
|
105 |
q = "Chi sono i miei fratelli?"
|
106 |
+
a = get_answer(q)
|
107 |
+
assert "Alessandro, Giovanni e Grazia" in a
|
108 |
|
109 |
|
110 |
+
def test_family_6():
|
111 |
q = "Come stanno i miei fratelli?"
|
112 |
+
a = get_answer(q)
|
113 |
+
assert "bene" in a
|
114 |
|
115 |
|
116 |
+
def test_family_7():
|
117 |
q = "Come si chiamava mia madre?"
|
118 |
+
a = get_answer(q)
|
119 |
assert "Gina" in a
|
120 |
|
121 |
|
122 |
+
def test_family_8():
|
123 |
q = "Come si chiamava mio padre?"
|
124 |
+
a = get_answer(q)
|
125 |
assert "Davide" in a
|
126 |
|
127 |
|
128 |
+
def test_family_9():
|
129 |
q = "Quanti figli ho?"
|
130 |
+
a = get_answer(q)
|
131 |
assert "un" in a
|
132 |
|
133 |
|
134 |
+
def test_family_10():
|
135 |
q = "Come si chiama mia moglie?"
|
136 |
+
a = get_answer(q)
|
137 |
+
assert "Raffaella" in a
|
138 |
|
139 |
|
140 |
+
def test_family_11():
|
141 |
q = "Dove vive mia moglie?"
|
142 |
+
a = get_answer(q)
|
143 |
+
assert "Verona" in a
|
144 |
|
145 |
|
146 |
+
def test_family_12():
|
147 |
q = "Come si chiamano i miei cugini?"
|
148 |
+
a = get_answer(q)
|
149 |
assert "Giuliano" in a and "Maurizio" in a
|
utils.py
CHANGED
@@ -4,26 +4,10 @@ import random
|
|
4 |
|
5 |
import streamlit as st
|
6 |
import tokenizers
|
7 |
-
import
|
8 |
-
from transformers import Pipeline, pipeline
|
9 |
|
10 |
|
11 |
-
def
|
12 |
-
|
13 |
-
answer = engine({"question": input, "context": context})
|
14 |
-
|
15 |
-
if answer["score"] > threshold:
|
16 |
-
return answer["answer"]
|
17 |
-
else:
|
18 |
-
return random.choice(
|
19 |
-
[
|
20 |
-
"Non so la risposta... prova con un'altra domanda!",
|
21 |
-
"Non so rispondere a questa domanda, prova con un'altra!",
|
22 |
-
]
|
23 |
-
)
|
24 |
-
|
25 |
-
|
26 |
-
def get_context():
|
27 |
|
28 |
BIRTHYEAR = 1952
|
29 |
BIRTHMONTH = 5
|
@@ -43,24 +27,28 @@ def get_context():
|
|
43 |
.replace("[OTHERAGE]", str(now.year - OTHERBIRTHYEAR))
|
44 |
)
|
45 |
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
|
|
|
48 |
|
49 |
-
|
50 |
-
hash_funcs={
|
51 |
-
torch.nn.parameter.Parameter: lambda _: None,
|
52 |
-
tokenizers.Tokenizer: lambda _: None,
|
53 |
-
tokenizers.AddedToken: lambda _: None,
|
54 |
-
},
|
55 |
-
allow_output_mutation=True,
|
56 |
-
show_spinner=False,
|
57 |
-
)
|
58 |
-
def load_engine() -> Pipeline:
|
59 |
|
60 |
-
|
61 |
-
"
|
62 |
-
|
63 |
-
|
|
|
|
|
|
|
|
|
64 |
)
|
65 |
|
66 |
-
return
|
|
|
4 |
|
5 |
import streamlit as st
|
6 |
import tokenizers
|
7 |
+
import openai
|
|
|
8 |
|
9 |
|
10 |
+
def get_prompt():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
12 |
BIRTHYEAR = 1952
|
13 |
BIRTHMONTH = 5
|
|
|
27 |
.replace("[OTHERAGE]", str(now.year - OTHERBIRTHYEAR))
|
28 |
)
|
29 |
|
30 |
+
prompt = f"""Sono amnesico, ecco alcune informazioni su di me: '{context}' Ora mi dimenticherò di quanto sopra, e ti farò delle domande, e voglio che tu mi fornisca le risposte, in maniera concisa, devi darmi del tu.
|
31 |
+
Domanda:"""
|
32 |
+
|
33 |
+
return prompt
|
34 |
+
|
35 |
+
|
36 |
+
def get_answer(input):
|
37 |
+
|
38 |
+
prompt = get_prompt()
|
39 |
|
40 |
+
openai.api_key = st.secrets("OPENAI_API_KEY")
|
41 |
|
42 |
+
print(prompt + input)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
+
response = openai.Completion.create(
|
45 |
+
model="text-davinci-003",
|
46 |
+
prompt=prompt + input,
|
47 |
+
temperature=0,
|
48 |
+
max_tokens=520,
|
49 |
+
top_p=1.0,
|
50 |
+
frequency_penalty=0.2,
|
51 |
+
presence_penalty=0.0,
|
52 |
)
|
53 |
|
54 |
+
return response["choices"][0]["text"].replace("Risposta:", "").strip()
|