datacipen commited on
Commit
8663b79
1 Parent(s): e760a46

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +36 -94
main.py CHANGED
@@ -37,25 +37,12 @@ async def LLModel():
37
 
38
  @cl.step(type="tool")
39
  async def VectorDatabase(categorie):
40
- if categorie == "bibliographie-OPP-DGDIN":
41
- index_name = "all-venus"
42
- embeddings = HuggingFaceEmbeddings()
43
- vectorstore = PineconeVectorStore(
44
- index_name=index_name, embedding=embeddings, pinecone_api_key=os.getenv('PINECONE_API_KEY')
45
- )
46
- elif categorie == "year" or categorie == "videosTC":
47
  index_name = "all-jdlp"
48
  embeddings = HuggingFaceEmbeddings()
49
  vectorstore = PineconeVectorStore(
50
  index_name=index_name, embedding=embeddings, pinecone_api_key=os.getenv('PINECONE_API_KEYJDLP')
51
  )
52
- elif categorie == "skills":
53
- index_name = "all-skills"
54
- embeddings = HuggingFaceEmbeddings()
55
- vectorstore = PineconeVectorStore(
56
- index_name=index_name, embedding=embeddings, pinecone_api_key=os.getenv('PINECONE_API_KEYSKILLS')
57
- )
58
-
59
  return vectorstore
60
 
61
  @cl.step(type="retrieval")
@@ -81,36 +68,7 @@ async def Search(input, categorie):
81
  verbatim_text = ""
82
  count = 0
83
  countOffres = 0
84
- if categorie == "bibliographie-OPP-DGDIN":
85
- search = vectorstore.similarity_search(input,k=50, filter={"categorie": {"$eq": categorie}})
86
- for i in range(0,len(search)):
87
- if search[i].metadata['Lien'] not in test:
88
- if count <= 15:
89
- count = count + 1
90
- test.append(search[i].metadata['Lien'])
91
- sources_text = sources_text + str(count) + ". " + search[i].metadata['Titre'] + ', ' + search[i].metadata['Auteurs'] + ', ' + search[i].metadata['Lien'] + "\n"
92
- verbatim_text = verbatim_text + "<p style='font-size:0.8rem'>" + str(count) + ". " + search[i].metadata['Phrase'] + "</p><p>&nbsp;</p>"
93
-
94
- elif categorie == "year":
95
- search = vectorstore.similarity_search(input,k=50, filter={"year": {"$gte": 2019}})
96
- for i in range(0,len(search)):
97
- if count <= 15:
98
- count = count + 1
99
- sources_text = sources_text + str(count) + ". " + search[i].metadata['title'] + ' (JDLP : ' + str(search[i].metadata['year']) + '), ' + search[i].metadata['author'] + ', https://cipen.univ-gustave-eiffel.fr/fileadmin/CIPEN/OPP/' + search[i].metadata['file'] + "\n"
100
- verbatim_text = verbatim_text + "<p style='font-size:0.8rem'>" + str(count) + ". JDLP : " + search[i].metadata['jdlp'] + "</p><p style='font-size:0.8rem'>" + search[i].page_content + "</p>"
101
- elif categorie == "skills":
102
- search = vectorstore.similarity_search(input,k=50, filter={"file": {"$eq": 'competences-master-CFA.csv'}})
103
- searchOffres = vectorstore.similarity_search(input,k=50, filter={"file": {"$eq": 'marche-emploi-CFA.csv'}})
104
- for i in range(0,len(search)):
105
- if count <= 15:
106
- count = count + 1
107
- sources_text = sources_text + str(count) + ". " + search[i].metadata['diplôme'] + ' (année : ' + search[i].metadata['année'] + '), ' + search[i].metadata['domaine'] + ', https://www.francecompetences.fr/recherche/rncp/' + str(search[i].metadata['rncp'])[4:] + "/\n"
108
- verbatim_text = verbatim_text + "<p style='font-size:0.8rem'>" + str(count) + ". " + search[i].metadata['diplôme'] + "</p><p style='font-size:0.8rem'>" + search[i].page_content + "</p>"
109
- for i in range(0,len(searchOffres)):
110
- if countOffres <= 15:
111
- countOffres = countOffres + 1
112
- sources_offres = sources_offres + str(countOffres) + ". " + searchOffres[i].metadata['Poste'] + " (type de contrat : " + searchOffres[i].metadata['Contrat'] + ")\n"
113
- elif categorie == "videosTC":
114
  search = vectorstore.similarity_search(input,k=50, filter={"title": {"$eq": "videos-confinement-timeline"}})
115
  for i in range(0,len(search)):
116
  if count <= 17:
@@ -124,50 +82,40 @@ async def Search(input, categorie):
124
  results = [sources_text, verbatim_text, sources_offres]
125
  return results
126
 
127
- @cl.on_chat_start
128
- async def on_chat_start():
129
- await cl.Message(f"> REVIEWSTREAM").send()
130
- res = await cl.AskActionMessage(
131
- content="<div style='width:100%;text-align:center'>Sélectionnez une source documentaire</div>",
132
- actions=[
133
- cl.Action(name="bibliographie-OPP-DGDIN", value="Pédagogie durable", label="🔥 Pédagogie durable : exemple : «quels sont les modèles d'apprentissage dans les universités?»"),
134
- cl.Action(name="bibliographie-OPP-DGDIN", value="Lieux d'apprentissage", label="🏫 Lieux d'apprentissage : exemple : «donne des exemples de lieu d'apprentissage dans les universités?»"),
135
- cl.Action(name="bibliographie-OPP-DGDIN", value="Espaces d'apprentissage", label="🏠 Espaces d'apprentissage : exemple : «donne des exemples d'agencement d'espaces d'apprentissage dans les universités?»"),
136
- cl.Action(name="year", value="Journée de La Pédagogie", label="👨‍🏫 Journée de La Pédagogie : exemple : «Quelles sont les bonnes pratiques des plateformes de e-learning?»"),
137
- cl.Action(name="skills", value="Compétences du CFA Descartes", label="🧑🏻‍🎓 Les compétences des masters du CFA Descartes : exemple : «Quels sont les Master qui dispensent des compétences en marketing dispensées au CFA?»"),
138
- cl.Action(name="OF", value="Formations Gustave Eiffel", label="🎓 Les formations de l'université Gustave Eiffel : exemple : «Quels sont les formations et les métiers possibles si on est créatif?»"),
139
- cl.Action(name="videosTC", value="Vidéos paroles de confiné.es", label="📽️ Les vidéos paroles de confiné.es : exemple : «Quelle est la méthodologie employée avec les plateformes d'enseignement à distance?»"),
140
- cl.Action(name="offreST", value="Offres d'emploi France Travail", label="💼 Les offres d'emploi de France Travail : exemple : «Quels sont les types de contrat proposés par les recruteurs?»"),
141
- cl.Action(name="coderome", value="Catalogue Codes ROME", label="📖 Le catalogue ROME : exemple : «Quels sont les codes ROME liés au marketing?»"),
142
- cl.Action(name="vision", value="Caption image and object definition", label="🖼️ Transcription et définition d'objets image : exemple : «Définis les objets et donne une analyse de l'image?»"),
143
- cl.Action(name="pdfextraction", value="Lecture de document PDF", label="📃 Extraction de contenus dans document PDF : exemple : «Résume le contenu du document?»"),
144
- ],
145
- timeout="3600"
146
- ).send()
147
- listPrompts_name = f"Liste des revues de recherche"
148
- contentPrompts = """<p><img src='/public/hal-logo-header.png' width='32' align='absmiddle' /> <strong> Hal Archives Ouvertes</strong> : Une archive ouverte est un réservoir numérique contenant des documents issus de la recherche scientifique, généralement déposés par leurs auteurs, et permettant au grand public d'y accéder gratuitement et sans contraintes.
149
- </p>
150
- <p><img src='/public/logo-persee.png' width='32' align='absmiddle' /> <strong>Persée</strong> : offre un accès libre et gratuit à des collections complètes de publications scientifiques (revues, livres, actes de colloques, publications en série, sources primaires, etc.) associé à une gamme d'outils de recherche et d'exploitation.</p>
151
- """
152
- prompt_elements = []
153
- prompt_elements.append(
154
- cl.Text(content=contentPrompts, name=listPrompts_name, display="side")
155
- )
156
- await cl.Message(content="📚 " + listPrompts_name, elements=prompt_elements).send()
157
- settings = await cl.ChatSettings(
158
- [
159
- Select(
160
- id="Model",
161
- label="Publications de recherche",
162
- values=["---", "HAL", "Persée"],
163
- initial_index=0,
164
  ),
 
 
 
 
 
 
 
 
 
 
165
  ]
166
- ).send()
167
- if res:
168
- await cl.Message(f"Vous pouvez requêter sur la thématique : {res.get('value')}").send()
169
- cl.user_session.set("selectRequest", res.get("name"))
170
-
171
  model = await LLModel()
172
  retriever = await Retriever(cl.user_session.get("selectRequest"))
173
  ########## Chain with streaming ##########
@@ -182,13 +130,7 @@ async def on_chat_start():
182
  verbose=False,
183
  retriever=retriever
184
  )
185
- cl.user_session.set("runnable", qa)
186
- cl.user_session.set("memory", memory)
187
 
188
- @cl.on_message
189
- async def on_message(message: cl.Message):
190
- memory = cl.user_session.get("memory")
191
- runnable = cl.user_session.get("runnable") # type: Runnable
192
  msg = cl.Message(content="")
193
 
194
  class PostMessageHandler(BaseCallbackHandler):
@@ -214,13 +156,13 @@ async def on_message(message: cl.Message):
214
  )
215
 
216
  cb = cl.AsyncLangchainCallbackHandler()
217
- results = await runnable.acall("Contexte : Vous êtes un chercheur de l'enseignement supérieur et vous êtes doué pour faire des analyses d'articles de recherche sur les thématiques liées à la pédagogie, en fonction des critères définis ci-avant. En fonction des informations suivantes et du contexte suivant seulement et strictement, répondez en langue française strictement à la question ci-dessous, en 5000 mots minimum. En plus, tu créeras et tu afficheras, à la fin de ta réponse, 3 questions supplémentaires en relation avec le contexte initial, à chaque étape de la conversation. Tu écriras et tu afficheras les 3 questions supplémentaires en relation avec le contexte initial, à la fin de ta réponse, avec un titrage de niveau 1 qui a pour titre \"Questions en relation avec le contexte : \". Lorsque cela est possible, cite les sources du contexte. Si vous ne pouvez pas répondre à la question sur la base des informations, dites que vous ne trouvez pas de réponse ou que vous ne parvenez pas à trouver de réponse. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Ne générez pas de réponses non pertinentes. Question : " + message.content, callbacks=[cb])
218
  answer = results["answer"]
219
 
220
  await cl.Message(content=GoogleTranslator(source='auto', target='fr').translate(answer)).send()
221
 
222
  #search = vectorstore.similarity_search(message.content,k=50, filter={"categorie": {"$eq": "bibliographie-OPP-DGDIN"}})
223
- search = await Search(message.content, cl.user_session.get("selectRequest"))
224
 
225
  #os.environ["GOOGLE_CSE_ID"] = os.getenv('GOOGLE_CSE_ID')
226
  #os.environ["GOOGLE_API_KEY"] = os.getenv('GOOGLE_API_KEY')
 
37
 
38
  @cl.step(type="tool")
39
  async def VectorDatabase(categorie):
40
+ if categorie == "year" or categorie == "videosTC":
 
 
 
 
 
 
41
  index_name = "all-jdlp"
42
  embeddings = HuggingFaceEmbeddings()
43
  vectorstore = PineconeVectorStore(
44
  index_name=index_name, embedding=embeddings, pinecone_api_key=os.getenv('PINECONE_API_KEYJDLP')
45
  )
 
 
 
 
 
 
 
46
  return vectorstore
47
 
48
  @cl.step(type="retrieval")
 
68
  verbatim_text = ""
69
  count = 0
70
  countOffres = 0
71
+ if categorie == "videosTC":
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72
  search = vectorstore.similarity_search(input,k=50, filter={"title": {"$eq": "videos-confinement-timeline"}})
73
  for i in range(0,len(search)):
74
  if count <= 17:
 
82
  results = [sources_text, verbatim_text, sources_offres]
83
  return results
84
 
85
+ @cl.set_chat_profiles
86
+ async def chat_profile():
87
+ return [
88
+ cl.ChatProfile(name="Table ronde autour de l'IA",markdown_description="Vidéo exploratoire autour de l'événement",icon="/public/logo-ofipe.png",),
89
+ ]
90
+
91
+ @cl.set_starters
92
+ async def set_starters():
93
+ return [
94
+ cl.Starter(
95
+ label="IA et gestes professionnels de l’enseignant",
96
+ message="Comment apprendre une langue étrangère avec l’IA? Comment enseigner en tenant compte des possibilités conversationnelles avec l'IA?",
97
+ icon="/public/videocam-theme1.svg",
98
+ ),
99
+
100
+ cl.Starter(
101
+ label="IA et gestes professionnels de l’enseignant",
102
+ message="Comment apprendre une langue étrangère avec l’IA? Comment enseigner en tenant compte des possibilités conversationnelles avec l'IA?",
103
+ icon="/public/videocam-theme1.svg",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  ),
105
+ cl.Starter(
106
+ label="IA et gestes professionnels de l’enseignant",
107
+ message="Comment apprendre une langue étrangère avec l’IA? Comment enseigner en tenant compte des possibilités conversationnelles avec l'IA?",
108
+ icon="/public/videocam-theme1.svg",
109
+ ),
110
+ cl.Starter(
111
+ label="IA et gestes professionnels de l’enseignant",
112
+ message="Comment apprendre une langue étrangère avec l’IA? Comment enseigner en tenant compte des possibilités conversationnelles avec l'IA?",
113
+ icon="/public/videocam-theme1.svg",
114
+ )
115
  ]
116
+
117
+ @cl.on_message
118
+ async def on_message(message: cl.Message):
 
 
119
  model = await LLModel()
120
  retriever = await Retriever(cl.user_session.get("selectRequest"))
121
  ########## Chain with streaming ##########
 
130
  verbose=False,
131
  retriever=retriever
132
  )
 
 
133
 
 
 
 
 
134
  msg = cl.Message(content="")
135
 
136
  class PostMessageHandler(BaseCallbackHandler):
 
156
  )
157
 
158
  cb = cl.AsyncLangchainCallbackHandler()
159
+ results = await qa.acall("Contexte : Vous êtes un chercheur de l'enseignement supérieur et vous êtes doué pour faire des analyses d'articles de recherche sur les thématiques liées à la pédagogie, en fonction des critères définis ci-avant. En fonction des informations suivantes et du contexte suivant seulement et strictement, répondez en langue française strictement à la question ci-dessous, en 5000 mots minimum. En plus, tu créeras et tu afficheras, à la fin de ta réponse, 3 questions supplémentaires en relation avec le contexte initial, à chaque étape de la conversation. Tu écriras et tu afficheras les 3 questions supplémentaires en relation avec le contexte initial, à la fin de ta réponse, avec un titrage de niveau 1 qui a pour titre \"Questions en relation avec le contexte : \". Lorsque cela est possible, cite les sources du contexte. Si vous ne pouvez pas répondre à la question sur la base des informations, dites que vous ne trouvez pas de réponse ou que vous ne parvenez pas à trouver de réponse. Essayez donc de comprendre en profondeur le contexte et répondez uniquement en vous basant sur les informations fournies. Ne générez pas de réponses non pertinentes. Question : " + message.content, callbacks=[cb])
160
  answer = results["answer"]
161
 
162
  await cl.Message(content=GoogleTranslator(source='auto', target='fr').translate(answer)).send()
163
 
164
  #search = vectorstore.similarity_search(message.content,k=50, filter={"categorie": {"$eq": "bibliographie-OPP-DGDIN"}})
165
+ search = await Search(message.content, "videosTC")
166
 
167
  #os.environ["GOOGLE_CSE_ID"] = os.getenv('GOOGLE_CSE_ID')
168
  #os.environ["GOOGLE_API_KEY"] = os.getenv('GOOGLE_API_KEY')