GitHub Actions commited on
Commit
ba2cd16
·
0 Parent(s):

Deploy from GitHub Actions

Browse files
Files changed (3) hide show
  1. README.md +14 -0
  2. app.py +89 -0
  3. 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