Docfile commited on
Commit
3123e2c
·
verified ·
1 Parent(s): c6420f7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +60 -46
app.py CHANGED
@@ -54,41 +54,48 @@ editor = Agent(
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:
@@ -122,28 +129,35 @@ if st.button("Générer l'exposé"):
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,
143
- )
 
 
 
 
 
 
 
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)
 
 
 
54
  verbose=True,
55
  )
56
 
57
+ def parse_sections(crew_output) -> List[str]:
58
+ """Parse the sections from CrewOutput object."""
59
+ try:
60
+ # Extraire le raw output
61
+ raw_output = crew_output.raw
62
+ # Nettoyer la string (enlever les guillemets externes s'ils existent)
63
+ cleaned_output = raw_output.strip('"\'')
64
+ # Évaluer la string comme une liste Python
65
+ sections = eval(cleaned_output)
66
+ return sections
67
+ except Exception as e:
68
+ st.error(f"Erreur lors du parsing des sections: {e}")
69
+ st.error(f"Raw output: {crew_output.raw}")
70
+ return []
71
+
72
  def assign_tasks(topic: str) -> List[Task]:
73
  # Tâche d'analyse qui retourne une liste de sections
74
  analyze_topic_task = Task(
75
  description=f"""Analyser le thème '{topic}' et générer un plan détaillé pour l'exposé.
76
+ IMPORTANT: Ta réponse doit être UNIQUEMENT une liste Python.
77
+ Exemple de réponse: ['Introduction', 'Historique', 'État actuel', 'Perspectives futures', 'Conclusion']
78
  Ne pas ajouter d'autres explications ou texte.""",
79
+ expected_output="Une liste Python contenant les sections de l'exposé",
80
  agent=topic_analyst
81
  )
82
 
83
  tasks = [analyze_topic_task]
84
 
85
  # Création dynamique des tâches d'écriture pour chaque section
86
+ def create_writing_tasks(sections: List[str]) -> List[Task]:
87
+ writing_tasks = []
88
+ for section in sections:
89
+ write_task = Task(
90
+ description=f"""Rédiger la section '{section}' de l'exposé sur le thème '{topic}'.
91
+ Concentre-toi uniquement sur cette section spécifique.
92
+ Utilise un style académique et professionnel.""",
93
+ expected_output=f"Contenu détaillé de la section '{section}' au format markdown",
94
+ agent=content_writer,
95
+ context=[analyze_topic_task]
96
+ )
97
+ writing_tasks.append(write_task)
98
+ return writing_tasks
 
 
 
 
 
 
 
 
99
 
100
  # Tâche d'édition finale
101
  def create_editing_task(writing_tasks: List[Task]) -> Task:
 
129
  manager_llm=llm,
130
  verbose=True,
131
  )
132
+ analysis_result = crew_analysis.kickoff()
 
 
 
133
 
134
+ # Parsing des sections depuis le résultat
135
+ sections = parse_sections(analysis_result)
136
+ st.write("Sections identifiées:", sections)
137
 
138
+ if sections:
139
+ # Création des tâches d'écriture basées sur les sections
140
+ writing_tasks = task_creators['create_writing_tasks'](sections)
141
+
142
+ # Création de la tâche d'édition
143
+ editing_task = task_creators['create_editing_task'](writing_tasks)
144
+
145
+ # Toutes les tâches dans l'ordre
146
+ all_tasks = [task_creators['analyze_task']] + writing_tasks + [editing_task]
147
+
148
+ # Création et exécution du crew final
149
+ crew = Crew(
150
+ agents=[project_manager, topic_analyst, content_writer, editor],
151
+ tasks=all_tasks,
152
+ process=Process.hierarchical,
153
+ manager_llm=llm,
154
+ verbose=True,
155
+ )
156
 
157
+ with st.spinner("Génération de l'exposé..."):
158
+ result = crew.kickoff()
159
+
160
+ st.success("Exposé généré avec succès!")
161
+ st.markdown(result)
162
+ else:
163
+ st.error("Impossible de continuer sans une liste valide de sections.")