Spaces:
Sleeping
Sleeping
GitHub Actions commited on
Commit ·
ba2cd16
0
Parent(s):
Deploy from GitHub Actions
Browse files- README.md +14 -0
- app.py +89 -0
- requirements.txt +2 -0
README.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: Projet 10 - Content Recommandation
|
| 3 |
+
emoji: 📚
|
| 4 |
+
colorFrom: blue
|
| 5 |
+
colorTo: indigo
|
| 6 |
+
sdk: streamlit
|
| 7 |
+
sdk_version: "1.32.0"
|
| 8 |
+
app_file: app.py
|
| 9 |
+
pinned: false
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
# Système de Recommandation d'Articles
|
| 13 |
+
Cette application présente les recommandations issues d'un filtrage collaboratif et d'un modèle content-based.
|
| 14 |
+
L'application communique avec une API Google Cloud Functions.
|
app.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
import requests
|
| 3 |
+
|
| 4 |
+
# URL de votre Google Cloud Function déployée (vous pouvez la modifier ici si elle change)
|
| 5 |
+
CLOUD_FUNCTION_URL = "https://us-central1-projet-10-498214.cloudfunctions.net/api-recommandation"
|
| 6 |
+
|
| 7 |
+
# --- Page Config ---
|
| 8 |
+
st.set_page_config(
|
| 9 |
+
page_title="My Content — Recommandations",
|
| 10 |
+
page_icon="📚",
|
| 11 |
+
layout="centered",
|
| 12 |
+
)
|
| 13 |
+
|
| 14 |
+
# --- Header ---
|
| 15 |
+
st.title("📚 My Content")
|
| 16 |
+
st.subheader("Système de Recommandation d'Articles")
|
| 17 |
+
st.markdown("---")
|
| 18 |
+
|
| 19 |
+
# --- Interface utilisateur ---
|
| 20 |
+
col1, col2 = st.columns(2)
|
| 21 |
+
|
| 22 |
+
with col1:
|
| 23 |
+
st.markdown("### 👤 Sélectionner un utilisateur")
|
| 24 |
+
# L'utilisateur choisit un ID entre 0 et 1000 pour tester
|
| 25 |
+
selected_user = st.number_input(
|
| 26 |
+
"ID de l'utilisateur (ex: 0)",
|
| 27 |
+
min_value=0,
|
| 28 |
+
max_value=100000,
|
| 29 |
+
value=0,
|
| 30 |
+
step=1
|
| 31 |
+
)
|
| 32 |
+
|
| 33 |
+
with col2:
|
| 34 |
+
st.markdown("### ⚙️ Modèle de recommandation")
|
| 35 |
+
# Choix entre Collaboratif et Content-based
|
| 36 |
+
model_choice = st.radio(
|
| 37 |
+
"Choisissez l'algorithme :",
|
| 38 |
+
options=["Filtrage Collaboratif", "Content-Based"],
|
| 39 |
+
index=0
|
| 40 |
+
)
|
| 41 |
+
|
| 42 |
+
# Conversion du choix en booléen pour l'API
|
| 43 |
+
is_collaborative = True if model_choice == "Filtrage Collaboratif" else False
|
| 44 |
+
|
| 45 |
+
st.markdown("---")
|
| 46 |
+
|
| 47 |
+
# --- Bouton d'action ---
|
| 48 |
+
if st.button("🔍 Obtenir les recommandations", type="primary", use_container_width=True):
|
| 49 |
+
with st.spinner("Génération des recommandations en cours... (Appel Serverless)"):
|
| 50 |
+
try:
|
| 51 |
+
# Paramètres de la requête
|
| 52 |
+
params = {
|
| 53 |
+
"user_id": selected_user,
|
| 54 |
+
"is_collaborative": str(is_collaborative).lower() # 'true' ou 'false'
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
# Appel à la Cloud Function
|
| 58 |
+
response = requests.get(CLOUD_FUNCTION_URL, params=params, timeout=15)
|
| 59 |
+
|
| 60 |
+
if response.status_code == 200:
|
| 61 |
+
data = response.json()
|
| 62 |
+
recommendations = data.get("recommendations", [])
|
| 63 |
+
model_used = data.get("model", "inconnu")
|
| 64 |
+
|
| 65 |
+
# Affichage des résultats
|
| 66 |
+
st.success(f"✅ Recommandations générées avec succès via **{model_used}**")
|
| 67 |
+
|
| 68 |
+
st.markdown(f"### Top 5 des articles pour l'utilisateur {selected_user} :")
|
| 69 |
+
|
| 70 |
+
for i, article_id in enumerate(recommendations, 1):
|
| 71 |
+
# Affichage visuel amélioré
|
| 72 |
+
st.info(f"**Recommandation #{i}** : Article ID `{article_id}`")
|
| 73 |
+
|
| 74 |
+
elif response.status_code == 404:
|
| 75 |
+
st.warning(f"⚠️ L'utilisateur {selected_user} n'a pas été trouvé dans la matrice de données.")
|
| 76 |
+
else:
|
| 77 |
+
st.error(f"❌ Erreur de l'API (Code {response.status_code}) : {response.text}")
|
| 78 |
+
|
| 79 |
+
except requests.exceptions.RequestException as e:
|
| 80 |
+
st.error(f"❌ Impossible de se connecter à la Google Cloud Function. Erreur : {e}")
|
| 81 |
+
|
| 82 |
+
# --- Footer ---
|
| 83 |
+
st.markdown("---")
|
| 84 |
+
st.markdown(
|
| 85 |
+
"<div style='text-align: center; color: #888;'>"
|
| 86 |
+
"My Content MVP — Démo Serverless Google Cloud Functions"
|
| 87 |
+
"</div>",
|
| 88 |
+
unsafe_allow_html=True,
|
| 89 |
+
)
|
requirements.txt
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
requests
|
| 2 |
+
streamlit
|