Spaces:
Running
Running
Ilyas KHIAT
commited on
Commit
·
0222cea
1
Parent(s):
18b9dfc
enhance graph
Browse files- audit_page/audit.py +16 -5
- audit_page/dialogue_doc.py +106 -22
- audit_page/knowledge_graph.py +77 -0
- config.json +10 -0
- data/transcript.pdf +0 -0
- test.ipynb +1352 -0
- utils/audit/rag.py +17 -7
- utils/audit/response_llm.py +34 -1
- utils/kg/construct_kg.py +24 -2
audit_page/audit.py
CHANGED
@@ -2,7 +2,7 @@ import streamlit as st
|
|
2 |
import pymupdf as fitz
|
3 |
import pyperclip
|
4 |
import clipboard
|
5 |
-
from utils.audit.audit_doc import audit_descriptif_pdf,audit_text
|
6 |
from utils.audit.rag import setup_rag
|
7 |
import dotenv
|
8 |
from utils.audit.audit_audio import evaluate_audio_quality
|
@@ -107,6 +107,15 @@ def handle_display_content(col:st):
|
|
107 |
elif type == "text":
|
108 |
with col.expander("Contenu"):
|
109 |
display_content_text(audit["content"],col)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
110 |
|
111 |
|
112 |
|
@@ -119,8 +128,8 @@ def handle_audit(uploaded_file,type:str):
|
|
119 |
|
120 |
st.session_state.audit = audit_descriptif_pdf(uploaded_file,100)
|
121 |
with st.spinner("Préparation de la DB..."):
|
122 |
-
vectorstore = setup_rag(type,st.session_state.audit["content"])
|
123 |
-
st.session_state.vectorstore = vectorstore
|
124 |
st.session_state.graph = None
|
125 |
st.session_state.cr = ""
|
126 |
|
@@ -145,8 +154,8 @@ def handle_audit(uploaded_file,type:str):
|
|
145 |
st.session_state.audit = {}
|
146 |
st.session_state.audit = evaluate_audio_quality(uploaded_file)
|
147 |
with st.spinner("Préparation de la DB..."):
|
148 |
-
vectorstore = setup_rag(type,st.session_state.audit["content"])
|
149 |
-
st.session_state.vectorstore = vectorstore
|
150 |
st.session_state.graph = None
|
151 |
st.session_state.cr = ""
|
152 |
|
@@ -233,6 +242,8 @@ def audit_main():
|
|
233 |
st.session_state.audit_simplified = {}
|
234 |
if "vectorstore" not in st.session_state:
|
235 |
st.session_state.vectorstore = None
|
|
|
|
|
236 |
if "cr" not in st.session_state:
|
237 |
st.session_state.cr = ""
|
238 |
if "graph" not in st.session_state:
|
|
|
2 |
import pymupdf as fitz
|
3 |
import pyperclip
|
4 |
import clipboard
|
5 |
+
from utils.audit.audit_doc import audit_descriptif_pdf,audit_text,count_tokens
|
6 |
from utils.audit.rag import setup_rag
|
7 |
import dotenv
|
8 |
from utils.audit.audit_audio import evaluate_audio_quality
|
|
|
107 |
elif type == "text":
|
108 |
with col.expander("Contenu"):
|
109 |
display_content_text(audit["content"],col)
|
110 |
+
|
111 |
+
with col.expander("Représentation des contenus"):
|
112 |
+
if st.session_state.chunks is not None:
|
113 |
+
st.write("### Représentation des chunks")
|
114 |
+
st.write("- Nombre de chunks: ",len(st.session_state.chunks))
|
115 |
+
for i,chunk in enumerate(st.session_state.chunks):
|
116 |
+
st.write(f"#### Chunk {i+1} : ({count_tokens(chunk)} tokens) , ({len(chunk.split())} mots)")
|
117 |
+
st.text_area(f"Chunk {i+1}",chunk,height=200)
|
118 |
+
|
119 |
|
120 |
|
121 |
|
|
|
128 |
|
129 |
st.session_state.audit = audit_descriptif_pdf(uploaded_file,100)
|
130 |
with st.spinner("Préparation de la DB..."):
|
131 |
+
vectorstore,chunks = setup_rag(type,st.session_state.audit["content"])
|
132 |
+
st.session_state.vectorstore,st.session_state.chunks = vectorstore,chunks
|
133 |
st.session_state.graph = None
|
134 |
st.session_state.cr = ""
|
135 |
|
|
|
154 |
st.session_state.audit = {}
|
155 |
st.session_state.audit = evaluate_audio_quality(uploaded_file)
|
156 |
with st.spinner("Préparation de la DB..."):
|
157 |
+
vectorstore,chunks = setup_rag(type,st.session_state.audit["content"])
|
158 |
+
st.session_state.vectorstore,st.session_state.chunks = vectorstore
|
159 |
st.session_state.graph = None
|
160 |
st.session_state.cr = ""
|
161 |
|
|
|
242 |
st.session_state.audit_simplified = {}
|
243 |
if "vectorstore" not in st.session_state:
|
244 |
st.session_state.vectorstore = None
|
245 |
+
if "chunks" not in st.session_state:
|
246 |
+
st.session_state.chunks = None
|
247 |
if "cr" not in st.session_state:
|
248 |
st.session_state.cr = ""
|
249 |
if "graph" not in st.session_state:
|
audit_page/dialogue_doc.py
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
import streamlit as st
|
2 |
from textwrap import dedent
|
3 |
from utils.audit.rag import get_text_from_content_for_doc,get_text_from_content_for_audio
|
4 |
-
from utils.audit.response_llm import
|
5 |
from langchain_core.messages import AIMessage, HumanMessage
|
6 |
from st_copy_to_clipboard import st_copy_to_clipboard
|
7 |
-
from utils.kg.construct_kg import get_graph
|
8 |
from audit_page.knowledge_graph import *
|
9 |
import json
|
10 |
import clipboard
|
@@ -27,6 +27,23 @@ def graph_doc_to_json(graph):
|
|
27 |
edges.append({"source": source_id, "label": label, "cible": target_id})
|
28 |
return {"noeuds": nodes, "relations": edges}
|
29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
def chat_history_formatter(chat_history):
|
31 |
formatted_chat = ""
|
32 |
for message in chat_history:
|
@@ -55,6 +72,10 @@ def radio_choice():
|
|
55 |
st.session_state.radio_choice = options.index(choice)
|
56 |
return choice
|
57 |
|
|
|
|
|
|
|
|
|
58 |
|
59 |
def doc_dialog_main():
|
60 |
st.title("Dialogue avec le document")
|
@@ -73,6 +94,9 @@ def doc_dialog_main():
|
|
73 |
#init graph and filter views
|
74 |
if "graph" not in st.session_state:
|
75 |
st.session_state.graph = None
|
|
|
|
|
|
|
76 |
|
77 |
if "filter_views" not in st.session_state:
|
78 |
st.session_state.filter_views = {}
|
@@ -151,13 +175,34 @@ def doc_dialog_main():
|
|
151 |
|
152 |
---
|
153 |
''')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
154 |
|
155 |
|
156 |
if choice == "compte_rendu":
|
157 |
if "cr" not in st.session_state or st.session_state.cr == "":
|
158 |
with st.spinner("Génération du compte rendu..."):
|
159 |
-
cr = generate_response_via_langchain(prompt_cr,stream=False,model="gpt-4o")
|
|
|
160 |
st.session_state.cr = cr
|
|
|
161 |
st.session_state.cr_chat_history = []
|
162 |
else:
|
163 |
cr = st.session_state.cr
|
@@ -170,11 +215,12 @@ def doc_dialog_main():
|
|
170 |
keywords_paragraph = f"### Mots clés extraits:\n- {audit['Mots clés'].strip()}"
|
171 |
with st.container(height=650,border=False):
|
172 |
st.markdown(keywords_paragraph)
|
173 |
-
st.write(cr)
|
|
|
174 |
# col_copy , col_success = st.columns([1,11])
|
175 |
# if col_copy.button("📋",key="copy_cr"):
|
176 |
with st.container(height=50,border=False):
|
177 |
-
st_copy_to_clipboard(keywords_paragraph
|
178 |
# col_success.success("Compte rendu copié dans le presse-papier")
|
179 |
|
180 |
with col2.container(border=True,height=850):
|
@@ -211,25 +257,33 @@ def doc_dialog_main():
|
|
211 |
# col_success_c.success("Historique copié !")
|
212 |
|
213 |
elif choice == "graphe de connaissance":
|
|
|
214 |
if "graph" not in st.session_state or st.session_state.graph == None:
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
number_tokens = audit["Nombre de tokens"]
|
220 |
-
if number_tokens > 10000:
|
221 |
if st.session_state.cr == "":
|
222 |
-
st.session_state.cr =
|
223 |
-
|
|
|
|
|
|
|
224 |
|
225 |
-
graph = get_graph(text,allowed_nodes=allowed_nodes_types)
|
|
|
|
|
|
|
226 |
st.session_state.graph = graph
|
|
|
227 |
st.session_state.filter_views = {}
|
228 |
st.session_state.current_view = None
|
229 |
st.session_state.node_types = None
|
230 |
st.session_state.chat_graph_history = []
|
|
|
231 |
|
232 |
-
|
|
|
233 |
list_node_types = list(node_types)
|
234 |
sorted_node_types = sorted(list_node_types,key=lambda x: x.lower())
|
235 |
print(sorted_node_types)
|
@@ -242,12 +296,15 @@ def doc_dialog_main():
|
|
242 |
|
243 |
if graph is not None:
|
244 |
#st.write(graph)
|
|
|
245 |
|
246 |
-
edges,nodes,config =
|
247 |
-
|
|
|
|
|
248 |
col1, col2 = st.columns([2.5, 1.5])
|
249 |
|
250 |
-
with col1.container(border=True,height=
|
251 |
st.write("##### Visualisation du graphe (**"+st.session_state.current_view+"**)")
|
252 |
filter_col,add_view_col,change_view_col,color_col = st.columns([9,1,1,1])
|
253 |
|
@@ -280,12 +337,39 @@ def doc_dialog_main():
|
|
280 |
|
281 |
# col_copy , col_success = st.columns([1,11])
|
282 |
# if col_copy.button("📋",key="copy_graph"):
|
283 |
-
with st.container(height=
|
284 |
-
graph_json =
|
285 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
286 |
# col_success.success("Graphe copié dans le presse-papier")
|
287 |
|
288 |
-
with col2.container(border=True,height=
|
289 |
st.markdown("##### Dialoguer avec le graphe")
|
290 |
|
291 |
user_query = st.chat_input("Par ici ...")
|
|
|
1 |
import streamlit as st
|
2 |
from textwrap import dedent
|
3 |
from utils.audit.rag import get_text_from_content_for_doc,get_text_from_content_for_audio
|
4 |
+
from utils.audit.response_llm import *
|
5 |
from langchain_core.messages import AIMessage, HumanMessage
|
6 |
from st_copy_to_clipboard import st_copy_to_clipboard
|
7 |
+
from utils.kg.construct_kg import get_graph,get_advanced_graph
|
8 |
from audit_page.knowledge_graph import *
|
9 |
import json
|
10 |
import clipboard
|
|
|
27 |
edges.append({"source": source_id, "label": label, "cible": target_id})
|
28 |
return {"noeuds": nodes, "relations": edges}
|
29 |
|
30 |
+
def advanced_graph_to_json(graph:KnowledgeGraph):
|
31 |
+
nodes = []
|
32 |
+
edges = []
|
33 |
+
for node in graph.entities:
|
34 |
+
node_id = node.name.replace(" ", "_")
|
35 |
+
label = node.name
|
36 |
+
type = node.label
|
37 |
+
nodes.append({"id": node_id, "label": label, "type": type})
|
38 |
+
for relationship in graph.relationships:
|
39 |
+
source = relationship.startEntity
|
40 |
+
source_id = source.name.replace(" ", "_")
|
41 |
+
target = relationship.endEntity
|
42 |
+
target_id = target.name.replace(" ", "_")
|
43 |
+
label = relationship.name
|
44 |
+
edges.append({"source": source_id, "label": label, "cible": target_id})
|
45 |
+
return {"noeuds": nodes, "relations": edges}
|
46 |
+
|
47 |
def chat_history_formatter(chat_history):
|
48 |
formatted_chat = ""
|
49 |
for message in chat_history:
|
|
|
72 |
st.session_state.radio_choice = options.index(choice)
|
73 |
return choice
|
74 |
|
75 |
+
def format_cr(cr:report):
|
76 |
+
formatted_cr = f"### Résumé :\n{cr.summary}\n\n### Notes :\n{cr.Notes}\n\n### Actions :\n{cr.Actions}"
|
77 |
+
return formatted_cr
|
78 |
+
|
79 |
|
80 |
def doc_dialog_main():
|
81 |
st.title("Dialogue avec le document")
|
|
|
94 |
#init graph and filter views
|
95 |
if "graph" not in st.session_state:
|
96 |
st.session_state.graph = None
|
97 |
+
st.session_state.current_chunk_index = 0
|
98 |
+
st.session_state.number_of_entities = 0
|
99 |
+
st.session_state.number_of_relationships = 0
|
100 |
|
101 |
if "filter_views" not in st.session_state:
|
102 |
st.session_state.filter_views = {}
|
|
|
175 |
|
176 |
---
|
177 |
''')
|
178 |
+
prompt_cr2 = dedent(F'''
|
179 |
+
À partir du document ci-dessous, identifiez le type d'ecrit puis, générez un compte rendu détaillé contenant les sections suivantes :
|
180 |
+
|
181 |
+
2. **Résumé** : Fournissez une synthèse complète du document, en mettant en avant les points principaux, les relations essentielles, les concepts , les dates et les lieux, les conclusions et les détails importants.
|
182 |
+
|
183 |
+
3. **Notes** :
|
184 |
+
- Présentez les points clés sous forme de liste à puces avec des émojis pertinents pour souligner la nature de chaque point.
|
185 |
+
- N'oubliez pas de relever tout les entités et les relations.
|
186 |
+
- Incluez des sous-points (sans émojis) sous les points principaux pour offrir des détails ou explications supplémentaires.
|
187 |
+
|
188 |
+
4. **Actions** : Identifiez et listez les actions spécifiques, tâches ou étapes recommandées ou nécessaires selon le contenu du document.
|
189 |
+
|
190 |
+
**Document :**
|
191 |
+
|
192 |
+
{text}
|
193 |
+
|
194 |
+
*Sortie :**
|
195 |
+
Soit exhaustive dans votre réponse, en incluant toutes les informations pertinentes et en les structurant de manière claire et précise, voici des mots clés extraits du document: {audit['Mots clés'].strip()}.
|
196 |
+
''')
|
197 |
|
198 |
|
199 |
if choice == "compte_rendu":
|
200 |
if "cr" not in st.session_state or st.session_state.cr == "":
|
201 |
with st.spinner("Génération du compte rendu..."):
|
202 |
+
#cr = generate_response_via_langchain(prompt_cr,stream=False,model="gpt-4o")
|
203 |
+
cr = generate_structured_response(prompt_cr2)
|
204 |
st.session_state.cr = cr
|
205 |
+
|
206 |
st.session_state.cr_chat_history = []
|
207 |
else:
|
208 |
cr = st.session_state.cr
|
|
|
215 |
keywords_paragraph = f"### Mots clés extraits:\n- {audit['Mots clés'].strip()}"
|
216 |
with st.container(height=650,border=False):
|
217 |
st.markdown(keywords_paragraph)
|
218 |
+
st.write(format_cr(cr))
|
219 |
+
|
220 |
# col_copy , col_success = st.columns([1,11])
|
221 |
# if col_copy.button("📋",key="copy_cr"):
|
222 |
with st.container(height=50,border=False):
|
223 |
+
st_copy_to_clipboard(f"{keywords_paragraph}\n\n{cr}",key="cp_but_cr")
|
224 |
# col_success.success("Compte rendu copié dans le presse-papier")
|
225 |
|
226 |
with col2.container(border=True,height=850):
|
|
|
257 |
# col_success_c.success("Historique copié !")
|
258 |
|
259 |
elif choice == "graphe de connaissance":
|
260 |
+
# st.write(st.session_state.graph)
|
261 |
if "graph" not in st.session_state or st.session_state.graph == None:
|
262 |
+
keywords_list = [keyword.strip() for keyword in audit["Mots clés"].strip().split(",")]
|
263 |
+
allowed_nodes_types =keywords_list+ ["Person","Organization","Location","Event","Date","Time","Ressource","Concept"]
|
264 |
+
number_tokens = audit["Nombre de tokens"]
|
265 |
+
with st.spinner("Synthétisation des informations..."):
|
|
|
|
|
266 |
if st.session_state.cr == "":
|
267 |
+
st.session_state.cr = generate_structured_response(prompt_cr2)
|
268 |
+
entete = st.session_state.cr.summary
|
269 |
+
|
270 |
+
|
271 |
+
with st.spinner("Construction du graphe de connaissance..."):
|
272 |
|
273 |
+
#graph = get_graph(text,allowed_nodes=allowed_nodes_types)
|
274 |
+
# chunk = st.session_state.chunks[st.session_state.current_chunk_index]
|
275 |
+
# print(chunk)
|
276 |
+
graph = get_advanced_graph(format_cr(st.session_state.cr),knowledge_graph=None)
|
277 |
st.session_state.graph = graph
|
278 |
+
st.session_state.current_chunk_index = 0
|
279 |
st.session_state.filter_views = {}
|
280 |
st.session_state.current_view = None
|
281 |
st.session_state.node_types = None
|
282 |
st.session_state.chat_graph_history = []
|
283 |
+
|
284 |
|
285 |
+
|
286 |
+
node_types = get_node_types_advanced(graph)
|
287 |
list_node_types = list(node_types)
|
288 |
sorted_node_types = sorted(list_node_types,key=lambda x: x.lower())
|
289 |
print(sorted_node_types)
|
|
|
296 |
|
297 |
if graph is not None:
|
298 |
#st.write(graph)
|
299 |
+
|
300 |
|
301 |
+
edges,nodes,config = convert_advanced_neo4j_to_agraph(graph,st.session_state.node_types)
|
302 |
+
if "number_of_entities" not in st.session_state or "number_of_relationships" not in st.session_state or st.session_state.number_of_entities == 0 or st.session_state.number_of_relationships == 0:
|
303 |
+
st.session_state.number_of_entities = len(nodes)
|
304 |
+
st.session_state.number_of_relationships = len(edges)
|
305 |
col1, col2 = st.columns([2.5, 1.5])
|
306 |
|
307 |
+
with col1.container(border=True,height=900):
|
308 |
st.write("##### Visualisation du graphe (**"+st.session_state.current_view+"**)")
|
309 |
filter_col,add_view_col,change_view_col,color_col = st.columns([9,1,1,1])
|
310 |
|
|
|
337 |
|
338 |
# col_copy , col_success = st.columns([1,11])
|
339 |
# if col_copy.button("📋",key="copy_graph"):
|
340 |
+
with st.container(height=100,border=False):
|
341 |
+
graph_json = advanced_graph_to_json(graph)
|
342 |
+
subcol1,subcol2,subcol3 = st.columns([1,2,7])
|
343 |
+
with subcol1:
|
344 |
+
st_copy_to_clipboard(json.dumps(graph_json),key="cp_but_graph")
|
345 |
+
generate_button = subcol2.button("génerer plus",key="generate_more")
|
346 |
+
with subcol3:
|
347 |
+
if generate_button:
|
348 |
+
if st.session_state.current_chunk_index >= len(st.session_state.chunks):
|
349 |
+
st.info("Tous les chunks ont été traités")
|
350 |
+
else:
|
351 |
+
with st.spinner(f"Regénération du graphe en incluant le chunk {st.session_state.current_chunk_index} ..."):
|
352 |
+
new_graph = get_advanced_graph(st.session_state.chunks[st.session_state.current_chunk_index],st.session_state.graph)
|
353 |
+
st.session_state.graph = new_graph
|
354 |
+
st.session_state.current_chunk_index += 1
|
355 |
+
st.session_state.number_of_entities = len(new_graph.entities)
|
356 |
+
st.session_state.number_of_relationships = len(new_graph.relationships)
|
357 |
+
st.session_state.filter_views = {}
|
358 |
+
st.session_state.current_view = None
|
359 |
+
st.session_state.node_types = None
|
360 |
+
st.session_state.node_types = get_node_types_advanced(new_graph)
|
361 |
+
list_node_types = list(st.session_state.node_types)
|
362 |
+
sorted_node_types = sorted(list_node_types,key=lambda x: x.lower())
|
363 |
+
nodes_type_dict = list_to_dict_colors(sorted_node_types)
|
364 |
+
st.session_state.node_types = nodes_type_dict
|
365 |
+
st.session_state.filter_views["Vue par défaut"] = list(st.session_state.node_types)
|
366 |
+
st.session_state.current_view = "Vue par défaut"
|
367 |
+
st.rerun()
|
368 |
+
else:
|
369 |
+
st.write(f"{st.session_state.current_chunk_index}/ {len(st.session_state.chunks)} chunks traités ({st.session_state.number_of_entities} entités, {st.session_state.number_of_relationships} relations)")
|
370 |
# col_success.success("Graphe copié dans le presse-papier")
|
371 |
|
372 |
+
with col2.container(border=True,height=900):
|
373 |
st.markdown("##### Dialoguer avec le graphe")
|
374 |
|
375 |
user_query = st.chat_input("Par ici ...")
|
audit_page/knowledge_graph.py
CHANGED
@@ -7,6 +7,7 @@ import math
|
|
7 |
from utils.audit.response_llm import generate_response_via_langchain
|
8 |
from langchain_core.messages import AIMessage, HumanMessage
|
9 |
from langchain_core.prompts import PromptTemplate
|
|
|
10 |
|
11 |
def if_node_exists(nodes, node_id):
|
12 |
"""
|
@@ -44,6 +45,18 @@ def get_node_types(graph):
|
|
44 |
node_types.add(target.type)
|
45 |
return node_types
|
46 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
def color_distance(color1, color2):
|
48 |
# Calculate Euclidean distance between two RGB colors
|
49 |
return math.sqrt((color1[0] - color2[0]) ** 2 + (color1[1] - color2[1]) ** 2 + (color1[2] - color2[2]) ** 2)
|
@@ -130,6 +143,70 @@ def convert_neo4j_to_agraph(neo4j_graph, node_colors):
|
|
130 |
|
131 |
return edges, nodes, config
|
132 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
def display_graph(edges, nodes, config):
|
134 |
# Display the Agraph visualization
|
135 |
return agraph(edges=edges, nodes=nodes, config=config)
|
|
|
7 |
from utils.audit.response_llm import generate_response_via_langchain
|
8 |
from langchain_core.messages import AIMessage, HumanMessage
|
9 |
from langchain_core.prompts import PromptTemplate
|
10 |
+
from itext2kg.models import KnowledgeGraph
|
11 |
|
12 |
def if_node_exists(nodes, node_id):
|
13 |
"""
|
|
|
45 |
node_types.add(target.type)
|
46 |
return node_types
|
47 |
|
48 |
+
def get_node_types_advanced(graph:KnowledgeGraph):
|
49 |
+
node_types = set()
|
50 |
+
for node in graph.entities:
|
51 |
+
node_types.add(node.label)
|
52 |
+
for relationship in graph.relationships:
|
53 |
+
source = relationship.startEntity
|
54 |
+
target = relationship.endEntity
|
55 |
+
node_types.add(source.label)
|
56 |
+
node_types.add(target.label)
|
57 |
+
return node_types
|
58 |
+
|
59 |
+
|
60 |
def color_distance(color1, color2):
|
61 |
# Calculate Euclidean distance between two RGB colors
|
62 |
return math.sqrt((color1[0] - color2[0]) ** 2 + (color1[1] - color2[1]) ** 2 + (color1[2] - color2[2]) ** 2)
|
|
|
143 |
|
144 |
return edges, nodes, config
|
145 |
|
146 |
+
def convert_advanced_neo4j_to_agraph(neo4j_graph:KnowledgeGraph, node_colors):
|
147 |
+
"""
|
148 |
+
Converts a Neo4j graph into an Agraph format.
|
149 |
+
|
150 |
+
Args:
|
151 |
+
neo4j_graph (dict): A dictionary representing the Neo4j graph with keys 'nodes' and 'relationships'.
|
152 |
+
'nodes' is a list of dicts with each dict having 'id' and 'type' keys.
|
153 |
+
'relationships' is a list of dicts with 'source', 'target', and 'type' keys.
|
154 |
+
|
155 |
+
Returns:
|
156 |
+
return_value: The Agraph visualization object.
|
157 |
+
"""
|
158 |
+
nodes = []
|
159 |
+
edges = []
|
160 |
+
|
161 |
+
# Creating Agraph nodes
|
162 |
+
for node in neo4j_graph.entities:
|
163 |
+
# Use the node id as the Agraph node id
|
164 |
+
node_id = node.name.replace(" ", "_") # Replace spaces with underscores for ids
|
165 |
+
label = node.name
|
166 |
+
type = node.label
|
167 |
+
size = 25 # Default size, can be customized
|
168 |
+
shape = "circle" # Default shape, can be customized
|
169 |
+
|
170 |
+
# For example purposes, no images are added, but you can set 'image' if needed.
|
171 |
+
new_node = Node(id=node_id,title=type, label=label, size=size, shape=shape,color=node_colors[type])
|
172 |
+
# if not if_node_exists(nodes, new_node.id):
|
173 |
+
# nodes.append(new_node)
|
174 |
+
nodes.append(new_node)
|
175 |
+
|
176 |
+
# Creating Agraph edges
|
177 |
+
for relationship in neo4j_graph.relationships:
|
178 |
+
size = 25 # Default size, can be customized
|
179 |
+
shape = "circle" # Default shape, can be customized
|
180 |
+
|
181 |
+
source = relationship.startEntity
|
182 |
+
source_type = source.label
|
183 |
+
source_id = source.name.replace(" ", "_")
|
184 |
+
label_source = source.name
|
185 |
+
|
186 |
+
source_node = Node(id=source_id,title=source_type, label=label_source, size=size, shape=shape,color=node_colors[source_type])
|
187 |
+
# if not if_node_exists(nodes, source_node.id):
|
188 |
+
# nodes.append(source_node)
|
189 |
+
|
190 |
+
target = relationship.endEntity
|
191 |
+
target_type = target.label
|
192 |
+
target_id = target.name.replace(" ", "_")
|
193 |
+
label_target = target.name
|
194 |
+
|
195 |
+
target_node = Node(id=target_id,title=target_type, label=label_target, size=size, shape=shape,color=node_colors[target_type])
|
196 |
+
# if not if_node_exists(nodes, target_node.id):
|
197 |
+
# nodes.append(target_node)
|
198 |
+
|
199 |
+
label = relationship.name
|
200 |
+
|
201 |
+
edges.append(Edge(source=source_id, label=label, target=target_id))
|
202 |
+
|
203 |
+
|
204 |
+
# Define the configuration
|
205 |
+
config = Config(width=1200, height=800, directed=True, physics=True, hierarchical=True,from_json="config.json")
|
206 |
+
# Create the Agraph visualization
|
207 |
+
|
208 |
+
return edges, nodes, config
|
209 |
+
|
210 |
def display_graph(edges, nodes, config):
|
211 |
# Display the Agraph visualization
|
212 |
return agraph(edges=edges, nodes=nodes, config=config)
|
config.json
CHANGED
@@ -3,6 +3,14 @@
|
|
3 |
"width": "1200px",
|
4 |
"autoResize": true,
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
"physics":{
|
7 |
"enabled": true,
|
8 |
|
@@ -23,4 +31,6 @@
|
|
23 |
"fit": true
|
24 |
}
|
25 |
}
|
|
|
|
|
26 |
}
|
|
|
3 |
"width": "1200px",
|
4 |
"autoResize": true,
|
5 |
|
6 |
+
"edges":{
|
7 |
+
"smooth": {
|
8 |
+
"enabled": true,
|
9 |
+
"type": "dynamic",
|
10 |
+
"roundness": 0.5
|
11 |
+
}
|
12 |
+
},
|
13 |
+
|
14 |
"physics":{
|
15 |
"enabled": true,
|
16 |
|
|
|
31 |
"fit": true
|
32 |
}
|
33 |
}
|
34 |
+
|
35 |
+
|
36 |
}
|
data/transcript.pdf
ADDED
Binary file (216 kB). View file
|
|
test.ipynb
ADDED
@@ -0,0 +1,1352 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"cells": [
|
3 |
+
{
|
4 |
+
"cell_type": "code",
|
5 |
+
"execution_count": 47,
|
6 |
+
"metadata": {},
|
7 |
+
"outputs": [
|
8 |
+
{
|
9 |
+
"data": {
|
10 |
+
"text/plain": [
|
11 |
+
"True"
|
12 |
+
]
|
13 |
+
},
|
14 |
+
"execution_count": 47,
|
15 |
+
"metadata": {},
|
16 |
+
"output_type": "execute_result"
|
17 |
+
}
|
18 |
+
],
|
19 |
+
"source": [
|
20 |
+
"from utils.audit.audit_doc import *\n",
|
21 |
+
"from utils.kg.construct_kg import *\n",
|
22 |
+
"from dotenv import load_dotenv\n",
|
23 |
+
"\n",
|
24 |
+
"load_dotenv(dotenv_path='.streamlit/.env')"
|
25 |
+
]
|
26 |
+
},
|
27 |
+
{
|
28 |
+
"cell_type": "code",
|
29 |
+
"execution_count": 48,
|
30 |
+
"metadata": {},
|
31 |
+
"outputs": [],
|
32 |
+
"source": [
|
33 |
+
"#load pdf\n",
|
34 |
+
"import pymupdf\n",
|
35 |
+
"\n",
|
36 |
+
"pdf = pymupdf.open(\"data/transcript.pdf\")"
|
37 |
+
]
|
38 |
+
},
|
39 |
+
{
|
40 |
+
"cell_type": "code",
|
41 |
+
"execution_count": 49,
|
42 |
+
"metadata": {},
|
43 |
+
"outputs": [],
|
44 |
+
"source": [
|
45 |
+
"pages = []\n",
|
46 |
+
"for page in pdf:\n",
|
47 |
+
" pages.append(page.get_text())\n"
|
48 |
+
]
|
49 |
+
},
|
50 |
+
{
|
51 |
+
"cell_type": "code",
|
52 |
+
"execution_count": 50,
|
53 |
+
"metadata": {},
|
54 |
+
"outputs": [
|
55 |
+
{
|
56 |
+
"data": {
|
57 |
+
"text/plain": [
|
58 |
+
"54"
|
59 |
+
]
|
60 |
+
},
|
61 |
+
"execution_count": 50,
|
62 |
+
"metadata": {},
|
63 |
+
"output_type": "execute_result"
|
64 |
+
}
|
65 |
+
],
|
66 |
+
"source": [
|
67 |
+
"len(pages)"
|
68 |
+
]
|
69 |
+
},
|
70 |
+
{
|
71 |
+
"cell_type": "code",
|
72 |
+
"execution_count": 51,
|
73 |
+
"metadata": {},
|
74 |
+
"outputs": [],
|
75 |
+
"source": [
|
76 |
+
"from langchain_community.graphs import Neo4jGraph\n",
|
77 |
+
"from langchain_experimental.graph_transformers import LLMGraphTransformer\n",
|
78 |
+
"from langchain_openai import ChatOpenAI\n",
|
79 |
+
"from langchain_core.documents import Document\n",
|
80 |
+
"\n",
|
81 |
+
"def get_graph(text,allowed_nodes=None,prompt=None,multiple_docs=False):\n",
|
82 |
+
" \n",
|
83 |
+
" llm = ChatOpenAI(temperature=0, model_name=\"gpt-4o-2024-08-06\")\n",
|
84 |
+
"\n",
|
85 |
+
" if allowed_nodes:\n",
|
86 |
+
" llm_transformer = LLMGraphTransformer(llm=llm,allowed_nodes=allowed_nodes)\n",
|
87 |
+
" else:\n",
|
88 |
+
" llm_transformer = LLMGraphTransformer(llm=llm)\n",
|
89 |
+
" documents = [Document(page_content=text)]\n",
|
90 |
+
" print(text)\n",
|
91 |
+
"\n",
|
92 |
+
" graph_documents = llm_transformer.convert_to_graph_documents(documents)\n",
|
93 |
+
" \n",
|
94 |
+
" return graph_documents\n"
|
95 |
+
]
|
96 |
+
},
|
97 |
+
{
|
98 |
+
"cell_type": "code",
|
99 |
+
"execution_count": 52,
|
100 |
+
"metadata": {},
|
101 |
+
"outputs": [
|
102 |
+
{
|
103 |
+
"name": "stdout",
|
104 |
+
"output_type": "stream",
|
105 |
+
"text": [
|
106 |
+
"Speaker 1 - 00:00\n",
|
107 |
+
"Est-ce que t'as mis voix 1, voix 2, voix 3, tout ça?\n",
|
108 |
+
"Speaker 2 - 00:04\n",
|
109 |
+
"Quoi? Non, après. Après, avec la voix, je vais reconnaître les gens et\n",
|
110 |
+
"dire voix 1 c'est.\n",
|
111 |
+
"Speaker 1 - 00:11\n",
|
112 |
+
"Andréa, voix 2 c'est... Non, voilà, super.\n",
|
113 |
+
"Speaker 2 - 00:15\n",
|
114 |
+
"Et... Moi je dis merci parce que j'ai pas enregistré.\n",
|
115 |
+
"Speaker 1 - 00:17\n",
|
116 |
+
"Hein?\n",
|
117 |
+
"Speaker 2 - 00:18\n",
|
118 |
+
"Je dis merci Isabelle. Encore? Mais j'ai pas enregistré. J'ai commencé là.\n",
|
119 |
+
"Speaker 1 - 00:22\n",
|
120 |
+
"Merci Isabelle pour tout ce travail fait pour l'association depuis 2014.\n",
|
121 |
+
"\n",
|
122 |
+
"Speaker 2 - 00:30\n",
|
123 |
+
"OK. Bon. On va essayer de travailler un peu et d'animer l'association.\n",
|
124 |
+
"J'ai établi une petite liste qui peut nous occuper, je pense, pendant une\n",
|
125 |
+
"année. J'ai essayé de trouver des thèmes où ça peut intéresser tout le\n",
|
126 |
+
"monde, donc c'est des subventions, c'est comment donner plus de... De\n",
|
127 |
+
"possibilités aux sociétés pour aller chercher plus d'argent. Donc j'ai\n",
|
128 |
+
"sélectionné cinq axes. Je pense qu'aucune d'entre nous sait ce qu'on a\n",
|
129 |
+
"comme droits pour les formations. Et si on sait, on ne sait pas tout.\n",
|
130 |
+
"Donc on va essayer de faire intervenir quelqu'un.\n",
|
131 |
+
"Speaker 1 - 01:24\n",
|
132 |
+
"Le dispositif que vous payez tous.\n",
|
133 |
+
"Speaker 2 - 01:30\n",
|
134 |
+
"Il n'y a pas que ça. Il y a vraiment des subventions qu'on peut aller\n",
|
135 |
+
"chercher sur certains sujets. Des subventions européennes, voire\n",
|
136 |
+
"régionales, etc. Donc on va essayer de faire intervenir quelqu'un qui\n",
|
137 |
+
"nous expliquera qu'est-ce qu'il y a et à quoi on a le droit. Deuxième axe,\n",
|
138 |
+
"on va essayer de travailler sur tout ce qui est intelligence artificielle.\n",
|
139 |
+
"Qui va à une vitesse incroyable dans tous les domaines et il y a des\n",
|
140 |
+
"outils aujourd'hui qui existent pour nous aider au quotidien, voire\n",
|
141 |
+
"améliorer, aller chercher plein de choses en s'appuyant sur l'IA.\n",
|
142 |
+
"Speaker 1 - 02:11\n",
|
143 |
+
"Par rapport à l'axe formation, c'est la formation du dirigeant ou c'est la\n",
|
144 |
+
"formation des collaborateurs?\n",
|
145 |
+
"\n",
|
146 |
+
"Speaker 2 - 02:17\n",
|
147 |
+
"Non, bien sûr. Et surtout, les employés avant tout. Ok. Donc moi je suis\n",
|
148 |
+
"accompagné par un consultant qui est super pro dans ce domaine donc\n",
|
149 |
+
"on va essayer de le faire intervenir peut-être sur plusieurs séances. En\n",
|
150 |
+
"fait c'est important si tu as un bon advocateur, tu peux agir facilement\n",
|
151 |
+
"et avoir plein de subventions. Moi c'était le cas, au début j'essayais,\n",
|
152 |
+
"j'avais jamais de retour et après j'ai eu vraiment la bonne personne et\n",
|
153 |
+
"ils m'ont remboursé à des hauteurs absolument. Il y a des formations\n",
|
154 |
+
"que j'ai eues, ils m'ont pris à 40-50% de la formation. C'est la même\n",
|
155 |
+
"personne qui va t'accompagner.\n",
|
156 |
+
"Speaker 1 - 03:09\n",
|
157 |
+
"Pour la formation?\n",
|
158 |
+
"Speaker 2 - 03:10\n",
|
159 |
+
"Et si lui ne maîtrise pas un sujet, c'est son métier. Il peut nous guider\n",
|
160 |
+
"vers quelqu'un et si toi t'as quelqu'un...\n",
|
161 |
+
"Speaker 1 - 03:17\n",
|
162 |
+
"Mais l'idée, je te laisse finir après.\n",
|
163 |
+
"Speaker 2 - 03:21\n",
|
164 |
+
"Non mais l'idée, on va la développer au fur et à mesure des réunions.\n",
|
165 |
+
"On va essayer de travailler sur la partie transition écologique qui est\n",
|
166 |
+
"très à la mode. Eco-Vadis, ISO pourquoi pas.\n",
|
167 |
+
"\n",
|
168 |
+
"Speaker 1 - 03:41\n",
|
169 |
+
"En fait, il y a plusieurs sujets. Il y a la RSE qui est la responsabilité\n",
|
170 |
+
"sociétale de l'entreprise. Il y a plusieurs d'entre vous qui pourraient\n",
|
171 |
+
"être sollicités par vos clients pour que vous ayez mis en place cette\n",
|
172 |
+
"démarche. Je ne sais pas si toi, tu es sollicité, Guillaume? Non, pas plus\n",
|
173 |
+
"que ça.\n",
|
174 |
+
"Speaker 2 - 04:01\n",
|
175 |
+
"Les banques aujourd'hui, si tu n'es pas RSE, dans le futur proche, elles\n",
|
176 |
+
"ne vont plus travailler avec toi. La responsabilité sociétale de\n",
|
177 |
+
"l'entreprise, on va t'expliquer tout à l'heure.\n",
|
178 |
+
"Speaker 1 - 04:20\n",
|
179 |
+
"Par rapport à la transition écologique, la CCI est opérateur d'une aide\n",
|
180 |
+
"financière que l'ADEME donne aux entreprises. Aujourd'hui, par\n",
|
181 |
+
"exemple, pour que l'entreprise fasse un exemple de diagnostic des\n",
|
182 |
+
"bâtiments d'énergie pour identifier tous les travaux qu'il faut faire. Mais\n",
|
183 |
+
"pas qu'isolation, c'est aussi tout ce qui est éclairage, tout ça, il y a une\n",
|
184 |
+
"aide financière. Aujourd'hui, un diagnostic ne coûte que 3000 euros\n",
|
185 |
+
"parce que le reste est pris en charge par l'ADEME. Et la CCI est\n",
|
186 |
+
"opérateur, c'est-à-dire que nous, on ne fait pas les diagnostics parce\n",
|
187 |
+
"qu'on n'est pas expert, on appelle un bureau d'études expert qui le fait,\n",
|
188 |
+
"mais nous, tout passe par la chambre de commerce. Donc dans ce\n",
|
189 |
+
"même modèle, il y a ce qu'on appelle le diagnostic énergie.\n",
|
190 |
+
"\n",
|
191 |
+
"Speaker 1 - 05:15\n",
|
192 |
+
"Il y a un accompagnement qui s'appelle accompagnement à la maîtrise\n",
|
193 |
+
"du ouvrage, c'est quand tu as déjà identifié ton chantier, un chantier\n",
|
194 |
+
"important, c'est-à-dire 100 000 euros, et tu vas lancer les travaux. Ce\n",
|
195 |
+
"bureau d'études va t'accompagner à rédiger le cahier des charges, à\n",
|
196 |
+
"choisir, à analyser les dévis, les réponses des entreprises qui vont te\n",
|
197 |
+
"faire les travaux, à suivre les travaux, à analyser les dévis, les\n",
|
198 |
+
"matériaux, etc.\n",
|
199 |
+
"Speaker 2 - 05:44\n",
|
200 |
+
"On prend le carbone aussi, c'est un sujet qui est très important.\n",
|
201 |
+
"Speaker 1 - 05:47\n",
|
202 |
+
"Alors il y a le bilan carbone. Le bilan carbone c'est quand on dit, bon,\n",
|
203 |
+
"ton activité génère combien de CO2?\n",
|
204 |
+
"Speaker 2 - 05:56\n",
|
205 |
+
"Ils vont calculer, aller voir tes fournisseurs, les salariés, comment ils\n",
|
206 |
+
"viennent, vélo, voiture...\n",
|
207 |
+
"Speaker 1 - 06:04\n",
|
208 |
+
"Le bilan carbone a trois niveaux, ça s'appelle le scope. Le premier\n",
|
209 |
+
"niveau c'est l'activité. Le deuxième niveau, c'est avec les déplacements\n",
|
210 |
+
"des collaborateurs. Et le troisième niveau, c'est avec tes livraisons. Et\n",
|
211 |
+
"donc, si tu fais venir de la matière première de Chine, t'as un bilan\n",
|
212 |
+
"carbone qui est quand même plus élevé que si tu...\n",
|
213 |
+
"\n",
|
214 |
+
"Speaker 2 - 06:25\n",
|
215 |
+
"Voilà.\n",
|
216 |
+
"Speaker 1 - 06:26\n",
|
217 |
+
"Donc le bilan carbone aussi, voilà, pour tous ces sujets, pour la RSE,\n",
|
218 |
+
"pour accompagner les entreprises à faire la démarche, mais en\n",
|
219 |
+
"répondre à ECOVADIS, parce que ECOVADIS, c'est un label.\n",
|
220 |
+
"Speaker 2 - 06:38\n",
|
221 |
+
"Oui.\n",
|
222 |
+
"Speaker 1 - 06:40\n",
|
223 |
+
"C'est un level de plus et nous on accompagne les entreprises à répondre\n",
|
224 |
+
"à ce questionnaire. Aussi la ISO 1400 c'est pour les industriels, c'est\n",
|
225 |
+
"pour tout ce qui est le respect environnemental. On a une gamme très\n",
|
226 |
+
"grande et tout ça c'est avec les aides financières de l'ADEME et de\n",
|
227 |
+
"l'Union Européenne, nous avons des accompagnements gratuits. Pour\n",
|
228 |
+
"les entreprises PME toujours, mais par.\n",
|
229 |
+
"Speaker 2 - 07:11\n",
|
230 |
+
"Exemple au niveau de... Andréa, le but aujourd'hui c'est de dire voilà les\n",
|
231 |
+
"axes, après on va les détailler, faire des séances de travail, etc. Donc on\n",
|
232 |
+
"peut.\n",
|
233 |
+
"Speaker 1 - 07:21\n",
|
234 |
+
"Trouver un sujet, faire venir un expert ou faire un petit atelier et\n",
|
235 |
+
"ensuite informer les entreprises pour qu'elles puissent bénéficier de ces\n",
|
236 |
+
"accompagnements.\n",
|
237 |
+
"\n",
|
238 |
+
"Speaker 2 - 07:32\n",
|
239 |
+
"Voilà, on va parler tout le temps orienter nos réunions vers l'argent.\n",
|
240 |
+
"Speaker 1 - 07:37\n",
|
241 |
+
"Bien sûr, où est-ce qu'ils peuvent trouver les aides. Parce\n",
|
242 |
+
"qu'effectivement, nous aussi, l'État nous a mandatés. On a des\n",
|
243 |
+
"accompagnements qui sont faits au niveau global de l'entreprise, qui\n",
|
244 |
+
"sont faits par le Conseil et la Chambre de commerce. Mais nous, on doit\n",
|
245 |
+
"rendre un livrable à l'entreprise et à l'État avec la liste des aides\n",
|
246 |
+
"financières qui existe. Là, par exemple, je dois faire un pour EES\n",
|
247 |
+
"Rénovation, ceux qui sont maintenant chez Facility. Je fais ce rendez-\n",
|
248 |
+
"vous avec lui, je lui liste les aides et maintenant il faut que je mette tout\n",
|
249 |
+
"ça dans le plan, donc sur la rénovation des bâtiments. Pour tout ça, il y\n",
|
250 |
+
"a effectivement beaucoup de sujets sur lesquels on peut aller et orienter\n",
|
251 |
+
"les entreprises vers les aides qui existent.\n",
|
252 |
+
"Speaker 2 - 08:25\n",
|
253 |
+
"Les aider surtout à... Tu as parlé d'EcoVadis. C'est un label, mais c'est\n",
|
254 |
+
"un label qui est obligatoire. Moi, j'ai fait une levée de fonds cette année.\n",
|
255 |
+
"La banque m'a dit qu'il faut une notation EcoVadis, sinon on ne discute\n",
|
256 |
+
"pas avec toi.\n",
|
257 |
+
"Speaker 1 - 08:43\n",
|
258 |
+
"Il y a des entreprises qui sont déjà peut-être obligées, parce que les\n",
|
259 |
+
"clients les demandent comme toi, les grands comptes demandent\n",
|
260 |
+
"souvent ça, des labels, des notifications, des qualifications par des\n",
|
261 |
+
"systèmes comme tu dis Ecobaris. Il y a d'autres qui ne sont pas encore\n",
|
262 |
+
"sur ça, mais quand ça va venir...\n",
|
263 |
+
"\n",
|
264 |
+
"Speaker 2 - 09:05\n",
|
265 |
+
"Je pense que ça dépend de la taille de l'entreprise aussi, peut-être. Non.\n",
|
266 |
+
"Non, non.\n",
|
267 |
+
"Speaker 1 - 09:08\n",
|
268 |
+
"Ça dépend des clients.\n",
|
269 |
+
"Speaker 2 - 09:09\n",
|
270 |
+
"Moi je suis en train d'en faire un prêt sur une SI, ils ne me demandent\n",
|
271 |
+
"pas ça. Non, ça n'a rien à voir. C'est pour le business. C'est pour\n",
|
272 |
+
"l'investissement que tu parles? Juste pour l'investissement? Non, si tu\n",
|
273 |
+
"veux faire un emprunt, je ne sais pas, pour ta société. Ils te demandent\n",
|
274 |
+
"ça aujourd'hui. C'est vrai que les profs, ils demandent des ferries après\n",
|
275 |
+
"six ou huit ans, vous savez, pour rien. Ça dépend du montant. Oui, ça\n",
|
276 |
+
"dépend du montant.\n",
|
277 |
+
"Speaker 1 - 09:29\n",
|
278 |
+
"Ça dépend de banque.\n",
|
279 |
+
"Speaker 2 - 09:30\n",
|
280 |
+
"De toute façon, ça va venir. J'ai demandé 2 millions il y a 3 mois. Tu les\n",
|
281 |
+
"as eus? Bah oui. J'en prendrai deux aussi.\n",
|
282 |
+
"Speaker 1 - 09:39\n",
|
283 |
+
"Ils m'ont pas fait chier. Mais c'est pas que les...\n",
|
284 |
+
"\n",
|
285 |
+
"Speaker 2 - 09:41\n",
|
286 |
+
"Après, c'est toujours par rapport au relationnel qu'on a... Non, non. Ça\n",
|
287 |
+
"joue quand même. Non, mais par contre, je rebondis sur toi, SCI.\n",
|
288 |
+
"Attention, parce qu'ils ont voulu me bloquer sur un bâtiment qui était\n",
|
289 |
+
"classé G. Ils me voulaient plus prêter. Ils voulaient plus me prêter quand\n",
|
290 |
+
"c'est des bâtiments maintenant qui sont en normes basses. Genre de\n",
|
291 |
+
"toute façon, j'achète, mais c'est pour tout raser. Donc j'aurais fait une\n",
|
292 |
+
"détestation comme quoi j'allais tout raser. Normalement, ça ne doit pas\n",
|
293 |
+
"bloquer. Tu t'engages en disant je vais faire des travaux. J'ai fait un\n",
|
294 |
+
"papier, ils sont contents. Normalement, le notaire même bloque.\n",
|
295 |
+
"Speaker 1 - 10:19\n",
|
296 |
+
"Mais il dit... Même pour le particulier, moi je viens de faire un prêt et ils\n",
|
297 |
+
"ont demandé le diagnostic NGT.\n",
|
298 |
+
"Speaker 2 - 10:27\n",
|
299 |
+
"Oui, c'est obligatoire.\n",
|
300 |
+
"Speaker 1 - 10:30\n",
|
301 |
+
"Non, mais pas la banque.\n",
|
302 |
+
"Speaker 2 - 10:33\n",
|
303 |
+
"Pour les particuliers, ça va se corser dans trois ans le prêt. Les\n",
|
304 |
+
"bâtiments de fer, de eau, d'énergie. Ok. Quatrième acte, c'est\n",
|
305 |
+
"développer son activité, ce qu'ils appellent marque employeur.\n",
|
306 |
+
"Comment rendre sa société attractive? Donc on va essayer de travailler\n",
|
307 |
+
"sur ce sujet-là. Je parle à visite des sociétés qu'on ne connaît pas dans\n",
|
308 |
+
"la zone. Genre, comment elle s'appelle? Pas Patricia?\n",
|
309 |
+
"\n",
|
310 |
+
"Speaker 1 - 11:08\n",
|
311 |
+
"Sandra qui a proposé en septembre.\n",
|
312 |
+
"Speaker 2 - 11:11\n",
|
313 |
+
"Oui. Ou il y a d'autres... Moi j'aimerais bien faire moi, mais j'ai... Et le\n",
|
314 |
+
"cinquième axe, c'est faciliter l'insertion. On va travailler peut-être avec\n",
|
315 |
+
"la mairie pour prendre des stagiaires de la zone, etc. Voir comment on\n",
|
316 |
+
"peut organiser ça avec les écoles. Il y a l'association même, je t'ai\n",
|
317 |
+
"envoyé. Donc il y a de quoi faire. Donc voilà. Est-ce qu'on peut obtenir\n",
|
318 |
+
"des fiches entreprises? Parce que la formation, il faut qu'on sache à\n",
|
319 |
+
"l'avance combien de salariés, etc.\n",
|
320 |
+
"Speaker 1 - 11:51\n",
|
321 |
+
"Le problème c'est qu'aujourd'hui avec la GPD, je suis très coincée. Par\n",
|
322 |
+
"exemple, si on a un fichier d'entreprise intéressé, je peux aller voir et\n",
|
323 |
+
"copier, des choses comme ça.\n",
|
324 |
+
"Speaker 2 - 12:12\n",
|
325 |
+
"On peut aller sur Papers aujourd'hui, on a tout.\n",
|
326 |
+
"Speaker 1 - 12:15\n",
|
327 |
+
"Après, l'association peut acheter un fichier aussi, ça ne coûte pas\n",
|
328 |
+
"énormément cher.\n",
|
329 |
+
"Speaker 2 - 12:19\n",
|
330 |
+
"Je vais le faire.\n",
|
331 |
+
"\n",
|
332 |
+
"Speaker 1 - 12:20\n",
|
333 |
+
"Mais attends, il faut que tu saches ce que tu veux.\n",
|
334 |
+
"Speaker 2 - 12:25\n",
|
335 |
+
"Je t'ai listé les choses qui peuvent nous intéresser et qu'est-ce qu'on\n",
|
336 |
+
"peut avoir. Parce que... Après, c'est une fiche qu'on peut mettre parce\n",
|
337 |
+
"que ça tu les as quasiment toutes ces informations après t'en as qui.\n",
|
338 |
+
"Speaker 1 - 12:47\n",
|
339 |
+
"Remplissent ces dossiers parce que oui voilà tu complètes la fiche on a\n",
|
340 |
+
"déjà.\n",
|
341 |
+
"Speaker 2 - 12:53\n",
|
342 |
+
"Et plus par exemple le chiffre d'affaires sur certaines aides je pense ça\n",
|
343 |
+
"joue ça c'est lui qui va donner le dossier après il y en a qui remplissent\n",
|
344 |
+
"tout et d'autres non Ouais, on va prendre ce qu'on a, de toute façon...\n",
|
345 |
+
"C'est pour l'adhésion, ça? Oui. C'est surtout... Attends, il y a un truc...\n",
|
346 |
+
"Petite question, étant le... Je suis secrétaire, moi. Justement on va\n",
|
347 |
+
"essayer de le dépenser. L'adhésion pourrait être déjà l'affaire gratuite\n",
|
348 |
+
"non? Faut pas déjà commencer par ça. Non parce que si tu... On n'a pas\n",
|
349 |
+
"beaucoup d'argent, on va à 21.000 ou 21.000. Ouais c'est pas mal et\n",
|
350 |
+
"puis dépensez pas. Non mais on va les dépenser. Il suffit d'un projet et\n",
|
351 |
+
"tout part à la poubelle. Ça dépend du projet. Si tu fais gratuit, tu ne\n",
|
352 |
+
"concernes pas les gens en fait. La somme n'est pas grosse.\n",
|
353 |
+
"\n",
|
354 |
+
"Speaker 2 - 13:48\n",
|
355 |
+
"Non, non, c'est pas la même chose, mais bon. Le but, ce n'était pas de\n",
|
356 |
+
"remplir les caisses, c'est que quand on faisait des choses, on dépensait,\n",
|
357 |
+
"sauf que là, on a été un an vide sans rien faire. Le but, c'est de faire des\n",
|
358 |
+
"choses. On avait essayé de mettre en place des caméras, c'est\n",
|
359 |
+
"l'Amérique qui a probablement fait le truc, mais on devait faire des\n",
|
360 |
+
"aides avec l'Amérique. Convivialité.\n",
|
361 |
+
"Speaker 1 - 14:12\n",
|
362 |
+
"Oui en fait là tout ça c'est très bien mais il faut un planning.\n",
|
363 |
+
"Speaker 2 - 14:16\n",
|
364 |
+
"Justement j'ai donné des axes, on est là pour établir un planning.\n",
|
365 |
+
"Speaker 1 - 14:20\n",
|
366 |
+
"Donc par rapport aux données des entreprises qu'est-ce qu'on va\n",
|
367 |
+
"établir?\n",
|
368 |
+
"Speaker 2 - 14:26\n",
|
369 |
+
"Non mais on va prendre ce qu'on a et moi je peux compléter sur\n",
|
370 |
+
"internet. Moi je peux rajouter, parce que moi.\n",
|
371 |
+
"Speaker 1 - 14:32\n",
|
372 |
+
"Je vais essayer de refaire comme je.\n",
|
373 |
+
"\n",
|
374 |
+
"Speaker 2 - 14:34\n",
|
375 |
+
"L'Ai fait tout au début, le tour de tous les entreprises Il faut venir avec\n",
|
376 |
+
"un projet. On va essayer de mettre ça, faire joli. C'est pour ça que si je\n",
|
377 |
+
"peux y aller avec la décision de cette année parce que du coup on est\n",
|
378 |
+
"déjà... Septembre. Juillet. Juillet c'est mort. Donc septembre il faudrait\n",
|
379 |
+
"qu'on aille tout en place et puis faire le tour. Oui, je vais faire un flyer\n",
|
380 |
+
"pour vraiment qu'on vienne avec quelque chose pour le navire. On\n",
|
381 |
+
"travaille pour vous, on va aller chercher des subventions, de l'argent.\n",
|
382 |
+
"Sinon, il n'y a personne qui va venir. Je ne sais même pas si j'ai le flyer.\n",
|
383 |
+
"Je ne l'ai pas là. Si, si, on a fait un flyer. Il m'en reste encore. C'est toi\n",
|
384 |
+
"qui avais fait les couleurs.\n",
|
385 |
+
"Speaker 1 - 15:21\n",
|
386 |
+
"On va faire avec les données qu'on a. Après, si on a besoin d'aller plus\n",
|
387 |
+
"loin, On verra. J'ai un fichier que j'ai beaucoup travaillé l'année dernière\n",
|
388 |
+
"avec Pierre Gaillard. On a fait le tour. Lui, il faut toujours effectivement\n",
|
389 |
+
"lui demander parce qu'il a toujours les noms des nouvelles entreprises.\n",
|
390 |
+
"Oui, c'est vrai qu'il est là-dedans. On avait fait ça. J'ai un fichier que j'ai\n",
|
391 |
+
"partagé avec lui, que je peux vous partager. Mais il y a beaucoup\n",
|
392 |
+
"d'infos, mais pas le chiffre d'affaires par exemple.\n",
|
393 |
+
"Speaker 2 - 15:53\n",
|
394 |
+
"Le but, Andréa, de ça, pour aller chercher des subventions, au lieu\n",
|
395 |
+
"d'aller faire des demandes entreprise par entreprise, on peut les\n",
|
396 |
+
"grouper et l'impact peut être beaucoup mieux.\n",
|
397 |
+
"Speaker 1 - 16:04\n",
|
398 |
+
"Oui, mais ceux qui donnent les subventions n'analysent pas les dossiers\n",
|
399 |
+
"collectivement.\n",
|
400 |
+
"\n",
|
401 |
+
"Speaker 2 - 16:09\n",
|
402 |
+
"Je comprends, mais on arrive avec un dossier de plusieurs sociétés.\n",
|
403 |
+
"Moi, mon consultant, il m'a dit, précis sur des dossiers, on peut faire\n",
|
404 |
+
"grouper et présenter pour les subventions. C'est pas un dossier, c'est\n",
|
405 |
+
"plusieurs dossiers mais en même temps.\n",
|
406 |
+
"Speaker 1 - 16:32\n",
|
407 |
+
"Par exemple en ce moment, Pierre qui s'occupe du photovoltaïque a 2\n",
|
408 |
+
"dossiers, je crois 3 dossiers, il attend la réponse.\n",
|
409 |
+
"Speaker 2 - 16:40\n",
|
410 |
+
"Non, moi je l'ai eu la réponse. Non, c'est bon? C'est bloqué, je ne sais\n",
|
411 |
+
"pas où c'est bloqué mais c'est bloqué. C'est pas bloqué en fait, ils\n",
|
412 |
+
"traitent les dossiers. Comme moi c'était le premier dossier, on a eu la\n",
|
413 |
+
"réponse il y a une semaine. Ce qu'il a fait Gilda, lui c'est déjà fait, c'est\n",
|
414 |
+
"installé. Clabo lui l'a arrêté pour l'instant, parce qu'il fait son\n",
|
415 |
+
"acquisition.\n",
|
416 |
+
"Speaker 1 - 17:03\n",
|
417 |
+
"Et il y a Manuel.\n",
|
418 |
+
"Speaker 2 - 17:04\n",
|
419 |
+
"Manuel et toi. Et moi, Gilda, il a fait le chiffrage de la mise en état du\n",
|
420 |
+
"toit et des implantages parce que c'était mon problème. Mais\n",
|
421 |
+
"photovoltaïque j'ai rien pour l'instant.\n",
|
422 |
+
"\n",
|
423 |
+
"Speaker 1 - 17:16\n",
|
424 |
+
"Non mais là, t'as une aide spécifique. Pour les travaux de tatouage, pour\n",
|
425 |
+
"la préparer à recevoir les paniers.\n",
|
426 |
+
"Speaker 2 - 17:25\n",
|
427 |
+
"Le but c'était de faire un packaging complet et c'était possible de tout\n",
|
428 |
+
"mettre en même temps. Oui, mais est-ce que tu as fait la demande? Moi\n",
|
429 |
+
"ça a été fait, Gildan a fait les devis, etc. Non, réparation de toit, plus\n",
|
430 |
+
"photovoltaïque dans le même dossier.\n",
|
431 |
+
"Speaker 1 - 17:38\n",
|
432 |
+
"Mais Gildan a rien fait auprès de la région, parce que c'est un dossier\n",
|
433 |
+
"quand même un petit peu complexe, qu'il.\n",
|
434 |
+
"Speaker 2 - 17:42\n",
|
435 |
+
"Faut présenter à la région. Ben moi je suis.\n",
|
436 |
+
"Speaker 1 - 17:46\n",
|
437 |
+
"Inférieur des devis. Oui mais c'est... Laisse-moi, il faut que tu aies les\n",
|
438 |
+
"dévis. Tu as les dévis?\n",
|
439 |
+
"Speaker 2 - 17:53\n",
|
440 |
+
"J'ai pas les dévis en fait.\n",
|
441 |
+
"\n",
|
442 |
+
"Speaker 1 - 17:54\n",
|
443 |
+
"Demande les dévis. Au moment où tu as les dévis, on peut voir pour\n",
|
444 |
+
"faire la démarche de l'aide. Mais là c'est trop tard. Non, c'est pas trop\n",
|
445 |
+
"tard.\n",
|
446 |
+
"Speaker 2 - 18:04\n",
|
447 |
+
"Elle a déjà présenté un dossier juste pour le photovoltaïque.\n",
|
448 |
+
"Speaker 1 - 18:07\n",
|
449 |
+
"Qui?\n",
|
450 |
+
"Speaker 2 - 18:08\n",
|
451 |
+
"Lui. C'est ça, hein? Non, non. En fait, si c'est passé par Gilda et que tu\n",
|
452 |
+
"fais photovoltaïque, il n'y a pas de suite pour l'instant.\n",
|
453 |
+
"Speaker 1 - 18:15\n",
|
454 |
+
"Bon, je vole avec Pierre, parce que je pense que Pierre n'a pas... Parce.\n",
|
455 |
+
"Speaker 2 - 18:20\n",
|
456 |
+
"Que ça, tu gagnes combien à faire un truc comme ça? Ben, les\n",
|
457 |
+
"subventions, c'était beaucoup, hein, je crois. Nous, on a 120 000 euros,\n",
|
458 |
+
"hein, sur un dossier qui fait 370 000. T'as la moitié, c'est presque 50 %,\n",
|
459 |
+
"je vois. T'as combien, t'as? C'est pas négligeable.\n",
|
460 |
+
"\n",
|
461 |
+
"Speaker 1 - 18:35\n",
|
462 |
+
"OK, donc, pour les entreprises, on fera... Je vais noter que l'association\n",
|
463 |
+
"va utiliser... Le fichier existant et selon le mésoin.\n",
|
464 |
+
"Speaker 2 - 18:55\n",
|
465 |
+
"T'as déjà payé la pression ou pas? C'est Pierre qui s'occupe du volto?\n",
|
466 |
+
"Oui.\n",
|
467 |
+
"Speaker 1 - 19:02\n",
|
468 |
+
"Non, pas Pierre Gaillard. C'est Pierre le consultant. C'est un consultant\n",
|
469 |
+
"que j'ai invité.\n",
|
470 |
+
"Speaker 2 - 19:08\n",
|
471 |
+
"Oui, Green il s'appelle.\n",
|
472 |
+
"Speaker 1 - 19:09\n",
|
473 |
+
"Je vois le mec Pierre et on se parle un peu. Parce que je pense pas\n",
|
474 |
+
"qu'Egida a fait le nécessaire pour son dossier. Non, le devis était fait,\n",
|
475 |
+
"mais il.\n",
|
476 |
+
"Speaker 2 - 19:18\n",
|
477 |
+
"M'A dit que je lui ai le transmis.\n",
|
478 |
+
"Speaker 1 - 19:21\n",
|
479 |
+
"Du coup, je sais pas où ça en est. Moi, ce que je voulais faire, c'est.\n",
|
480 |
+
"\n",
|
481 |
+
"Speaker 2 - 19:24\n",
|
482 |
+
"Ce que je leur ai dit. Moi, je veux savoir quelle aide je dois donner. Et\n",
|
483 |
+
"quelle aide j'ai. Et en fonction de l'aide, je le fais ou je le fais pas, tu\n",
|
484 |
+
"vois. Moi, j'ai pas les rangs pour faire tout seul. C'était un truc énorme.\n",
|
485 |
+
"Donc, si j'ai la moitié des aides, c'est bon.\n",
|
486 |
+
"Speaker 1 - 19:42\n",
|
487 |
+
"Donc le devis que tu attends, c'est pour le désamientage.\n",
|
488 |
+
"Speaker 2 - 19:49\n",
|
489 |
+
"Désamientage, il faut tout faire en même temps. C'était tout simple.\n",
|
490 |
+
"Mais Gilda, les gars sont durs.\n",
|
491 |
+
"Speaker 1 - 19:57\n",
|
492 |
+
"Mais tu attends le devis du désamientage de Gilda.\n",
|
493 |
+
"Speaker 2 - 20:00\n",
|
494 |
+
"Et le toit neuf. Ça, j'attends. Ils sont venus, ils ont fait des relevés tout à\n",
|
495 |
+
"de suite.\n",
|
496 |
+
"Speaker 1 - 20:08\n",
|
497 |
+
"Et ça fait presque un an. Je pense que Pierre... Donc là, il.\n",
|
498 |
+
"Speaker 2 - 20:16\n",
|
499 |
+
"Faut contacter le monsieur qui a écrit.\n",
|
500 |
+
"\n",
|
501 |
+
"Speaker 1 - 20:18\n",
|
502 |
+
"Je m'en occupe.\n",
|
503 |
+
"Speaker 2 - 20:20\n",
|
504 |
+
"Et après, il vient chez toi, il fait un constat. Tu fais un projet?\n",
|
505 |
+
"Speaker 1 - 20:25\n",
|
506 |
+
"Non, attends. Parce que tu veux te lancer dans ça?\n",
|
507 |
+
"Speaker 2 - 20:28\n",
|
508 |
+
"Tu le vois? Il est vieux, ton bâtiment. C'est quoi le problème? En fait,\n",
|
509 |
+
"c'est de savoir si la structure supporte... Moi, le problème, si je suis\n",
|
510 |
+
"comme Christian, c'est qu'il n'y a pas le papier qui dit combien le toit...\n",
|
511 |
+
"Elle supporte pas.\n",
|
512 |
+
"Speaker 1 - 20:45\n",
|
513 |
+
"En fait, la problématique, c'est pour installer les panneaux, il intègre\n",
|
514 |
+
"dans la prestation l'étude architecturale de la capacité du toit à recevoir\n",
|
515 |
+
"les panneaux.\n",
|
516 |
+
"Speaker 2 - 20:58\n",
|
517 |
+
"Qui a un certain poids au mètre carrière. Après, t'as la possibilité de\n",
|
518 |
+
"faire un parking avec un toit couvert.\n",
|
519 |
+
"Speaker 1 - 21:06\n",
|
520 |
+
"Des ombrières, c'est ce qu'on appelle des ombrières.\n",
|
521 |
+
"\n",
|
522 |
+
"Speaker 2 - 21:09\n",
|
523 |
+
"Là, ça chiffre. J'ai essayé moi. Ça chiffre aussi? Bon, quand tu veux\n",
|
524 |
+
"t'ouvrir. Mais là-bas, mon nouveau bâtiment, il se porte pas. C'est tout\n",
|
525 |
+
"neuf, ils ne l'ont pas fait pour supporter. Même le mien, il n'est pas\n",
|
526 |
+
"dégueulasse son bâtiment. Et c'est fait par des ingénieurs. Là\n",
|
527 |
+
"aujourd'hui c'est obligatoire, mais comme il date deux ans le projet, ils\n",
|
528 |
+
"ont évité ce problème là. Tu sais la différence ça fait combien? Mais là\n",
|
529 |
+
"pour refaire c'est 200. Bah oui mais oui je me doute.\n",
|
530 |
+
"Speaker 1 - 21:44\n",
|
531 |
+
"C'est n'importe quoi. Pierre je l'avais invité l'année dernière et si c'est\n",
|
532 |
+
"quelque chose que ça t'intéresse je peux lui dire mais lui il te fait payer\n",
|
533 |
+
"son étude.\n",
|
534 |
+
"Speaker 2 - 22:00\n",
|
535 |
+
"Après.\n",
|
536 |
+
"Speaker 1 - 22:04\n",
|
537 |
+
"Le dessus de la toiture qui est important, mais après il fait aussi\n",
|
538 |
+
"l'estimation de ta consommation, de combien tu vas utiliser, combien tu\n",
|
539 |
+
"vas générer, combien mètre carré de panneaux photovoltaïques que tu\n",
|
540 |
+
"vas mettre.\n",
|
541 |
+
"Speaker 2 - 22:17\n",
|
542 |
+
"Tu peux vendre.\n",
|
543 |
+
"Speaker 1 - 22:19\n",
|
544 |
+
"Voilà. Mais après s'il y a trop de gens qui vont... 160 kg, je vais.\n",
|
545 |
+
"\n",
|
546 |
+
"Speaker 2 - 22:22\n",
|
547 |
+
"Mettre sur le toit, j'ai pas besoin. Comme Guillaume il va pas le faire, il\n",
|
548 |
+
"va... Voilà, c'est moi qui vais acheter.\n",
|
549 |
+
"Speaker 1 - 22:33\n",
|
550 |
+
"Parce que les futurs acheteurs peuvent être par exemple Philippe qui\n",
|
551 |
+
"consomme, Clavo qui consomme, toutes les entreprises de mécanique.\n",
|
552 |
+
"Speaker 2 - 22:46\n",
|
553 |
+
"Même s'ils ne sont pas à côté, tu peux vraiment vendre mon bâtiment à\n",
|
554 |
+
"côté là-bas. Mais je ne suis pas en lien direct.\n",
|
555 |
+
"Speaker 1 - 22:52\n",
|
556 |
+
"C'est jusqu'à deux kilomètres encore près du périmètre. C'est ce qu'il\n",
|
557 |
+
"nous a dit. Donc je m'occupe de toi Philippe, parce que je pense qu'il y a\n",
|
558 |
+
"un embrouille là, c'est pas clair. Il défend les évis pour pouvoir... Moi.\n",
|
559 |
+
"Speaker 2 - 23:09\n",
|
560 |
+
"En fait ce que je veux savoir c'est l'ensemble ce que ça va me coûter et\n",
|
561 |
+
"ce que j'ai comme aide. Et si je vois que je peux le faire, je le fais. Si\n",
|
562 |
+
"c'est aberrant, moi je pourrais pas.\n",
|
563 |
+
"Speaker 1 - 23:27\n",
|
564 |
+
"Tu penses aussi qu'en 3 ans, tu seras à la retraite. Est-ce qu'il y a un\n",
|
565 |
+
"intérêt pour toi?\n",
|
566 |
+
"\n",
|
567 |
+
"Speaker 2 - 23:34\n",
|
568 |
+
"Moi, c'est pour valoriser le bâtiment, surtout. T'inquiète-toi, la semaine\n",
|
569 |
+
"prochaine, ça ne vaudra plus rien. Comme ça, on est tranquille. C'est\n",
|
570 |
+
"ma femme. On va dire que ça aurait été le front de gauche. Alors là,\n",
|
571 |
+
"open bar. Les portes ouvertes, tout le monde a tout. C'est ce que tu\n",
|
572 |
+
"aimes. C'est tout à fait ça parce que dans les pays où les...\n",
|
573 |
+
"Speaker 1 - 24:22\n",
|
574 |
+
"On partage, on partage.\n",
|
575 |
+
"Speaker 2 - 24:24\n",
|
576 |
+
"Oui, oui, ça m'arrive.\n",
|
577 |
+
"Speaker 1 - 24:27\n",
|
578 |
+
"Par contre... Oui.\n",
|
579 |
+
"Speaker 2 - 24:29\n",
|
580 |
+
"Je te disais, Christian, t'as déjà payé ou t'as pas payé encore? J'ai pas\n",
|
581 |
+
"payé encore. Eh ben, tu me donnes la facture, je te fais le chèque, t'iras\n",
|
582 |
+
"donner le chèque. Ou je vais l'amener. Non, non, moi je... Tu les vois\n",
|
583 |
+
"souvent? Oui. Bon ben, tu me donnes la facture et je te paye. Mais il me\n",
|
584 |
+
"faut une facture, moi. Parce que je suis un bon trésorier et je paye que\n",
|
585 |
+
"si j'ai une facture. OK. Pas de problème. Parce qu'après, ma... OK. Ma\n",
|
586 |
+
"chère compta, elle va me dire... Mais qu'est-ce que j'ai fait, alors? Deux\n",
|
587 |
+
"fois par mois? C'est bon?\n",
|
588 |
+
"\n",
|
589 |
+
"Speaker 1 - 25:15\n",
|
590 |
+
"Donc, du coup, c'est plané. Alors, après, non, attends, tu voulais que je\n",
|
591 |
+
"choisisse un nom pour ton programme?\n",
|
592 |
+
"Speaker 2 - 25:21\n",
|
593 |
+
"Hum-hum. Moi j'aime bien le premier après. Charme. Moi j'aurais\n",
|
594 |
+
"préféré en marque. Charme parce qu'on peut faire un logo ou un truc\n",
|
595 |
+
"sympa avec ça. Chante l'eau, horizon, attractivité, renouveau,\n",
|
596 |
+
"modernité, entreprise. Le premier est très bien parce que les deux\n",
|
597 |
+
"autres c'est Chanteloup.\n",
|
598 |
+
"Speaker 1 - 25:58\n",
|
599 |
+
"Oui. Je dirais plutôt Sétan vers l'avenir. Plus que Chanteloup parce\n",
|
600 |
+
"qu'on est dans le parc d'activité de Sétan. Chanteloup ça fait trop la\n",
|
601 |
+
"ville. C'est mon point de vue.\n",
|
602 |
+
"Speaker 2 - 26:13\n",
|
603 |
+
"On va voter. Donc toi tu prends quoi? Je ne vote pas.\n",
|
604 |
+
"Speaker 1 - 26:18\n",
|
605 |
+
"Je ne vote pas. En fait je ne comprends pas.\n",
|
606 |
+
"\n",
|
607 |
+
"Speaker 2 - 26:22\n",
|
608 |
+
"Excuse-moi. On va juste donner un nom à ces axes. Quand on fait des\n",
|
609 |
+
"flyers, on va mettre ça en avant. On va faire un flyer. Dans Charme, il y\n",
|
610 |
+
"a chantelot, horizon, attractivité, renouveau, modernité. Tu n'as pas fait\n",
|
611 |
+
"d'autres exemples, en fait. Mais si, j'ai donné trois... Vers l'avenir et\n",
|
612 |
+
"future innovation. C'est pour faire genre... C'est ton futur. C'est ton\n",
|
613 |
+
"avenir.\n",
|
614 |
+
"Speaker 1 - 27:19\n",
|
615 |
+
"Vers l'avenir ou avenir.\n",
|
616 |
+
"Speaker 2 - 27:21\n",
|
617 |
+
"C'est temps à venir, vers l'avenir. Bon, on verra.\n",
|
618 |
+
"Speaker 1 - 27:28\n",
|
619 |
+
"C'est pas ça qui va faire... Non.\n",
|
620 |
+
"Speaker 2 - 27:29\n",
|
621 |
+
"Non, non, c'est pas ça. Bon, c'est lui. Oula. Vers l'avenir, c'est mieux que\n",
|
622 |
+
"chambre, on sait pas où on va. On sait pas ce que c'est comme\n",
|
623 |
+
"association. Ben, oui, ça fait... Oh ben alors, moi je croyais que t'allais te\n",
|
624 |
+
"faire tomber dedans. Justement, c'est pour cela qu'on va détailler ce\n",
|
625 |
+
"que c'est charme. On les met en couleurs, c'est pas charme. Faut mieux,\n",
|
626 |
+
"ouais, parce qu'on parle pas... On parle pas... Ça fait un peu maison...\n",
|
627 |
+
"Maison, vous êtes obligés de faire un téléphone rose, mais...\n",
|
628 |
+
"Speaker 1 - 28:02\n",
|
629 |
+
"Une hotline.\n",
|
630 |
+
"\n",
|
631 |
+
"Speaker 2 - 28:04\n",
|
632 |
+
"Ma marque, elle marchera pas beaucoup avec la hotline. Oh, la\n",
|
633 |
+
"catastrophe. Pourquoi ça marche, moi, ça? Je sais pas, mais... Moi aussi,\n",
|
634 |
+
"j'en avais essayé, je m'en fous. J'ai pas de problème. J'ai une ligne\n",
|
635 |
+
"dédiée, moi. Moi je suis en ADSL. Me repérer la dernière fois, t'es basée\n",
|
636 |
+
"où? Là-bas, rue des... Juste derrière moi, là. Ouais, juste derrière, là.\n",
|
637 |
+
"Oui? Non! Bodo! Côté d'AD déconstruction. AD déconstruction, pas\n",
|
638 |
+
"facile. Mais par exemple, je sais pas s'ils ont l'électronique et puis s'ils...\n",
|
639 |
+
"Avant le virage. Avant le virage. D'accord, avant le virage. À droite.\n",
|
640 |
+
"Juste avant Liba. S-T-I-M, Liba. Oui. Juste avant le virage. Après. Juste\n",
|
641 |
+
"devant le terrain vaguement. La deuxième à droite. La deuxième\n",
|
642 |
+
"décharge. Voilà.\n",
|
643 |
+
"Speaker 1 - 29:01\n",
|
644 |
+
"Moi, je pense qu'on connaît que c'est 7 ans. Donc, je propose que ce soit\n",
|
645 |
+
"7 ans vers l'avenir ou 7 ans vers l'avenir.\n",
|
646 |
+
"Speaker 2 - 29:11\n",
|
647 |
+
"C'est bien.\n",
|
648 |
+
"Speaker 1 - 29:11\n",
|
649 |
+
"Parce qu'on garde...\n",
|
650 |
+
"Speaker 2 - 29:13\n",
|
651 |
+
"On opte pour le deuxième. J'ai gardé 7 ans. T'as piqué mon stylo, c'est\n",
|
652 |
+
"pas grave. Je te le laisse après.\n",
|
653 |
+
"\n",
|
654 |
+
"Speaker 1 - 29:17\n",
|
655 |
+
"Non, non. J'ai noté.\n",
|
656 |
+
"Speaker 2 - 29:19\n",
|
657 |
+
"Donc, c'est ton.\n",
|
658 |
+
"Speaker 1 - 29:20\n",
|
659 |
+
"C'est bon pour toi aussi, Laurent?\n",
|
660 |
+
"Speaker 2 - 29:21\n",
|
661 |
+
"C'est ton avenir. C'est ton destin. Vert. C'est ton destin. C'est ton avenir.\n",
|
662 |
+
"Speaker 1 - 29:24\n",
|
663 |
+
"C'est ton avenir.\n",
|
664 |
+
"Speaker 2 - 29:25\n",
|
665 |
+
"Oui, oui. Non, mais... C'est pas mal! Non, non. Ça peut être très inconnu\n",
|
666 |
+
"quand même. C'est pas mal. C'est pas mal. Non, non, mais ben y'a pas.\n",
|
667 |
+
"J'aime beaucoup.\n",
|
668 |
+
"Speaker 1 - 29:38\n",
|
669 |
+
"C'est le temps à venir.\n",
|
670 |
+
"\n",
|
671 |
+
"Speaker 2 - 29:40\n",
|
672 |
+
"J'aime beaucoup. C'est temps à venir, on va jouer sur l'humour. Essayer\n",
|
673 |
+
"de faire un truc... Ok.\n",
|
674 |
+
"Speaker 1 - 29:52\n",
|
675 |
+
"Après tu peux, en fait, tu peux faire... Tu peux modifier le logo, la\n",
|
676 |
+
"baseline du logo de Cétendéveloppement parce qu'on avait deux logos,\n",
|
677 |
+
"on avait le logo tout court Cétendéveloppement et on avait un logo\n",
|
678 |
+
"Cétendéveloppement avec la baseline. Ça c'est le logo. Et la baseline,\n",
|
679 |
+
"c'est ce qui est écrit en bas. On avait fait un atelier pour ça, vous\n",
|
680 |
+
"souvenez au tout départ. Et la baseline, c'était conjuguons nos talents\n",
|
681 |
+
"pour réussir ensemble. C'était la baseline de cet an. Donc maintenant,\n",
|
682 |
+
"tu peux refaire un logo. C'est ton développement. Et après en bas, tu\n",
|
683 |
+
"peux mettre… C'est ton avenir. C'est ton avenir. Et tu peux prendre\n",
|
684 |
+
"quelques mots de ce que tu avais choisi, renouveau, attractivité, voilà.\n",
|
685 |
+
"Faire une baseline comme ça. Je vous propose d'acter un planning c'est\n",
|
686 |
+
"bon?\n",
|
687 |
+
"Speaker 1 - 31:04\n",
|
688 |
+
"Donc déjà, on avait dit que Sandra pouvait nous faire une visite à la\n",
|
689 |
+
"rentrée, et il y a aussi les 30 ans du relais. Je pense que c'est important\n",
|
690 |
+
"que les entreprises participent. C'est un membre fondateur, ils sont là\n",
|
691 |
+
"depuis le temps. OK. Donc, je crois que c'est le 27 septembre. Bon, je\n",
|
692 |
+
"note en septembre donc il y a les comptants du ralais. Je crois que c'est\n",
|
693 |
+
"le 27, c'est un vendredi elle a dit. C'est le vendredi.\n",
|
694 |
+
"Speaker 2 - 31:54\n",
|
695 |
+
"Après il y aura une visite chez Magic Model.\n",
|
696 |
+
"\n",
|
697 |
+
"Speaker 1 - 31:56\n",
|
698 |
+
"La visite, on peut la faire en octobre comme ça on fait un trou par mois.\n",
|
699 |
+
"Mais bon, déjà, attendons que les gens s'inscrivent. Si on a trop de\n",
|
700 |
+
"monde, on fait d'autres dates. On ne va pas commencer en disant un an,\n",
|
701 |
+
"mais on limite. On attend, en connaissant les gens. Après, il y avait...\n",
|
702 |
+
"Est-ce qu'on peut.\n",
|
703 |
+
"Speaker 2 - 32:29\n",
|
704 |
+
"Intervenir sur le premier axe? En septembre.\n",
|
705 |
+
"Speaker 1 - 32:37\n",
|
706 |
+
"Sur la formation? Bah si en novembre, si on fait un truc en novembre,\n",
|
707 |
+
"une intervention sur la formation et les opcos, tout ça, cela non.\n",
|
708 |
+
"Speaker 2 - 32:52\n",
|
709 |
+
"Pourquoi tu fais pas ça à la prochaine?\n",
|
710 |
+
"Speaker 1 - 32:56\n",
|
711 |
+
"La prochaine, c'est quoi?\n",
|
712 |
+
"Speaker 2 - 32:58\n",
|
713 |
+
"Septembre.\n",
|
714 |
+
"Speaker 1 - 32:59\n",
|
715 |
+
"Oui mais en septembre, il y a le fronton de relais. Tu envies ça? On peut\n",
|
716 |
+
"faire... Dispatcher, pas tout faire dans le même mois.\n",
|
717 |
+
"\n",
|
718 |
+
"Speaker 2 - 33:08\n",
|
719 |
+
"De toute façon, on n'arrivera pas à tout faire dans le même mois. Par\n",
|
720 |
+
"l'expérience. Par l'expérience, on va pas vraiment en réfléchir. Parce\n",
|
721 |
+
"que les gens, ils soufflent pas.\n",
|
722 |
+
"Speaker 1 - 33:22\n",
|
723 |
+
"C'est pour ça qu'on s'essouffle. C'est pour ça qu'on s'essouffle.\n",
|
724 |
+
"Speaker 2 - 33:27\n",
|
725 |
+
"Les visites, c'est de la convivialité, c'est...\n",
|
726 |
+
"Speaker 1 - 33:32\n",
|
727 |
+
"Oui, mais c'est du temps pour les gens aussi. Après, il faut savoir que la\n",
|
728 |
+
"moyenne de participants que tu as au niveau de l'association, pour les\n",
|
729 |
+
"ateliers, t'as entre 5 et 8 personnes à peu près, pour les ateliers\n",
|
730 |
+
"thématiques. Après, pour les troupes conviviaux, la galette, le barbecue,\n",
|
731 |
+
"la gée, tu peux aller jusqu'à 15, mais ça c'est la moyenne du nombre de\n",
|
732 |
+
"participants. Il faut que tu gardes ça en tête. Si tu vas solliciter un\n",
|
733 |
+
"intervenant, tu lui dis. Moi, quand j'ai les intervenants, je dis c'est un\n",
|
734 |
+
"petit comité, c'est plutôt atelier. Il faut leur dire pour qu'ils s'adaptent\n",
|
735 |
+
"aussi et qu'ils n'attendent pas à avoir un auditorium. Donc...\n",
|
736 |
+
"Speaker 2 - 34:21\n",
|
737 |
+
"Sauf si on arrive à amener le message aux gens en disant, venez, c'est\n",
|
738 |
+
"dans votre intérêt. On va parler argent pour vous.\n",
|
739 |
+
"\n",
|
740 |
+
"Speaker 1 - 34:29\n",
|
741 |
+
"Bien sûr. Mais bon, des fois, même si on leur dit ça, les gens ne\n",
|
742 |
+
"viennent pas. Souviens-toi de la réunion qu'on a faite sur la retraite qui\n",
|
743 |
+
"était très intéressante avec ton consultant. On était autour de la table,\n",
|
744 |
+
"moins de dix. C'est toujours comme ça.\n",
|
745 |
+
"Speaker 2 - 34:47\n",
|
746 |
+
"Il y a combien d'adhérents, une société à l'Association? Je crois. Autour\n",
|
747 |
+
"de 25, 30. C'est toujours les mêmes qui viennent, je pense. Oui.\n",
|
748 |
+
"Speaker 1 - 34:56\n",
|
749 |
+
"Voilà, c'est toujours les mêmes qui se déplacent. Il y a ceux qui\n",
|
750 |
+
"adhèrent et ne viennent jamais.\n",
|
751 |
+
"Speaker 2 - 35:01\n",
|
752 |
+
"Après, il y a des nouveaux qu'on peut récupérer encore. Voilà, et puis il\n",
|
753 |
+
"y a des groupes. Donc il y a des pyramides où il n'y a pas de\n",
|
754 |
+
"responsable. Il a été remplacé? Je ne sais pas. Il devait me donner le\n",
|
755 |
+
"nom, je n'ai jamais eu le nom. Moi non plus. Mais il l'a mis dans la boîte\n",
|
756 |
+
"de mes parents. Je sais, il me l'a dit la dernière fois. Il devait me passer\n",
|
757 |
+
"les infos, mais il ne les a pas eues. Après, il m'a dit que je ne.\n",
|
758 |
+
"Speaker 1 - 35:37\n",
|
759 |
+
"Fais plus partie du truc.\n",
|
760 |
+
"\n",
|
761 |
+
"Speaker 2 - 35:40\n",
|
762 |
+
"Il s'est fait virer, c'est ça? Non mais il faut s'agir à l'époque. En commun\n",
|
763 |
+
"accord, il m'a dit. Ça veut dire un merci gentiment. Gentiment. Mais\n",
|
764 |
+
"comme l'idée le fait tout le temps. Parce que le premier... Le premier\n",
|
765 |
+
"éjecté sauf en pertes et fautes. Le premier, il est arrivé, il était le jour\n",
|
766 |
+
"du soir, il a allumé son ordinateur, et là il y avait un message. Monsieur,\n",
|
767 |
+
"à minuit, vous n'aurez plus accès au bâtiment, veuillez remettre vos clés\n",
|
768 |
+
"et sortez tout de suite.\n",
|
769 |
+
"Speaker 1 - 36:08\n",
|
770 |
+
"Pourquoi ça?\n",
|
771 |
+
"Speaker 2 - 36:09\n",
|
772 |
+
"Parce qu'en fait, Quand ils signent leur contrat, ils ont la somme à côté.\n",
|
773 |
+
"Donc le jour qu'on vous dit au revoir, vous aurez cette somme là.\n",
|
774 |
+
"Speaker 1 - 36:19\n",
|
775 |
+
"Mais c'est pas légal ça?\n",
|
776 |
+
"Speaker 2 - 36:21\n",
|
777 |
+
"C'est le système allemand. Si tu signes. En France, tu peux pas le faire,\n",
|
778 |
+
"mais eux, c'est des groupes étrangers, donc... C'est des Allemands, en\n",
|
779 |
+
"France.\n",
|
780 |
+
"Speaker 1 - 36:30\n",
|
781 |
+
"La végétarienne.\n",
|
782 |
+
"\n",
|
783 |
+
"Speaker 2 - 36:31\n",
|
784 |
+
"Oui, mais ils s'en foutent. Parce que tu signes... Mais au départ, tu\n",
|
785 |
+
"signes. C'est d'accord, déjà. Le Code du Travail, ça n'applique avant\n",
|
786 |
+
"tout. Oui, mais je suis d'accord. Mais ils sont malins. C'est comme les\n",
|
787 |
+
"étudiants chez Leclerc. Ils embauchent les étudiants chez Leclerc, ça\n",
|
788 |
+
"fait un scandale. Ils font des CDD. Et ils leur disent, t'es étudiant, tu vas\n",
|
789 |
+
"bosser 6 mois ou 8 mois chez nous. Au départ, ils leur font signer une\n",
|
790 |
+
"lettre de démission. C'est une lettre de démission à eux propres, qu'ils\n",
|
791 |
+
"signent, et le jour qu'ils n'ont plus besoin d'eux, ils sortent leur lettre à\n",
|
792 |
+
"eux. On a fait la demande de démissionner, mais eux, ils n'ont rien\n",
|
793 |
+
"demandé. C'est qu'on les force à dégager. C'est un système qui est\n",
|
794 |
+
"comme ça, qui est dégueulasse. Oui, c'est pas normal. Oui, mais dans ce\n",
|
795 |
+
"cas-là, les gens.\n",
|
796 |
+
"Speaker 1 - 37:15\n",
|
797 |
+
"Disent « je signe pas », et.\n",
|
798 |
+
"Speaker 2 - 37:16\n",
|
799 |
+
"On ne t'en bouge pas.\n",
|
800 |
+
"Speaker 1 - 37:19\n",
|
801 |
+
"C'est pas légal.\n",
|
802 |
+
"Speaker 2 - 37:20\n",
|
803 |
+
"Je suis d'accord avec toi. Mais ils font le système. Comme la plupart des\n",
|
804 |
+
"jeunes ont envie de bosser pendant la période d'études, ils signent.\n",
|
805 |
+
"Mais c'est énorme, c'est plus de 50%! C'est une marque à l'État! Par\n",
|
806 |
+
"contre là, ils ont... Ils ont l'option de plein air à la gueule. Et là, moi, j'en\n",
|
807 |
+
"ai demandé une formation pour changer de logiciel de gestion. Mais\n",
|
808 |
+
"c'est compliqué!\n",
|
809 |
+
"\n",
|
810 |
+
"Speaker 1 - 38:29\n",
|
811 |
+
"Oh là là, mais vous avez déjà.\n",
|
812 |
+
"Speaker 2 - 38:30\n",
|
813 |
+
"Dépassé le budget de 900. Après, le bon interlocuteur, c'est quand tu\n",
|
814 |
+
"l'as. Moi, je te dis… Oui, quel est ton interlocuteur? Pour les formations.\n",
|
815 |
+
"Moi, depuis que j'ai un RH… Tu es obligé de passer par un… Parce que\n",
|
816 |
+
"moi, pour te dire, une fois, je fais une intervention pour une formation,\n",
|
817 |
+
"j'avais 4 000 euros de formation. J'avais le droit à 2 000. Et puis, le\n",
|
818 |
+
"gars, il arrive, il me dit non, mais attends, aujourd'hui, on a des infos\n",
|
819 |
+
"supplémentaires, etc. Je peux te ralloyer 1 000 euros en plus. Donc de 4\n",
|
820 |
+
"000, je suis passé à 1 000 de dépenses. Et t'es obligé de passer par la\n",
|
821 |
+
"défi, mais... C'est un défi pour le... T'as pas compris l'idée. L'axe, là,\n",
|
822 |
+
"c'est bien sûr européen.\n",
|
823 |
+
"Speaker 1 - 39:17\n",
|
824 |
+
"Je croyais que le 7000, c'était pas un petit...\n",
|
825 |
+
"Speaker 2 - 39:20\n",
|
826 |
+
"C'est au-delà de ce qu'on connaît. Le gars, il va dire... Voilà, il y a ça, ça,\n",
|
827 |
+
"ça, ça. Vous avez le droit à ça, ça, ça, ça. Et moi, j'ai un contact, donc je\n",
|
828 |
+
"gagne. C'est-à-dire qu'avant, je faisais le dossier, Et puis, j'étais\n",
|
829 |
+
"remboursé, mais les dossiers sont mal préparés. Que là, maintenant, lui\n",
|
830 |
+
"vient, il me fait le dossier, et là, il me dit, bah tiens, cette année-là, on\n",
|
831 |
+
"va pouvoir rajouter 10%, 20%.\n",
|
832 |
+
"Speaker 1 - 39:42\n",
|
833 |
+
"Oui, CETIM, c'est une organisation, un peu, de la filière.\n",
|
834 |
+
"\n",
|
835 |
+
"Speaker 2 - 39:47\n",
|
836 |
+
"Je fais ça depuis 13 ans, moi. Moi, je l'ai fait quand j'ai découvert ça.\n",
|
837 |
+
"Speaker 1 - 39:51\n",
|
838 |
+
"C'est quelle filière? CETIM, c'est les industriels, de la mécanique.\n",
|
839 |
+
"Speaker 2 - 39:56\n",
|
840 |
+
"Je ne suis pas concerné, l'intergo, non.\n",
|
841 |
+
"Speaker 1 - 39:58\n",
|
842 |
+
"Mais tu dois avoir un opco, un truc comme ça, un organisme auquel tu\n",
|
843 |
+
"contribues financièrement.\n",
|
844 |
+
"Speaker 2 - 40:03\n",
|
845 |
+
"L'avantage de la métallurgie, il y a plein de contraintes au niveau\n",
|
846 |
+
"salarié, c'est catastrophique, mais tu as des aides aussi. Mais justement,\n",
|
847 |
+
"moi je ne suis pas à la convention de la métallurgie.\n",
|
848 |
+
"Speaker 1 - 40:13\n",
|
849 |
+
"Alors, ce que je te propose, si tu veux, comme en septembre il y a les 30\n",
|
850 |
+
"ans du relais, mais nous on n'organise rien, je vous invite vitement à y\n",
|
851 |
+
"aller, On peut organiser quelque chose en septembre si t'es très pressé\n",
|
852 |
+
"pour organiser un atelier en septembre.\n",
|
853 |
+
"Speaker 2 - 40:31\n",
|
854 |
+
"C'est pas l'histoire d'être pressé.\n",
|
855 |
+
"\n",
|
856 |
+
"Speaker 1 - 40:32\n",
|
857 |
+
"Non mais c'est important d'avoir un rythme, ça c'est clair.\n",
|
858 |
+
"Speaker 2 - 40:35\n",
|
859 |
+
"Parce que si on va en novembre, s'il y a des choses qu'on doit faire,\n",
|
860 |
+
"l'année elle est ratée.\n",
|
861 |
+
"Speaker 1 - 40:41\n",
|
862 |
+
"Oui, mais ton année, cette année, c'est... Commence en juillet, donc...\n",
|
863 |
+
"Oui, mais plus.\n",
|
864 |
+
"Speaker 2 - 40:47\n",
|
865 |
+
"On anticipe les choses, parce que là.\n",
|
866 |
+
"Speaker 1 - 40:49\n",
|
867 |
+
"Le premier sujet, c'est de l'argent. Donc, on va dire qu'en septembre, tu\n",
|
868 |
+
"voudrais faire un atelier sur... Un atelier sur le sujet de la formation.\n",
|
869 |
+
"Donc, il faut demander à ton... Ton conjuntant de te trouver un\n",
|
870 |
+
"interlocuteur. Je peux voir avec mes collègues qui s'occupent de tout ce\n",
|
871 |
+
"qui est RH, comment ça se passe, Si il y a des contacts dans les\n",
|
872 |
+
"soccos...\n",
|
873 |
+
"Speaker 2 - 41:13\n",
|
874 |
+
"Lui c'est son métier. Moi il m'accompagne dans plusieurs sujets. Il m'a\n",
|
875 |
+
"dit qu'il peut faire ce thème-là même si c'est pas dans son... Il peut...\n",
|
876 |
+
"C'est un grand cabinet à Bordeaux.\n",
|
877 |
+
"\n",
|
878 |
+
"Speaker 1 - 41:26\n",
|
879 |
+
"Après tu peux le faire à distance.\n",
|
880 |
+
"Speaker 2 - 41:30\n",
|
881 |
+
"Non, non, il vient. Moi j'ai un contrat avec lui. Il vient deux jours par\n",
|
882 |
+
"mois. Ok.\n",
|
883 |
+
"Speaker 1 - 41:38\n",
|
884 |
+
"Donc après il y avait la visite des magiques modèles qu'on peut faire en\n",
|
885 |
+
"octobre. Donc après il faut définir qui fait quoi. Après je vous propose,\n",
|
886 |
+
"qui a été évoqué, l'intérêt de faire cette collecte mutualisée comme ce\n",
|
887 |
+
"qu'on avait fait chez L'Oralet. Philippe, la collecte mutualisée. On m'a\n",
|
888 |
+
"dit, si vous voulez qu'on.\n",
|
889 |
+
"Speaker 2 - 42:03\n",
|
890 |
+
"La fasse... Pourquoi tu ne la fais pas chez Nicolas?\n",
|
891 |
+
"Speaker 1 - 42:08\n",
|
892 |
+
"Si, je peux demander à Nicolas de nous prêter le site. Je n'ai pas dit\n",
|
893 |
+
"qu'on va le faire, je le relais. Mais il faut valider déjà l'idée que le\n",
|
894 |
+
"bureau valide l'idée de faire une collecte.\n",
|
895 |
+
"Speaker 2 - 42:20\n",
|
896 |
+
"Oui. Ce n'est pas un concurrent pour lui?\n",
|
897 |
+
"\n",
|
898 |
+
"Speaker 1 - 42:27\n",
|
899 |
+
"Non. Non, parce qu'Aptima ne fait pas des collectes porte-à-porte des\n",
|
900 |
+
"déchets. Aptima, c'est un gestionnaire de déchetterie Donc si vous\n",
|
901 |
+
"voulez on peut faire une collecte, mutualiser des déchets, je peux m'en\n",
|
902 |
+
"occuper, je peux voir avec Aptima, mais aussi avec Nicolas, leur\n",
|
903 |
+
"proposer l'idée, mais peut-être que je ne sais pas si ça l'intéresse.\n",
|
904 |
+
"Speaker 2 - 42:58\n",
|
905 |
+
"Il faut qu'on trouve des sujets aussi dans ton domaine à toi. Sinon, tu\n",
|
906 |
+
"vas te faire taper sur les doigts bientôt.\n",
|
907 |
+
"Speaker 1 - 43:05\n",
|
908 |
+
"Non, je ne me fais pas taper sur les doigts, mais je dois justifier. Ton\n",
|
909 |
+
"déplacement à Chanteloup? Non, je suis seule. Par exemple, jusqu'à\n",
|
910 |
+
"maintenant, je dis non, mais c'est le dossier photovoltaïque. Il faut que\n",
|
911 |
+
"je garde le lien. J'ai un chef qui est intelligent, mais demain j'aurai un\n",
|
912 |
+
"autre chef.\n",
|
913 |
+
"Speaker 2 - 43:20\n",
|
914 |
+
"Mais la transition écologique, c'est un domaine à toi.\n",
|
915 |
+
"Speaker 1 - 43:22\n",
|
916 |
+
"Oui, on peut faire un atelier après.\n",
|
917 |
+
"Speaker 2 - 43:26\n",
|
918 |
+
"Préparation pour laver les covadices, des trucs comme ça.\n",
|
919 |
+
"\n",
|
920 |
+
"Speaker 1 - 43:30\n",
|
921 |
+
"Oui, ou on peut faire...\n",
|
922 |
+
"Speaker 2 - 43:31\n",
|
923 |
+
"C'est trop lourd.\n",
|
924 |
+
"Speaker 1 - 43:32\n",
|
925 |
+
"Non, on va pas faire la préparation.\n",
|
926 |
+
"Speaker 2 - 43:35\n",
|
927 |
+
"Pour laver les covadices.\n",
|
928 |
+
"Speaker 1 - 43:36\n",
|
929 |
+
"En général, la RSE, on peut voir un sujet comme ça. Peut-être qu'on\n",
|
930 |
+
"peut faire l'atelier en novembre ou décembre et la collecte au\n",
|
931 |
+
"printemps. Je vois avec le collecteur qu'est-ce qu'il peut nous proposer\n",
|
932 |
+
"comme matériaux à collecter en dehors de déchets électriques,\n",
|
933 |
+
"électroniques, parce que c'est ce qu'on a fait l'année dernière. Peut-être\n",
|
934 |
+
"qu'on peut faire aussi mobilier, des bureaux. L'idée c'est que ça soit\n",
|
935 |
+
"utile pour les entreprises.\n",
|
936 |
+
"Speaker 2 - 44:23\n",
|
937 |
+
"C'est Noël. C'est le temps. Parce que j'ai changé d'application et là je\n",
|
938 |
+
"suis resté sur Noël.\n",
|
939 |
+
"\n",
|
940 |
+
"Speaker 1 - 44:42\n",
|
941 |
+
"Donc, la réunion de l'atelier de septembre sur la formation, c'est\n",
|
942 |
+
"Christian qui s'en occupe. Pour la visite de Magic Model, je peux m'en\n",
|
943 |
+
"occuper, c'est facile avec Sandra nous donne un jour, on vient, et après\n",
|
944 |
+
"toi tu t'occupes d'amener un apéritif, un truc comme ça. Pour la collecte\n",
|
945 |
+
"mutualisée de déchets, je m'en occupe pour le type de déchets et la\n",
|
946 |
+
"date. Pour l'autre collecte, on était à l'extérieur tout le temps, quand il\n",
|
947 |
+
"s'est fait très froid, c'est pas marrant.\n",
|
948 |
+
"Speaker 2 - 45:14\n",
|
949 |
+
"C'est vrai qu'il s'est tristé longtemps.\n",
|
950 |
+
"Speaker 1 - 45:16\n",
|
951 |
+
"Et après, il y a un atelier sur un sujet développement durable, on peut\n",
|
952 |
+
"le faire.\n",
|
953 |
+
"Speaker 2 - 45:24\n",
|
954 |
+
"Pour la collecte, ce truc qui m'avait un peu embêté, c'était ceux qui\n",
|
955 |
+
"étaient nus, qui n'étaient pas partis de l'association.\n",
|
956 |
+
"Speaker 1 - 45:31\n",
|
957 |
+
"Oui, mais c'est un moyen aussi... Oui, mais ils n'ont pas adhéré. Je leur\n",
|
958 |
+
"envoyais par la suite.\n",
|
959 |
+
"Speaker 2 - 45:36\n",
|
960 |
+
"Et c'est ceux qui ont ramené le plus. C'est ceux qui ont rempli le\n",
|
961 |
+
"camion. Le pire, ça a été... Serop, je crois. C'est eux qui ont ramené le\n",
|
962 |
+
"plus.\n",
|
963 |
+
"\n",
|
964 |
+
"Speaker 1 - 45:47\n",
|
965 |
+
"Il y a Serop, il y a eu Eiffage aussi.\n",
|
966 |
+
"Speaker 2 - 45:55\n",
|
967 |
+
"Et Serop, lui, il pourrait s'inscrire, il ne faut pas déconner. Et Eiffage,\n",
|
968 |
+
"c'est plus compliqué si c'est un groupe. C'est S.E.H. ? Oui. Mais bon, le\n",
|
969 |
+
"directeur, c'est pareil, j'avais été les voir. Je les connais tous, j'avais été\n",
|
970 |
+
"les voir, mais les mecs, ils disent oui et puis ils font rien. Bon, on va aller\n",
|
971 |
+
"les violer, t'inquiète pas. Mais voilà, moi, est-ce qu'on fait les cotisations\n",
|
972 |
+
"de 2023? Est-ce qu'on leur demande ou on fait 2025? J'ai déjà été au\n",
|
973 |
+
"mois de novembre récupérer une année. Et la plupart ont payé.\n",
|
974 |
+
"Speaker 1 - 46:34\n",
|
975 |
+
"J'ai même Nicolas qui m'a dit qu'il.\n",
|
976 |
+
"Speaker 2 - 46:36\n",
|
977 |
+
"N'Avait pas payé l'autre année. Il m'a dit que je t'en dois une. Il y en a\n",
|
978 |
+
"qui sont bien. Est-ce qu'on fait un barbecue à la rentrée?\n",
|
979 |
+
"Speaker 1 - 46:47\n",
|
980 |
+
"Alors voilà c'est ça, après il y a les moments conviviaux, donc on a le\n",
|
981 |
+
"barbecue, on a la galette.\n",
|
982 |
+
"Speaker 2 - 46:52\n",
|
983 |
+
"Là le barbecue c'est mort au septembre, mais on peut le faire en\n",
|
984 |
+
"septembre, pour la reprise. Et ça, est-ce qu'on voit avec Gilda ou\n",
|
985 |
+
"ailleurs?\n",
|
986 |
+
"\n",
|
987 |
+
"Speaker 1 - 47:04\n",
|
988 |
+
"Parce que si par exemple on le fait ici, l'atelier sous la formation, on\n",
|
989 |
+
"peut enchaîner avec le barbecue. Est-il 17h l'atelier sur la formation et\n",
|
990 |
+
"à 18h on descend?\n",
|
991 |
+
"Speaker 2 - 47:21\n",
|
992 |
+
"Il faut mieux faire 19h. Bon?\n",
|
993 |
+
"Speaker 1 - 47:26\n",
|
994 |
+
"Mais les gens vont pas rester jusqu'à 18h.\n",
|
995 |
+
"Speaker 2 - 47:29\n",
|
996 |
+
"A 18h, personne n'a envie de manger à 18h. On ne peut pas le faire le\n",
|
997 |
+
"midi. C'est très compliqué. On a essayé plein de trucs. On a essayé le\n",
|
998 |
+
"soir, le vendredi. Non, ça ne marchait pas. Le soir, ça marchait bien.\n",
|
999 |
+
"C'était un jeudi ou un vendredi, je crois. Jeudi, parce que vendredi, il n'y\n",
|
1000 |
+
"en a pas justement. Le vendredi, oui, parce qu'il y en a qui partent, qui\n",
|
1001 |
+
"ne sont pas d'ici. Le mercredi, c'est pas bon, c'est la journée des\n",
|
1002 |
+
"enfants. Le vendredi, c'est la veille du week-end. Le lundi, ils sont pas\n",
|
1003 |
+
"encore rentrés. C'est plus que le mardi ou le jeudi. Le jeudi, ça passe\n",
|
1004 |
+
"bien. C'est du soin.\n",
|
1005 |
+
"Speaker 1 - 48:14\n",
|
1006 |
+
"Après, je pense qu'il faut alterner, il faut faire des choses. Après, le\n",
|
1007 |
+
"matin, il faut boire. Le soir... Moi, je pense que comme personne à\n",
|
1008 |
+
"huit...\n",
|
1009 |
+
"\n",
|
1010 |
+
"Speaker 2 - 48:23\n",
|
1011 |
+
"Le seul truc qui fonctionne, qu'on a réussi, c'est WhatsApp. Tu fais une\n",
|
1012 |
+
"délégation, ou tu mets en administration? Par contre, ce qui serait bien\n",
|
1013 |
+
"de savoir, c'est la liste complète des gens qui sont dans le jeu. Certains\n",
|
1014 |
+
"c'est des numéros, mais tu ne sais pas qui c'est derrière.\n",
|
1015 |
+
"Speaker 1 - 48:53\n",
|
1016 |
+
"Parce qu'il y a la police... Moi.\n",
|
1017 |
+
"Speaker 2 - 48:54\n",
|
1018 |
+
"J'Ai regardé, il y en a certains que t'as... Je pense que c'est lié à ce que\n",
|
1019 |
+
"t'as d'enregistré.\n",
|
1020 |
+
"Speaker 1 - 49:03\n",
|
1021 |
+
"Donc Christian, septembre l'atelier sur le sujet de la formation avec le\n",
|
1022 |
+
"barbecue.\n",
|
1023 |
+
"Speaker 2 - 49:09\n",
|
1024 |
+
"Toi tu t'en occupes?\n",
|
1025 |
+
"Speaker 1 - 49:11\n",
|
1026 |
+
"Si on le fait ici?\n",
|
1027 |
+
"Speaker 2 - 49:12\n",
|
1028 |
+
"Oui, il faut juste me confirmer pour qu'on puisse s'organiser.\n",
|
1029 |
+
"\n",
|
1030 |
+
"Speaker 1 - 49:16\n",
|
1031 |
+
"Mais sinon on peut voir déjà la date. Est-ce que t'as des complaintes?\n",
|
1032 |
+
"Speaker 2 - 49:21\n",
|
1033 |
+
"Est-ce que...\n",
|
1034 |
+
"Speaker 1 - 49:25\n",
|
1035 |
+
"Pour que tu puisses proposer à ton intervenant.\n",
|
1036 |
+
"Speaker 2 - 49:27\n",
|
1037 |
+
"Déjà. Non, il va s'adapter. On peut l'appeler tout à l'heure, si tu veux.\n",
|
1038 |
+
"Speaker 1 - 49:32\n",
|
1039 |
+
"Donc, si on dit un mardi ou un jeudi... Si on dit un mardi ou un jeudi de\n",
|
1040 |
+
"septembre... Sachant que la dernière semaine, je crois que c'est l'heure\n",
|
1041 |
+
"allée... Il y a le 18, le 20... Le 10, le 13...\n",
|
1042 |
+
"Speaker 2 - 49:52\n",
|
1043 |
+
"C'est un vendredi, le 10 et le 12. Non pas cette semaine, sur\n",
|
1044 |
+
"l'Allemagne. Il va nous parler de la formation parce que c'est... Il y a de\n",
|
1045 |
+
"l'argent dans l'échec. Et du coup, l'autre aussi... Oui, c'est deux\n",
|
1046 |
+
"numéros. Je pense que ça doit être ces deux numéros. C'est elle qui doit\n",
|
1047 |
+
"se cacher. C'est elle qui doit se cacher. Oui, après, c'est... Oui, ça,\n",
|
1048 |
+
"c'est... C'est notre...\n",
|
1049 |
+
"\n",
|
1050 |
+
"Speaker 1 - 50:46\n",
|
1051 |
+
"Et donc, avant la fin de l'année, un atelier. Un atelier de transition\n",
|
1052 |
+
"écologique, tu m'avais dit.\n",
|
1053 |
+
"Speaker 2 - 50:54\n",
|
1054 |
+
"Oui. Tu mets en deux. Le 17 ou le 19? Non, le 19. C'est très bien. C'est\n",
|
1055 |
+
"le soir, donc ça tombe très bien, Laurent il est là, pas besoin qu'il\n",
|
1056 |
+
"remonte. C'est très bien. C'est le soir là. C'est très bien, le 19 ça me va\n",
|
1057 |
+
"très bien. Laurent est là. Consultant.\n",
|
1058 |
+
"Speaker 1 - 51:33\n",
|
1059 |
+
"Le 19?\n",
|
1060 |
+
"Speaker 2 - 51:34\n",
|
1061 |
+
"Il est parti du Caudillère chez nous, donc il vient chaque mois.\n",
|
1062 |
+
"Speaker 1 - 51:38\n",
|
1063 |
+
"Est-ce que vous avez une contrainte le 19 septembre? C'est un H?\n",
|
1064 |
+
"Speaker 2 - 51:42\n",
|
1065 |
+
"Non, c'est un H.\n",
|
1066 |
+
"Speaker 1 - 51:44\n",
|
1067 |
+
"Et toi, t'as une contrainte le 19?\n",
|
1068 |
+
"\n",
|
1069 |
+
"Speaker 2 - 51:47\n",
|
1070 |
+
"Non, c'est qui? Espérance. Oui, c'est la nouvelle.\n",
|
1071 |
+
"Speaker 1 - 51:56\n",
|
1072 |
+
"Après, il y a en janvier la galette. On peut faire galette et atelier, et il y\n",
|
1073 |
+
"a. Ça te va?\n",
|
1074 |
+
"Speaker 2 - 52:06\n",
|
1075 |
+
"Oui.\n",
|
1076 |
+
"Speaker 1 - 52:13\n",
|
1077 |
+
"Intelligence artificielle et après, je te laisse voir.\n",
|
1078 |
+
"Speaker 2 - 52:20\n",
|
1079 |
+
"C'est une machin, c'est ça? Ou l'ADAPT.\n",
|
1080 |
+
"Speaker 1 - 52:25\n",
|
1081 |
+
"Après, il faut qu'ils te disent combien de temps ils envisagent. En fait, il\n",
|
1082 |
+
"ne faut pas que ça soit plus long d'une heure, style une demi-heure ou\n",
|
1083 |
+
"trois quarts d'heure d'intervention avec les questions, etc. Parce que\n",
|
1084 |
+
"sinon, c'est trop long pour les gens et on ne pourra pas les garder\n",
|
1085 |
+
"autant de temps.\n",
|
1086 |
+
"\n",
|
1087 |
+
"Speaker 2 - 52:45\n",
|
1088 |
+
"L'IA, on peut faire plusieurs ateliers parce qu'il y a plein de sujets là-\n",
|
1089 |
+
"dedans. Là, il y a une société française qui a eu beaucoup de\n",
|
1090 |
+
"subventions de l'État. Ils ont mis en place un super ordinateur. Ils\n",
|
1091 |
+
"veulent l'exploiter. Ils donnent l'accès gratos aux gens. Donc, il faut\n",
|
1092 |
+
"trouver des sociétés qui s'intéressent à ça. Genre lui, il fait beaucoup de\n",
|
1093 |
+
"calculs. Il y a plein de sujets là-dedans.\n",
|
1094 |
+
"Speaker 1 - 53:23\n",
|
1095 |
+
"Tu le laisses, voilà. Et donc en janvier, évitez la première semaine parce\n",
|
1096 |
+
"que c'est quand tout le monde arrive.\n",
|
1097 |
+
"Speaker 2 - 53:30\n",
|
1098 |
+
"Mais après...\n",
|
1099 |
+
"Speaker 1 - 53:39\n",
|
1100 |
+
"Oui madame, il y a des locaux. CPI Salina, il a une salle, à peu près de\n",
|
1101 |
+
"cette capacité.\n",
|
1102 |
+
"Speaker 2 - 53:47\n",
|
1103 |
+
"On peut faire ici, pas de problème.\n",
|
1104 |
+
"Speaker 1 - 53:50\n",
|
1105 |
+
"Oui, je sais, mais il faut essayer de changer, parce que quand tu\n",
|
1106 |
+
"changes de lieu, tu...\n",
|
1107 |
+
"\n",
|
1108 |
+
"Speaker 2 - 53:55\n",
|
1109 |
+
"Tu vas dire aux gens, ils sont curieux d'aller à...\n",
|
1110 |
+
"Speaker 1 - 53:58\n",
|
1111 |
+
"Déjà, il y a ça, mais c'est lui qui t'accueille, qui s'investit. Aussi, un petit\n",
|
1112 |
+
"peu, au moins, t'as fait de la salle.\n",
|
1113 |
+
"Speaker 2 - 54:04\n",
|
1114 |
+
"T'as pas de salle d'arrangement? Si vous voulez, oui.\n",
|
1115 |
+
"Speaker 1 - 54:11\n",
|
1116 |
+
"Par exemple, il y a...\n",
|
1117 |
+
"Speaker 2 - 54:13\n",
|
1118 |
+
"On peut aller de l'autre côté chez moi aussi.\n",
|
1119 |
+
"Speaker 1 - 54:14\n",
|
1120 |
+
"Il y a Alpha Diab, je crois.\n",
|
1121 |
+
"Speaker 2 - 54:17\n",
|
1122 |
+
"Alpha Diab, il peut. On avait Lidl, mais là, il faut qu'on arrive à\n",
|
1123 |
+
"retrouver le contact. Lidl pour la galette, oui.\n",
|
1124 |
+
"\n",
|
1125 |
+
"Speaker 1 - 54:28\n",
|
1126 |
+
"On verra, mais je ne pense pas qu'on ait besoin d'une salle aussi\n",
|
1127 |
+
"grande.\n",
|
1128 |
+
"Speaker 2 - 54:31\n",
|
1129 |
+
"Si, au moins une vingtaine à chaque fois, plus même. Au début, ça\n",
|
1130 |
+
"marchait bien, il y avait du monde. Si... Est-ce que t'as la police qui\n",
|
1131 |
+
"vient? Ouais, parce que la galette, c'est vrai qu'on arrive à faire venir...\n",
|
1132 |
+
"Quand il a bouffé... Non, mais eux, ils viennent... Parce que... Eux, ceux\n",
|
1133 |
+
"qui ont la réunion, ils s'en foutent un peu, mais quand on fait la galette,\n",
|
1134 |
+
"ils viennent, et puis c'est le moment... C'est le moment de les voir. Les\n",
|
1135 |
+
"pompiers aussi, t'es venu? Pompiers, pompiers aussi. L'adjoint préfet...\n",
|
1136 |
+
"Il y a beaucoup de gens. On a invité le maire de Carrière, une fois. On\n",
|
1137 |
+
"est bon. J'ai un gars qui voulait faire une réunion, mais bon, je sais pas\n",
|
1138 |
+
"si c'est... C'est un gars qui aide à faire des placements pour rentabiliser,\n",
|
1139 |
+
"pour faire baisser les impôts, etc.\n",
|
1140 |
+
"Speaker 2 - 55:25\n",
|
1141 |
+
"Et il a plein de solutions, donc je sais pas si ça intéresse. C'est comme...\n",
|
1142 |
+
"C'est comme des banques aussi qui proposent ce genre de produits.\n",
|
1143 |
+
"Tout le monde propose. La G2R, le mec qu'on a eu pour l'aérotrail. Oui,\n",
|
1144 |
+
"c'est ça. Lui, il fait partie d'un groupe, je sais plus si c'était un groupe.\n",
|
1145 |
+
"On est bon?\n",
|
1146 |
+
"Speaker 1 - 55:50\n",
|
1147 |
+
"Ok, donc on joue bien la galette et ensuite?\n",
|
1148 |
+
"Speaker 2 - 55:56\n",
|
1149 |
+
"Ensuite on peut refaire un tour d'IA si tu veux, on peut parler... Les 2-3\n",
|
1150 |
+
"là, l'IA et la transition écologique c'est pas une réunion, ça suffit pas.\n",
|
1151 |
+
"\n",
|
1152 |
+
"Speaker 1 - 56:12\n",
|
1153 |
+
"Oui bien sûr, après j'ai mis que je proposerais un sujet parce que Le\n",
|
1154 |
+
"sujet est trop vaste, est-ce qu'on va parler d'énergie, est-ce qu'on va\n",
|
1155 |
+
"parler de...\n",
|
1156 |
+
"Speaker 2 - 56:20\n",
|
1157 |
+
"Est-ce que tu pourrais ressortir sur une feuille à carte les quelques\n",
|
1158 |
+
"dates qu'on est sûr qu'on calque? Parce que du coup, moi, je pourrais le\n",
|
1159 |
+
"joindre avec le bulletin d'adhésion. Et comme ça, les gens, ils verront\n",
|
1160 |
+
"qu'il y a déjà des dates de prévues.\n",
|
1161 |
+
"Speaker 1 - 56:36\n",
|
1162 |
+
"Il y a le 19 septembre.\n",
|
1163 |
+
"Speaker 2 - 56:38\n",
|
1164 |
+
"C'est une date. Et le 30, tout ça? Genre barbecue, galette, tout ça, on\n",
|
1165 |
+
"peut déjà le mettre. Comme ça, quand ils font l'adhésion, ils ont déjà\n",
|
1166 |
+
"des dates en vue.\n",
|
1167 |
+
"Speaker 1 - 56:48\n",
|
1168 |
+
"Le 19 septembre, c'est le barbecue. La galette, on peut choisir une date.\n",
|
1169 |
+
"Après, si on veut faire dans des zones coquises, il faut quand même\n",
|
1170 |
+
"qu'ils disent s'ils peuvent nous accueillir. Mais si vous voulez pas être...\n",
|
1171 |
+
"Non.\n",
|
1172 |
+
"\n",
|
1173 |
+
"Speaker 2 - 56:58\n",
|
1174 |
+
"Parce que si on met tout ça en place, moi... Moi, du coup, je dirais\n",
|
1175 |
+
"qu'en... Et les 30 ans de...\n",
|
1176 |
+
"Speaker 1 - 57:04\n",
|
1177 |
+
"Du renard, c'est quand? C'est le 27, je crois.\n",
|
1178 |
+
"Speaker 2 - 57:08\n",
|
1179 |
+
"C'est septembre, ouais. C'est une date à mettre aussi. Oui, je le mets ici.\n",
|
1180 |
+
"Moi, dans ce cas-là, je le fais en septembre, début septembre. Je fais du\n",
|
1181 |
+
"porte-à-porte.\n",
|
1182 |
+
"Speaker 1 - 57:25\n",
|
1183 |
+
"Ça a été la réunion à l'Amérique?\n",
|
1184 |
+
"Speaker 2 - 57:29\n",
|
1185 |
+
"Oui.\n",
|
1186 |
+
"Speaker 1 - 57:30\n",
|
1187 |
+
"Il y a eu des infos...\n",
|
1188 |
+
"\n",
|
1189 |
+
"Speaker 2 - 57:38\n",
|
1190 |
+
"Ils ont parlé des cités, tout ça. À mon avis, c'est quelque chose\n",
|
1191 |
+
"d'habituel chez eux. Mais surtout, ils ont parlé des jours un peu\n",
|
1192 |
+
"sensibles, genre le 7, les élections. Faut que je fasse passer un message\n",
|
1193 |
+
"sur WhatsApp pour dire aux gens de ranger vos poubelles. Il y a eu le\n",
|
1194 |
+
"30 aussi, la marche blanche de Naël à Nanterre. A part nous, ça s'est\n",
|
1195 |
+
"bien passé. Après le reste, c'est... Vous avez déjà tout pété l'année\n",
|
1196 |
+
"dernière, vous n'avez pas pété tout cette année quand même. Il y avait\n",
|
1197 |
+
"un risque, le commissaire était là et il a dit, si ça pète à Nanterre, il\n",
|
1198 |
+
"risque d'avoir une répercussion Non mais ça va être très chaud. Déjà ils\n",
|
1199 |
+
"commencent à en parler au niveau des préfectures et tout. Ils disent\n",
|
1200 |
+
"que ça va être un truc très dangereux.\n",
|
1201 |
+
"Speaker 1 - 58:45\n",
|
1202 |
+
"C'est le week-end.\n",
|
1203 |
+
"Speaker 2 - 58:47\n",
|
1204 |
+
"C'est le 14 non? C'est ce week-end les élections.\n",
|
1205 |
+
"Speaker 1 - 58:50\n",
|
1206 |
+
"C'est le week-end le deuxième tour.\n",
|
1207 |
+
"Speaker 2 - 58:51\n",
|
1208 |
+
"Ce sera dimanche soir si ça doit péter. Donc ouais. Donc ça risque\n",
|
1209 |
+
"d'être chaud là cette période là. Enfin là il y a 33% de... Ils ont plus de\n",
|
1210 |
+
"33% quand même, ça fait une sacrée partie de la France. Ça représente\n",
|
1211 |
+
"10 millions de Français. Mais c'est pas les fouteurs de merde. Plus 13,\n",
|
1212 |
+
"10 millions de Français. Mais ça va peut-être... T'es français, habillé?\n",
|
1213 |
+
"J'ai déjà aimé être habillé, mais je vais retourner au pays.\n",
|
1214 |
+
"\n",
|
1215 |
+
"Speaker 1 - 59:26\n",
|
1216 |
+
"Tu pourras pas être ministre. C'est pourquoi ils ont dit que les ministres\n",
|
1217 |
+
"pourraient pas être bien nationaux.\n",
|
1218 |
+
"Speaker 2 - 59:32\n",
|
1219 |
+
"Je suis trinational, donc je parle trinational. C'est très rigolo parce que,\n",
|
1220 |
+
"tu vois, ils parlent pour les politiques et en même temps pour les\n",
|
1221 |
+
"entreprises. Sur le truc éco, la BFM éco, pas BFM machin, mais BFM\n",
|
1222 |
+
"éco, lendemain où il y a eu toute cette polémique, il y a eu un patron\n",
|
1223 |
+
"des patrons, je sais plus qui parlait justement qu'en fait, les entreprises,\n",
|
1224 |
+
"qui sont un petit peu... Sensibles. Non, sensibles. On met pas les gens\n",
|
1225 |
+
"avec des doubles nationalités non plus. Donc je veux dire, c'est pas\n",
|
1226 |
+
"qu'une question de politique ou de choses comme ça. — Je sais pas.\n",
|
1227 |
+
"Mais c'est des petits détails, ça, je trouve. C'est franchement... — Oui et\n",
|
1228 |
+
"non. Oui et non. Il ferait bien de s'occuper de savoir où tout notre\n",
|
1229 |
+
"pognon part dans les impôts, parce que qu'est-ce qu'on en paye? Bah tu\n",
|
1230 |
+
"sais où il part?\n",
|
1231 |
+
"Speaker 2 - 01:00:32\n",
|
1232 |
+
"Bah il y a un problème quand même... Bah tu sais où il part? Après c'est\n",
|
1233 |
+
"un autre débat! Tu sais où il part? Où? Où? Où? Où? Où? Où? Où? Où?\n",
|
1234 |
+
"Où? Où? Où? Où? Où? Où? Où? Où? Où?\n",
|
1235 |
+
"Speaker 1 - 01:00:41\n",
|
1236 |
+
"Où?\n",
|
1237 |
+
"Speaker 2 - 01:00:41\n",
|
1238 |
+
"Où? Où? Où? Où? Où? Où? Où? Où?\n",
|
1239 |
+
"\n",
|
1240 |
+
"Speaker 1 - 01:00:43\n",
|
1241 |
+
"Où?\n",
|
1242 |
+
"Speaker 2 - 01:00:43\n",
|
1243 |
+
"Où? Où? Où?\n",
|
1244 |
+
"Speaker 1 - 01:00:43\n",
|
1245 |
+
"Où?\n",
|
1246 |
+
"Speaker 2 - 01:00:44\n",
|
1247 |
+
"Où? Où?\n",
|
1248 |
+
"Speaker 1 - 01:00:44\n",
|
1249 |
+
"Où?\n",
|
1250 |
+
"Speaker 2 - 01:00:44\n",
|
1251 |
+
"Où? Où? Où? Où? Où? Où? Où? Où?\n",
|
1252 |
+
"Speaker 1 - 01:00:45\n",
|
1253 |
+
"Où?\n",
|
1254 |
+
"\n",
|
1255 |
+
"Speaker 2 - 01:00:45\n",
|
1256 |
+
"Où? Où? Où? Où? Où? Où? C'est pour ça qu'il faut... Christian nous aide\n",
|
1257 |
+
"à voir les scopes. Il y a un petit impôt qui est caché et qui fonctionne\n",
|
1258 |
+
"bien, c'est sur la fiche de paye, c'est GRDS. Celle-là, elle bouge sans\n",
|
1259 |
+
"arrêt. C'est la plus... Il baisse les impôts d'un côté, celle-là, elle n'arrête\n",
|
1260 |
+
"pas de bouger. C'est l'une des meilleures... C'est 0,4. Bon, je vais\n",
|
1261 |
+
"arrêter ça parce que ça ne sert à rien de l'avoir dans le compte en\n",
|
1262 |
+
"deute.\n",
|
1263 |
+
"Speaker 1 - 01:01:16\n",
|
1264 |
+
"On va voir, on fait un concours.\n",
|
1265 |
+
"\n"
|
1266 |
+
]
|
1267 |
+
}
|
1268 |
+
],
|
1269 |
+
"source": [
|
1270 |
+
"for page in pages:\n",
|
1271 |
+
" print(page)"
|
1272 |
+
]
|
1273 |
+
},
|
1274 |
+
{
|
1275 |
+
"cell_type": "code",
|
1276 |
+
"execution_count": 54,
|
1277 |
+
"metadata": {},
|
1278 |
+
"outputs": [
|
1279 |
+
{
|
1280 |
+
"name": "stdout",
|
1281 |
+
"output_type": "stream",
|
1282 |
+
"text": [
|
1283 |
+
"Speaker 1 - 00:00\n",
|
1284 |
+
"Est-ce que t'as mis voix 1, voix 2, voix 3, tout ça?\n",
|
1285 |
+
"Speaker 2 - 00:04\n",
|
1286 |
+
"Quoi? Non, après. Après, avec la voix, je vais reconnaître les gens et\n",
|
1287 |
+
"dire voix 1 c'est.\n",
|
1288 |
+
"Speaker 1 - 00:11\n",
|
1289 |
+
"Andréa, voix 2 c'est... Non, voilà, super.\n",
|
1290 |
+
"Speaker 2 - 00:15\n",
|
1291 |
+
"Et... Moi je dis merci parce que j'ai pas enregistré.\n",
|
1292 |
+
"Speaker 1 - 00:17\n",
|
1293 |
+
"Hein?\n",
|
1294 |
+
"Speaker 2 - 00:18\n",
|
1295 |
+
"Je dis merci Isabelle. Encore? Mais j'ai pas enregistré. J'ai commencé là.\n",
|
1296 |
+
"Speaker 1 - 00:22\n",
|
1297 |
+
"Merci Isabelle pour tout ce travail fait pour l'association depuis 2014.\n",
|
1298 |
+
"\n"
|
1299 |
+
]
|
1300 |
+
},
|
1301 |
+
{
|
1302 |
+
"ename": "ValidationError",
|
1303 |
+
"evalue": "1 validation error for Node\nproperties\n Input should be a valid dictionary [type=dict_type, input_value=FieldInfo(default=Pydanti...class 'dict'>, extra={}), input_type=FieldInfo]\n For further information visit https://errors.pydantic.dev/2.8/v/dict_type",
|
1304 |
+
"output_type": "error",
|
1305 |
+
"traceback": [
|
1306 |
+
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
1307 |
+
"\u001b[1;31mValidationError\u001b[0m Traceback (most recent call last)",
|
1308 |
+
"Cell \u001b[1;32mIn[54], line 4\u001b[0m\n\u001b[0;32m 2\u001b[0m load_dotenv(dotenv_path\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.streamlit\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 3\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m page \u001b[38;5;129;01min\u001b[39;00m pages:\n\u001b[1;32m----> 4\u001b[0m graph \u001b[38;5;241m=\u001b[39m \u001b[43mget_graph\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpage\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(graph)\n\u001b[0;32m 6\u001b[0m graphs\u001b[38;5;241m.\u001b[39mappend(graph)\n",
|
1309 |
+
"Cell \u001b[1;32mIn[51], line 17\u001b[0m, in \u001b[0;36mget_graph\u001b[1;34m(text, allowed_nodes, prompt, multiple_docs)\u001b[0m\n\u001b[0;32m 14\u001b[0m documents \u001b[38;5;241m=\u001b[39m [Document(page_content\u001b[38;5;241m=\u001b[39mtext)]\n\u001b[0;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(text)\n\u001b[1;32m---> 17\u001b[0m graph_documents \u001b[38;5;241m=\u001b[39m \u001b[43mllm_transformer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconvert_to_graph_documents\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdocuments\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m graph_documents\n",
|
1310 |
+
"File \u001b[1;32mc:\\Users\\kilia\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\langchain_experimental\\graph_transformers\\llm.py:646\u001b[0m, in \u001b[0;36mLLMGraphTransformer.convert_to_graph_documents\u001b[1;34m(self, documents)\u001b[0m\n\u001b[0;32m 634\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconvert_to_graph_documents\u001b[39m(\n\u001b[0;32m 635\u001b[0m \u001b[38;5;28mself\u001b[39m, documents: Sequence[Document]\n\u001b[0;32m 636\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m List[GraphDocument]:\n\u001b[0;32m 637\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Convert a sequence of documents into graph documents.\u001b[39;00m\n\u001b[0;32m 638\u001b[0m \n\u001b[0;32m 639\u001b[0m \u001b[38;5;124;03m Args:\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 644\u001b[0m \u001b[38;5;124;03m Sequence[GraphDocument]: The transformed documents as graphs.\u001b[39;00m\n\u001b[0;32m 645\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 646\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mprocess_response\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdocument\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mfor\u001b[39;00m document \u001b[38;5;129;01min\u001b[39;00m documents]\n",
|
1311 |
+
"File \u001b[1;32mc:\\Users\\kilia\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\langchain_experimental\\graph_transformers\\llm.py:591\u001b[0m, in \u001b[0;36mLLMGraphTransformer.process_response\u001b[1;34m(self, document)\u001b[0m\n\u001b[0;32m 589\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_function_call:\n\u001b[0;32m 590\u001b[0m raw_schema \u001b[38;5;241m=\u001b[39m cast(Dict[Any, Any], raw_schema)\n\u001b[1;32m--> 591\u001b[0m nodes, relationships \u001b[38;5;241m=\u001b[39m \u001b[43m_convert_to_graph_document\u001b[49m\u001b[43m(\u001b[49m\u001b[43mraw_schema\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 592\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 593\u001b[0m nodes_set \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m()\n",
|
1312 |
+
"File \u001b[1;32mc:\\Users\\kilia\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\langchain_experimental\\graph_transformers\\llm.py:496\u001b[0m, in \u001b[0;36m_convert_to_graph_document\u001b[1;34m(raw_schema)\u001b[0m\n\u001b[0;32m 490\u001b[0m relationships \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m 491\u001b[0m [map_to_base_relationship(rel) \u001b[38;5;28;01mfor\u001b[39;00m rel \u001b[38;5;129;01min\u001b[39;00m parsed_schema\u001b[38;5;241m.\u001b[39mrelationships]\n\u001b[0;32m 492\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m parsed_schema\u001b[38;5;241m.\u001b[39mrelationships\n\u001b[0;32m 493\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m []\n\u001b[0;32m 494\u001b[0m )\n\u001b[0;32m 495\u001b[0m \u001b[38;5;66;03m# Title / Capitalize\u001b[39;00m\n\u001b[1;32m--> 496\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _format_nodes(nodes), \u001b[43m_format_relationships\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrelationships\u001b[49m\u001b[43m)\u001b[49m\n",
|
1313 |
+
"File \u001b[1;32mc:\\Users\\kilia\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\langchain_experimental\\graph_transformers\\llm.py:445\u001b[0m, in \u001b[0;36m_format_relationships\u001b[1;34m(rels)\u001b[0m\n\u001b[0;32m 442\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_format_relationships\u001b[39m(rels: List[Relationship]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m List[Relationship]:\n\u001b[0;32m 443\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\n\u001b[0;32m 444\u001b[0m Relationship(\n\u001b[1;32m--> 445\u001b[0m source\u001b[38;5;241m=\u001b[39m\u001b[43m_format_nodes\u001b[49m\u001b[43m(\u001b[49m\u001b[43m[\u001b[49m\u001b[43mel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;241m0\u001b[39m],\n\u001b[0;32m 446\u001b[0m target\u001b[38;5;241m=\u001b[39m_format_nodes([el\u001b[38;5;241m.\u001b[39mtarget])[\u001b[38;5;241m0\u001b[39m],\n\u001b[0;32m 447\u001b[0m \u001b[38;5;28mtype\u001b[39m\u001b[38;5;241m=\u001b[39mel\u001b[38;5;241m.\u001b[39mtype\u001b[38;5;241m.\u001b[39mreplace(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mupper(),\n\u001b[0;32m 448\u001b[0m )\n\u001b[0;32m 449\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m el \u001b[38;5;129;01min\u001b[39;00m rels\n\u001b[0;32m 450\u001b[0m ]\n",
|
1314 |
+
"File \u001b[1;32mc:\\Users\\kilia\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\langchain_experimental\\graph_transformers\\llm.py:433\u001b[0m, in \u001b[0;36m_format_nodes\u001b[1;34m(nodes)\u001b[0m\n\u001b[0;32m 431\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_format_nodes\u001b[39m(nodes: List[Node]) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m List[Node]:\n\u001b[0;32m 432\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [\n\u001b[1;32m--> 433\u001b[0m \u001b[43mNode\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 434\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mid\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mid\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtitle\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43misinstance\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mid\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mstr\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mid\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 435\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mtype\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtype\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcapitalize\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 436\u001b[0m \u001b[43m \u001b[49m\u001b[43mproperties\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproperties\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 437\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 438\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m el \u001b[38;5;129;01min\u001b[39;00m nodes\n\u001b[0;32m 439\u001b[0m ]\n",
|
1315 |
+
"File \u001b[1;32mc:\\Users\\kilia\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\langchain_core\\load\\serializable.py:112\u001b[0m, in \u001b[0;36mSerializable.__init__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 110\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__init__\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs: Any, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 111\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\"\"\"\u001b[39;00m\n\u001b[1;32m--> 112\u001b[0m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__init__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
|
1316 |
+
"File \u001b[1;32mc:\\Users\\kilia\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\pydantic\\main.py:193\u001b[0m, in \u001b[0;36mBaseModel.__init__\u001b[1;34m(self, **data)\u001b[0m\n\u001b[0;32m 191\u001b[0m \u001b[38;5;66;03m# `__tracebackhide__` tells pytest and some other tools to omit this function from tracebacks\u001b[39;00m\n\u001b[0;32m 192\u001b[0m __tracebackhide__ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m--> 193\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m__pydantic_validator__\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalidate_python\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mself_instance\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\n",
|
1317 |
+
"\u001b[1;31mValidationError\u001b[0m: 1 validation error for Node\nproperties\n Input should be a valid dictionary [type=dict_type, input_value=FieldInfo(default=Pydanti...class 'dict'>, extra={}), input_type=FieldInfo]\n For further information visit https://errors.pydantic.dev/2.8/v/dict_type"
|
1318 |
+
]
|
1319 |
+
}
|
1320 |
+
],
|
1321 |
+
"source": [
|
1322 |
+
"graphs = []\n",
|
1323 |
+
"load_dotenv(dotenv_path=\".streamlit\")\n",
|
1324 |
+
"for page in pages:\n",
|
1325 |
+
" graph = get_graph(page)\n",
|
1326 |
+
" print(graph)\n",
|
1327 |
+
" graphs.append(graph)"
|
1328 |
+
]
|
1329 |
+
}
|
1330 |
+
],
|
1331 |
+
"metadata": {
|
1332 |
+
"kernelspec": {
|
1333 |
+
"display_name": "Python 3",
|
1334 |
+
"language": "python",
|
1335 |
+
"name": "python3"
|
1336 |
+
},
|
1337 |
+
"language_info": {
|
1338 |
+
"codemirror_mode": {
|
1339 |
+
"name": "ipython",
|
1340 |
+
"version": 3
|
1341 |
+
},
|
1342 |
+
"file_extension": ".py",
|
1343 |
+
"mimetype": "text/x-python",
|
1344 |
+
"name": "python",
|
1345 |
+
"nbconvert_exporter": "python",
|
1346 |
+
"pygments_lexer": "ipython3",
|
1347 |
+
"version": "3.12.3"
|
1348 |
+
}
|
1349 |
+
},
|
1350 |
+
"nbformat": 4,
|
1351 |
+
"nbformat_minor": 2
|
1352 |
+
}
|
utils/audit/rag.py
CHANGED
@@ -1,14 +1,19 @@
|
|
1 |
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
2 |
from langchain_openai import OpenAIEmbeddings
|
3 |
from langchain_community.vectorstores import FAISS
|
|
|
4 |
|
5 |
|
6 |
|
7 |
def get_text_from_content_for_doc(content):
|
8 |
-
text = ""
|
9 |
-
for page in content:
|
10 |
-
|
11 |
-
|
|
|
|
|
|
|
|
|
12 |
|
13 |
def get_text_from_content_for_audio(content):
|
14 |
return content["transcription"]
|
@@ -23,6 +28,12 @@ def get_text_chunks(text):
|
|
23 |
chunks = text_splitter.split_text(text)
|
24 |
return chunks
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
def get_vectorstore(text_chunks):
|
27 |
embedding = OpenAIEmbeddings(model="text-embedding-3-small")
|
28 |
vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embedding)
|
@@ -33,12 +44,11 @@ def setup_rag(file_type,content):
|
|
33 |
text = get_text_from_content_for_doc(content)
|
34 |
elif file_type == "audio":
|
35 |
text = get_text_from_content_for_audio(content)
|
36 |
-
|
37 |
|
38 |
-
chunks =
|
39 |
|
40 |
vectorstore = get_vectorstore(chunks)
|
41 |
|
42 |
-
return vectorstore
|
43 |
|
44 |
|
|
|
1 |
from langchain.text_splitter import RecursiveCharacterTextSplitter
|
2 |
from langchain_openai import OpenAIEmbeddings
|
3 |
from langchain_community.vectorstores import FAISS
|
4 |
+
from langchain_experimental.text_splitter import SemanticChunker
|
5 |
|
6 |
|
7 |
|
8 |
def get_text_from_content_for_doc(content):
|
9 |
+
# text = ""
|
10 |
+
# for page in content:
|
11 |
+
# text += content[page]["texte"]
|
12 |
+
|
13 |
+
text_filtered = "\n".join([content[page]["texte"].replace("\n","").replace(" "," ").replace("\t"," ") for page in content])
|
14 |
+
return text_filtered
|
15 |
+
|
16 |
+
|
17 |
|
18 |
def get_text_from_content_for_audio(content):
|
19 |
return content["transcription"]
|
|
|
28 |
chunks = text_splitter.split_text(text)
|
29 |
return chunks
|
30 |
|
31 |
+
def get_semantic_chunks(text):
|
32 |
+
text_splitter = SemanticChunker(OpenAIEmbeddings(),breakpoint_threshold_type="standard_deviation",breakpoint_threshold_amount=2.718)
|
33 |
+
chunks = text_splitter.create_documents([text])
|
34 |
+
semantic_chunks = [chunk.page_content for chunk in chunks]
|
35 |
+
return semantic_chunks
|
36 |
+
|
37 |
def get_vectorstore(text_chunks):
|
38 |
embedding = OpenAIEmbeddings(model="text-embedding-3-small")
|
39 |
vectorstore = FAISS.from_texts(texts=text_chunks, embedding=embedding)
|
|
|
44 |
text = get_text_from_content_for_doc(content)
|
45 |
elif file_type == "audio":
|
46 |
text = get_text_from_content_for_audio(content)
|
|
|
47 |
|
48 |
+
chunks = get_semantic_chunks(text)
|
49 |
|
50 |
vectorstore = get_vectorstore(chunks)
|
51 |
|
52 |
+
return vectorstore, chunks
|
53 |
|
54 |
|
utils/audit/response_llm.py
CHANGED
@@ -2,6 +2,21 @@ from openai import OpenAI
|
|
2 |
from langchain_openai import ChatOpenAI
|
3 |
from langchain_core.output_parsers import StrOutputParser
|
4 |
from langchain_core.prompts import PromptTemplate
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
6 |
def generate_response_openai(prompt: str,stream:bool = False,model = "gpt-4o-mini") -> str:
|
7 |
client = OpenAI()
|
@@ -16,7 +31,7 @@ def generate_response_openai(prompt: str,stream:bool = False,model = "gpt-4o-min
|
|
16 |
return response.choices[0].message.content
|
17 |
|
18 |
|
19 |
-
def generate_response_via_langchain(query: str, stream: bool = False, model: str = "gpt-4o-mini")
|
20 |
# Define the prompt template
|
21 |
template = "{query}"
|
22 |
prompt = PromptTemplate.from_template(template)
|
@@ -33,3 +48,21 @@ def generate_response_via_langchain(query: str, stream: bool = False, model: str
|
|
33 |
|
34 |
# Invoke the LLM chain and return the result
|
35 |
return llm_chain.invoke({"query": query})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
from langchain_openai import ChatOpenAI
|
3 |
from langchain_core.output_parsers import StrOutputParser
|
4 |
from langchain_core.prompts import PromptTemplate
|
5 |
+
from textwrap import dedent
|
6 |
+
|
7 |
+
from langchain_core.pydantic_v1 import BaseModel, Field
|
8 |
+
|
9 |
+
class report(BaseModel):
|
10 |
+
summary: str = Field(description="Resumé du document ou récit, une synthèse complète du document")
|
11 |
+
Notes: str = Field(description=dedent('''Notes sur le document ou le récit, les points clés sous forme de liste à puces avec des émojis pertinents pour souligner la nature de chaque point comme suit: - 📌 **Point Principal 1**
|
12 |
+
- Sous-point A
|
13 |
+
- Sous-point B
|
14 |
+
- 📈 **Point Principal 2**
|
15 |
+
- Sous-point C
|
16 |
+
- Sous-point D'''))
|
17 |
+
Actions: str = Field(description="listes des actions spécifiques, tâches ou étapes recommandées ou nécessaires selon le contenu du document.")
|
18 |
+
|
19 |
+
|
20 |
|
21 |
def generate_response_openai(prompt: str,stream:bool = False,model = "gpt-4o-mini") -> str:
|
22 |
client = OpenAI()
|
|
|
31 |
return response.choices[0].message.content
|
32 |
|
33 |
|
34 |
+
def generate_response_via_langchain(query: str, stream: bool = False, model: str = "gpt-4o-mini"):
|
35 |
# Define the prompt template
|
36 |
template = "{query}"
|
37 |
prompt = PromptTemplate.from_template(template)
|
|
|
48 |
|
49 |
# Invoke the LLM chain and return the result
|
50 |
return llm_chain.invoke({"query": query})
|
51 |
+
|
52 |
+
def generate_structured_response(query: str, stream: bool = False, model: str = "gpt-4o-2024-08-06",structured_response = report):
|
53 |
+
# Define the prompt template
|
54 |
+
template = "{query}"
|
55 |
+
prompt = PromptTemplate.from_template(template)
|
56 |
+
|
57 |
+
# Initialize the OpenAI LLM with the specified model
|
58 |
+
llm = ChatOpenAI(model=model)
|
59 |
+
structured_llm = llm.with_structured_output(structured_response)
|
60 |
+
# Create an LLM chain with the prompt and the LLM
|
61 |
+
llm_chain = prompt | structured_llm
|
62 |
+
|
63 |
+
if stream:
|
64 |
+
# Return a generator that yields streamed responses
|
65 |
+
return llm_chain.stream({"query": query})
|
66 |
+
|
67 |
+
# Invoke the LLM chain and return the result
|
68 |
+
return llm_chain.invoke({"query": query})
|
utils/kg/construct_kg.py
CHANGED
@@ -1,9 +1,11 @@
|
|
1 |
from langchain_community.graphs import Neo4jGraph
|
2 |
from langchain_experimental.graph_transformers import LLMGraphTransformer
|
3 |
-
from langchain_openai import ChatOpenAI
|
4 |
from langchain_core.documents import Document
|
|
|
5 |
|
6 |
-
|
|
|
7 |
|
8 |
llm = ChatOpenAI(temperature=0, model_name="gpt-4o-2024-08-06")
|
9 |
|
@@ -17,4 +19,24 @@ def get_graph(text,allowed_nodes=None,prompt=None):
|
|
17 |
|
18 |
return graph_documents
|
19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
|
|
1 |
from langchain_community.graphs import Neo4jGraph
|
2 |
from langchain_experimental.graph_transformers import LLMGraphTransformer
|
3 |
+
from langchain_openai import ChatOpenAI , OpenAIEmbeddings
|
4 |
from langchain_core.documents import Document
|
5 |
+
from itext2kg import iText2KG
|
6 |
|
7 |
+
|
8 |
+
def get_graph(text,allowed_nodes=None,prompt=None,multiple_docs=False):
|
9 |
|
10 |
llm = ChatOpenAI(temperature=0, model_name="gpt-4o-2024-08-06")
|
11 |
|
|
|
19 |
|
20 |
return graph_documents
|
21 |
|
22 |
+
def get_advanced_graph(semantic_chunk,knowledge_graph = None):
|
23 |
+
openai_llm_model = ChatOpenAI(
|
24 |
+
model="gpt-4o",
|
25 |
+
temperature=0,
|
26 |
+
max_tokens=None,
|
27 |
+
timeout=None,
|
28 |
+
max_retries=2,
|
29 |
+
)
|
30 |
+
|
31 |
+
openai_embeddings_model = OpenAIEmbeddings(
|
32 |
+
model="text-embedding-3-large",
|
33 |
+
)
|
34 |
+
itext2kg = iText2KG(llm_model = openai_llm_model, embeddings_model = openai_embeddings_model)
|
35 |
+
if knowledge_graph:
|
36 |
+
current_kg = itext2kg.build_graph(sections=[semantic_chunk],existing_knowledge_graph=knowledge_graph, ent_threshold=0.6, rel_threshold=0.6)
|
37 |
+
else:
|
38 |
+
current_kg = itext2kg.build_graph(sections=[semantic_chunk], ent_threshold=0.6, rel_threshold=0.6)
|
39 |
+
|
40 |
+
return current_kg
|
41 |
+
|
42 |
|