Spaces:
Sleeping
Sleeping
File size: 4,350 Bytes
0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 154424a 0a6c0de 2b143d9 0a6c0de 2b143d9 0a6c0de 2b143d9 0a6c0de 9e4d923 0a6c0de 9e4d923 0a6c0de |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
import os
from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool
import streamlit as st
from crewai import LLM
from crewai.tools import FileWriteTool # Importez FileWriteTool
# Configuration des clés API pour les outils
os.environ["SERPER_API_KEY"] = st.secrets["SERPER_API_KEY"]
os.environ["GEMINI_API_KEY"] = "AIzaSyAxG22bkNc0Nhsjs5aTh7H7e8LWJWy21Kw"
llm = LLM(
model="gemini/gemini-1.5-flash",
temperature=0.7,
timeout=120, # Secondes d'attente pour la réponse
max_tokens=8000,
)
# Définition des outils
search_tool = SerperDevTool()
# Définir FileWriteTool
file_writer_tool = FileWriteTool()
# Agents
coordinateur = Agent(
role="Coordinateur général",
goal="Superviser la création d'un exposé complet et formaté.",
llm=llm,
backstory=(
"Vous êtes un coordinateur expert, chargé de gérer chaque étape "
"du processus pour produire un exposé captivant et structuré."
),
)
planificateur = Agent(
role="Planificateur",
goal="Créer un plan structuré pour un exposé basé sur un thème donné.",
tools=[search_tool],
llm=llm,
backstory=(
"Vous êtes un planificateur méthodique, spécialiste de l'organisation d'idées en sections."
),
)
redacteur = Agent(
role="Rédacteur",
llm=llm,
goal="Rédiger des sections spécifiques de l'exposé en suivant un plan fourni.",
tools=[search_tool],
backstory=(
"Vous êtes un rédacteur talentueux capable de transformer un sujet complexe "
"en un texte clair et captivant."
),
)
formatteur = Agent(
role="Expert en mise en page",
goal="Assembler et formater l'exposé final dans un fichier PDF professionnel.",
tools=[file_writer_tool], # Inclut maintenant FileWriteTool
llm=llm,
backstory=(
"Vous êtes un expert en mise en page, dédié à produire des documents captivants."
),
)
# Tâches
generer_plan_task = Task(
description=(
"Créer un plan structuré détaillé à partir d'un thème principal. "
"Le plan doit inclure une introduction, des sections principales, et une conclusion."
),
expected_output="Un plan détaillé avec sections et sous-sections.",
agent=planificateur,
)
rediger_section_task = Task(
description=(
"Rédiger une section précise de l'exposé en suivant les instructions du plan. "
"Assurez-vous que le contenu est clair et engageant."
),
expected_output="Une section rédigée en 3-4 paragraphes.",
agent=redacteur,
)
assembler_et_formatter_task = Task(
description=(
"Assembler toutes les sections rédigées selon le plan et produire un fichier PDF final."
"Enregistrez la sortie dans un fichier appelé expose_final.pdf."
),
expected_output="Un fichier PDF formaté professionnellement.",
agent=formatteur,
)
# Crew avec un agent manager - Ne pas inclure le coordinateur dans la liste des agents
crew = Crew(
agents=[planificateur, redacteur, formatteur],
tasks=[generer_plan_task, rediger_section_task, assembler_et_formatter_task],
process=Process.hierarchical,
manager_agent=coordinateur,
)
# Interface utilisateur avec Streamlit
st.title("Générateur d'exposés")
st.write(
"Ce générateur d'exposés produit un document PDF complet à partir d'un thème principal."
)
# Entrée de l'utilisateur
theme = st.text_input("Entrez le thème de votre exposé :", value="Exemple : L'intelligence artificielle dans l'éducation")
# Bouton de génération
if st.button("Générer l'exposé"):
st.info("Génération de l'exposé en cours, cela peut prendre quelques instants...")
try:
# Lancement de la Crew avec le thème donné
result = crew.kickoff(inputs={"theme": theme})
# Récupération et affichage du fichier PDF généré
pdf_file_path = result.tasks_output[-1].raw
with open(pdf_file_path, "rb") as pdf_file:
st.success("Exposé généré avec succès !")
st.download_button(
label="Télécharger l'exposé au format PDF",
data=pdf_file,
file_name="expose_final.pdf",
mime="application/pdf",
)
except Exception as e:
st.error(f"Une erreur est survenue : {e}") |