dav74 commited on
Commit
3929adf
1 Parent(s): 25861f6

Upload 7 files

Browse files
Dockerfile ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Read the doc: https://huggingface.co/docs/hub/spaces-sdks-docker
2
+ # you will also find guides on how best to write your Dockerfile
3
+
4
+ FROM python:3.12
5
+
6
+ RUN useradd -m -u 1000 user
7
+ USER user
8
+ ENV PATH="/home/user/.local/bin:$PATH"
9
+
10
+ WORKDIR /app
11
+
12
+ COPY --chown=user ./requirements.txt requirements.txt
13
+ RUN pip install --no-cache-dir --upgrade -r requirements.txt
14
+
15
+ COPY --chown=user . /app
16
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
README.md CHANGED
@@ -1,11 +1,12 @@
1
  ---
2
- title: Chatbot Nsi 8b
3
  emoji: 🌖
4
- colorFrom: gray
5
- colorTo: red
6
  sdk: docker
7
  pinned: false
8
- license: apache-2.0
 
9
  ---
10
 
11
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Chatbot Nsi V2
3
  emoji: 🌖
4
+ colorFrom: indigo
5
+ colorTo: blue
6
  sdk: docker
7
  pinned: false
8
+ license: cc
9
+ short_description: chatbot for education
10
  ---
11
 
12
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
documents/.DS_Store ADDED
Binary file (6.15 kB). View file
 
documents/programme_NSI_premiere.md ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## NSI programme de la classe de première
2
+
3
+ ### Rubrique transversale de l’histoire de l’informatique
4
+
5
+ - **Événements clés de l’histoire de l’informatique**
6
+ - Situer dans le temps les principaux événements de l’histoire de l’informatique et leurs protagonistes.
7
+ > Ces repères historiques seront construits au fur et à mesure de la présentation des concepts et techniques. [commentaire]
8
+
9
+ ### Représentation des données : types et valeurs de base
10
+
11
+ - **Écriture d’un entier positif dans une base b⩾2**
12
+ - Passer de la représentation d’une base dans une autre.
13
+ > Les bases 2, 10 et 16 sont privilégiées. [commentaire]
14
+ - **Représentation binaire d’un entier relatif**
15
+ - Évaluer le nombre de bits nécessaires à l’écriture en base 2 d’un entier, de la somme ou du produit de deux nombres entiers.
16
+ > Il s’agit de décrire les tailles courantes des entiers (8, 16, 32 ou 64 bits). [commentaire]
17
+ >
18
+ > Il est possible d’évoquer la représentation des entiers de taille arbitraire de Python. [commentaire]
19
+ - Utiliser le complément à 2.
20
+ - **Représentation approximative des nombres réels : notion de nombre flottant**
21
+ - Calculer sur quelques exemples la représentation de nombres réels : `0.1`, `0.25` ou $1/3$.
22
+ > `0.2 + 0.1` n’est pas égal à `0.3`. [commentaire]
23
+ >
24
+ > Il faut éviter de tester l’égalité de deux flottants. [commentaire]
25
+ >
26
+ > Aucune connaissance précise de la norme IEEE-754 n’est exigible. [commentaire]
27
+ - **Valeurs booléennes : `0`, `1`.**
28
+ - **Opérateurs booléens : `and`, `or`, `not`.**
29
+ > Le ou exclusif (`xor`) est évoqué. [commentaire]
30
+ >
31
+ > Quelques applications directes comme l’addition binaire sont présentées. [commentaire]
32
+ >
33
+ > L’attention des élèves est attirée sur le caractère séquentiel de certains opérateurs booléens. [commentaire]
34
+ - **Expressions booléennes**
35
+ - Dresser la table d’une expression booléenne.
36
+ - **Représentation d’un texte en machine.**
37
+ - **Exemples des encodages ASCII, ISO-8859-1, Unicode**
38
+ - Identifier l’intérêt des différents systèmes d’encodage.
39
+ > Aucune connaissance précise des normes d’encodage n’est exigible. [commentaire]
40
+ - Convertir un fichier texte dans différents formats d’encodage.
41
+
42
+ ### Représentation des données : types construits
43
+
44
+ - **p-uplets.**
45
+ - Écrire une fonction renvoyant un p-uplet de valeurs.
46
+ - **p-uplets nommés**
47
+ - Écrire une fonction renvoyant un p-uplet de valeurs.
48
+ - **Tableau indexé, tableau donné en compréhension**
49
+ > Seuls les tableaux dont les éléments sont du même type sont présentés. [commentaire]
50
+ >
51
+ > L’aspect dynamique des tableaux de Python n’est pas évoqué. [commentaire]
52
+ >
53
+ > Python identifie listes et tableaux. [commentaire]
54
+ >
55
+ > Il n’est pas fait référence aux tableaux de la bibliothèque NumPy. [commentaire]
56
+ - Lire et modifier les éléments d’un tableau grâce à leurs index.
57
+ > Aucune connaissance des tranches (slices) n’est exigible. [commentaire]
58
+ - Construire un tableau par compréhension.
59
+ - Utiliser des tableaux de compréhension tableaux pour représenter des matrices : notation `a[i][j]`.
60
+ - Itérer sur les éléments d’un tableau.
61
+ - **Dictionnaires par clés et valeurs**
62
+ - Construire une entrée de dictionnaire.
63
+ > En Python, les p-uplets nommés sont implémentés par des dictionnaires. [commentaire]
64
+ - Itérer sur les éléments d’un dictionnaire.
65
+ > Il est possible de présenter les données EXIF d’une image sous la forme d’un enregistrement. [commentaire]
66
+ >
67
+ > Utiliser les méthodes `keys()`, `values()` et `items()`. [commentaire]
68
+
69
+ ### Traitement de données en tables
70
+
71
+ - **Indexation de tables**
72
+ - Importer une table depuis un fichier texte tabulé ou un fichier CSV.
73
+ > Est utilisé un tableau doublement indexé ou un tableau de p-uplets qui partagent les mêmes descripteurs. [commentaire]
74
+ - **Recherche dans une table**
75
+ - Rechercher les lignes d’une table vérifiant des critères exprimés en logique propositionnelle.
76
+ > La recherche de doublons, les tests de cohérence d’une table sont présentés. [commentaire]
77
+ - **Tri d’une table**
78
+ - Trier une table suivant une colonne.
79
+ > Une fonction de tri intégrée au système ou à une bibliothèque peut être utilisée. [commentaire]
80
+ - **Fusion de tables**
81
+ - Construire une nouvelle table en combinant les données de deux tables.
82
+ > La notion de domaine de valeurs est mise en évidence. [commentaire]
83
+
84
+ ### Interactions entre l’homme et la machine sur le Web
85
+
86
+ - **Modalités de l’interaction entre l’homme et la machine**
87
+ - Identifier les différents composants graphiques permettant d’interagir avec une application Web.
88
+ > Il s’agit d’examiner le code HTML d’une page comprenant des composants graphiques et de distinguer ce qui relève de la description des composants graphiques en HTML de leur comportement (réaction aux événements) programmé par exemple en JavaScript. [commentaire]
89
+ - **Événements**
90
+ - Identifier les événements que les fonctions associées aux différents composants graphiques sont capables de traiter.
91
+ - **Interaction avec l’utilisateur dans une page Web**
92
+ - Analyser et modifier les méthodes exécutées lors d’un clic sur un bouton d’une page Web.
93
+ - **Interaction client-serveur.**
94
+ - Distinguer ce qui est exécuté sur le client ou sur le serveur et dans quel ordre.
95
+ - **Requêtes HTTP, réponses du serveur**
96
+ > Il s’agit de faire le lien avec ce qui a été vu en classe de seconde et d’expliquer comment on peut passer des paramètres à un site grâce au protocole HTTP. [commentaire]
97
+ - Distinguer ce qui est mémorisé dans le client et retransmis au serveur.
98
+ - Reconnaître quand et pourquoi la transmission est chiffrée.
99
+ - **Formulaire d’une page Web**
100
+ - Analyser le fonctionnement d’un formulaire simple.
101
+ - Distinguer les transmissions de paramètres par les requêtes POST ou GET.
102
+ > Discuter les deux types de requêtes selon le type des valeurs à transmettre et/ou leur confidentialité. [commentaire]
103
+
104
+ ### Architectures matérielles et systèmes d’exploitation
105
+
106
+ - **Modèle d’architecture séquentielle (von Neumann)**
107
+ > La présentation se limite aux concepts généraux. [commentaire]
108
+ - Distinguer les rôles et les caractéristiques des différents constituants d’une machine.
109
+ > On distingue les architectures monoprocesseur et les architectures multiprocesseur. [commentaire]
110
+ >
111
+ > Des activités débranchées sont proposées. [commentaire]
112
+ - Dérouler l’exécution d’une séquence d’instructions simples du type langage machine.
113
+ > Les circuits combinatoires réalisent des fonctions booléennes. [commentaire]
114
+ - **Transmission de données dans un réseau**
115
+ - Mettre en évidence l’intérêt du découpage des données en paquets et de leur encapsulation.
116
+ - **Protocoles de communication**
117
+ - Dérouler le fonctionnement d’un protocole simple de récupération de perte de paquets (bit alterné).
118
+ > Le protocole peut être expliqué et simulé en mode débranché. [commentaire]
119
+ >
120
+ > Le lien est fait avec ce qui a été vu en classe de seconde sur le protocole TCP/IP. [commentaire]
121
+ - **Architecture d’un réseau**
122
+ - Simuler ou mettre en œuvre un réseau.
123
+ > Le rôle des différents constituants du réseau local de l’établissement est présenté. [commentaire]
124
+ - **Systèmes d’exploitation**
125
+ - Identifier les fonctions d’un système d’exploitation.
126
+ > Les différences entre systèmes d’exploitation libres et propriétaires sont évoquées. [commentaire]
127
+ >
128
+ > Il ne s’agit pas d’une étude théorique des systèmes d’exploitation. [commentaire]
129
+ - Utiliser les commandes de base en ligne de commande.
130
+ > Les élèves utilisent un système d’exploitation libre. [commentaire]
131
+ - Gérer les droits et permissions d’accès aux fichiers.
132
+ - **Interface Homme-Machine (IHM) et périphériques d’entrée et de sortie [reformulé, ndr]**
133
+ - Identifier le rôle des capteurs et actionneurs.
134
+ - Réaliser par programmation une IHM répondant à un cahier des charges donné.
135
+ > Les activités peuvent être développées sur des objets connectés, des systèmes embarqués ou robots. [commentaire]
136
+
137
+ ### Langages et programmation
138
+
139
+ - **Constructions élémentaires**
140
+ - Mettre en évidence un corpus de constructions élémentaires.
141
+ > Séquences, affectation, conditionnelles, boucles bornées, boucles non bornées, appels de fonction. [commentaire]
142
+ - **Diversité et unité des langages de programmation**
143
+ - Repérer, dans un nouveau langage de programmation, les traits communs et les traits particuliers à ce langage.
144
+ > Les manières dont un même programme simple s’écrit dans différents langages sont comparées. [commentaire]
145
+ - **Spécification**
146
+ - Prototyper une fonction.
147
+ - Décrire les préconditions sur les arguments.
148
+ - Décrire des postconditions sur les résultats.
149
+ > Des assertions peuvent être utilisées pour garantir des préconditions ou des postconditions. [commentaire]
150
+ - **Mise au point de programmes**
151
+ - Utiliser des jeux de tests.
152
+ > L’importance de la qualité et du nombre des tests est mise en évidence. [commentaire]
153
+ >
154
+ > Le succès d’un jeu de tests ne garantit pas la correction d’un programme. [commentaire]
155
+ - **Utilisation de bibliothèques**
156
+ - Utiliser la documentation d’une bibliothèque.
157
+ > Aucune connaissance exhaustive d’une bibliothèque particulière n’est exigible. [commentaire]
158
+
159
+ ### Algorithmique
160
+
161
+ - **Parcours séquentiel d’un tableau**
162
+ > On montre que le coût est linéaire. [commentaire]
163
+ - Écrire un algorithme de recherche d’une occurrence sur des valeurs de type quelconque.
164
+ - Écrire un algorithme de recherche d’un extremum, de calcul d’une moyenne.
165
+ - **Tris par insertion, par sélection**
166
+ > La terminaison de ces algorithmes est à justifier. [commentaire]
167
+ >
168
+ > On montre que leur coût est quadratique dans le pire cas. [commentaire]
169
+ - Écrire un algorithme de tri.
170
+ - Décrire un invariant de boucle qui prouve la correction des tris par insertion, par sélection.
171
+ - **Algorithme des k plus proches voisins**
172
+ - Écrire un algorithme qui prédit la classe d’un élément en fonction de la classe majoritaire de ses k plus proches voisins.
173
+ > Il s’agit d’un exemple d’algorithme d’apprentissage. [commentaire]
174
+ - **Recherche dichotomique dans un tableau trié**
175
+ - Montrer la terminaison de la recherche dichotomique à l’aide d’un variant de boucle.
176
+ > Des assertions peuvent être utilisées. [commentaire]
177
+ >
178
+ > La preuve de la correction peut être présentée par le professeur. [commentaire]
179
+ - **Algorithmes gloutons**
180
+ - Résoudre un problème grâce à un algorithme glouton.
181
+ > Exemples : problèmes du sac à dos ou du rendu de monnaie. [commentaire]
182
+ >
183
+ > Les algorithmes gloutons constituent une méthode algorithmique parmi d’autres qui seront vues en terminale. [commentaire]
184
+
documents/programme_NSI_terminale.md ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## NSI programme de la classe de terminale
2
+
3
+ ### Rubrique transversale de l’histoire de l’informatique
4
+
5
+ - **Événements clés de l’histoire de l’informatique.**
6
+ > Ces repères viennent compléter ceux qui ont été introduits en première. [commentaire]
7
+ >
8
+ > Ces repères historiques sont construits au fur et à mesure de la présentation des concepts et techniques. [commentaire]
9
+ - Situer dans le temps les principaux événements de l’histoire de l’informatique et leurs protagonistes.
10
+ - Identifier l’évolution des rôles relatifs des logiciels et des matériels.
11
+
12
+ ### Structures de données
13
+
14
+ - **Structures de données, interface et implémentation.**
15
+ > L’abstraction des structures de données est introduite après plusieurs implémentations d’une structure simple comme la file (avec un tableau ou avec deux piles). [commentaire]
16
+ - Spécifier une structure de données par son interface.
17
+ - Distinguer interface et implémentation.
18
+ - Écrire plusieurs implémentations d’une même structure de données.
19
+ - **Vocabulaire de la programmation objet : classes, attributs, méthodes, objets.**
20
+ > On n’aborde pas ici tous les aspects de la programmation objet comme le polymorphisme et l’héritage. [commentaire]
21
+ - Écrire la définition d’une classe.
22
+ - Accéder aux attributs et méthodes d’une classe.
23
+ - **Listes, piles, files : structures linéaires.**
24
+ > On distingue les modes FIFO (*first in first out*) et LIFO (*last in first out*) des piles et des files. [commentaire]
25
+ - Distinguer des structures par le jeu des méthodes qui les caractérisent.
26
+ - Choisir une structure de données adaptée à la situation à modéliser.
27
+ - Distinguer la recherche d’une valeur dans une liste et dans un dictionnaire.
28
+ - **Dictionnaires, index et clé.**
29
+ - Distinguer des structures par le jeu des méthodes qui les caractérisent.
30
+ - Choisir une structure de données adaptée à la situation à modéliser.
31
+ - Distinguer la recherche d’une valeur dans une liste et dans un dictionnaire.
32
+ - **Arbres : structures hiérarchiques.**
33
+ > On fait le lien avec la rubrique « algorithmique ». [commentaire]
34
+ - Identifier des situations nécessitant une structure de données arborescente.
35
+ - **Arbres binaires : nœuds, racines, feuilles, sous-arbres gauches, sous-arbres droits.**
36
+ - Évaluer quelques mesures des arbres binaires (taille, encadrement de la hauteur, etc.).
37
+ - **Graphes : structures relationnelles.**
38
+ - Modéliser des situations sous forme de graphes.
39
+ > On s’appuie sur des exemples comme le réseau routier, le réseau électrique, Internet, les réseaux sociaux. [commentaire]
40
+ - **Sommets, arcs, arêtes, graphes orientés ou non orientés.**
41
+ - Écrire les implémentations correspondantes d’un graphe : matrice d’adjacence, liste de successeurs/de prédécesseurs. Passer d’une représentation à une autre.
42
+ > Le choix de la représentation dépend du traitement qu’on veut mettre en place : on fait le lien avec la rubrique « algorithmique ». [commentaire]
43
+
44
+ ### Bases de données
45
+
46
+ - **Modèle relationnel : relation, attribut, domaine, clef primaire, clef étrangère, schéma relationnel.**
47
+ - Identifier les concepts définissant le modèle relationnel.
48
+ > Ces concepts permettent d’exprimer les contraintes d’intégrité (domaine, relation et référence). [commentaire]
49
+ - **Base de données relationnelle.**
50
+ > On privilégie la manipulation de données nombreuses et réalistes. [commentaire]
51
+ - Savoir distinguer la structure d’une base de données de son contenu.
52
+ > La structure est un ensemble de schémas relationnels qui respecte les contraintes du modèle relationnel. [commentaire]
53
+ - Repérer des anomalies dans le schéma d’une base de données.
54
+ > Les anomalies peuvent être des redondances de données ou des anomalies d’insertion, de suppression, de mise à jour. [commentaire]
55
+ - **Système de gestion de bases de données relationnelles.**
56
+ - Identifier les services rendus par un système de gestion de bases de données relationnelles : persistance des données, gestion des accès concurrents, efficacité de traitement des requêtes, sécurisation des accès.
57
+ > Il s’agit de comprendre le rôle et les enjeux des différents services sans en détailler le fonctionnement. [commentaire]
58
+ - **Langage SQL : requêtes d’interrogation et de mise à jour d’une base de données.**
59
+ - Identifier les composants d’une requête.
60
+ - Construire des requêtes d’interrogation à l’aide des clauses du langage SQL : `SELECT`, `FROM`, `WHERE`, `JOIN`.
61
+ > On peut utiliser `DISTINCT`, `ORDER BY` ou les fonctions d’agrégation sans utiliser les clauses `GROUP BY` et `HAVING`. [commentaire]
62
+ - Construire des requêtes d’insertion et de mise à jour à l’aide de : `UPDATE`, `INSERT`, `DELETE`.
63
+
64
+ ### Architectures matérielles, systèmes d’exploitation et réseaux
65
+
66
+ - **Composants intégrés d’un système sur puce.**
67
+ - Identifier les principaux composants sur un schéma de circuit et les avantages de leur intégration en termes de vitesse et de consommation.
68
+ > Le circuit d’un téléphone peut être pris comme un exemple : microprocesseurs, mémoires locales, interfaces radio et filaires, gestion d’énergie, contrôleurs vidéo, accélérateur graphique, réseaux sur puce, etc. [commentaire]
69
+ - **Gestion des processus et des ressources par un système d’exploitation.**
70
+ - Décrire la création d’un processus, l’ordonnancement de plusieurs processus par le système.
71
+ > À l’aide d’outils standard, il s’agit d’observer les processus actifs ou en attente sur une machine. [commentaire]
72
+ - Mettre en évidence le risque de l’interblocage (*deadlock*).
73
+ > Une présentation débranchée de l’interblocage peut être proposée. [commentaire]
74
+ - **Protocoles de routage.**
75
+ - Identifier, suivant le protocole de routage utilisé, la route empruntée par un paquet.
76
+ > En mode débranché, les tables de routage étant données, on se réfère au nombre de sauts (protocole RIP) ou au coût des routes (protocole OSPF). [commentaire]
77
+ >
78
+ > Le lien avec les algorithmes de recherche de chemin sur un graphe est mis en évidence. [commentaire]
79
+ - **Sécurisation des communications.**
80
+ - Décrire les principes de chiffrement symétrique (clef partagée) et asymétrique (avec clef privée/clef publique).
81
+ > Les protocoles symétriques et asymétriques peuvent être illustrés en mode débranché, éventuellement avec description d’un chiffrement particulier. [commentaire]
82
+ - Décrire l’échange d’une clef symétrique en utilisant un protocole asymétrique pour sécuriser une communication HTTPS.
83
+ > La négociation de la méthode chiffrement du protocole SSL (*Secure Sockets Layer*) n’est pas abordée. [commentaire]
84
+
85
+ ### Langages et programmation
86
+
87
+ - **Notion de programme en tant que donnée.**
88
+ - Comprendre que tout programme est aussi une donnée.
89
+ > L’utilisation d’un interpréteur ou d’un compilateur, le téléchargement de logiciel, le fonctionnement des systèmes d’exploitation permettent de comprendre un programme comme donnée d’un autre programme. [commentaire]
90
+ - **Calculabilité, décidabilité.**
91
+ - Comprendre que la calculabilité ne dépend pas du langage de programmation utilisé.
92
+ - Montrer, sans formalisme théorique, que le problème de l’arrêt est indécidable.
93
+ - **Récursivité.**
94
+ - Écrire un programme récursif.
95
+ - Analyser le fonctionnement d’un programme récursif.
96
+ > Des exemples relevant de domaines variés sont à privilégier. [commentaire]
97
+ - **Modularité.**
98
+ - Utiliser des API (Application Programming Interface) ou des bibliothèques [fusionné, ndr] [et] exploiter leur documentation.
99
+ - Créer des modules simples et les documenter.
100
+ - **Paradigmes de programmation.**
101
+ - Distinguer sur des exemples les paradigmes impératif, fonctionnel et objet.
102
+ - Choisir le paradigme de programmation selon le champ d’application d’un programme.
103
+ > Avec un même langage de programmation, on peut utiliser des paradigmes différents. Dans un même programme, on peut utiliser des paradigmes différents. [commentaire]
104
+ - **Mise au point des programmes.**
105
+ > On prolonge le travail entrepris en classe de première sur l’utilisation de la spécification, des assertions, de la documentation des programmes et de la construction de jeux de tests. [commentaire]
106
+ - **Gestion des bugs.**
107
+ - Dans la pratique de la programmation, savoir répondre aux causes typiques de bugs : problèmes liés au typage, effets de bord non désirés, débordements dans les tableaux, instruction conditionnelle non exhaustive, choix des inégalités, comparaisons et calculs entre flottants, mauvais nommage des variables, etc.
108
+ > Les élèves apprennent progressivement à anticiper leurs erreurs. [commentaire]
109
+
110
+ ### Algorithmique
111
+
112
+ - **Algorithmes sur les arbres binaires et sur les arbres binaires de recherche.**
113
+ > Une structure de données récursive adaptée est utilisée. [commentaire]
114
+ >
115
+ > L’exemple des arbres permet d’illustrer la programmation par classe. [commentaire]
116
+ - Calculer la taille et la hauteur d’un arbre.
117
+ - Parcourir un arbre de différentes façons (ordres infixe, préfixe ou suffixe ; ordre en largeur d’abord).
118
+ - Rechercher une clé dans un arbre de recherche, insérer une clé.
119
+ > La recherche dans un arbre de recherche équilibré est de coût logarithmique. [commentaire]
120
+ - **Algorithmes sur les graphes.**
121
+ > L’exemple des graphes permet d’illustrer l’utilisation des classes en programmation. [commentaire]
122
+ - Parcourir un graphe en profondeur d’abord, en largeur d’abord.
123
+ - Repérer la présence d’un cycle dans un graphe.
124
+ - Chercher un chemin dans un graphe.
125
+ > Le parcours d’un labyrinthe et le routage dans Internet sont des exemples d’algorithme sur les graphes. [commentaire]
126
+ - **Méthode « diviser pour régner ».**
127
+ - Écrire un algorithme utilisant la méthode « diviser pour régner ».
128
+ > La rotation d’une image bitmap d’un quart de tour avec un coût en mémoire constant est un bon exemple. [commentaire]
129
+ >
130
+ > L’exemple du tri fusion permet également d’exploiter la récursivité et d’exhiber un algorithme de coût en $n \log n$ dans les pires des cas. [commentaire]
131
+ - **Programmation dynamique.**
132
+ - Utiliser la programmation dynamique pour écrire un algorithme.
133
+ > Les exemples de l’alignement de séquences ou du rendu de monnaie peuvent être présentés. [commentaire]
134
+ >
135
+ > La discussion sur le coût en mémoire peut être développée. [commentaire]
136
+ - **Recherche textuelle.**
137
+ - Étudier l’algorithme de Boyer-Moore pour la recherche d’un motif dans un texte.
138
+ > L’intérêt du prétraitement du motif est mis en avant. [commentaire]
139
+ >
140
+ > L’étude du coût, difficile, ne peut être exigée. [commentaire]
main.py ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from dotenv import load_dotenv
3
+ from langchain_core.output_parsers import StrOutputParser
4
+ from langchain_groq import ChatGroq
5
+ from langchain_core.prompts import ChatPromptTemplate
6
+ from typing import List
7
+ from langchain_huggingface import HuggingFaceEmbeddings
8
+ from langchain_chroma import Chroma
9
+ from typing_extensions import TypedDict
10
+ from typing import Annotated
11
+ from langgraph.graph.message import AnyMessage, add_messages
12
+ from langchain_core.messages import HumanMessage, AIMessage
13
+ from langchain_community.document_loaders import DirectoryLoader
14
+ from langchain_text_splitters import CharacterTextSplitter
15
+ from langgraph.graph import END, StateGraph, START
16
+ from langgraph.checkpoint.memory import MemorySaver
17
+ from fastapi import FastAPI
18
+ from fastapi.middleware.cors import CORSMiddleware
19
+ from pydantic import BaseModel
20
+
21
+ app = FastAPI()
22
+
23
+ app.add_middleware(
24
+ CORSMiddleware,
25
+ allow_origins=["*"],
26
+ allow_credentials=True,
27
+ allow_methods=["*"],
28
+ allow_headers=["*"],
29
+ )
30
+
31
+ class Request(BaseModel):
32
+ query : str
33
+ id : str
34
+
35
+ load_dotenv()
36
+ os.environ["GROQ_API_KEY"] = os.getenv('GROQ_API_KEY')
37
+ os.environ["TOKENIZERS_PARALLELISM"] = "false"
38
+ persist_directory = 'db'
39
+ embedding = HuggingFaceEmbeddings(model_name="OrdalieTech/Solon-embeddings-large-0.1")
40
+ llm = ChatGroq(model="llama-3.1-8b-instant", temperature=0.5)
41
+ memory = MemorySaver()
42
+
43
+ if os.path.exists(persist_directory) :
44
+ vectordb = Chroma(persist_directory=persist_directory, embedding_function=embedding)
45
+ else :
46
+ glob_pattern="./*.md"
47
+ directory_path = "./documents"
48
+ loader = DirectoryLoader(directory_path, glob=glob_pattern)
49
+ documents = loader.load()
50
+ text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
51
+ texts = text_splitter.split_documents(documents)
52
+ vectordb = Chroma.from_documents(documents=texts, embedding=embedding, persist_directory=persist_directory)
53
+
54
+ retriever = vectordb.as_retriever()
55
+
56
+ system = """
57
+ Tu es un assistant spécialisé dans l'enseignement de la spécialité Numérique et sciences informatiques en classe de première et de terminal
58
+ Tu as un bon niveau en langage Python
59
+ Ton interlocuteur est un élève qui suit la spécialité nsi en première et en terminale
60
+ Tu dois uniquement répondre aux questions qui concernent la spécialité numérique et sciences informatiques
61
+ Tu ne dois pas faire d'erreur, répond à la question uniquement si tu es sûr de ta réponse
62
+ si tu ne trouves pas la réponse à une question, tu réponds que tu ne connais pas la réponse et que l'élève doit s'adresser à son professeur pour obtenir cette réponse
63
+ Tu dois uniquement aborder des notions qui sont aux programmes de la spécialité numérique et sciences informatiques (première et terminale), tu ne dois jamais aborder une notion qui n'est pas au programme
64
+ si l'élève n'arrive pas à trouver la réponse à un exercice, tu ne dois pas lui donner tout de suite la réponse, mais seulement lui donner des indications pour lui permettre de trouver la réponse par lui même
65
+ Quand tu donnes un exercice Python, dans les indications que tu donnes aux élèves, tu ne dois pas dire aux élèves d'utiliser les fonctions Python : min, max, sum... pour résoudre l'exercice
66
+ Pour des exercices sur les requêtes SQL, tu ne doir pas utiliser LIKE, GROUP BY, INNER LEFT et INNER RIGHT car ces notions ne sont pas au programme de NSI
67
+ Tu peux lui donner la réponse à un exercice uniquement si l'élève te demande explicitement cette réponse
68
+ Tu dois uniquement répondre en langue française
69
+ Tu trouveras ci-dessous les programmes de la spécialité NSI en première et terminale, tu devras veiller à ce que tes réponses ne sortent pas du cadre de ces programmes
70
+ Si la question posée ne rentre pas dans le cadre du programme de NSI tu peux tout de même répondre en précisant bien que cette notion est hors programme
71
+ si tu proposes un exercice, tu dois bien vérifier que toutes les notions nécessaires à la résolution de l'exercice sont explicitement au programme de NSI
72
+ """
73
+
74
+ prompt = ChatPromptTemplate.from_messages(
75
+ [
76
+ ("system", system),
77
+ ("human", "Extraits des programmes de NSI : \n {document} \n\n Historique conversation entre l'assistant et l'élève : \n {historical} \n\n Intervention de l'élève : {question}"),
78
+ ]
79
+ )
80
+
81
+ chain = prompt | llm | StrOutputParser()
82
+
83
+ def format_docs(docs):
84
+ return "\n".join(doc.page_content for doc in docs)
85
+
86
+ def format_historical(hist):
87
+ historical = []
88
+ for i in range(0,len(hist)-2,2):
89
+ historical.append("Elève : "+hist[i].content)
90
+ historical.append("Assistant : "+hist[i+1].content)
91
+ return "\n".join(historical[-10:])
92
+
93
+
94
+ class GraphState(TypedDict):
95
+ messages: Annotated[list[AnyMessage], add_messages]
96
+ documents : str
97
+
98
+ def retrieve(state : GraphState):
99
+ documents = format_docs(retriever.invoke(state['messages'][-1].content))
100
+ return {'documents' : documents}
101
+
102
+ def chatbot(state : GraphState):
103
+ response = chain.invoke({'document': state['documents'], 'historical': format_historical(state['messages']), 'question' : state['messages'][-1].content})
104
+ return {"messages": [AIMessage(content=response)]}
105
+
106
+ workflow = StateGraph(GraphState)
107
+ workflow.add_node('retrieve', retrieve)
108
+ workflow.add_node('chatbot', chatbot)
109
+
110
+ workflow.add_edge(START, 'retrieve')
111
+ workflow.add_edge('retrieve','chatbot')
112
+ workflow.add_edge('chatbot', END)
113
+
114
+ app_chatbot = workflow.compile(checkpointer=memory)
115
+
116
+ @app.post('/request')
117
+ def request(req: Request):
118
+ config = {"configurable": {"thread_id": req.id}}
119
+ rep = app_chatbot.invoke({"messages": [HumanMessage(content=req.query)]},config, stream_mode="values")
120
+ return {"response":rep['messages'][-1].content}
requirements.txt ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ langchain
2
+ langchain-core
3
+ langchain-groq
4
+ langchain-huggingface
5
+ langchain-chroma
6
+ langchain_community
7
+ langgraph
8
+ python-dotenv
9
+ fastapi[all]