Spaces:
Sleeping
Sleeping
Added fourth prompt
Browse files- config/mapping_prompts.txt +8 -0
- config/prompts/prompt_dimanov_et_al.txt +668 -0
- data/outputs/output_dimanov_et_al.txt +1 -0
- execution.ipynb +210 -0
- notebooks/execution.ipynb +0 -210
config/mapping_prompts.txt
CHANGED
@@ -1,4 +1,12 @@
|
|
1 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
"sans_titre_1": {
|
3 |
"auteurs": "Groupe 2",
|
4 |
"path_rapport": "rapports/sans_titre_1.pdf",
|
|
|
1 |
{
|
2 |
+
"dimanov_et_al": {
|
3 |
+
"auteurs": "Dimanov, Girard, Barge, Cosic",
|
4 |
+
"path_rapport": "rapports/POC - Dimanov, Girard, Barge, Cosic.pdf",
|
5 |
+
"save_path":"data/outputs/output_dimanov_et_al.txt",
|
6 |
+
"path_prompt": "config/prompts/prompt_dimanov_et_al.txt",
|
7 |
+
"client": "openai-assistant",
|
8 |
+
"assistant" : "asst_KXcdK1yXRxNbNyD3Shf6TQjK"
|
9 |
+
},
|
10 |
"sans_titre_1": {
|
11 |
"auteurs": "Groupe 2",
|
12 |
"path_rapport": "rapports/sans_titre_1.pdf",
|
config/prompts/prompt_dimanov_et_al.txt
CHANGED
@@ -0,0 +1,668 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Je m’intéresse à la catégorisation des articles publiés par le journal Libération. Il en existe
|
2 |
+
huit qui sont identifiables car elles sont constituées d’éléments qui leurs sont spécifiques.
|
3 |
+
Voici les quatre premières catégories :
|
4 |
+
Pour appartenir à la catégorie “Tenez-moi informé”
|
5 |
+
, un article doit comporter les
|
6 |
+
éléments suivants :
|
7 |
+
●
|
8 |
+
Objectif d'informer simplement et rapidement : L'article vise à fournir une information
|
9 |
+
directe et claire sur une information. L'objectif est d'informer les lecteurs de manière
|
10 |
+
concise, en leur offrant les éléments clés de la situation. Utilisation de termes précis et
|
11 |
+
techniques liés à l’information. Présence éventuelle de chiffres et de statistiques pour
|
12 |
+
quantifier l’information.
|
13 |
+
●
|
14 |
+
Schéma "qui-quand-où-quoi-comment" : La structure est logique et hiérarchisée.
|
15 |
+
L'article suit un format classique d’actualité, en répondant aux questions essentielles :
|
16 |
+
Qui est concerné ? Quand cela se passe-t-il ? Où cela se déroule-t-il ? Que se passe-t-il
|
17 |
+
? Comment cela se passe-t-il ? Les informations les plus importantes viennent en
|
18 |
+
premier, et les détails suivent pour enrichir l’histoire.
|
19 |
+
●
|
20 |
+
Fait d'actualité récent voire urgent : L’article met à jour un événement en cours et fournit
|
21 |
+
des informations précises sur les conséquences immédiates pour les personnes
|
22 |
+
concernées. La mise à jour est continue : il situe l’événement dans le temps et donne
|
23 |
+
une idée de son évolution.
|
24 |
+
●
|
25 |
+
Ton factuel et objectif : l’article est neutre et factuel. L’objectif est de livrer les faits de
|
26 |
+
manière objective et de permettre au lecteur de comprendre rapidement ce qui se
|
27 |
+
passe. L’article peut contenir des citations directes de sources officielles pour renforcer
|
28 |
+
sa crédibilité et donner la parole aux premiers concernés. Aucune analyse approfondie
|
29 |
+
n’est faite ici, il s'agit uniquement de la diffusion d'informations vérifiées. Il ouvre la voie
|
30 |
+
à un suivi de l'actualité.
|
31 |
+
●
|
32 |
+
Style et sémantique : Une simplicité et de la concision : l’objectif principal est d’informer
|
33 |
+
sans entrer dans trop de détails complexes. L'article fournit un résumé rapide de
|
34 |
+
l'événement, sans digressions inutiles. Ce type d'article est souvent écrit dans un style
|
35 |
+
factuel et direct. L’accent est mis sur des mots qui décrivent l’événement de manière
|
36 |
+
factuelle. Ces termes permettent de communiquer rapidement l'essentiel de la situation
|
37 |
+
sans ambiguïté. Le style est direct et informatif. Le texte ne cherche pas à analyser ou à
|
38 |
+
commenter les faits, mais se contente de rapporter ce qui se passe de manière claire et
|
39 |
+
structurée. Les informations sont présentées sans jugement ou interprétation. Le style
|
40 |
+
est purement factuel, se concentrant sur la transmission d’informations brutes et
|
41 |
+
vérifiables.
|
42 |
+
●
|
43 |
+
Utilisation de sources fiables : L'article cite des sources officielles, garantissant la
|
44 |
+
crédibilité de l'information.
|
45 |
+
Pour appartenir à la catégorie “Impliquez-moi”
|
46 |
+
, un article doit comporter les éléments
|
47 |
+
suivants :
|
48 |
+
●
|
49 |
+
Observation des réactions : L'article recueille et présente une large gamme de critiques
|
50 |
+
venant de personnalités politiques, aussi bien de la gauche que de la droite. Cela
|
51 |
+
permet au lecteur de voir immédiatement les conséquences de l'événement (la
|
52 |
+
conférence de presse), notamment les différentes réactions exprimées sur les réseaux
|
53 |
+
sociaux et à la télévision. Cela met en lumière la dynamique qui se crée autour de
|
54 |
+
l'événement, avec des réactions divisées qui enrichissent la compréhension de l'impact
|
55 |
+
de la parole présidentielle.
|
56 |
+
●
|
57 |
+
Interactivité avec le public : L'usage des citations directes de personnalités politiques
|
58 |
+
(par exemple, Olivier Faure, Marine Tondelier, Jean-Paul Brighelli) et les références à
|
59 |
+
leurs messages sur les réseaux sociaux (notamment sur X, anciennement Twitter)
|
60 |
+
encouragent les lecteurs à se joindre à la conversation en ligne. L'article ne se limite
|
61 |
+
pas à une simple couverture d'événement, mais cherche à engager le public dans une
|
62 |
+
réflexion et une discussion sur les propos du président et les réponses qu'ils ont
|
63 |
+
générées.
|
64 |
+
●
|
65 |
+
Centré sur l’actualité et ses conséquences immédiates : L'article se concentre sur
|
66 |
+
l'instantanéité des événements, détaillant les réactions d'un large éventail de figures
|
67 |
+
politiques après la conférence de presse. C'est un genre qui s’intéresse moins à
|
68 |
+
l’analyse ou au décryptage profond de l'événement, mais plutôt à son impact immédiat
|
69 |
+
et à l'effervescence qu’il provoque.
|
70 |
+
●
|
71 |
+
Représentation de l'impact immédiat : L’accent est mis sur la réaction des personnes
|
72 |
+
face à un événement récent ou en cours, comme ici avec les critiques politiques après
|
73 |
+
la conférence de presse. Le but est d’observer et d'analyser comment les faits
|
74 |
+
déclenchent des conversations et des opinions au sein du public.
|
75 |
+
●
|
76 |
+
Multitude de perspectives et diversité des voix : Ce type d’article intègre souvent des
|
77 |
+
opinions variées, des citations et des prises de position de différentes sources, pour
|
78 |
+
donner une vision panoramique de la situation et pour inciter les lecteurs à se forger leur
|
79 |
+
propre opinion à partir de points de vue contrastés.
|
80 |
+
●
|
81 |
+
Incitation à l'engagement : L’article inclut souvent des éléments qui invitent les lecteurs
|
82 |
+
à s’engager dans la discussion, par exemple en suivant les réactions sur les réseaux
|
83 |
+
sociaux. Ici, de nombreuses citations sont tirées de messages publiés sur X, ce qui
|
84 |
+
incite à un engagement immédiat avec les acteurs politiques.
|
85 |
+
●
|
86 |
+
Simplicité et réactivité : Le style est généralement plus direct et moins académique que
|
87 |
+
celui des articles d’analyse. L'objectif n'est pas de présenter une analyse complexe mais
|
88 |
+
d’offrir une vue rapide et actuelle des opinions qui se forment autour de l'événement.
|
89 |
+
Cela se traduit souvent par un langage accessible et la mise en valeur de commentaires
|
90 |
+
percutants et souvent provocateurs, comme dans cet article où les opinions sont à la
|
91 |
+
fois colorées et critiques.
|
92 |
+
●
|
93 |
+
Sémantique et style de cette catégorie
|
94 |
+
-
|
95 |
+
Tons vifs et critiques : Le ton de l’article est souvent polémique, avec des qualificatifs
|
96 |
+
forts, comme "réactionnaire"
|
97 |
+
,
|
98 |
+
"ringard"
|
99 |
+
,
|
100 |
+
"bavardage"
|
101 |
+
,
|
102 |
+
"paternaliste"
|
103 |
+
, qui apportent un
|
104 |
+
jugement sur l’événement ou les personnes concernées. Le style est donc conçu
|
105 |
+
pour susciter des émotions et provoquer des réactions immédiates.
|
106 |
+
-
|
107 |
+
Utilisation de citations directes : La citation directe de personnalités publiques,
|
108 |
+
surtout sur les réseaux sociaux, est une marque caractéristique de cette catégorie.
|
109 |
+
Ces citations servent à ancrer l'article dans la réalité immédiate de l'événement, en
|
110 |
+
connectant le public avec les acteurs de l'actualité.
|
111 |
+
-
|
112 |
+
Rapidité et concision : Les articles de cette catégorie sont souvent plus courts et vont
|
113 |
+
droit au but. Ils sont construits autour de faits récents et les réactions immédiates
|
114 |
+
qu’ils génèrent, sans entrer dans des analyses approfondies. L'usage de la citation
|
115 |
+
ou de l'expression directe d’un sentiment personnel permet de résumer rapidement
|
116 |
+
une situation complexe.
|
117 |
+
-
|
118 |
+
L’aspect interactif : L'inclusion de réactions sur les réseaux sociaux, comme c'est le
|
119 |
+
cas ici avec les messages sur X, renforce le lien entre l’article et l’univers numérique
|
120 |
+
dans lequel ces échanges se produisent, invitant les lecteurs à suivre ou à participer
|
121 |
+
à la conversation en ligne.
|
122 |
+
Pour appartenir à la catégorie “Aidez-moi”
|
123 |
+
, un article doit comporter les éléments
|
124 |
+
suivants :
|
125 |
+
●
|
126 |
+
Objectif d’offrir des solutions pratiques : L'article est conçu pour aider les étudiants à
|
127 |
+
surmonter un problème récurrent : l’ennui alimentaire et la difficulté de cuisiner des
|
128 |
+
repas équilibrés à petit prix. Il propose une série de menus simples, variés et
|
129 |
+
économiques, spécialement adaptés aux contraintes des étudiants (budget limité,
|
130 |
+
espace réduit et matériel de cuisine minimal). Ce type de contenu vise à être utile et à
|
131 |
+
donner des solutions concrètes aux lecteurs.
|
132 |
+
●
|
133 |
+
Recettes faciles à réaliser : L'article présente une sélection de recettes faciles à réaliser
|
134 |
+
pour les étudiants, avec des ingrédients simples et peu coûteux, tout en proposant des
|
135 |
+
repas équilibrés. Il s'agit d'une série de menus comprenant une entrée, un plat et un
|
136 |
+
dessert pour 3 à 5 euros par personne, ce qui en fait une véritable ressource pratique
|
137 |
+
pour les étudiants.
|
138 |
+
●
|
139 |
+
Structure sous forme de listes : L'article suit un format éditorial typique de la catégorie
|
140 |
+
“aidez-moi” avec une présentation sous forme de listes à puces, où chaque menu est
|
141 |
+
clairement séparé, permettant une lecture rapide et un accès facile à l’information. Ces
|
142 |
+
listes permettent aux lecteurs de visualiser immédiatement les recettes proposées et de
|
143 |
+
les appliquer facilement dans leur propre cuisine.
|
144 |
+
●
|
145 |
+
Conseils pratiques et astuces : L’article mentionne également des conseils pratiques,
|
146 |
+
par exemple, il s’adapte aux espaces de cuisine réduits et ne nécessite que des
|
147 |
+
équipements de base. Il simplifie la tâche pour l’étudiant en indiquant des recettes qui
|
148 |
+
ne demandent pas des ingrédients introuvables ou du matériel sophistiqué. C’est une
|
149 |
+
approche typique d’un article de service qui cherche à être concret et accessible à tous.
|
150 |
+
●
|
151 |
+
Les articles de la catégorie “aidez-moi” sont caractérisés par plusieurs éléments
|
152 |
+
distinctifs :
|
153 |
+
-
|
154 |
+
Pratique et utile : L’objectif est de répondre à un besoin spécifique du lecteur en
|
155 |
+
offrant des solutions tangibles. Dans ce cas précis, l'article aide les étudiants à
|
156 |
+
préparer des repas variés et équilibrés à moindre coût.
|
157 |
+
-
|
158 |
+
Format facile à suivre : Souvent, ces articles sont structurés sous forme de listes (par
|
159 |
+
exemple, les menus du jour), de pas à pas ou de conseils clairs, permettant une
|
160 |
+
lecture rapide et l’application directe des informations. Dans cet article, les recettes
|
161 |
+
sont présentées sous forme de listes, ce qui est une caractéristique typique.
|
162 |
+
-
|
163 |
+
Accessibilité et simplicité : Les recettes proposées sont simples, les ingrédients sont
|
164 |
+
abordables et faciles à trouver, et le matériel nécessaire est limité aux éléments de
|
165 |
+
cuisine de base (couteau, poêle, casserole, etc.). Ce style de rédaction vise à ne pas
|
166 |
+
rebuter les lecteurs, en offrant des solutions à la fois simples et efficaces, souvent en
|
167 |
+
réponse à des besoins urgents ou des difficultés du quotidien.
|
168 |
+
-
|
169 |
+
Concrétisation des informations : Le texte n’est pas seulement théorique ; il donne
|
170 |
+
des exemples pratiques, comme des suggestions de menus précis (par exemple :
|
171 |
+
"Mozza frite, penne all’arrabiatta et tiramisu" ou "Rillettes de maquereaux,
|
172 |
+
Morteau-lentilles et gâteaux aux pommes à la poêle"). Ces exemples permettent au
|
173 |
+
lecteur de visualiser immédiatement ce qu’il peut préparer.
|
174 |
+
●
|
175 |
+
Sémantique et style spécifiques à cette catégorie. Le style et la sémantique des articles
|
176 |
+
de type “aidez-moi” sont orientés vers la simplicité et l’efficacité :
|
177 |
+
-
|
178 |
+
Simplicité et efficacité : Le vocabulaire utilisé est simple et direct, sans jargon
|
179 |
+
compliqué. L’accent est mis sur la praticité des recettes. Par exemple, des
|
180 |
+
expressions comme “simples à cuisiner”
|
181 |
+
,
|
182 |
+
“rapides à préparer”
|
183 |
+
, et “économiques”
|
184 |
+
illustrent cette volonté de rendre la cuisine accessible. Le ton est détendu et
|
185 |
+
encourageant, souvent avec une touche d'humour ou de proximité (par exemple, le
|
186 |
+
clin d'œil aux étudiants qui “ont rarement des cuisines de 15 mètres carrés”).
|
187 |
+
-
|
188 |
+
Accessibilité : Les ingrédients sont simples, souvent utilisés dans plusieurs menus
|
189 |
+
différents (pâtes, légumes de saison, fromages accessibles, etc.), ce qui donne
|
190 |
+
l’impression que les repas sont à la fois abordables et rapides à préparer. L'absence
|
191 |
+
d’ingrédients rares ou coûteux est un choix délibéré pour rendre la cuisine abordable
|
192 |
+
pour tous.
|
193 |
+
-
|
194 |
+
Encouragement et proximité : Le texte parle directement au lecteur en utilisant des
|
195 |
+
tournures engageantes, comme “Libération vous propose”
|
196 |
+
, et en évoquant des
|
197 |
+
situations que les étudiants connaissent bien, telles que “une cuisine de 15 mètres
|
198 |
+
carrés”
|
199 |
+
. Cela crée une proximité avec le lecteur et donne un côté rassurant et utile à
|
200 |
+
l'article.
|
201 |
+
-
|
202 |
+
Ton optimiste et positif : Le ton de l'article est motivant. Il cherche à convaincre le
|
203 |
+
lecteur que cuisiner des repas sains, équilibrés et peu coûteux peut être facile et
|
204 |
+
agréable, ce qui est un aspect essentiel du journalisme de service. Ce ton léger et
|
205 |
+
convivial est typique d'un article conçu pour être utile tout en restant plaisant à lire.
|
206 |
+
Pour appartenir à la catégorie “Connectez-moi”
|
207 |
+
, un article doit comporter les
|
208 |
+
éléments suivants :
|
209 |
+
●
|
210 |
+
Création d’un lien avec le public : L'article met en lumière l'initiative locale de
|
211 |
+
Mouans-Sartoux, une petite ville qui a adopté une approche durable pour son
|
212 |
+
alimentation. En partageant cette expérience avec les étudiants et les professionnels en
|
213 |
+
formation, l’article montre comment cette expérience pourrait être répliquée ailleurs,
|
214 |
+
suscitant ainsi un sentiment de solidarité et de partage d’idées. Les lecteurs sont invités
|
215 |
+
à s'identifier à cette action collective et à se sentir connectés à un mouvement plus
|
216 |
+
large, celui de l’alimentation durable.
|
217 |
+
●
|
218 |
+
Identification avec les étudiants et les acteurs locaux : L’article présente des étudiants
|
219 |
+
qui, par leur formation et leur engagement, participent à cette transformation alimentaire
|
220 |
+
dans différentes régions de France. Le texte favorise l’empathie du lecteur en racontant
|
221 |
+
les histoires personnelles de ces étudiants, comme Marion Boubel, qui travaille sur la
|
222 |
+
réduction du gaspillage alimentaire dans un autre territoire, ou Frédéric Haeftlen, qui
|
223 |
+
veut créer une ferme urbaine. Ces portraits individuels permettent au public de
|
224 |
+
s'identifier à ces personnes, et de percevoir que, malgré les difficultés, ils peuvent eux
|
225 |
+
aussi agir à leur échelle.
|
226 |
+
●
|
227 |
+
Promotion de l’action collective et de l’engagement : L’article ne se contente pas de
|
228 |
+
décrire une initiative, il fait également l’éloge de l’action concrète et du changement. En
|
229 |
+
détaillant les actions mises en place à Mouans-Sartoux, comme la gestion de la ferme
|
230 |
+
municipale ou la réduction du gaspillage alimentaire, l’article invite les lecteurs à
|
231 |
+
réfléchir à leur propre rôle dans la transformation durable. Cela contribue à créer un
|
232 |
+
sentiment d’appartenance à un mouvement plus grand, où chaque action locale
|
233 |
+
participe à un objectif global.
|
234 |
+
●
|
235 |
+
Caractéristiques de la catégorie "connectez-moi"
|
236 |
+
-
|
237 |
+
Récit humanisé et personnel : Les articles de cette catégorie mettent en avant des
|
238 |
+
histoires humaines, des récits de personnes ordinaires qui réalisent des actions
|
239 |
+
remarquables, permettant aux lecteurs de se projeter dans ces histoires et
|
240 |
+
d'éprouver un sentiment d’empathie. Dans cet article, les étudiants et les habitants
|
241 |
+
de Mouans-Sartoux sont des personnages centraux, et leurs histoires sont racontées
|
242 |
+
de manière à ce que le public puisse facilement s'y identifier.
|
243 |
+
-
|
244 |
+
Mise en avant des valeurs communes : La catégorie "connectez-moi" s'appuie sur
|
245 |
+
des valeurs communes ou des causes collectives, comme ici la transition alimentaire
|
246 |
+
durable. Ces valeurs sont partagées par les protagonistes de l’histoire, mais aussi
|
247 |
+
par les lecteurs, qui sont invités à réfléchir à leur propre contribution à ces causes.
|
248 |
+
L'article valorise l’action locale tout en mettant l’accent sur l’importance de la
|
249 |
+
collaboration et de l’engagement collectif.
|
250 |
+
-
|
251 |
+
Inspiration et motivation : L'objectif est de motiver les lecteurs à agir en leur montrant
|
252 |
+
que de petites initiatives locales peuvent avoir un impact significatif, et que chacun
|
253 |
+
peut faire une différence. L’article cherche à encourager le lecteur à s’investir dans la
|
254 |
+
transition écologique et alimentaire, en lui montrant des exemples concrets et
|
255 |
+
inspirants, tout en donnant des idées pratiques qu'il pourrait transposer à son propre
|
256 |
+
environnement.
|
257 |
+
-
|
258 |
+
Proximité et authenticité : Le ton utilisé est proche et accessible, visant à créer un
|
259 |
+
lien direct entre le lecteur et le sujet. Le texte raconte des faits réels, ce qui donne
|
260 |
+
une dimension authentique et crédible à l’histoire. Cette approche permet au public
|
261 |
+
de se sentir partie prenante du récit et du changement présenté.
|
262 |
+
●
|
263 |
+
Sémantique et style spécifiques à cette catégorie
|
264 |
+
-
|
265 |
+
Langage inspirant et inclusif : L’article emploie un vocabulaire simple mais riche de
|
266 |
+
sens, visant à motiver et à engager le lecteur. Par exemple, l’utilisation de termes
|
267 |
+
comme « modèle », « transition », « changement », « partage » ou « engagement »
|
268 |
+
crée un sentiment de possibilité collective. Ces mots encouragent l’identification et
|
269 |
+
l’action.
|
270 |
+
-
|
271 |
+
Ton empathique et proche : L’auteur s’adresse indirectement au lecteur en plaçant
|
272 |
+
les personnages au cœur de l’histoire. Il donne une voix aux étudiants et aux
|
273 |
+
habitants de Mouans-Sartoux, partageant leurs expériences personnelles et
|
274 |
+
professionnelles. Ce ton humanisé crée une atmosphère de solidarité et de
|
275 |
+
proximité, incitant les lecteurs à s'engager dans la même dynamique.
|
276 |
+
-
|
277 |
+
Célébration du local et de l’initiative : Un autre aspect clé de la sémantique de cet
|
278 |
+
article est de mettre en avant des initiatives locales comme des exemples à suivre,
|
279 |
+
ce qui donne un sentiment de fierté collective. Par la mise en lumière des actions
|
280 |
+
concrètes de Mouans-Sartoux et des projets menés par les étudiants, l'article incite à
|
281 |
+
voir dans ces pratiques locales un modèle pouvant être dupliqué ailleurs.
|
282 |
+
-
|
283 |
+
Narration d’expériences concrètes : L’article fait appel à des témoignages réels et à
|
284 |
+
des expériences vécues, ce qui rend le récit plus tangible et accessible. Par
|
285 |
+
exemple, en détaillant les efforts réalisés pour réduire le gaspillage alimentaire ou en
|
286 |
+
expliquant les actions pratiques entreprises par les étudiants dans leurs stages, le
|
287 |
+
texte montre concrètement comment ces initiatives peuvent avoir un impact
|
288 |
+
mesurable et positif sur le terrain.
|
289 |
+
Voici les quatre catégories suivantes
|
290 |
+
Pour appartenir à la catégorie “Donnez moi une perspective”
|
291 |
+
, un article doit
|
292 |
+
comporter les éléments suivants :
|
293 |
+
●
|
294 |
+
Confrontation de points de vue d’experts : L’article présente les opinions de deux
|
295 |
+
experts ayant des perspectives opposées sur la question de la notation scolaire. Pierre
|
296 |
+
Merle, sociologue, critique l'évaluation par note et propose des alternatives, tandis que
|
297 |
+
Jean-Paul Brighelli, professeur de lettres modernes, défend l'idée que les notes sont
|
298 |
+
nécessaires pour mesurer les difficultés des élèves. Cette confrontation permet au
|
299 |
+
lecteur d'accéder à divers points de vue et de se faire sa propre opinion sur le sujet.
|
300 |
+
●
|
301 |
+
Exploration d'un sujet complexe : La question de l'évaluation scolaire est un sujet
|
302 |
+
compliqué et controversé, avec des implications profondes pour l'enseignement et la
|
303 |
+
société. L'article propose une analyse approfondie de ce problème, en explorant les
|
304 |
+
avantages et les inconvénients des notes, ainsi que les conséquences de leur
|
305 |
+
suppression ou de leur réforme. Cela correspond bien à l'objectif de cette catégorie, qui
|
306 |
+
est d'expliquer des enjeux complexes et leur impact sur la société.
|
307 |
+
●
|
308 |
+
Mise en valeur des perspectives opposées : L'article met en lumière deux positions
|
309 |
+
contradictoires sur la question des notes. En confrontant les arguments pour et contre, il
|
310 |
+
aide le lecteur à comprendre les enjeux sous-jacents, notamment les problèmes liés à
|
311 |
+
l'inégalité scolaire et les débats sur la pertinence des notes comme système
|
312 |
+
d’évaluation. Le format du pour/contre permet une discussion équilibrée, où chaque
|
313 |
+
point de vue est exploré en profondeur.
|
314 |
+
●
|
315 |
+
Caractéristiques de la catégorie "donnez-moi une perspective"
|
316 |
+
-
|
317 |
+
Examen d’un sujet d’actualité complexe : Les articles de cette catégorie se
|
318 |
+
concentrent sur des sujets qui exigent une réflexion et une analyse approfondies,
|
319 |
+
souvent liés à des réformes sociales, politiques ou éducatives. Dans cet article, la
|
320 |
+
question de la réforme de l’évaluation scolaire touche à des problématiques
|
321 |
+
complexes comme les inégalités sociales, la pédagogie, et l'efficacité des systèmes
|
322 |
+
éducatifs. L'article aide à décortiquer ces questions en profondeur.
|
323 |
+
-
|
324 |
+
Confrontation des opinions d’experts : Un des aspects clés de cette catégorie est la
|
325 |
+
mise en lumière de différents points de vue d'experts ou de personnes ayant des
|
326 |
+
connaissances approfondies sur le sujet traité. Ici, les opinions de Pierre Merle et
|
327 |
+
Jean-Paul Brighelli permettent au lecteur de saisir les avantages et les limites de
|
328 |
+
chaque position. Le but est d’offrir au public un panorama complet des idées et des
|
329 |
+
arguments pour l’aider à se forger son propre avis.
|
330 |
+
-
|
331 |
+
Argumentation claire et structurée : Les articles de la catégorie "donnez-moi une
|
332 |
+
perspective" sont souvent bien structurés, avec des arguments bien développés pour
|
333 |
+
chaque position. L'article sur les notes à l'école alterne entre les interventions des
|
334 |
+
deux experts, donnant un aperçu détaillé de leurs opinions respectives. Le lecteur
|
335 |
+
peut ainsi suivre les arguments présentés de manière logique et cohérente, ce qui
|
336 |
+
l'aide à mieux comprendre les implications de chaque position.
|
337 |
+
-
|
338 |
+
Invitation à la réflexion : L'objectif de ces articles est de faire réfléchir le lecteur sur
|
339 |
+
des sujets d'actualité ou des problèmes sociétaux importants. En présentant les
|
340 |
+
différents points de vue sur les notes à l'école, cet article incite à une réflexion
|
341 |
+
critique sur la manière dont nous évaluons les élèves, sur les avantages et les
|
342 |
+
inconvénients des systèmes éducatifs actuels, et sur les conséquences d’une
|
343 |
+
réforme de ce type.
|
344 |
+
●
|
345 |
+
Sémantique et style spécifiques à cette catégorie
|
346 |
+
-
|
347 |
+
Vocabulaire technique et analytique : L'article utilise un vocabulaire précis et souvent
|
348 |
+
technique, lié aux problématiques éducatives. Des termes comme “évaluation par
|
349 |
+
compétences”
|
350 |
+
,
|
351 |
+
“biais sociaux de notation”
|
352 |
+
,
|
353 |
+
“décrochage scolaire” ou “hiérarchie des
|
354 |
+
élèves” sont utilisés pour structurer l'analyse. Ce vocabulaire permet d’illustrer des
|
355 |
+
concepts complexes et de renforcer la crédibilité des arguments présentés par les
|
356 |
+
experts.
|
357 |
+
-
|
358 |
+
Ton argumentatif et factuel : Le style est objectif et factuel, avec un ton souvent plus
|
359 |
+
formel que celui des articles orientés vers le grand public. Les experts sont invités à
|
360 |
+
s'exprimer de manière détaillée et argumentée. Le texte cherche avant tout à
|
361 |
+
convaincre par la force des arguments, en exposant clairement les avantages et les
|
362 |
+
inconvénients de chaque position.
|
363 |
+
-
|
364 |
+
Présence de témoignages et d’exemples : Bien que l'article soit analytique et
|
365 |
+
argumentatif, il s'appuie également sur des exemples concrets et des témoignages
|
366 |
+
pour illustrer les points de vue des experts. Par exemple, l’exemple de la Finlande et
|
367 |
+
des comparaisons avec d'autres systèmes éducatifs servent à appuyer les
|
368 |
+
arguments de Pierre Merle et Jean-Paul Brighelli. Ces exemples visent à rendre
|
369 |
+
l’analyse plus compréhensible et à donner du poids aux arguments.
|
370 |
+
-
|
371 |
+
Structure du débat : L'article suit une structure claire, divisée entre les opinions de
|
372 |
+
chaque expert. Cette structure bipartite permet au lecteur de voir directement les
|
373 |
+
arguments pour et contre la question, ce qui facilite la compréhension des enjeux. Ce
|
374 |
+
format est caractéristique des articles de type “donnez-moi une perspective”
|
375 |
+
, où
|
376 |
+
l'objectif est de présenter des points de vue opposés sur une question donnée.
|
377 |
+
Pour appartenir à la catégorie “Expliquez moi”
|
378 |
+
, un article doit comporter les éléments
|
379 |
+
suivants :
|
380 |
+
●
|
381 |
+
Approfondissement des connaissances sur un sujet complexe : L’article cherche avant
|
382 |
+
tout à expliquer les tenants et aboutissants de l’initiative de Donald Trump. Il va au-delà
|
383 |
+
de l’actualité immédiate en détaillant l’histoire du département de l’Éducation, son rôle,
|
384 |
+
et le contexte historique des attaques des conservateurs contre cette agence. Il
|
385 |
+
décompose le sujet en éléments essentiels et permet au lecteur de comprendre non
|
386 |
+
seulement les événements récents, mais aussi les enjeux de fond liés à l’éducation aux
|
387 |
+
États-Unis et les répercussions possibles d’une telle décision.
|
388 |
+
●
|
389 |
+
Démystification et clarification : L'article décompose le démantèlement du département
|
390 |
+
de l’Éducation en plusieurs questions essentielles, comme : « Quel est le rôle du
|
391 |
+
département de l’Éducation ? », « Pourquoi Trump mène cette offensive ? », et « Peut-il
|
392 |
+
le faire légalement ? ». Ce format, sous forme de questions-réponses et d’explications
|
393 |
+
détaillées, permet au lecteur de mieux saisir les implications de l'action de Trump et de
|
394 |
+
comprendre la portée de cette décision dans un contexte plus large.
|
395 |
+
●
|
396 |
+
Exploration des enjeux politiques et sociaux : L'article offre également une analyse des
|
397 |
+
motifs politiques derrière cette décision et des impacts potentiels sur la société,
|
398 |
+
notamment les inégalités éducatives. Il met en lumière l'opposition au sein du pays et
|
399 |
+
les critiques venant de l'Union nationale des parents d’élèves. En discutant de la légalité
|
400 |
+
de la démarche de Trump, il permet au lecteur de comprendre les risques juridiques et
|
401 |
+
constitutionnels liés à ce type de réforme, ce qui enrichit l’analyse du sujet.
|
402 |
+
●
|
403 |
+
Les caractéristiques de la catégorie "expliquez-moi"
|
404 |
+
-
|
405 |
+
Décomposition du sujet en éléments essentiels : Les articles de cette catégorie
|
406 |
+
cherchent à expliquer des sujets complexes en les découpant en éléments simples
|
407 |
+
et compréhensibles. Dans cet article, chaque section aborde un aspect clé du sujet
|
408 |
+
(rôle du département, historique des attaques, enjeux politiques, etc.), ce qui aide à
|
409 |
+
clarifier un sujet complexe pour le lecteur.
|
410 |
+
-
|
411 |
+
Objectif pédagogique : L’objectif principal de ce type d’article est d’informer le lecteur
|
412 |
+
tout en éveillant sa curiosité sur un sujet précis. L’article de Libération fait ici un
|
413 |
+
travail pédagogique en expliquant les implications d’une réforme du système éducatif
|
414 |
+
américain, et en clarifiant des points tels que la légalité de la décision de Trump et
|
415 |
+
les raisons derrière cette volonté politique.
|
416 |
+
-
|
417 |
+
Utilisation de questions/réponses ou de formats explicatifs : La structure de l’article,
|
418 |
+
qui alterne entre questions-réponses et explications, est caractéristique de cette
|
419 |
+
catégorie. Cela permet de structurer l’information de manière logique et fluide, tout
|
420 |
+
en permettant au lecteur de trouver facilement les réponses à ses interrogations sur
|
421 |
+
un sujet d'actualité.
|
422 |
+
-
|
423 |
+
Recherche de longue durée : Ce genre d’article a souvent une durée de vie longue et
|
424 |
+
une valeur informative pérenne, car il explique un sujet qui peut continuer à être
|
425 |
+
pertinent bien après sa publication. L’article sur la suppression du département de
|
426 |
+
l’Éducation pourrait être consulté à l'avenir par ceux qui cherchent à comprendre
|
427 |
+
l’évolution de la politique éducative américaine ou les initiatives de Trump.
|
428 |
+
-
|
429 |
+
Mise en contexte et analyse historique : Un article de type "expliquez-moi" va
|
430 |
+
souvent mettre en perspective l’actualité avec des éléments historiques ou
|
431 |
+
contextuels, comme cela est fait ici avec les critiques de l'agence depuis sa création
|
432 |
+
en 1979 et l’opposition constante des conservateurs américains. Cette analyse
|
433 |
+
permet d’enrichir la compréhension du sujet et de montrer que l’actualité n’est pas
|
434 |
+
simplement un fait isolé, mais qu’elle s’inscrit dans un contexte plus large.
|
435 |
+
●
|
436 |
+
Sémantique et style spécifiques à cette catégorie
|
437 |
+
-
|
438 |
+
Langage clair et accessible : Le vocabulaire utilisé dans cet article est accessible,
|
439 |
+
même pour un lecteur qui n’est pas expert en politique américaine ou en systèmes
|
440 |
+
éducatifs. Bien que le sujet soit complexe, le langage est précis mais simple,
|
441 |
+
permettant à tout type de lecteur de comprendre les enjeux sans se perdre dans des
|
442 |
+
détails techniques ou des jargons.
|
443 |
+
-
|
444 |
+
Style explicatif et descriptif : Le style de l’article est explicatif, il s’efforce de décrire
|
445 |
+
les événements et les contextes de manière neutre, sans jugement. Le but est
|
446 |
+
d’éclairer le lecteur sur un sujet d’actualité en offrant des explications détaillées,
|
447 |
+
comme le rôle du département de l’Éducation, son budget, ou encore les critiques
|
448 |
+
qui lui sont faites. Le ton est factuel, donnant des informations précises sans
|
449 |
+
interférence subjective.
|
450 |
+
-
|
451 |
+
Présence d'exemples et de données : L'article se base sur des données chiffrées
|
452 |
+
pour appuyer ses propos, comme le budget du département de l’Éducation en 2024
|
453 |
+
(238 milliards de dollars), ou les dépenses du département représentant environ 14
|
454 |
+
% du financement des écoles publiques. Ces éléments factuels servent à ancrer
|
455 |
+
l’analyse dans la réalité et à rendre l’information plus crédible.
|
456 |
+
-
|
457 |
+
Approche analytique : L’article prend soin d'analyser les motifs politiques, les
|
458 |
+
conséquences potentielles et les réactions à cette décision, en prenant le temps de
|
459 |
+
discuter des implications sociales et juridiques. L’objectif est de fournir une vision
|
460 |
+
globale du sujet afin que le lecteur puisse appréhender l’ampleur des enjeux et des
|
461 |
+
répercussions de cette décision.
|
462 |
+
Pour appartenir à la catégorie “Divertissez-moi”
|
463 |
+
, un article doit comporter les
|
464 |
+
éléments suivants :
|
465 |
+
●
|
466 |
+
Approche légère et divertissante : L'article ne se concentre pas sur des informations
|
467 |
+
graves ou des analyses profondes, mais sur un phénomène spectaculaire et
|
468 |
+
visuellement captivant, l’éclipse lunaire. Il utilise des termes comme « récap’imagé »
|
469 |
+
pour donner une tonalité plus décontractée et accessible au lecteur, invitant à une
|
470 |
+
expérience légère et agréable. Il sert à divertir tout en informant, ce qui est un trait
|
471 |
+
central de cette catégorie.
|
472 |
+
●
|
473 |
+
Événement spectaculaire avec une approche visuelle : L'article se concentre sur un
|
474 |
+
événement fascinant, l’éclipse lunaire, et sur ses images spectaculaires, mais sans
|
475 |
+
entrer trop profondément dans les aspects techniques ou scientifiques. Il s'agit ici de
|
476 |
+
faire découvrir un phénomène céleste d'une manière attrayante, sans alourdir le
|
477 |
+
contenu avec des détails trop complexes. Le format visuel (référence à des photos ou
|
478 |
+
des images spectaculaires) évoque des galeries de photos ou des diaporamas, souvent
|
479 |
+
utilisés dans les articles de cette catégorie pour captiver l'attention du lecteur tout en
|
480 |
+
offrant une expérience plus sensorielle.
|
481 |
+
●
|
482 |
+
Interruption du flux d'actualités plus lourdes : En pleine période d'actualités souvent
|
483 |
+
graves ou sérieuses, l'article offre une pause rafraîchissante, un moyen pour le lecteur
|
484 |
+
de se détacher des informations lourdes en s'intéressant à un événement spectaculaire,
|
485 |
+
mais sans gravité. Ce phénomène naturel devient l’occasion d’une rupture avec
|
486 |
+
l'actualité plus pesante.
|
487 |
+
●
|
488 |
+
Ton informatif mais accessible : Le ton est informatif sans être trop dense. L'article offre
|
489 |
+
des explications simples et compréhensibles sur l’éclipse lunaire, sans chercher à
|
490 |
+
imposer des détails techniques. Le style est conçu pour être accessible à tous, même à
|
491 |
+
ceux qui n’ont pas de connaissances en astronomie. Ce type de contenu vise à être
|
492 |
+
léger et divertissant, tout en restant informatif.
|
493 |
+
●
|
494 |
+
Invitation à l’émerveillement et à l'évasion : L’article invite à l’émerveillement, à observer
|
495 |
+
un phénomène unique, tout en restant sur un ton simple et accueillant. Il présente des
|
496 |
+
informations pratiques sur l’éclipse, mais sans en faire un sujet trop lourd ou complexe.
|
497 |
+
C’est un contenu qui fait appel à l’admiration, et qui fait plaisir à lire, un des objectifs de
|
498 |
+
la catégorie "divertissez-moi"
|
499 |
+
.
|
500 |
+
●
|
501 |
+
Les caractéristiques de la catégorie "divertissez-moi"
|
502 |
+
-
|
503 |
+
Perspective légère et agréable : Les articles de cette catégorie cherchent à offrir une
|
504 |
+
pause dans le flot d’informations sérieuses ou pesantes, en mettant en avant des
|
505 |
+
sujets légers mais intéressants. Il s'agit de divertirtout en informant, mais sans entrer
|
506 |
+
trop profondément dans les complexités. L’objectif est d'attirer l'attention du lecteur
|
507 |
+
sur des sujets qui provoquent de l’émerveillement ou de la curiosité.
|
508 |
+
-
|
509 |
+
Accessibilité et simplicité : Le ton est décontracté et accessible, avec des
|
510 |
+
explications claires et simples. Les termes sont familier et conviviaux, ce qui permet
|
511 |
+
de toucher un large public. C'est un contenu facile à lire, sans jargon compliqué,
|
512 |
+
conçu pour être compris rapidement et agréablement.
|
513 |
+
-
|
514 |
+
Utilisation de formats visuels : L’article pourrait inclure des galeries de photos, des
|
515 |
+
diaporamas, ou même des vidéos. Dans ce cas, la mention de « récap’imagé » fait
|
516 |
+
allusion à un contenu qui, bien que principalement textuel, se concentre sur la
|
517 |
+
visualité du phénomène, et pourrait être enrichi d’images spectaculaires. Cela
|
518 |
+
renforce l’aspect visuel et engageant du contenu.
|
519 |
+
-
|
520 |
+
Interruption de l’actualité lourde : Un des objectifs principaux de cette catégorie est
|
521 |
+
de briser la monotonie de l’actualité sérieuse, souvent en proposant un contenu plus
|
522 |
+
léger ou plus agréable à lire. L’éclipse lunaire, bien que scientifique, devient un sujet
|
523 |
+
qui permet de s'évader, et de sortir temporairement du cadre de l'actualité lourde,
|
524 |
+
qu’elle soit politique, sociale ou économique.
|
525 |
+
-
|
526 |
+
Émerveillement et fascination : L’article met l'accent sur l’émerveillement provoqué
|
527 |
+
par l’éclipse lunaire. Les informations sont données sous forme de faits intéressants,
|
528 |
+
comme l'alignement des astres ou la couleur rouge de la Lune, pour capturer
|
529 |
+
l’attention et susciter la curiosité sans chercher à forcer une analyse profonde.
|
530 |
+
●
|
531 |
+
Sémantique et style spécifiques à cette catégorie
|
532 |
+
-
|
533 |
+
Ton informel et décontracté : L'article utilise un ton familier et ludique, avec des
|
534 |
+
expressions comme "pas de panique" et "réac’imagé" pour inviter à une expérience
|
535 |
+
de lecture détendue. Ce style vise à rendre le contenu accessible et agréable à lire,
|
536 |
+
même pour des lecteurs qui ne sont pas spécialisés dans le domaine.
|
537 |
+
-
|
538 |
+
Vocabulaire simple et visuel : Le vocabulaire est simple et direct, et l'accent est mis
|
539 |
+
sur la visualité du phénomène (par exemple,
|
540 |
+
"la lune qui a viré au rouge"
|
541 |
+
,
|
542 |
+
"images
|
543 |
+
spectaculaires"). Le style cherche à capturer l’imagination du lecteur et à rendre le
|
544 |
+
contenu aussi visuel et sensoriel que possible, tout en restant compréhensible.
|
545 |
+
-
|
546 |
+
Engagement par la curiosité : L’article suscite la curiosité en offrant des détails
|
547 |
+
fascinants, comme la description du phénomène, sans se perdre dans des
|
548 |
+
explications scientifiques trop lourdes. Il parle de l’éclipse comme d’un spectacle
|
549 |
+
céleste et invite le lecteur à l’admirer, plutôt que de se concentrer sur des analyses
|
550 |
+
ou des interprétations complexes.
|
551 |
+
-
|
552 |
+
Ton optimiste et encourageant : Le ton reste toujours optimiste et encourageant,
|
553 |
+
avec un contenu qui ne fait pas de l’information lourde un poids, mais une chance de
|
554 |
+
s’émerveiller (par exemple,
|
555 |
+
"Pas de panique, une nouvelle éclipse est à venir"). Ce
|
556 |
+
ton engageant fait partie de l'approche de l’article, qui veut attirer l’attention sur des
|
557 |
+
événements célestes extraordinaires sans stress ni complexité.
|
558 |
+
Pour appartenir à la catégorie “Inspirez-moi”
|
559 |
+
, un article doit comporter les éléments
|
560 |
+
suivants:
|
561 |
+
●
|
562 |
+
Mise en lumière d'un individu remarquable : L'article se concentre sur un personnage
|
563 |
+
singulier, Daniel Gros, un ancien CPE et représentant de la Ligue des droits de l'homme
|
564 |
+
(LDH) à Mayotte. À travers sa carrière et son engagement personnel, cet article met en
|
565 |
+
avant une personne qui se distingue par son humanisme, son désir d’aider les plus
|
566 |
+
vulnérables (les immigrés, les demandeurs d'asile), et son engagement contre
|
567 |
+
l'injustice. Ce type de portrait humain est central dans la catégorie "inspirez-moi"
|
568 |
+
, car il
|
569 |
+
incite à réfléchir à ce que chaque individu peut accomplir pour améliorer la société.
|
570 |
+
●
|
571 |
+
Actions inspirantes : Daniel Gros mène des actions concrètes et souvent difficiles : il
|
572 |
+
aide des étrangers en situation irrégulière, se bat pour leurs droits dans un
|
573 |
+
environnement hostile, et dénonce publiquement des injustices, comme le droit du sol à
|
574 |
+
Mayotte ou la gestion des crises humanitaires. Son engagement envers les personnes
|
575 |
+
marginalisées et son implication dans des causes sociales sont des éléments typiques
|
576 |
+
de cette catégorie, où l'accent est mis sur des actions qui apportent une réelle
|
577 |
+
différence.
|
578 |
+
●
|
579 |
+
Thème de la responsabilité sociale et humaine : L'article ne se contente pas de décrire
|
580 |
+
les actions de Daniel Gros, mais il invite également le lecteur à réfléchir sur les
|
581 |
+
questions sociales et éthiques liées à l'immigration, aux inégalités sociales et à la
|
582 |
+
défense des droits humains. L'accent est mis sur la responsabilité sociale de l'individu
|
583 |
+
face aux injustices, et cet engagement est présenté comme un exemple à suivre.
|
584 |
+
●
|
585 |
+
Portrait qui inspire à la réflexion et à l'action : Le choix de décrire un homme de 74 ans,
|
586 |
+
qui continue à se battre pour une cause juste malgré les difficultés physiques et
|
587 |
+
psychologiques, encourage une réflexion personnelle sur l'engagement, le sens de la
|
588 |
+
vie et la volonté de lutter contre l'injustice. L'article suggère que, même à un âge
|
589 |
+
avancé, l'action est possible et que le sens de l'engagement n'a pas de limite. Cela
|
590 |
+
invite le lecteur à se demander ce qu’il pourrait faire pour contribuer positivement à la
|
591 |
+
société, en particulier face aux injustices.
|
592 |
+
●
|
593 |
+
Exemple de “journalisme de solutions” : L'article propose des exemples concrets de
|
594 |
+
solutions ou de réponses face aux problèmes sociaux, notamment la manière dont
|
595 |
+
Daniel Gros aide les personnes vulnérables. Il s'agit moins de se concentrer sur le
|
596 |
+
problème que sur la manière dont un individu peut y répondre, ce qui est l’essence
|
597 |
+
même du "journalisme de solutions"
|
598 |
+
. L'article présente un individu qui, au lieu de se
|
599 |
+
contenter de dénoncer des injustices, agit activement pour les combattre.
|
600 |
+
●
|
601 |
+
Les caractéristiques spécifiques de la catégorie “inspirez-moi”
|
602 |
+
-
|
603 |
+
Portraits de personnages inspirants : Cette catégorie se concentre sur des individus
|
604 |
+
dont les actions ou le parcours sont exemplaires. Ces personnes sont souvent
|
605 |
+
caractérisées par une forte motivation personnelle, une éthique de travail et une lutte
|
606 |
+
pour des causes importantes. Leur histoire est racontée de manière à inciter le
|
607 |
+
lecteur à s'interroger sur sa propre vie et son propre engagement.
|
608 |
+
-
|
609 |
+
Optimisme et engagement social : Les articles de cette catégorie présentent un ton
|
610 |
+
positif, même si les défis auxquels les protagonistes sont confrontés sont grands.
|
611 |
+
L'idée est d'inspirer le lecteur en mettant en avant des personnes qui ne se laissent
|
612 |
+
pas abattre par les difficultés et qui continuent de se battre pour un monde meilleur.
|
613 |
+
L’engagement de Daniel Gros, même dans un contexte difficile, montre l'importance
|
614 |
+
de la persévérance.
|
615 |
+
-
|
616 |
+
Récits axés sur des actions et des solutions : Contrairement à des articles plus
|
617 |
+
critiques qui mettent en avant les problèmes sans nécessairement offrir de réponses,
|
618 |
+
cette catégorie de récits se concentre sur les actions concrètes, les solutions
|
619 |
+
apportées par les individus et la manière dont ces actions peuvent inspirer un
|
620 |
+
changement. Le parcours de Daniel Gros, de son rôle de CPE à son engagement
|
621 |
+
humanitaire, illustre parfaitement cette approche.
|
622 |
+
-
|
623 |
+
Dimension sociale et humaine forte : Les sujets traités dans cette catégorie sont
|
624 |
+
souvent des histoires qui ont une forte dimension humaine et qui interrogent la place
|
625 |
+
de l’individu dans la société. L'accent est mis sur des sujets qui touchent à la
|
626 |
+
condition humaine, aux inégalités et à la solidarité. Cet article, qui présente Daniel
|
627 |
+
Gros comme un défenseur des droits des étrangers, aborde des questions liées à
|
628 |
+
l'immigration, à la justice sociale et à la dignité humaine.
|
629 |
+
●
|
630 |
+
Sémantique et style spécifiques à cette catégorie
|
631 |
+
-
|
632 |
+
Ton humain et empathique : Le style de l’article est chaleureux, empathique et
|
633 |
+
respectueux. Il cherche à établir une connexion émotionnelle avec le lecteur en
|
634 |
+
montrant la dévotion et le sacrifice personnel de Daniel Gros. Les descriptions
|
635 |
+
détaillées de sa vie et de ses actions visent à montrer sa bienveillance et son
|
636 |
+
engagement authentique.
|
637 |
+
-
|
638 |
+
Langage inspirant : Le vocabulaire utilisé dans cet article est choisi pour valoriser
|
639 |
+
l'engagement de l’individu et pour souligner son caractère exceptionnel sans pour
|
640 |
+
autant le mettre sur un piédestal. Les termes comme "révolté"
|
641 |
+
,
|
642 |
+
"blessé par
|
643 |
+
l’injustice"
|
644 |
+
,
|
645 |
+
"aime les gens"
|
646 |
+
, ou encore "se battre" illustrent une volonté d'expliquer
|
647 |
+
les motivations profondes de l'individu. Cela renforce l'idée qu'il est un exemple à
|
648 |
+
suivre, tout en restant profondément humain.
|
649 |
+
-
|
650 |
+
Narration fluide et humaine : L’article adopte un récit fluide et détaillé, nous plongeant
|
651 |
+
dans le quotidien de Daniel Gros et dans son parcours. L’écriture fait souvent appel à
|
652 |
+
des anecdotes personnelles et à des citations directes du protagoniste pour créer
|
653 |
+
une atmosphère proche et accessible, qui permet au lecteur de mieux comprendre et
|
654 |
+
d'apprécier l'engagement de cet homme.
|
655 |
+
-
|
656 |
+
Mise en valeur de l’humilité : L'article met aussi l'accent sur l'humilité de Daniel Gros,
|
657 |
+
qui ne cherche pas la gloire mais agit pour une cause juste, souvent avec des
|
658 |
+
moyens modestes. Ce style présente un anti-héros qui se bat pour la justice sociale
|
659 |
+
sans attendre de récompenses ou de reconnaissance.
|
660 |
+
Voilà, tu as les indications nécessaires pour catégoriser chaque article de Libération dans
|
661 |
+
l’une des catégories de la boussole. Tu es donc en mesure de justifier ton choix.
|
662 |
+
|
663 |
+
|
664 |
+
EXAMPLE JSON OUTPUT:
|
665 |
+
{
|
666 |
+
"categorie_principale": "Inspirez-moi",
|
667 |
+
"categorie_secondaire": "Impliquez-moi, Donnez-moi une perspective"
|
668 |
+
}
|
data/outputs/output_dimanov_et_al.txt
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
[{"item_id": "I4OEKQ6MHRBP3LQVVYDDXW6T6U", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi, Donnez-moi une perspective"}, {"item_id": "LVA4MZBQOBECNPZD323NV6O7K4", "categorie_principale": "Expliquez-moi", "categorie_secondaire": "Inspirez-moi, Impliquez-moi"}, {"item_id": "4FAEHUUZ5ZFAJKLFEV2LT5CBAQ", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Donnez-moi une perspective"}, {"item_id": "4S4G6BKFRNER3LB22CLPAEWWKY", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Donnez-moi une perspective"}, {"item_id": "ZAFHRNAHJVC6THXRSBMCB4A24I", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Connectez-moi"}, {"item_id": "ESEADAHDJVGQRC2S3JHSZEVWHM", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi"}, {"item_id": "FZHZS32EOZG5FAK7IKOJIB3J4I", "categorie_principale": "Divertissez-moi", "categorie_secondaire": "Donnez-moi une perspective, Expliquez moi"}, {"item_id": "H4JJGHBTL5DDFNNNETBE5T7FLI", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi"}, {"item_id": "JTND25UK2NA6HL2DVJRX46VCVM", "categorie_principale": "Expliquez-moi", "categorie_secondaire": "Inspirez-moi, Impliquez-moi"}, {"item_id": "LFRXBXICUFFULNKZUG4JN4E2NY", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Connectez-moi, Divertissez-moi"}, {"item_id": "O5546IGISVGOLAPLOUIXAHXATE", "categorie_principale": "Donnez moi une perspective", "categorie_secondaire": "Expliquez moi"}, {"item_id": "5LRGJN3CONBZ3OIGARTGZX7X34", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Connectez-moi"}, {"item_id": "A2CXALUPDVHDZP22PBL4YMMGVU", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Connectez-moi, Divertissez-moi"}, {"item_id": "6T5ESGV6CNFA5L3TIEO475EO2I", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Aidez-moi"}, {"item_id": "KGJGC5V6OJCJJEVO4D3MP5QA4Q", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Impliquez-moi, Expliquez-moi"}, {"item_id": "ASBHDD73HZANDM5W3WRKXGCCGI", "categorie_principale": "Divertissez-moi", "categorie_secondaire": "Inspirez-moi"}, {"item_id": "YL7UVGJLQZALVK5PCV2LZLPTDQ", "categorie_principale": "Divertissez-moi", "categorie_secondaire": "Inspirez-moi, Connectez-moi"}, {"item_id": "2T6XZA7OHRD6RFCGPA3ZVCNJ7A", "categorie_principale": "Expliquez-moi", "categorie_secondaire": "Donnez-moi une perspective, Inspirez-moi"}, {"item_id": "V3THEIGVXBDADLDXUKJZTRLLUQ", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi, Donnez-moi une perspective"}, {"item_id": "Z3WQ6BXPKRATPCGSKMROOOMQ44", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi, Expliquez-moi"}, {"item_id": "TUR55MJTKRA7TNJOOP62XW7NIM", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Donnez-moi une perspective"}, {"item_id": "YGI5VTCGIJFDNOA5C4G5BOITH4", "categorie_principale": "Expliquez moi", "categorie_secondaire": "Donnez-moi une perspective"}, {"item_id": "S2FVMMUVK5BS3HK5YN7PNU2LZE", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9"}, {"item_id": "ZASS6FXGGVGCHFSSZKZXQ4AG2U", "categorie_principale": "Divertissez-moi", "categorie_secondaire": "Expliquez-moi"}, {"item_id": "2AZTSRRBUNBHNNHU5DCMRGG6WY", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Impliquez-moi, Expliquez-moi"}, {"item_id": "AKDZ7PAIQVBN5OENKR5AQ6YGNI", "categorie_principale": "Divertissez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9"}, {"item_id": "M4RJIWTMK5BVPAWNFEHGXZSLRY", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Divertissez-moi, Connectez-moi"}, {"item_id": "WLTP7ZAZ7JFUDJG2LNO5E7APZA", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Expliquez-moi, Impliquez-moi"}, {"item_id": "DCY4O24FUBAZZB3KOTIMMBA6MY", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Donnez-moi une perspective, Connectez-moi"}, {"item_id": "FHFB7Z3XYBH25LO7XDGHAEQ7N4", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi"}, {"item_id": "BPNRZFZPAVA3HPUOXUKXEUR5RY", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Expliquez-moi, Impliquez-moi"}, {"item_id": "NWGRYEOIQ5ADRDRXYZCU5C3VDA", "categorie_principale": "Connectez-moi", "categorie_secondaire": "Impliquez-moi, Inspirez-moi"}, {"item_id": "GORDMTE47FA5FEUA3U76M5VPOY", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Expliquez moi, Impliquez-moi"}, {"item_id": "XFBX7NDGN5CMPL3OU5ZXFF6YCE", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi, Connectez-moi"}, {"item_id": "VYEPVCBK4ZCV7D3SW35GZ2Y5DM", "categorie_principale": "Connectez-moi", "categorie_secondaire": "Inspirez-moi, Expliquez moi"}, {"item_id": "F5TBC6SGHRGRFJGZXZYG73I2C4", "categorie_principale": "Expliquez moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Donnez moi une perspective"}, {"item_id": "ZFZG6QOFBRFE3BL4VCI72HFQKQ", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Donnez-moi une perspective, Connectez-moi"}, {"item_id": "ZGPFATVT4ZFJZMX7LDXE3VS7RM", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Donnez-moi une perspective, Connectez-moi"}, {"item_id": "UBVFCLZ6OZCP5DAAYCBW2CDPJI", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Connectez-moi, Expliquez-moi"}, {"item_id": "WYEBGIAY5JAUFLB4GH6IXVYP34", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi, Donnez-moi une perspective"}, {"item_id": "DXW7WX7ALVFBZNPFU6QKHEH3G4", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi, Donnez-moi une perspective"}, {"item_id": "QOFNZRU2TVES7GMVVPMZ5LSI2E", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Divertissez-moi, Connectez-moi"}, {"item_id": "WBJI7FFINZHCPC5QZL2NFY6XWE", "categorie_principale": "Divertissez-moi", "categorie_secondaire": "Inspirez-moi, Donnez-moi une perspective"}, {"item_id": "IYAAHFU3PVFOPAN6XIJDPQ5XLQ", "categorie_principale": "Connectez-moi", "categorie_secondaire": "Impliquez-moi, Expliquez moi"}, {"item_id": "SNYUYV4G5BAODBTQWJBRG5JZKM", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Tenez-moi inform\u00e9, Expliquez-moi"}, {"item_id": "PMBTTRISTNDN3P3ANDECQKSEDE", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Expliquez-moi"}, {"item_id": "UHYPJFKFJNHVPHVRFV7OHNDU64", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Expliquez-moi, Impliquez-moi"}, {"item_id": "ESRPEZYCA5AG7HIXUIVMPHDFVQ", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Expliquez-moi, Impliquez-moi"}, {"item_id": "HQW7TUOY7NHUVMCLNSDSEY5X4I", "categorie_principale": "Expliquez-moi", "categorie_secondaire": "Connectez-moi, Donnez-moi une perspective"}, {"item_id": "C3BA2XUBXRG5RBNHJUSDUKP4RI", "categorie_principale": "Divertissez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9"}, {"item_id": "RYGHZSLANZG6VAECBX5E4URWGA", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi, Expliquez-moi"}, {"item_id": "XE4JJOEEW5GEFGHCWRUDZQQNEI", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Connectez-moi"}, {"item_id": "MLOY6OAMK5DIXP7DU4JADUI6PY", "categorie_principale": "Connectez-moi", "categorie_secondaire": "Impliquez-moi, Inspirez-moi"}, {"item_id": "QV4QOZLJARAEFBLHAPKTZ5COZY", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Donnez-moi une perspective"}, {"item_id": "FH2X2NGD3JD3JIHPF2NLRFDXYA", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Expliquez-moi, Donnez-moi une perspective"}, {"item_id": "LJK5Z4OCR5GPJPJIKO6WDNXIZM", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Connectez-moi, Donnez-moi une perspective"}, {"item_id": "SGOURM7YXJFN7A6PMD5QGXEOCM", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Impliquez-moi, Expliquez-moi"}, {"item_id": "243MVH3PQFDKVEMG3AZRXQPXU4", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Donnez-moi une perspective"}, {"item_id": "Y7F3DLWP5NHXZNUHEO5VXTXOWA", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Donnez-moi une perspective"}, {"item_id": "5MC57OWJ5VDUVP5OMZD4V77S7Y", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Expliquez-moi, Tenez-moi inform\u00e9"}, {"item_id": "O7BU3TOSENBW5OKJXGVT2GC5KA", "categorie_principale": "Expliquez moi", "categorie_secondaire": "Donnez-moi une perspective"}, {"item_id": "ZDAODPBYFNENJN5ZNXA5FE46UY", "categorie_principale": "Expliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Donnez-moi une perspective"}, {"item_id": "5YFBB3ECWBHSBLZVXFESCKRVQ4", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Connectez-moi"}, {"item_id": "6WGI3SNAGRFF3GJDQDNRDRWCSI", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Donnez moi une perspective"}, {"item_id": "CJAETVEBDBBE7LGV3UYCN25I5A", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Expliquez-moi, Impliquez-moi"}, {"item_id": "5RIUL6TGIRCZFNLP56A3GU6JSA", "categorie_principale": "Expliquez-moi", "categorie_secondaire": "Donnez-moi une perspective, Tenez-moi inform\u00e9"}, {"item_id": "NQW7FPL6UJFNJJIGBXMOUH74SQ", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Donnez-moi une perspective"}, {"item_id": "EACSBF2QO5GLNDLQCUYQHA46WM", "categorie_principale": "Impliquez-moi", "categorie_secondaire": "Tenez-moi inform\u00e9, Connectez-moi"}, {"item_id": "2XUJFEZK2VDA7M3WTKF776CIQE", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi, Donnez-moi une perspective"}, {"item_id": "V7VFZH573JAANDOJ6VID3DP54A", "categorie_principale": "Donnez moi une perspective", "categorie_secondaire": "Tenez-moi inform\u00e9, Impliquez-moi"}, {"item_id": "UFRIHUTT6FEQZHVWC7VJOPULOI", "categorie_principale": "Expliquez-moi", "categorie_secondaire": "Donnez-moi une perspective, Connectez-moi"}, {"item_id": "PCZQ5Q2SHJFHZANPXZW2CUQVWU", "categorie_principale": "Inspirez-moi", "categorie_secondaire": "Divertissez-moi, Connectez-moi"}, {"item_id": "WSJBPLZMYNCJTLD2FHAH5YJZ3M", "categorie_principale": "Donnez-moi une perspective", "categorie_secondaire": "Expliquez-moi, Inspirez-moi"}, {"item_id": "XYIVTEB4VVBXFMJOJTD7DFKDIU", "categorie_principale": "Tenez-moi inform\u00e9", "categorie_secondaire": "Impliquez-moi, Donnez-moi une perspective"}]
|
execution.ipynb
ADDED
@@ -0,0 +1,210 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 1,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [],
|
8 |
+
"source": [
|
9 |
+
"import pandas as pd \n",
|
10 |
+
"import requests \n",
|
11 |
+
"import datetime as dt\n",
|
12 |
+
"import re\n",
|
13 |
+
"import json\n",
|
14 |
+
"from tqdm import tqdm\n",
|
15 |
+
"import os\n",
|
16 |
+
"import time\n",
|
17 |
+
"from openai import OpenAI"
|
18 |
+
]
|
19 |
+
},
|
20 |
+
{
|
21 |
+
"cell_type": "markdown",
|
22 |
+
"metadata": {},
|
23 |
+
"source": [
|
24 |
+
"#### Calculate"
|
25 |
+
]
|
26 |
+
},
|
27 |
+
{
|
28 |
+
"cell_type": "code",
|
29 |
+
"execution_count": 2,
|
30 |
+
"metadata": {},
|
31 |
+
"outputs": [],
|
32 |
+
"source": [
|
33 |
+
"if \"OPENAI_API_KEY\" not in os.environ:\n",
|
34 |
+
" with open('/home/sagemaker-user/Sciences-POC/config/secrets/keys.txt', 'r') as f:\n",
|
35 |
+
" keys = json.loads(f.read())\n",
|
36 |
+
"else : \n",
|
37 |
+
" keys=os.environ"
|
38 |
+
]
|
39 |
+
},
|
40 |
+
{
|
41 |
+
"cell_type": "code",
|
42 |
+
"execution_count": 3,
|
43 |
+
"metadata": {},
|
44 |
+
"outputs": [],
|
45 |
+
"source": [
|
46 |
+
"save_path = '/home/sagemaker-user/Sciences-POC/data/outputs'\n",
|
47 |
+
"content_path = '/home/sagemaker-user/Sciences-POC/data/extract_sciences_po'\n",
|
48 |
+
"\n",
|
49 |
+
"\n",
|
50 |
+
"def retrieve_classifications(name, mapping_prompt):\n",
|
51 |
+
"\n",
|
52 |
+
" df = pd.read_csv('/home/sagemaker-user/Sciences-POC/data/extract_sciences_po.csv')\n",
|
53 |
+
"\n",
|
54 |
+
"\n",
|
55 |
+
" if os.path.exists(f\"{save_path}/output_{name}.txt\"):\n",
|
56 |
+
" with open(f\"{save_path}/output_{name}.txt\", 'r') as f : \n",
|
57 |
+
" out_dict = json.loads(f.read())\n",
|
58 |
+
" out_df = pd.DataFrame.from_dict(out_dict)\n",
|
59 |
+
" out = out_dict\n",
|
60 |
+
" else : \n",
|
61 |
+
" out_df = pd.DataFrame(columns = ['item_id', 'categorie_principale', 'categorie_secondaire'])\n",
|
62 |
+
" out = []\n",
|
63 |
+
"\n",
|
64 |
+
" df_to_process = df.loc[~df.item_id.isin(out_df.item_id)]\n",
|
65 |
+
"\n",
|
66 |
+
" if mapping_prompt[name]['client']=='deepseek':\n",
|
67 |
+
" client = OpenAI(api_key=keys[\"DEEPSEEK_API_KEY\"], base_url=\"https://api.deepseek.com\")\n",
|
68 |
+
" model=\"deepseek-chat\"\n",
|
69 |
+
" else:\n",
|
70 |
+
" client=OpenAI(api_key=keys['OPENAI_API_KEY'])\n",
|
71 |
+
" model=\"gpt-4o\"\n",
|
72 |
+
"\n",
|
73 |
+
" df_to_process = df.loc[~df.item_id.isin(out_df.item_id)]\n",
|
74 |
+
"\n",
|
75 |
+
"\n",
|
76 |
+
" with open(mapping_prompt[name]['path_prompt'], 'r') as f:\n",
|
77 |
+
" prompt = f.read()\n",
|
78 |
+
"\n",
|
79 |
+
" with tqdm(total=df_to_process.shape[0]) as pbar:\n",
|
80 |
+
" for i, row in df_to_process.iterrows():\n",
|
81 |
+
" titre_brut = f\"{row.item_id}_\"+row.titre.lower().strip().replace(f\"\\xa0\", ' ').replace(' : ', ':').replace(' ', '_').replace('/', '')\n",
|
82 |
+
" \n",
|
83 |
+
" with open(f'{content_path}/{titre_brut}.txt', 'r') as f:\n",
|
84 |
+
" text = f.read()\n",
|
85 |
+
"\n",
|
86 |
+
" messages = [{\"role\": \"system\", \"content\": prompt},\n",
|
87 |
+
" {\"role\": \"user\", \"content\": text}]\n",
|
88 |
+
"\n",
|
89 |
+
" response = client.chat.completions.create(\n",
|
90 |
+
" model=model,\n",
|
91 |
+
" messages=messages,\n",
|
92 |
+
" response_format={\n",
|
93 |
+
" 'type': 'json_object'\n",
|
94 |
+
" }\n",
|
95 |
+
" )\n",
|
96 |
+
" try : \n",
|
97 |
+
" cat_json = json.loads(response.choices[0].message.content)\n",
|
98 |
+
"\n",
|
99 |
+
" out.append({\n",
|
100 |
+
" 'item_id':row.item_id, \n",
|
101 |
+
" 'categorie_principale': cat_json['categorie_principale'],\n",
|
102 |
+
" 'categorie_secondaire': cat_json['categorie_secondaire'],\n",
|
103 |
+
" })\n",
|
104 |
+
" \n",
|
105 |
+
" with open(f'{save_path}/output_{name}.txt', 'w+') as f : \n",
|
106 |
+
" f.write(json.dumps(out))\n",
|
107 |
+
"\n",
|
108 |
+
" except Exception as e : \n",
|
109 |
+
" print(f'Error with article {row.item_id}')\n",
|
110 |
+
" pass\n",
|
111 |
+
"\n",
|
112 |
+
" \n",
|
113 |
+
" pbar.update(1)\n",
|
114 |
+
"\n"
|
115 |
+
]
|
116 |
+
},
|
117 |
+
{
|
118 |
+
"cell_type": "code",
|
119 |
+
"execution_count": 4,
|
120 |
+
"metadata": {},
|
121 |
+
"outputs": [
|
122 |
+
{
|
123 |
+
"name": "stdout",
|
124 |
+
"output_type": "stream",
|
125 |
+
"text": [
|
126 |
+
"dimanov_et_al\n"
|
127 |
+
]
|
128 |
+
},
|
129 |
+
{
|
130 |
+
"name": "stderr",
|
131 |
+
"output_type": "stream",
|
132 |
+
"text": [
|
133 |
+
" 0%| | 0/442 [00:02<?, ?it/s]\n"
|
134 |
+
]
|
135 |
+
},
|
136 |
+
{
|
137 |
+
"ename": "RateLimitError",
|
138 |
+
"evalue": "Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}",
|
139 |
+
"output_type": "error",
|
140 |
+
"traceback": [
|
141 |
+
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
|
142 |
+
"\u001b[31mRateLimitError\u001b[39m Traceback (most recent call last)",
|
143 |
+
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[4]\u001b[39m\u001b[32m, line 6\u001b[39m\n\u001b[32m 4\u001b[39m \u001b[38;5;28;01mfor\u001b[39;00m name \u001b[38;5;129;01min\u001b[39;00m mapping.keys():\n\u001b[32m 5\u001b[39m \u001b[38;5;28mprint\u001b[39m(name)\n\u001b[32m----> \u001b[39m\u001b[32m6\u001b[39m \u001b[43mretrieve_classifications\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmapping\u001b[49m\u001b[43m)\u001b[49m\n",
|
144 |
+
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 44\u001b[39m, in \u001b[36mretrieve_classifications\u001b[39m\u001b[34m(name, mapping_prompt)\u001b[39m\n\u001b[32m 39\u001b[39m text = f.read()\n\u001b[32m 41\u001b[39m messages = [{\u001b[33m\"\u001b[39m\u001b[33mrole\u001b[39m\u001b[33m\"\u001b[39m: \u001b[33m\"\u001b[39m\u001b[33msystem\u001b[39m\u001b[33m\"\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mcontent\u001b[39m\u001b[33m\"\u001b[39m: prompt},\n\u001b[32m 42\u001b[39m {\u001b[33m\"\u001b[39m\u001b[33mrole\u001b[39m\u001b[33m\"\u001b[39m: \u001b[33m\"\u001b[39m\u001b[33muser\u001b[39m\u001b[33m\"\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mcontent\u001b[39m\u001b[33m\"\u001b[39m: text}]\n\u001b[32m---> \u001b[39m\u001b[32m44\u001b[39m response = \u001b[43mclient\u001b[49m\u001b[43m.\u001b[49m\u001b[43mchat\u001b[49m\u001b[43m.\u001b[49m\u001b[43mcompletions\u001b[49m\u001b[43m.\u001b[49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 45\u001b[39m \u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m=\u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 46\u001b[39m \u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m=\u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 47\u001b[39m \u001b[43m \u001b[49m\u001b[43mresponse_format\u001b[49m\u001b[43m=\u001b[49m\u001b[43m{\u001b[49m\n\u001b[32m 48\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mtype\u001b[39;49m\u001b[33;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[33;43m'\u001b[39;49m\u001b[33;43mjson_object\u001b[39;49m\u001b[33;43m'\u001b[39;49m\n\u001b[32m 49\u001b[39m \u001b[43m \u001b[49m\u001b[43m}\u001b[49m\n\u001b[32m 50\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 51\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m : \n\u001b[32m 52\u001b[39m cat_json = json.loads(response.choices[\u001b[32m0\u001b[39m].message.content)\n",
|
145 |
+
"\u001b[36mFile \u001b[39m\u001b[32m~/.cache/pypoetry/virtualenvs/sciences-poc-Bw010oVJ-py3.11/lib/python3.11/site-packages/openai/_utils/_utils.py:279\u001b[39m, in \u001b[36mrequired_args.<locals>.inner.<locals>.wrapper\u001b[39m\u001b[34m(*args, **kwargs)\u001b[39m\n\u001b[32m 277\u001b[39m msg = \u001b[33mf\u001b[39m\u001b[33m\"\u001b[39m\u001b[33mMissing required argument: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mquote(missing[\u001b[32m0\u001b[39m])\u001b[38;5;132;01m}\u001b[39;00m\u001b[33m\"\u001b[39m\n\u001b[32m 278\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(msg)\n\u001b[32m--> \u001b[39m\u001b[32m279\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[43m*\u001b[49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m*\u001b[49m\u001b[43m*\u001b[49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
|
146 |
+
"\u001b[36mFile \u001b[39m\u001b[32m~/.cache/pypoetry/virtualenvs/sciences-poc-Bw010oVJ-py3.11/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py:914\u001b[39m, in \u001b[36mCompletions.create\u001b[39m\u001b[34m(self, messages, model, audio, frequency_penalty, function_call, functions, logit_bias, logprobs, max_completion_tokens, max_tokens, metadata, modalities, n, parallel_tool_calls, prediction, presence_penalty, reasoning_effort, response_format, seed, service_tier, stop, store, stream, stream_options, temperature, tool_choice, tools, top_logprobs, top_p, user, web_search_options, extra_headers, extra_query, extra_body, timeout)\u001b[39m\n\u001b[32m 871\u001b[39m \u001b[38;5;129m@required_args\u001b[39m([\u001b[33m\"\u001b[39m\u001b[33mmessages\u001b[39m\u001b[33m\"\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mmodel\u001b[39m\u001b[33m\"\u001b[39m], [\u001b[33m\"\u001b[39m\u001b[33mmessages\u001b[39m\u001b[33m\"\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mmodel\u001b[39m\u001b[33m\"\u001b[39m, \u001b[33m\"\u001b[39m\u001b[33mstream\u001b[39m\u001b[33m\"\u001b[39m])\n\u001b[32m 872\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mcreate\u001b[39m(\n\u001b[32m 873\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 911\u001b[39m timeout: \u001b[38;5;28mfloat\u001b[39m | httpx.Timeout | \u001b[38;5;28;01mNone\u001b[39;00m | NotGiven = NOT_GIVEN,\n\u001b[32m 912\u001b[39m ) -> ChatCompletion | Stream[ChatCompletionChunk]:\n\u001b[32m 913\u001b[39m validate_response_format(response_format)\n\u001b[32m--> \u001b[39m\u001b[32m914\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_post\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 915\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43m/chat/completions\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 916\u001b[39m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[43m=\u001b[49m\u001b[43mmaybe_transform\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 917\u001b[39m \u001b[43m \u001b[49m\u001b[43m{\u001b[49m\n\u001b[32m 918\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmessages\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmessages\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 919\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmodel\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 920\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43maudio\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43maudio\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 921\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mfrequency_penalty\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfrequency_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 922\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mfunction_call\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunction_call\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 923\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mfunctions\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mfunctions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 924\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mlogit_bias\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogit_bias\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 925\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mlogprobs\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mlogprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 926\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmax_completion_tokens\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_completion_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 927\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmax_tokens\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmax_tokens\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 928\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmetadata\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 929\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mmodalities\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodalities\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 930\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mn\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 931\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mparallel_tool_calls\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mparallel_tool_calls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 932\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mprediction\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mprediction\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 933\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mpresence_penalty\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mpresence_penalty\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 934\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mreasoning_effort\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mreasoning_effort\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 935\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mresponse_format\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mresponse_format\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 936\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mseed\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mseed\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 937\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mservice_tier\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mservice_tier\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 938\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mstop\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstop\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 939\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mstore\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstore\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 940\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mstream\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 941\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mstream_options\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 942\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtemperature\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtemperature\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 943\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtool_choice\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtool_choice\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 944\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtools\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtools\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 945\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtop_logprobs\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_logprobs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 946\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mtop_p\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mtop_p\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 947\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43muser\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43muser\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 948\u001b[39m \u001b[43m \u001b[49m\u001b[33;43m\"\u001b[39;49m\u001b[33;43mweb_search_options\u001b[39;49m\u001b[33;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mweb_search_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 949\u001b[39m \u001b[43m \u001b[49m\u001b[43m}\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 950\u001b[39m \u001b[43m \u001b[49m\u001b[43mcompletion_create_params\u001b[49m\u001b[43m.\u001b[49m\u001b[43mCompletionCreateParams\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 951\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 952\u001b[39m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[43m=\u001b[49m\u001b[43mmake_request_options\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 953\u001b[39m \u001b[43m \u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[43m=\u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_query\u001b[49m\u001b[43m=\u001b[49m\u001b[43mextra_query\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mextra_body\u001b[49m\u001b[43m=\u001b[49m\u001b[43mextra_body\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[43m=\u001b[49m\u001b[43mtimeout\u001b[49m\n\u001b[32m 954\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 955\u001b[39m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m=\u001b[49m\u001b[43mChatCompletion\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 956\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[32m 957\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m=\u001b[49m\u001b[43mStream\u001b[49m\u001b[43m[\u001b[49m\u001b[43mChatCompletionChunk\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 958\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n",
|
147 |
+
"\u001b[36mFile \u001b[39m\u001b[32m~/.cache/pypoetry/virtualenvs/sciences-poc-Bw010oVJ-py3.11/lib/python3.11/site-packages/openai/_base_client.py:1242\u001b[39m, in \u001b[36mSyncAPIClient.post\u001b[39m\u001b[34m(self, path, cast_to, body, options, files, stream, stream_cls)\u001b[39m\n\u001b[32m 1228\u001b[39m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34mpost\u001b[39m(\n\u001b[32m 1229\u001b[39m \u001b[38;5;28mself\u001b[39m,\n\u001b[32m 1230\u001b[39m path: \u001b[38;5;28mstr\u001b[39m,\n\u001b[32m (...)\u001b[39m\u001b[32m 1237\u001b[39m stream_cls: \u001b[38;5;28mtype\u001b[39m[_StreamT] | \u001b[38;5;28;01mNone\u001b[39;00m = \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[32m 1238\u001b[39m ) -> ResponseT | _StreamT:\n\u001b[32m 1239\u001b[39m opts = FinalRequestOptions.construct(\n\u001b[32m 1240\u001b[39m method=\u001b[33m\"\u001b[39m\u001b[33mpost\u001b[39m\u001b[33m\"\u001b[39m, url=path, json_data=body, files=to_httpx_files(files), **options\n\u001b[32m 1241\u001b[39m )\n\u001b[32m-> \u001b[39m\u001b[32m1242\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m cast(ResponseT, \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mopts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m)\u001b[49m)\n",
|
148 |
+
"\u001b[36mFile \u001b[39m\u001b[32m~/.cache/pypoetry/virtualenvs/sciences-poc-Bw010oVJ-py3.11/lib/python3.11/site-packages/openai/_base_client.py:919\u001b[39m, in \u001b[36mSyncAPIClient.request\u001b[39m\u001b[34m(self, cast_to, options, remaining_retries, stream, stream_cls)\u001b[39m\n\u001b[32m 916\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[32m 917\u001b[39m retries_taken = \u001b[32m0\u001b[39m\n\u001b[32m--> \u001b[39m\u001b[32m919\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 920\u001b[39m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 921\u001b[39m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[43m=\u001b[49m\u001b[43moptions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 922\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 923\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 924\u001b[39m \u001b[43m \u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m=\u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 925\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
|
149 |
+
"\u001b[36mFile \u001b[39m\u001b[32m~/.cache/pypoetry/virtualenvs/sciences-poc-Bw010oVJ-py3.11/lib/python3.11/site-packages/openai/_base_client.py:1008\u001b[39m, in \u001b[36mSyncAPIClient._request\u001b[39m\u001b[34m(self, cast_to, options, retries_taken, stream, stream_cls)\u001b[39m\n\u001b[32m 1006\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m remaining_retries > \u001b[32m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m._should_retry(err.response):\n\u001b[32m 1007\u001b[39m err.response.close()\n\u001b[32m-> \u001b[39m\u001b[32m1008\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_retry_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 1009\u001b[39m \u001b[43m \u001b[49m\u001b[43minput_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1010\u001b[39m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1011\u001b[39m \u001b[43m \u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m=\u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1012\u001b[39m \u001b[43m \u001b[49m\u001b[43mresponse_headers\u001b[49m\u001b[43m=\u001b[49m\u001b[43merr\u001b[49m\u001b[43m.\u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m.\u001b[49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1013\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1014\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1015\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1017\u001b[39m \u001b[38;5;66;03m# If the response is streamed then we need to explicitly read the response\u001b[39;00m\n\u001b[32m 1018\u001b[39m \u001b[38;5;66;03m# to completion before attempting to access the response text.\u001b[39;00m\n\u001b[32m 1019\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m err.response.is_closed:\n",
|
150 |
+
"\u001b[36mFile \u001b[39m\u001b[32m~/.cache/pypoetry/virtualenvs/sciences-poc-Bw010oVJ-py3.11/lib/python3.11/site-packages/openai/_base_client.py:1057\u001b[39m, in \u001b[36mSyncAPIClient._retry_request\u001b[39m\u001b[34m(self, options, cast_to, retries_taken, response_headers, stream, stream_cls)\u001b[39m\n\u001b[32m 1053\u001b[39m \u001b[38;5;66;03m# In a synchronous context we are blocking the entire thread. Up to the library user to run the client in a\u001b[39;00m\n\u001b[32m 1054\u001b[39m \u001b[38;5;66;03m# different thread if necessary.\u001b[39;00m\n\u001b[32m 1055\u001b[39m time.sleep(timeout)\n\u001b[32m-> \u001b[39m\u001b[32m1057\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 1058\u001b[39m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[43m=\u001b[49m\u001b[43moptions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1059\u001b[39m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1060\u001b[39m \u001b[43m \u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m=\u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m \u001b[49m\u001b[43m+\u001b[49m\u001b[43m \u001b[49m\u001b[32;43m1\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 1061\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1062\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1063\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
|
151 |
+
"\u001b[36mFile \u001b[39m\u001b[32m~/.cache/pypoetry/virtualenvs/sciences-poc-Bw010oVJ-py3.11/lib/python3.11/site-packages/openai/_base_client.py:1008\u001b[39m, in \u001b[36mSyncAPIClient._request\u001b[39m\u001b[34m(self, cast_to, options, retries_taken, stream, stream_cls)\u001b[39m\n\u001b[32m 1006\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m remaining_retries > \u001b[32m0\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m._should_retry(err.response):\n\u001b[32m 1007\u001b[39m err.response.close()\n\u001b[32m-> \u001b[39m\u001b[32m1008\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_retry_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 1009\u001b[39m \u001b[43m \u001b[49m\u001b[43minput_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1010\u001b[39m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1011\u001b[39m \u001b[43m \u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m=\u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1012\u001b[39m \u001b[43m \u001b[49m\u001b[43mresponse_headers\u001b[49m\u001b[43m=\u001b[49m\u001b[43merr\u001b[49m\u001b[43m.\u001b[49m\u001b[43mresponse\u001b[49m\u001b[43m.\u001b[49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1013\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1014\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1015\u001b[39m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 1017\u001b[39m \u001b[38;5;66;03m# If the response is streamed then we need to explicitly read the response\u001b[39;00m\n\u001b[32m 1018\u001b[39m \u001b[38;5;66;03m# to completion before attempting to access the response text.\u001b[39;00m\n\u001b[32m 1019\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m err.response.is_closed:\n",
|
152 |
+
"\u001b[36mFile \u001b[39m\u001b[32m~/.cache/pypoetry/virtualenvs/sciences-poc-Bw010oVJ-py3.11/lib/python3.11/site-packages/openai/_base_client.py:1057\u001b[39m, in \u001b[36mSyncAPIClient._retry_request\u001b[39m\u001b[34m(self, options, cast_to, retries_taken, response_headers, stream, stream_cls)\u001b[39m\n\u001b[32m 1053\u001b[39m \u001b[38;5;66;03m# In a synchronous context we are blocking the entire thread. Up to the library user to run the client in a\u001b[39;00m\n\u001b[32m 1054\u001b[39m \u001b[38;5;66;03m# different thread if necessary.\u001b[39;00m\n\u001b[32m 1055\u001b[39m time.sleep(timeout)\n\u001b[32m-> \u001b[39m\u001b[32m1057\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[32m 1058\u001b[39m \u001b[43m \u001b[49m\u001b[43moptions\u001b[49m\u001b[43m=\u001b[49m\u001b[43moptions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1059\u001b[39m \u001b[43m \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m=\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1060\u001b[39m \u001b[43m \u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m=\u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[43m \u001b[49m\u001b[43m+\u001b[49m\u001b[43m \u001b[49m\u001b[32;43m1\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[32m 1061\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1062\u001b[39m \u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m=\u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[32m 1063\u001b[39m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
|
153 |
+
"\u001b[36mFile \u001b[39m\u001b[32m~/.cache/pypoetry/virtualenvs/sciences-poc-Bw010oVJ-py3.11/lib/python3.11/site-packages/openai/_base_client.py:1023\u001b[39m, in \u001b[36mSyncAPIClient._request\u001b[39m\u001b[34m(self, cast_to, options, retries_taken, stream, stream_cls)\u001b[39m\n\u001b[32m 1020\u001b[39m err.response.read()\n\u001b[32m 1022\u001b[39m log.debug(\u001b[33m\"\u001b[39m\u001b[33mRe-raising status error\u001b[39m\u001b[33m\"\u001b[39m)\n\u001b[32m-> \u001b[39m\u001b[32m1023\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m._make_status_error_from_response(err.response) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[32m 1025\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m._process_response(\n\u001b[32m 1026\u001b[39m cast_to=cast_to,\n\u001b[32m 1027\u001b[39m options=options,\n\u001b[32m (...)\u001b[39m\u001b[32m 1031\u001b[39m retries_taken=retries_taken,\n\u001b[32m 1032\u001b[39m )\n",
|
154 |
+
"\u001b[31mRateLimitError\u001b[39m: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: https://platform.openai.com/docs/guides/error-codes/api-errors.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}"
|
155 |
+
]
|
156 |
+
}
|
157 |
+
],
|
158 |
+
"source": [
|
159 |
+
"with open('/home/sagemaker-user/Sciences-POC/config/mapping_prompts.txt', 'r') as f : \n",
|
160 |
+
" mapping = json.loads(f.read())\n",
|
161 |
+
"\n",
|
162 |
+
"for name in mapping.keys():\n",
|
163 |
+
" print(name)\n",
|
164 |
+
" retrieve_classifications(name, mapping)"
|
165 |
+
]
|
166 |
+
},
|
167 |
+
{
|
168 |
+
"cell_type": "markdown",
|
169 |
+
"metadata": {},
|
170 |
+
"source": [
|
171 |
+
"#### Ajouter images"
|
172 |
+
]
|
173 |
+
},
|
174 |
+
{
|
175 |
+
"cell_type": "code",
|
176 |
+
"execution_count": null,
|
177 |
+
"metadata": {},
|
178 |
+
"outputs": [],
|
179 |
+
"source": []
|
180 |
+
},
|
181 |
+
{
|
182 |
+
"cell_type": "code",
|
183 |
+
"execution_count": null,
|
184 |
+
"metadata": {},
|
185 |
+
"outputs": [],
|
186 |
+
"source": []
|
187 |
+
}
|
188 |
+
],
|
189 |
+
"metadata": {
|
190 |
+
"kernelspec": {
|
191 |
+
"display_name": ".venv",
|
192 |
+
"language": "python",
|
193 |
+
"name": "python3"
|
194 |
+
},
|
195 |
+
"language_info": {
|
196 |
+
"codemirror_mode": {
|
197 |
+
"name": "ipython",
|
198 |
+
"version": 3
|
199 |
+
},
|
200 |
+
"file_extension": ".py",
|
201 |
+
"mimetype": "text/x-python",
|
202 |
+
"name": "python",
|
203 |
+
"nbconvert_exporter": "python",
|
204 |
+
"pygments_lexer": "ipython3",
|
205 |
+
"version": "3.11.11"
|
206 |
+
}
|
207 |
+
},
|
208 |
+
"nbformat": 4,
|
209 |
+
"nbformat_minor": 2
|
210 |
+
}
|
notebooks/execution.ipynb
DELETED
@@ -1,210 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"cells": [
|
3 |
-
{
|
4 |
-
"cell_type": "code",
|
5 |
-
"execution_count": 3,
|
6 |
-
"metadata": {},
|
7 |
-
"outputs": [],
|
8 |
-
"source": [
|
9 |
-
"import pandas as pd \n",
|
10 |
-
"import requests \n",
|
11 |
-
"import datetime as dt\n",
|
12 |
-
"import re\n",
|
13 |
-
"import json\n",
|
14 |
-
"from tqdm import tqdm\n",
|
15 |
-
"import os\n",
|
16 |
-
"\n",
|
17 |
-
"from openai import OpenAI"
|
18 |
-
]
|
19 |
-
},
|
20 |
-
{
|
21 |
-
"cell_type": "markdown",
|
22 |
-
"metadata": {},
|
23 |
-
"source": [
|
24 |
-
"#### Calculate"
|
25 |
-
]
|
26 |
-
},
|
27 |
-
{
|
28 |
-
"cell_type": "code",
|
29 |
-
"execution_count": 12,
|
30 |
-
"metadata": {},
|
31 |
-
"outputs": [],
|
32 |
-
"source": [
|
33 |
-
"if \"OPENAI_API_KEY\" not in os.environ:\n",
|
34 |
-
" with open('secrets/keys.txt', 'r') as f:\n",
|
35 |
-
" keys = json.loads(f.read())\n",
|
36 |
-
"else : \n",
|
37 |
-
" keys=os.environ"
|
38 |
-
]
|
39 |
-
},
|
40 |
-
{
|
41 |
-
"cell_type": "code",
|
42 |
-
"execution_count": 15,
|
43 |
-
"metadata": {},
|
44 |
-
"outputs": [],
|
45 |
-
"source": [
|
46 |
-
"save_path = 'save'\n",
|
47 |
-
"content_path = 'data/extract_sciences_po'\n",
|
48 |
-
"\n",
|
49 |
-
"\n",
|
50 |
-
"def retrieve_classifications(name, mapping_prompt):\n",
|
51 |
-
"\n",
|
52 |
-
" df = pd.read_csv('extract_sciences_po.csv')\n",
|
53 |
-
"\n",
|
54 |
-
"\n",
|
55 |
-
" if os.path.exists(f\"{save_path}/output_{name}.txt\"):\n",
|
56 |
-
" with open(f\"{save_path}/output_{name}.txt\", 'r') as f : \n",
|
57 |
-
" out_dict = json.loads(f.read())\n",
|
58 |
-
" out_df = pd.DataFrame.from_dict(out_dict)\n",
|
59 |
-
" out = out_dict\n",
|
60 |
-
" else : \n",
|
61 |
-
" out_df = pd.DataFrame(columns = ['item_id', 'categorie_principale', 'categorie_secondaire'])\n",
|
62 |
-
" out = []\n",
|
63 |
-
"\n",
|
64 |
-
" df_to_process = df.loc[~df.item_id.isin(out_df.item_id)]\n",
|
65 |
-
"\n",
|
66 |
-
" if mapping_prompt[name]['client']=='deepseek':\n",
|
67 |
-
" client = OpenAI(api_key=keys[\"DEEPSEEK_API_KEY\"], base_url=\"https://api.deepseek.com\")\n",
|
68 |
-
" model=\"deepseek-chat\"\n",
|
69 |
-
" else:\n",
|
70 |
-
" client=OpenAI(api_key=keys['OPENAI_API_KEY'])\n",
|
71 |
-
" model=\"gpt-4o\"\n",
|
72 |
-
"\n",
|
73 |
-
" df_to_process = df.loc[~df.item_id.isin(out_df.item_id)]\n",
|
74 |
-
"\n",
|
75 |
-
"\n",
|
76 |
-
" with open(mapping_prompt[name]['path_prompt'], 'r') as f:\n",
|
77 |
-
" prompt = f.read()\n",
|
78 |
-
"\n",
|
79 |
-
" with tqdm(total=df_to_process.shape[0]) as pbar:\n",
|
80 |
-
" for i, row in df_to_process.iterrows():\n",
|
81 |
-
" titre_brut = f\"{row.item_id}_\"+row.titre.lower().strip().replace(f\"\\xa0\", ' ').replace(' : ', ':').replace(' ', '_').replace('/', '')\n",
|
82 |
-
" \n",
|
83 |
-
" with open(f'{content_path}/{titre_brut}.txt', 'r') as f:\n",
|
84 |
-
" text = f.read()\n",
|
85 |
-
"\n",
|
86 |
-
" messages = [{\"role\": \"system\", \"content\": prompt},\n",
|
87 |
-
" {\"role\": \"user\", \"content\": text}]\n",
|
88 |
-
"\n",
|
89 |
-
" response = client.chat.completions.create(\n",
|
90 |
-
" model=model,\n",
|
91 |
-
" messages=messages,\n",
|
92 |
-
" response_format={\n",
|
93 |
-
" 'type': 'json_object'\n",
|
94 |
-
" }\n",
|
95 |
-
" )\n",
|
96 |
-
" try : \n",
|
97 |
-
" cat_json = json.loads(response.choices[0].message.content)\n",
|
98 |
-
"\n",
|
99 |
-
" out.append({\n",
|
100 |
-
" 'item_id':row.item_id, \n",
|
101 |
-
" 'categorie_principale': cat_json['categorie_principale'],\n",
|
102 |
-
" 'categorie_secondaire': cat_json['categorie_secondaire'],\n",
|
103 |
-
" })\n",
|
104 |
-
" \n",
|
105 |
-
" with open(f'{save_path}/output_{name}.txt', 'w+') as f : \n",
|
106 |
-
" f.write(json.dumps(out))\n",
|
107 |
-
"\n",
|
108 |
-
" except Exception as e : \n",
|
109 |
-
" print(f'Error with article {row.item_id}')\n",
|
110 |
-
" pass\n",
|
111 |
-
"\n",
|
112 |
-
" \n",
|
113 |
-
" pbar.update(1)\n",
|
114 |
-
"\n"
|
115 |
-
]
|
116 |
-
},
|
117 |
-
{
|
118 |
-
"cell_type": "code",
|
119 |
-
"execution_count": 20,
|
120 |
-
"metadata": {},
|
121 |
-
"outputs": [
|
122 |
-
{
|
123 |
-
"name": "stdout",
|
124 |
-
"output_type": "stream",
|
125 |
-
"text": [
|
126 |
-
"sans_titre_1\n"
|
127 |
-
]
|
128 |
-
},
|
129 |
-
{
|
130 |
-
"name": "stderr",
|
131 |
-
"output_type": "stream",
|
132 |
-
"text": [
|
133 |
-
"0it [00:00, ?it/s]"
|
134 |
-
]
|
135 |
-
},
|
136 |
-
{
|
137 |
-
"name": "stderr",
|
138 |
-
"output_type": "stream",
|
139 |
-
"text": [
|
140 |
-
"0it [00:00, ?it/s]\n"
|
141 |
-
]
|
142 |
-
},
|
143 |
-
{
|
144 |
-
"name": "stdout",
|
145 |
-
"output_type": "stream",
|
146 |
-
"text": [
|
147 |
-
"favarel_et_al\n"
|
148 |
-
]
|
149 |
-
},
|
150 |
-
{
|
151 |
-
"name": "stderr",
|
152 |
-
"output_type": "stream",
|
153 |
-
"text": [
|
154 |
-
" 21%|██▏ | 41/191 [05:28<16:54, 6.76s/it]"
|
155 |
-
]
|
156 |
-
}
|
157 |
-
],
|
158 |
-
"source": [
|
159 |
-
"with open('mapping_prompts.txt', 'r') as f : \n",
|
160 |
-
" mapping = json.loads(f.read())\n",
|
161 |
-
"\n",
|
162 |
-
"for name in mapping.keys():\n",
|
163 |
-
" print(name)\n",
|
164 |
-
" retrieve_classifications(name, mapping)"
|
165 |
-
]
|
166 |
-
},
|
167 |
-
{
|
168 |
-
"cell_type": "markdown",
|
169 |
-
"metadata": {},
|
170 |
-
"source": [
|
171 |
-
"#### Ajouter images"
|
172 |
-
]
|
173 |
-
},
|
174 |
-
{
|
175 |
-
"cell_type": "code",
|
176 |
-
"execution_count": null,
|
177 |
-
"metadata": {},
|
178 |
-
"outputs": [],
|
179 |
-
"source": []
|
180 |
-
},
|
181 |
-
{
|
182 |
-
"cell_type": "code",
|
183 |
-
"execution_count": null,
|
184 |
-
"metadata": {},
|
185 |
-
"outputs": [],
|
186 |
-
"source": []
|
187 |
-
}
|
188 |
-
],
|
189 |
-
"metadata": {
|
190 |
-
"kernelspec": {
|
191 |
-
"display_name": ".venv",
|
192 |
-
"language": "python",
|
193 |
-
"name": "python3"
|
194 |
-
},
|
195 |
-
"language_info": {
|
196 |
-
"codemirror_mode": {
|
197 |
-
"name": "ipython",
|
198 |
-
"version": 3
|
199 |
-
},
|
200 |
-
"file_extension": ".py",
|
201 |
-
"mimetype": "text/x-python",
|
202 |
-
"name": "python",
|
203 |
-
"nbconvert_exporter": "python",
|
204 |
-
"pygments_lexer": "ipython3",
|
205 |
-
"version": "3.11.11"
|
206 |
-
}
|
207 |
-
},
|
208 |
-
"nbformat": 4,
|
209 |
-
"nbformat_minor": 2
|
210 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|