You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: notebooks/tps/chatbot/README-chatbot-nb.md
+48-3Lines changed: 48 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -173,7 +173,8 @@ ceci est une étape **totalement optionnelle**, mais je vous recommande de **cr
173
173
```
174
174
````{admonition} page.update()
175
175
:class: tip
176
-
on choisit de passer `page` au constructeur de l'objet, car avec *flet* il faut penser à *flush* les changements avec un `page.update()` - sinon les changements que l'on fait en mémoire ne sont pas répercutés dans l'affichage
176
+
on choisit de passer `page` au constructeur de l'objet, car avec *flet* il faut penser à *flush* les changements avec un `page.update()` - sinon les changements que l'on fait en mémoire ne sont pas répercutés dans l'affichage
177
+
et donc il faut qu'on puisse accéder à cette `page` depuis la classe `ChatbotApp` !
177
178
````
178
179
179
180
+++
@@ -191,9 +192,17 @@ toujours pour éviter de finir avec un gros paquet de spaguettis, on pourrait im
191
192
- et est responsable de la partie "dialogue" entre humain et robot
192
193
- et qui du coup crée la zone de prompt,
193
194
- et possède une méthode `current_prompt()` qui renvoie le prompt tapé par l'utilisateur
194
-
- et une méthode `add_message` pour insérer les questions et les réponses au fur et à mesure
195
+
- et une méthode `add_message()` pour insérer les questions et les réponses au fur et à mesure
195
196
(à ce stade on ne fait pas encore la différence entre prompt et réponse)
196
197
198
+
````{admonition} alternance de questions / réponses
199
+
:class: tip
200
+
201
+
comme la logique du dialogue c'est d'alterner les questions et les réponses, on peut tout à fait considérer que c'est un fait acquis, et du coup admettre que:
202
+
- le dernier élément dans la colonne History est toujours le dernier prompt;
203
+
- et les autres éléments sont alternativement, en commençant du début: prompt, réponse, prompt, réponse, etc...
204
+
````
205
+
197
206
pour être bien clair, à ce stade on ne fait pas encore usage du réseau pour quoi que ce soit
198
207
199
208
+++
@@ -221,12 +230,40 @@ quelques indices:
221
230
:align: right
222
231
```
223
232
224
-
dans cette version, on utilise la réponse du serveur pour **afficher le dialogue** dans notre application
233
+
dans cette version, on utilise la réponse du serveur pour *afficher le dialogue **dans notre application*** et non plus dans le terminal
234
+
225
235
pour cela on va devoir faire quelques modifications à la classe `History`; en effet vous devez avoir observé à ce stade que la réponse vient "en petits morceaux", ce qui fait qu'on pourrait avoir envie de modifier un peu la classe `History` de sorte qu'elle expose à présent les méthodes
226
236
227
237
-`add_prompt()` et `add_answer()` pour distinguer entre les deux types d'entrée
228
238
- et surtout `add_chunk()` qui permet d'ajouter *juste un mot* dans la réponse du robot, pour nous ajuster avec le format de la réponse
229
239
240
+
````{admonition} le scrolling
241
+
:class: tip dropdown
242
+
243
+
peut-être un peu prématuré (revenez dessus plus tard si nécessaire), mais il est important que notre chatbot *scroll* correctement:
244
+
c'est-à-dire qu'après plusisurs questions/réponses on voie toujours le bas du dialogue
245
+
et pour ça sachez qu'il faut procéder comme ceci
246
+
```python
247
+
cl = ft.Column(
248
+
[....], # the children
249
+
# required so the column knows it is supposed to take all the vertical space of its father
250
+
expand=True,
251
+
# so that the widget activates scrolling when needed
252
+
scroll=ft.ScrollMode.AUTO,
253
+
# so that we're always seeing the bottom area
254
+
auto_scroll=True,
255
+
)
256
+
```
257
+
258
+
enfin, remarquez qu'on peut avoir envie d'activer le scrolling
259
+
260
+
- sur la `Column` principale (notre `ChatbotApp`), mais dans ce cas les widgets de mode (streaming, server...) vont scroller aussi
261
+
c'est mieux que pas de scroll, mais pas forcément idéal encore
262
+
- sur la `History`, et dans ce cas les widgets de mode vont rester fixes;
263
+
dans ce cas-là toutefois, pensez à mettre tout de même `expand=True` sur la `ChatbotApp` pour que les changements de la taille de l'app se propagent jusqu'à l'`History`
264
+
265
+
````
266
+
230
267
+++
231
268
232
269
## v07: pas de multiples requêtes
@@ -288,6 +325,14 @@ dans mon implémentation j'ai choisi de "cacher" ce résultat, pour ne pas redem
288
325
289
326
en vrac:
290
327
328
+
- une fois que vous faites l'acquisition des modèles disponibles, il se peut qu'on vous retourne des valeurs de modèle qui ne fonctionnent pas;
329
+
notamment les modèles `all-minilm:22m-l6-v2-fp16' et 'all-minilm:33m-l12-v2-fp16` (entre autres sans doute) ne supportent pas l'interface `generate`
330
+
et comme - pas de bol - ils apparaissent en premier dans la liste des tags, c'est sans doute habile d'éviter de les choisir comme défaut du modèle
331
+
```{admonition} on pourrait le savoir par programme ?
332
+
:class: dropdown
333
+
334
+
sans doute; dans <https://github.com/ollama/ollama/blob/main/docs/api.md#list-local-models> on nous montre comment obtenir des informations plus fines sur les mdèles...
335
+
```
291
336
- ajouter un bouton "Cancel" - en fait idéalement on en aurait besoin le plus tôt possible car le développement peut vite devenir fastidieux (ne pas hésiter à quitter et relancer); mais le truc c'est que c'est non trivial à faire en fait !
292
337
- ou pourrait imaginer soumettre le même prompt à plusieurs modèles pour les comparer
0 commit comments