Mariamrapide / app.py
Docfile's picture
Update app.py
06e2b00 verified
import streamlit as st
import google.generativeai as genai
import os
from PIL import Image
import io
# Configuratiovbn de la page Streamlit
st.set_page_config(page_title="Mariam eco", layout="wide")
st.title("Mariam eco")
st.markdown("yup")
# Configuration de l'API Gemini
api_key = os.environ["GEMINI_API_KEY"]
genai.configure(api_key=api_key)
safety_settings = [
{"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_NONE"},
{"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_NONE"},
{"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "BLOCK_NONE"},
{"category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "BLOCK_NONE"},
]
# Définition du modèle
model = genai.GenerativeModel("gemini-2.5-pro-exp-03-25", safety_settings=safety_settings)
# Chargement de tous les fichiers PDF du dossier "data"
@st.cache_resource
def load_pdf_files():
DATA_FOLDER = "data"
if not os.path.exists(DATA_FOLDER):
os.makedirs(DATA_FOLDER)
st.warning(f"Le dossier {DATA_FOLDER} a été créé. Veuillez y placer vos fichiers PDF.")
return []
pdf_files = [
os.path.join(DATA_FOLDER, file)
for file in os.listdir(DATA_FOLDER)
if file.lower().endswith(".pdf")
]
if not pdf_files:
st.info(f"Aucun fichier PDF trouvé dans le dossier {DATA_FOLDER}.")
return []
with st.spinner("Chargement des fichiers PDF..."):
uploaded_files = [genai.upload_file(pdf_file) for pdf_file in pdf_files]
st.success(f"{len(uploaded_files)} fichiers PDF chargés avec succès.")
return uploaded_files
uploaded_files = load_pdf_files()
def process_input(prompt, image_file):
"""Traite le texte et l'image optionnelle et génère une réponse."""
try:
methodologie = f"""
Traite ce sujet de philosophie "{prompt}" selon le plan suivant.commence directement ta réponse par introduction :
:
# INTRODUCTION: ( l'introduction se fait en un paragraphe)
- Approche par constat
- Posez la citation
- Reformulation de la citation
- Nuancez la thèse (antithèse)
- De cette opposition naît le problème
- En quoi
- Idée de la citation
# DÉVELOPPEMENT:
## Première partie (Thèse)
- Introduction partielle (thèse + arguments1 + arguments2)
- Argument 1:
* Explications
* Illustration (citation + reformulation)
- Argument 2:
* Explications
* Illustration (exemple + explication)
- Transition:
* Bilan (thèse + arguments1 + arguments2)
* Annonce de l'idée critique
## Deuxième partie (Antithèse)
- Introduction partielle (antithèse + arguments3 + arguments4)
- Argument 3:
* Explications
* Illustration (citation + reformulation)
- Argument 4:
* Explications
* Illustration (exemple + reformulation)
# CONCLUSION:
- Bilan global de l'analyse (rappel du problème + thèse + antithèse)
- Prise de position (réponse à la question critique de l'introduction)
Je veux un travail bien détaillé et complet avec un français raffiné et soutenu.
base toi sur les fichiers fournis.
"""
# Préparer le contenu en ajoutant tous les fichiers PDF
print(prompt)
content = uploaded_files.copy()
# Si une image est fournie, l'ajouter au contenu
if image_file is not None:
# Streamlit fournit un fichier en mémoire, nous devons le sauvegarder temporairement
temp_image_path = "temp_image.jpg"
img = Image.open(image_file)
img.save(temp_image_path)
img_file = genai.upload_file(temp_image_path)
content.append(img_file)
# Supprimer le fichier temporaire
os.remove(temp_image_path)
# Ajout du prompt avec l'instruction de répondre en français
content.append("\n\n")
content.append(methodologie)
# Génération du contenu
with st.spinner("Génération de la réponse..."):
result = model.generate_content(content)
return result.text
except Exception as e:
return f"Une erreur s'est produite : "
# Interface principale
tab1, tab2 = st.tabs(["Interface principale", "Exemples"])
with tab1:
st.subheader("Posez une question")
# Zone de texte pour la question
prompt = st.text_area("Question", placeholder="Posez une question sur le roman...", height=100)
# Upload d'image (facultatif)
image_file = st.file_uploader("Image (facultative)", type=["jpg", "jpeg", "png"])
# Affichage de l'image téléchargée
if image_file is not None:
st.image(image_file, caption="Image téléchargée", use_column_width=True)
# Bouton pour soumettre la question
if st.button("Obtenir une réponse"):
if prompt:
response = process_input(prompt, image_file)
st.markdown("### Réponse")
st.markdown(response)
else:
st.warning("Veuillez entrer une question.")
# Affichage des informations sur les fichiers chargés
with st.sidebar:
st.subheader("Informations")
st.write(f"Nombre de fichiers PDF chargés: {len(uploaded_files)}")
if uploaded_files:
st.write("Fichiers PDF dans le dossier 'data':")
for file in os.listdir("data"):
if file.lower().endswith(".pdf"):
st.write(f"- {file}")