update AFP agent with access to its vectorstore
Browse files- app.py +72 -36
- assets/style.css +5 -0
- assets/utils_javascript.py +6 -0
- spinoza_project/config.yaml +3 -5
- spinoza_project/source/frontend/utils.py +16 -0
app.py
CHANGED
@@ -14,6 +14,7 @@ from spinoza_project.source.backend.get_prompts import get_qa_prompts
|
|
14 |
from spinoza_project.source.frontend.utils import (
|
15 |
make_html_source,
|
16 |
make_html_presse_source,
|
|
|
17 |
parse_output_llm_with_sources,
|
18 |
init_env,
|
19 |
)
|
@@ -48,6 +49,7 @@ llm = get_llm_api()
|
|
48 |
## Loading_tools
|
49 |
print("Loading Databases")
|
50 |
bdd_presse = get_vectorstore_api("presse")
|
|
|
51 |
qdrants = {
|
52 |
tab: pickle_to_document_store(
|
53 |
hf_hub_download(
|
@@ -57,7 +59,7 @@ qdrants = {
|
|
57 |
)
|
58 |
)
|
59 |
for tab in config["prompt_naming"]
|
60 |
-
if tab != "Presse"
|
61 |
}
|
62 |
|
63 |
## Load Prompts
|
@@ -206,43 +208,59 @@ def answer_questions(*questions_sources, config=config):
|
|
206 |
]
|
207 |
|
208 |
|
209 |
-
def get_sources(
|
|
|
|
|
210 |
k = config["num_document_retrieved"]
|
211 |
min_similarity = config["min_similarity"]
|
212 |
-
formated = []
|
213 |
-
text = []
|
214 |
for i, (question, tab) in enumerate(zip(questions, list(config["tabs"].keys()))):
|
215 |
-
|
216 |
-
(
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
)
|
222 |
-
|
223 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
config["source_mapping"][tab]
|
225 |
].similarity_search_with_relevance_scores(
|
226 |
config["query_preprompt"]
|
227 |
+ question.replace("<p>", "").replace("</p>\n", ""),
|
228 |
k=k,
|
229 |
)
|
230 |
-
|
231 |
-
|
232 |
-
sources = [
|
233 |
-
(doc, score) for doc, score in sources
|
234 |
-
] # if score >= min_similarity]
|
235 |
-
formated.extend(
|
236 |
-
[
|
237 |
-
make_html_presse_source(source[0], j, source[1])
|
238 |
-
for j, source in zip(range(k * i + 1, k * (i + 1) + 1), sources)
|
239 |
]
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
|
|
246 |
text.extend(
|
247 |
[
|
248 |
"\n\n".join(
|
@@ -260,8 +278,12 @@ def get_sources(questions, qdrants=qdrants, bdd_presse=bdd_presse, config=config
|
|
260 |
return formated, text
|
261 |
|
262 |
|
263 |
-
def retrieve_sources(
|
264 |
-
|
|
|
|
|
|
|
|
|
265 |
|
266 |
return (formated_sources, *text_sources)
|
267 |
|
@@ -342,10 +364,6 @@ with gr.Blocks(
|
|
342 |
component_sources = {elt: gr.State("") for elt in config["tabs"]}
|
343 |
text_sources = {elt: gr.State("") for elt in config["tabs"]}
|
344 |
tab_states = {elt: gr.State(elt) for elt in config["tabs"]}
|
345 |
-
chatbot_states = [
|
346 |
-
gr.State(name)
|
347 |
-
for name in ["science", "presse", "politique", "legal", "spinoza"]
|
348 |
-
]
|
349 |
|
350 |
with gr.Tab("Q&A", elem_id="main-component"):
|
351 |
with gr.Row(elem_id="chatbot-row"):
|
@@ -401,7 +419,7 @@ with gr.Blocks(
|
|
401 |
layout="panel",
|
402 |
avatar_images=(
|
403 |
"./assets/logos/help.png",
|
404 |
-
None,
|
405 |
),
|
406 |
)
|
407 |
|
@@ -419,7 +437,7 @@ with gr.Blocks(
|
|
419 |
layout="panel",
|
420 |
avatar_images=(
|
421 |
"./assets/logos/help.png",
|
422 |
-
None,
|
423 |
),
|
424 |
)
|
425 |
|
@@ -437,7 +455,25 @@ with gr.Blocks(
|
|
437 |
layout="panel",
|
438 |
avatar_images=(
|
439 |
"./assets/logos/help.png",
|
440 |
-
None,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
441 |
),
|
442 |
)
|
443 |
|
|
|
14 |
from spinoza_project.source.frontend.utils import (
|
15 |
make_html_source,
|
16 |
make_html_presse_source,
|
17 |
+
make_html_afp_source,
|
18 |
parse_output_llm_with_sources,
|
19 |
init_env,
|
20 |
)
|
|
|
49 |
## Loading_tools
|
50 |
print("Loading Databases")
|
51 |
bdd_presse = get_vectorstore_api("presse")
|
52 |
+
bdd_afp = get_vectorstore_api("afp")
|
53 |
qdrants = {
|
54 |
tab: pickle_to_document_store(
|
55 |
hf_hub_download(
|
|
|
59 |
)
|
60 |
)
|
61 |
for tab in config["prompt_naming"]
|
62 |
+
if tab != "Presse" and tab != "AFP"
|
63 |
}
|
64 |
|
65 |
## Load Prompts
|
|
|
208 |
]
|
209 |
|
210 |
|
211 |
+
def get_sources(
|
212 |
+
questions, qdrants=qdrants, bdd_presse=bdd_presse, bdd_afp=bdd_afp, config=config
|
213 |
+
):
|
214 |
k = config["num_document_retrieved"]
|
215 |
min_similarity = config["min_similarity"]
|
216 |
+
text, formated = [], []
|
|
|
217 |
for i, (question, tab) in enumerate(zip(questions, list(config["tabs"].keys()))):
|
218 |
+
if tab == "Presse":
|
219 |
+
sources = bdd_presse.similarity_search_with_relevance_scores(
|
220 |
+
question.replace("<p>", "").replace("</p>\n", ""), k=k
|
221 |
+
)
|
222 |
+
sources = [
|
223 |
+
(doc, score) for doc, score in sources if score >= min_similarity
|
224 |
+
]
|
225 |
+
formated.extend(
|
226 |
+
[
|
227 |
+
make_html_presse_source(source[0], j, source[1])
|
228 |
+
for j, source in zip(range(k * i + 1, k * (i + 1) + 1), sources)
|
229 |
+
]
|
230 |
+
)
|
231 |
+
|
232 |
+
elif tab == "AFP":
|
233 |
+
sources = bdd_afp.similarity_search_with_relevance_scores(
|
234 |
+
question.replace("<p>", "").replace("</p>\n", ""), k=k
|
235 |
)
|
236 |
+
sources = [
|
237 |
+
(doc, score) for doc, score in sources if score >= min_similarity
|
238 |
+
]
|
239 |
+
formated.extend(
|
240 |
+
[
|
241 |
+
make_html_afp_source(source[0], j, source[1])
|
242 |
+
for j, source in zip(range(k * i + 1, k * (i + 1) + 1), sources)
|
243 |
+
]
|
244 |
+
)
|
245 |
+
|
246 |
+
else:
|
247 |
+
sources = qdrants[
|
248 |
config["source_mapping"][tab]
|
249 |
].similarity_search_with_relevance_scores(
|
250 |
config["query_preprompt"]
|
251 |
+ question.replace("<p>", "").replace("</p>\n", ""),
|
252 |
k=k,
|
253 |
)
|
254 |
+
sources = [
|
255 |
+
(doc, score) for doc, score in sources if score >= min_similarity
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
]
|
257 |
+
formated.extend(
|
258 |
+
[
|
259 |
+
make_html_source(source[0], j, source[1], config)
|
260 |
+
for j, source in zip(range(k * i + 1, k * (i + 1) + 1), sources)
|
261 |
+
]
|
262 |
+
)
|
263 |
+
|
264 |
text.extend(
|
265 |
[
|
266 |
"\n\n".join(
|
|
|
278 |
return formated, text
|
279 |
|
280 |
|
281 |
+
def retrieve_sources(
|
282 |
+
*questions, qdrants=qdrants, bdd_presse=bdd_presse, bdd_afp=bdd_afp, config=config
|
283 |
+
):
|
284 |
+
formated_sources, text_sources = get_sources(
|
285 |
+
questions, qdrants, bdd_presse, bdd_afp, config
|
286 |
+
)
|
287 |
|
288 |
return (formated_sources, *text_sources)
|
289 |
|
|
|
364 |
component_sources = {elt: gr.State("") for elt in config["tabs"]}
|
365 |
text_sources = {elt: gr.State("") for elt in config["tabs"]}
|
366 |
tab_states = {elt: gr.State(elt) for elt in config["tabs"]}
|
|
|
|
|
|
|
|
|
367 |
|
368 |
with gr.Tab("Q&A", elem_id="main-component"):
|
369 |
with gr.Row(elem_id="chatbot-row"):
|
|
|
419 |
layout="panel",
|
420 |
avatar_images=(
|
421 |
"./assets/logos/help.png",
|
422 |
+
None,
|
423 |
),
|
424 |
)
|
425 |
|
|
|
437 |
layout="panel",
|
438 |
avatar_images=(
|
439 |
"./assets/logos/help.png",
|
440 |
+
None,
|
441 |
),
|
442 |
)
|
443 |
|
|
|
455 |
layout="panel",
|
456 |
avatar_images=(
|
457 |
"./assets/logos/help.png",
|
458 |
+
None,
|
459 |
+
),
|
460 |
+
)
|
461 |
+
|
462 |
+
with gr.Accordion(
|
463 |
+
"AFP agent",
|
464 |
+
open=False,
|
465 |
+
elem_id="accordion-afp",
|
466 |
+
elem_classes="accordion",
|
467 |
+
):
|
468 |
+
chatbots[list(config["tabs"].keys())[5]] = gr.Chatbot(
|
469 |
+
show_copy_button=True,
|
470 |
+
show_share_button=False,
|
471 |
+
show_label=False,
|
472 |
+
elem_id="chatbot-afp",
|
473 |
+
layout="panel",
|
474 |
+
avatar_images=(
|
475 |
+
"./assets/logos/help.png",
|
476 |
+
None,
|
477 |
),
|
478 |
)
|
479 |
|
assets/style.css
CHANGED
@@ -160,6 +160,11 @@ a {
|
|
160 |
font-weight: bold;
|
161 |
}
|
162 |
|
|
|
|
|
|
|
|
|
|
|
163 |
}
|
164 |
|
165 |
textarea.scroll-hide {
|
|
|
160 |
font-weight: bold;
|
161 |
}
|
162 |
|
163 |
+
#accordion-afp>button:nth-child(2)>span:nth-child(1) {
|
164 |
+
color: #9ca1a5e7;
|
165 |
+
font-weight: bold;
|
166 |
+
}
|
167 |
+
|
168 |
}
|
169 |
|
170 |
textarea.scroll-hide {
|
assets/utils_javascript.py
CHANGED
@@ -23,6 +23,7 @@ def accordion_trigger():
|
|
23 |
var accordion_politique = document.getElementById("accordion-politique")
|
24 |
var accordion_legal = document.getElementById("accordion-legal")
|
25 |
var accordion_ademe= document.getElementById("accordion-ademe")
|
|
|
26 |
var accordion_spinoza = document.getElementById("accordion-spinoza")
|
27 |
document.querySelectorAll(".loader").forEach(el => el.remove());
|
28 |
document.querySelectorAll(".loader-helper").forEach(el => el.remove());
|
@@ -31,6 +32,7 @@ def accordion_trigger():
|
|
31 |
accordion_politique.children[1].children[0].textContent = "Politics agent";
|
32 |
accordion_legal.children[1].children[0].textContent = "Law agent";
|
33 |
accordion_ademe.children[1].children[0].textContent = "ADEME agent";
|
|
|
34 |
accordion_spinoza.children[1].children[0].textContent = "Spinoza";
|
35 |
accordion_science.children[1].children[0].innerHTML += "<span class='loader-helper'> - </span>";
|
36 |
accordion_science.children[1].children[0].innerHTML += "<span class='loader'>loading</span>";
|
@@ -42,6 +44,8 @@ def accordion_trigger():
|
|
42 |
accordion_legal.children[1].children[0].innerHTML += "<span class='loader'>loading</span>";
|
43 |
accordion_ademe.children[1].children[0].innerHTML += "<span class='loader-helper'> - </span>";
|
44 |
accordion_ademe.children[1].children[0].innerHTML += "<span class='loader'>loading</span>";
|
|
|
|
|
45 |
}
|
46 |
});
|
47 |
}
|
@@ -56,11 +60,13 @@ def accordion_trigger_end():
|
|
56 |
var accordion_politique = document.getElementById("accordion-politique")
|
57 |
var accordion_legal = document.getElementById("accordion-legal")
|
58 |
var accordion_ademe = document.getElementById("accordion-ademe")
|
|
|
59 |
accordion_science.children[1].children[0].textContent = "Science agent - ready";
|
60 |
accordion_presse.children[1].children[0].textContent = "Press agent - ready";
|
61 |
accordion_politique.children[1].children[0].textContent = "Politics agent - ready";
|
62 |
accordion_legal.children[1].children[0].textContent = "Law agent - ready";
|
63 |
accordion_ademe.children[1].children[0].textContent = "ADEME agent - ready";
|
|
|
64 |
}
|
65 |
"""
|
66 |
|
|
|
23 |
var accordion_politique = document.getElementById("accordion-politique")
|
24 |
var accordion_legal = document.getElementById("accordion-legal")
|
25 |
var accordion_ademe= document.getElementById("accordion-ademe")
|
26 |
+
var accordion_afp= document.getElementById("accordion-afp")
|
27 |
var accordion_spinoza = document.getElementById("accordion-spinoza")
|
28 |
document.querySelectorAll(".loader").forEach(el => el.remove());
|
29 |
document.querySelectorAll(".loader-helper").forEach(el => el.remove());
|
|
|
32 |
accordion_politique.children[1].children[0].textContent = "Politics agent";
|
33 |
accordion_legal.children[1].children[0].textContent = "Law agent";
|
34 |
accordion_ademe.children[1].children[0].textContent = "ADEME agent";
|
35 |
+
accordion_afp.children[1].children[0].textContent = "AFP agent";
|
36 |
accordion_spinoza.children[1].children[0].textContent = "Spinoza";
|
37 |
accordion_science.children[1].children[0].innerHTML += "<span class='loader-helper'> - </span>";
|
38 |
accordion_science.children[1].children[0].innerHTML += "<span class='loader'>loading</span>";
|
|
|
44 |
accordion_legal.children[1].children[0].innerHTML += "<span class='loader'>loading</span>";
|
45 |
accordion_ademe.children[1].children[0].innerHTML += "<span class='loader-helper'> - </span>";
|
46 |
accordion_ademe.children[1].children[0].innerHTML += "<span class='loader'>loading</span>";
|
47 |
+
accordion_afp.children[1].children[0].innerHTML += "<span class='loader-helper'> - </span>";
|
48 |
+
accordion_afp.children[1].children[0].innerHTML += "<span class='loader'>loading</span>";
|
49 |
}
|
50 |
});
|
51 |
}
|
|
|
60 |
var accordion_politique = document.getElementById("accordion-politique")
|
61 |
var accordion_legal = document.getElementById("accordion-legal")
|
62 |
var accordion_ademe = document.getElementById("accordion-ademe")
|
63 |
+
var accordion_afp= document.getElementById("accordion-afp")
|
64 |
accordion_science.children[1].children[0].textContent = "Science agent - ready";
|
65 |
accordion_presse.children[1].children[0].textContent = "Press agent - ready";
|
66 |
accordion_politique.children[1].children[0].textContent = "Politics agent - ready";
|
67 |
accordion_legal.children[1].children[0].textContent = "Law agent - ready";
|
68 |
accordion_ademe.children[1].children[0].textContent = "ADEME agent - ready";
|
69 |
+
accordion_afp.children[1].children[0].textContent = "AFP agent - ready";
|
70 |
}
|
71 |
"""
|
72 |
|
spinoza_project/config.yaml
CHANGED
@@ -11,10 +11,7 @@ tabs:
|
|
11 |
* *Des documents institutionnels (analyses demandées par la France & rapports d'activité)*\n
|
12 |
* *Les plans de transition sectoriels pour les secteurs industriels les plus émetteurs : (verre, papier, ciment, acier, aluminium, chimie, sucre)*"
|
13 |
Presse: "*Outil dédié aux données fournies par Aday concernant la presse.*"
|
14 |
-
|
15 |
-
logo_rsf: "data:image/png;base64,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"
|
16 |
-
|
17 |
-
logo_ap: "data:image/png;base64,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"
|
18 |
|
19 |
source_mapping:
|
20 |
GIEC et IPBES: "Science"
|
@@ -22,6 +19,7 @@ source_mapping:
|
|
22 |
Documents Stratégiques: "Politique"
|
23 |
ADEME: "ADEME"
|
24 |
Presse: "Presse"
|
|
|
25 |
|
26 |
prompt_naming:
|
27 |
Science: "Science"
|
@@ -29,8 +27,8 @@ prompt_naming:
|
|
29 |
Politique: "Politique"
|
30 |
ADEME: "ADEME"
|
31 |
Presse: "Presse"
|
|
|
32 |
|
33 |
-
database_index_path: "./app/data/database_tab_placeholder.pickle"
|
34 |
query_preprompt: "query: "
|
35 |
passage_preprompt: "passage: "
|
36 |
embedding_model: "intfloat/multilingual-e5-base"
|
|
|
11 |
* *Des documents institutionnels (analyses demandées par la France & rapports d'activité)*\n
|
12 |
* *Les plans de transition sectoriels pour les secteurs industriels les plus émetteurs : (verre, papier, ciment, acier, aluminium, chimie, sucre)*"
|
13 |
Presse: "*Outil dédié aux données fournies par Aday concernant la presse.*"
|
14 |
+
AFP: "AFP"
|
|
|
|
|
|
|
15 |
|
16 |
source_mapping:
|
17 |
GIEC et IPBES: "Science"
|
|
|
19 |
Documents Stratégiques: "Politique"
|
20 |
ADEME: "ADEME"
|
21 |
Presse: "Presse"
|
22 |
+
AFP: "AFP"
|
23 |
|
24 |
prompt_naming:
|
25 |
Science: "Science"
|
|
|
27 |
Politique: "Politique"
|
28 |
ADEME: "ADEME"
|
29 |
Presse: "Presse"
|
30 |
+
AFP: "AFP"
|
31 |
|
|
|
32 |
query_preprompt: "query: "
|
33 |
passage_preprompt: "passage: "
|
34 |
embedding_model: "intfloat/multilingual-e5-base"
|
spinoza_project/source/frontend/utils.py
CHANGED
@@ -91,6 +91,22 @@ def make_html_presse_source(source, i, score):
|
|
91 |
"""
|
92 |
|
93 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
def make_html_source(source, i, score, config):
|
95 |
meta = source.metadata
|
96 |
return f"""
|
|
|
91 |
"""
|
92 |
|
93 |
|
94 |
+
def make_html_afp_source(source, i, score):
|
95 |
+
meta = source.metadata
|
96 |
+
return f"""
|
97 |
+
<div class="card" id="doc{i}">
|
98 |
+
<div class="card-content">
|
99 |
+
<h2>Doc {i} - {meta['file_title']} - {meta['file_type']} AFP</h2>
|
100 |
+
<p>{source.page_content}</p>
|
101 |
+
</div>
|
102 |
+
<div class="card-footer">
|
103 |
+
<span>{meta['file_source_type']}</span>
|
104 |
+
<span>Relevance Score : {round(100*score,1)}%</span>
|
105 |
+
</div>
|
106 |
+
</div>
|
107 |
+
"""
|
108 |
+
|
109 |
+
|
110 |
def make_html_source(source, i, score, config):
|
111 |
meta = source.metadata
|
112 |
return f"""
|