Docfile commited on
Commit
c6420f7
·
verified ·
1 Parent(s): 48627fd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -33
app.py CHANGED
@@ -1,15 +1,16 @@
1
  import os
2
-
3
  import streamlit as st
4
  from crewai import Agent, Crew, Process, Task
5
  from crewai_tools import SerperDevTool
6
  from langchain_google_genai import ChatGoogleGenerativeAI
7
  from crewai import LLM
8
- # Assurez-vous que vos clés API sont définies dans les variables d'environnement
 
 
9
  os.environ["GEMINI_API_KEY"] = "AIzaSyD6yZxfVOnh63GXBJjakAupk9aP4CZrgrQ"
10
  os.environ["SERPER_API_KEY"] = "9b90a274d9e704ff5b21c0367f9ae1161779b573"
11
 
12
-
13
  llm = LLM(
14
  model="gemini/gemini-1.5-flash",
15
  temperature=0.7,
@@ -17,8 +18,7 @@ llm = LLM(
17
  max_tokens=8000,
18
  )
19
 
20
-
21
- # Définition des agents
22
  project_manager = Agent(
23
  role="Chef de Projet",
24
  goal="Coordonner les autres agents pour assurer la cohérence et la qualité de l'exposé.",
@@ -54,46 +54,89 @@ editor = Agent(
54
  verbose=True,
55
  )
56
 
57
- # Définition des tâches
58
- def assign_tasks(topic):
59
  analyze_topic_task = Task(
60
- description=f"Analyser le thème '{topic}' et générer un plan détaillé pour l'exposé, divisé en sections claires.",
61
- expected_output="Un plan détaillé de l'exposé list en python. renvoie juste la liste et rien dautre exemple --> ['introduction','Conclusion']",
62
- agent=topic_analyst,
 
 
 
63
  )
64
-
65
- r = list(analyze_topic_task)
66
 
67
- cc = []
68
- for i in r:
69
- write_content_task = Task(
70
- description=f"Rédiger cette sections {i} en te basant sur des recherches approfondies.",
71
- expected_output="Contenu des sections au format markdown.",
72
- agent=content_writer,
73
- context=[analyze_topic_task],)
74
- cc.append(write_content_task)
75
-
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
- edit_content_task = Task(
79
- description="Réviser et corriger l'ensemble du contenu de l'exposé, en s'assurant de la cohérence, de la clarté et de l'absence d'erreurs.",
80
- expected_output="Contenu de l'exposé révisé et corrigé au format markdown.",
81
- agent=editor,
82
- context=[cc],
83
- )
84
-
85
- return [analyze_topic_task, write_content_task, edit_content_task]
86
-
87
- # Configuration de l'interface Streamlit
88
  st.title("🤖 Générateur d'Exposés avec CrewAI")
89
 
90
  topic = st.text_input("Entrez le thème de l'exposé:", "L'Intelligence Artificielle en 2024")
91
 
92
  if st.button("Générer l'exposé"):
93
  with st.spinner("Création de l'équipe d'agents..."):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  crew = Crew(
95
  agents=[project_manager, topic_analyst, content_writer, editor],
96
- tasks=assign_tasks(topic),
97
  process=Process.hierarchical,
98
  manager_llm=llm,
99
  verbose=True,
@@ -101,6 +144,6 @@ if st.button("Générer l'exposé"):
101
 
102
  with st.spinner("Génération de l'exposé..."):
103
  result = crew.kickoff()
104
-
105
  st.success("Exposé généré avec succès!")
106
  st.markdown(result)
 
1
  import os
2
+ import ast
3
  import streamlit as st
4
  from crewai import Agent, Crew, Process, Task
5
  from crewai_tools import SerperDevTool
6
  from langchain_google_genai import ChatGoogleGenerativeAI
7
  from crewai import LLM
8
+ from typing import List
9
+
10
+ # Configuration des clés API
11
  os.environ["GEMINI_API_KEY"] = "AIzaSyD6yZxfVOnh63GXBJjakAupk9aP4CZrgrQ"
12
  os.environ["SERPER_API_KEY"] = "9b90a274d9e704ff5b21c0367f9ae1161779b573"
13
 
 
14
  llm = LLM(
15
  model="gemini/gemini-1.5-flash",
16
  temperature=0.7,
 
18
  max_tokens=8000,
19
  )
20
 
21
+ # Définitions des agents (inchangées)
 
22
  project_manager = Agent(
23
  role="Chef de Projet",
24
  goal="Coordonner les autres agents pour assurer la cohérence et la qualité de l'exposé.",
 
54
  verbose=True,
55
  )
56
 
57
+ def assign_tasks(topic: str) -> List[Task]:
58
+ # Tâche d'analyse qui retourne une liste de sections
59
  analyze_topic_task = Task(
60
+ description=f"""Analyser le thème '{topic}' et générer un plan détaillé pour l'exposé.
61
+ IMPORTANT: Ta réponse doit être UNIQUEMENT une liste Python sous forme de string.
62
+ Exemple de réponse: "['Introduction', 'Historique', 'État actuel', 'Perspectives futures', 'Conclusion']"
63
+ Ne pas ajouter d'autres explications ou texte.""",
64
+ expected_output="Une liste Python sous forme de string contenant les sections de l'exposé",
65
+ agent=topic_analyst
66
  )
 
 
67
 
68
+ tasks = [analyze_topic_task]
 
 
 
 
 
 
 
 
69
 
70
+ # Création dynamique des tâches d'écriture pour chaque section
71
+ def create_writing_tasks(sections_result: str) -> List[Task]:
72
+ try:
73
+ # Conversion de la string en liste Python
74
+ sections = ast.literal_eval(sections_result)
75
+ writing_tasks = []
76
+
77
+ for section in sections:
78
+ write_task = Task(
79
+ description=f"""Rédiger la section '{section}' de l'exposé sur le thème '{topic}'.
80
+ Concentre-toi uniquement sur cette section spécifique.
81
+ Utilise un style académique et professionnel.""",
82
+ expected_output=f"Contenu détaillé de la section '{section}' au format markdown",
83
+ agent=content_writer,
84
+ context=[analyze_topic_task]
85
+ )
86
+ writing_tasks.append(write_task)
87
+
88
+ return writing_tasks
89
+ except (ValueError, SyntaxError) as e:
90
+ st.error(f"Erreur lors de la conversion du plan en liste: {e}")
91
+ return []
92
+
93
+ # Tâche d'édition finale
94
+ def create_editing_task(writing_tasks: List[Task]) -> Task:
95
+ return Task(
96
+ description="Réviser et harmoniser l'ensemble du contenu de l'exposé. Assurer la cohérence entre toutes les sections.",
97
+ expected_output="Version finale de l'exposé au format markdown",
98
+ agent=editor,
99
+ context=writing_tasks
100
+ )
101
+
102
+ return {
103
+ 'analyze_task': analyze_topic_task,
104
+ 'create_writing_tasks': create_writing_tasks,
105
+ 'create_editing_task': create_editing_task
106
+ }
107
 
108
+ # Interface Streamlit
 
 
 
 
 
 
 
 
 
109
  st.title("🤖 Générateur d'Exposés avec CrewAI")
110
 
111
  topic = st.text_input("Entrez le thème de l'exposé:", "L'Intelligence Artificielle en 2024")
112
 
113
  if st.button("Générer l'exposé"):
114
  with st.spinner("Création de l'équipe d'agents..."):
115
+ task_creators = assign_tasks(topic)
116
+
117
+ # Exécution de la tâche d'analyse
118
+ crew_analysis = Crew(
119
+ agents=[project_manager, topic_analyst],
120
+ tasks=[task_creators['analyze_task']],
121
+ process=Process.hierarchical,
122
+ manager_llm=llm,
123
+ verbose=True,
124
+ )
125
+ sections_result = crew_analysis.kickoff()
126
+
127
+ # Création des tâches d'écriture basées sur le résultat de l'analyse
128
+ writing_tasks = task_creators['create_writing_tasks'](sections_result)
129
+
130
+ # Création de la tâche d'édition
131
+ editing_task = task_creators['create_editing_task'](writing_tasks)
132
+
133
+ # Toutes les tâches dans l'ordre
134
+ all_tasks = [task_creators['analyze_task']] + writing_tasks + [editing_task]
135
+
136
+ # Création et exécution du crew final
137
  crew = Crew(
138
  agents=[project_manager, topic_analyst, content_writer, editor],
139
+ tasks=all_tasks,
140
  process=Process.hierarchical,
141
  manager_llm=llm,
142
  verbose=True,
 
144
 
145
  with st.spinner("Génération de l'exposé..."):
146
  result = crew.kickoff()
147
+
148
  st.success("Exposé généré avec succès!")
149
  st.markdown(result)