davidefiocco commited on
Commit
21b7e19
1 Parent(s): 84375f1

Redo with openai

Browse files
Files changed (6) hide show
  1. app.py +19 -29
  2. config.yaml +11 -0
  3. context.json +3 -2
  4. requirements.txt +1 -2
  5. test_answers.py +51 -89
  6. 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
- from utils import get_answer, get_context, load_engine
 
9
 
10
- if ("syslog" not in st.session_state) and ("logger" not in st.session_state):
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
- with st.spinner(
21
- text="Ciao Giuseppe! Sto preparando il necessario per rispondere alle tue domande personali..."
22
- ):
 
 
 
23
 
24
- engine = load_engine()
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 input:
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
- st.error(
39
- "Qualcosa é andato storto. Prova di nuovo con un'altra domanda magari!"
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": "Sei Giuseppe Fiocco. Hai [AGE] anni. Sei nato nel mese di maggio, nell'anno [BIRTHYEAR]. Sei nato a Verona. Hai perso la memoria. I medici dicono che stai migliorando lentamente. L'anno in cui sei è il [YEAR]. La data di oggi è [TODAY]. Hai avuto un'encefalite virale a gennaio 2021. L'encefalite ti ha fatto perdere la memoria. Il tuo codice fiscale é FCCGPP52E0etcetc. Ti sei laureato in Ingegneria elettronica. Ti sei laureato a Padova. Lavoravi come ingegnere elettronico. Ora sei in pensione. Davide è tuo figlio. Davide ha [OTHERAGE] anni. Davide si prende cura di te. Vivi con Davide. Davide vive con te. Abiti a Villafranca di Verona. L'indirizzo di casa tua è Corso Vittorio Emanuele II. La tua ex-moglie si chiama Raffaella. La tua ex-moglie Raffaella vive a Verona. Con Raffaella hai rapporti cordiali. Raffaella sta bene. Alessandro, Giovanni e Grazia sono i tuoi fratelli. I tuoi fratelli stanno bene. Tua madre e tuo padre erano Gina e Davide. I tuoi cugini sono Giuliano, Maurizio, Paolo. "
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
- transformers
2
- torch
 
1
+ openai
 
test_answers.py CHANGED
@@ -1,187 +1,149 @@
1
- import json
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, context, nlp_qa)
19
- assert a == "Giuseppe Fiocco"
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, context, nlp_qa)
37
- assert a == "Verona"
38
 
39
 
40
  def test_birthyear():
41
  q = "In che anno sono nato?"
42
- a = get_answer(q, context, nlp_qa)
43
- assert a == "1952"
44
 
45
 
46
  def test_birthmonth():
47
  q = "In che mese sono nato?"
48
- a = get_answer(q, context, nlp_qa)
49
- assert a == "maggio"
50
 
51
 
52
  def test_year():
53
  q = "In che anno siamo?"
54
- a = get_answer(q, context, nlp_qa)
55
- assert a == "2021"
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, context, nlp_qa)
67
- assert a == "Villafranca di Verona"
68
 
69
 
70
  def test_address():
71
  q = "Qual è l'indirizzo di casa?"
72
- a = get_answer(q, context, nlp_qa)
73
  assert "Vittorio Emanuele II" in a
74
 
75
 
76
  def test_history():
77
  q = "Cosa mi è successo?"
78
- a = get_answer(q, context, nlp_qa)
79
  assert "encefalite" in a
80
 
81
 
82
  def test_studies():
83
  q = "Cosa ho studiato?"
84
- a = get_answer(q, context, nlp_qa)
85
- assert a == "Ingegneria elettronica"
86
 
87
 
88
  def test_studies_2():
89
  q = "Dove ho studiato?"
90
- a = get_answer(q, context, nlp_qa)
91
  assert "Padova" in a
92
 
93
 
94
  def test_work():
95
  q = "Che lavoro facevo?"
96
- a = get_answer(q, context, nlp_qa)
97
- assert a == "ingegnere elettronico"
98
 
99
 
100
  def test_caregiver():
101
  q = "Chi si prende cura di me?"
102
- a = get_answer(q, context, nlp_qa)
103
  assert "Davide" in a
104
 
105
 
106
  def test_recovery():
107
  q = "Come va il mio recupero?"
108
- a = get_answer(q, context, nlp_qa)
109
  assert "migliorando" in a
110
 
111
 
112
  def test_family():
113
  q = "Con chi vivo?"
114
- a = get_answer(q, context, nlp_qa)
115
- assert a == "Davide"
116
 
117
 
118
  def test_family_2():
119
  q = "Come si chiama mio figlio?"
120
- a = get_answer(q, context, nlp_qa)
121
- assert a == "Davide"
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, context, nlp_qa)
133
- assert a in "Raffaella sta bene"
134
 
135
 
136
- def test_family_5():
137
  q = "In che rapporti sono con Raffaella?"
138
- a = get_answer(q, context, nlp_qa)
139
- assert a == "cordiali"
140
 
141
 
142
- def test_family_6():
143
  q = "Chi sono i miei fratelli?"
144
- a = get_answer(q, context, nlp_qa)
145
- assert a == "Alessandro, Giovanni e Grazia"
146
 
147
 
148
- def test_family_7():
149
  q = "Come stanno i miei fratelli?"
150
- a = get_answer(q, context, nlp_qa)
151
- assert a == "I tuoi fratelli stanno bene"
152
 
153
 
154
- def test_family_8():
155
  q = "Come si chiamava mia madre?"
156
- a = get_answer(q, context, nlp_qa)
157
  assert "Gina" in a
158
 
159
 
160
- def test_family_9():
161
  q = "Come si chiamava mio padre?"
162
- a = get_answer(q, context, nlp_qa)
163
  assert "Davide" in a
164
 
165
 
166
- def test_family_10():
167
  q = "Quanti figli ho?"
168
- a = get_answer(q, context, nlp_qa)
169
  assert "un" in a
170
 
171
 
172
- def test_family_11():
173
  q = "Come si chiama mia moglie?"
174
- a = get_answer(q, context, nlp_qa)
175
- assert a == "Raffaella"
176
 
177
 
178
- def test_family_12():
179
  q = "Dove vive mia moglie?"
180
- a = get_answer(q, context, nlp_qa)
181
- assert a == "Verona"
182
 
183
 
184
- def test_family_13():
185
  q = "Come si chiamano i miei cugini?"
186
- a = get_answer(q, context, nlp_qa)
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 torch
8
- from transformers import Pipeline, pipeline
9
 
10
 
11
- def get_answer(input, context, engine, threshold=0.4):
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
- return context
 
 
 
 
 
 
 
 
47
 
 
48
 
49
- @st.cache(
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
- nlp_qa = pipeline(
61
- "question-answering",
62
- model="mrm8488/bert-italian-finedtuned-squadv1-it-alfa",
63
- tokenizer="mrm8488/bert-italian-finedtuned-squadv1-it-alfa",
 
 
 
 
64
  )
65
 
66
- return nlp_qa
 
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()