Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -150,8 +150,8 @@ with st.sidebar:
|
|
150 |
"Comuni",
|
151 |
elenco
|
152 |
)
|
153 |
-
prezzo_minimo = st.sidebar.slider("Prezzo Minimo", min_value=0, max_value=1000, value=200)
|
154 |
-
prezzo_massimo = st.sidebar.slider("Prezzo Massimo", min_value=0, max_value=1000, value=230)
|
155 |
locali = list(range(1, 21)) # Intervallo da 1 a 10
|
156 |
locali_range = st.sidebar.select_slider(
|
157 |
"Locali",
|
@@ -159,6 +159,8 @@ with st.sidebar:
|
|
159 |
value=(locali[2], locali[4]) # Valore iniziale, da 1 a 5 locali
|
160 |
)
|
161 |
mostra_grafici = st.toggle("Mostra grafici", value = True)
|
|
|
|
|
162 |
analisi_ai = st.toggle("Analizza i dati tramite l'A.I.", value = True)
|
163 |
|
164 |
locali_minimo, locali_massimo = locali_range
|
@@ -235,36 +237,71 @@ def scrivi_dataframe(output, riepilogo):
|
|
235 |
st.write(f"Riepilogando nel comune {comune_provincia['comune']} sono presenti **{vantaggioso_count} Immobili vantaggiosi** rispetto ai {total_rows} totali")
|
236 |
st.divider()
|
237 |
|
238 |
-
|
239 |
-
|
240 |
-
Ak = "XXXXgsk_COQPhsuaXqvuCkKPryiQWGdyb3FYCHBSIcn30wk3ZZay8WYC6tpIXXXX"
|
241 |
client = Groq(api_key=Ak)
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
252 |
response_area = st.empty()
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
|
|
|
|
266 |
|
267 |
-
if cerca_premuto:
|
268 |
if len(comune_input)>0:
|
269 |
comuni_selezionati = comune_input
|
270 |
comuni_selezionati = [comune.upper() for comune in comuni_selezionati]
|
@@ -286,7 +323,12 @@ if cerca_premuto:
|
|
286 |
st.write(f"### Comuni Selezionati")
|
287 |
scrivi_dataframe(output, True)
|
288 |
if st.numero_immobili_validi > 0 and analisi_ai:
|
289 |
-
|
|
|
|
|
|
|
|
|
|
|
290 |
st.success("Elaborazione Completata")
|
291 |
else:
|
292 |
-
st.error("Per favore, inserisci il nome di un comune.")
|
|
|
150 |
"Comuni",
|
151 |
elenco
|
152 |
)
|
153 |
+
prezzo_minimo = st.sidebar.slider("Prezzo Minimo (k)", min_value=0, max_value=1000, value=200)
|
154 |
+
prezzo_massimo = st.sidebar.slider("Prezzo Massimo (k)", min_value=0, max_value=1000, value=230)
|
155 |
locali = list(range(1, 21)) # Intervallo da 1 a 10
|
156 |
locali_range = st.sidebar.select_slider(
|
157 |
"Locali",
|
|
|
159 |
value=(locali[2], locali[4]) # Valore iniziale, da 1 a 5 locali
|
160 |
)
|
161 |
mostra_grafici = st.toggle("Mostra grafici", value = True)
|
162 |
+
|
163 |
+
modello_ai = st.selectbox("Modello A.I.", ("Llama 3.1", "Mixtral 7x8b"))
|
164 |
analisi_ai = st.toggle("Analizza i dati tramite l'A.I.", value = True)
|
165 |
|
166 |
locali_minimo, locali_massimo = locali_range
|
|
|
237 |
st.write(f"Riepilogando nel comune {comune_provincia['comune']} sono presenti **{vantaggioso_count} Immobili vantaggiosi** rispetto ai {total_rows} totali")
|
238 |
st.divider()
|
239 |
|
240 |
+
def analizza_dati_ai(output, tipologia):
|
241 |
+
Ak = "XXgsk_COQPhsuaXqvuCkKPryiQWGdyb3FYCHBSIcn30wk3ZZay8WYC6tpIXX"
|
|
|
242 |
client = Groq(api_key=Ak)
|
243 |
+
if tipologia == 1:
|
244 |
+
prompt_messages = [
|
245 |
+
{
|
246 |
+
"role": "system",
|
247 |
+
"content": """Sei un'assistente virtuale specializzata nel supporto agli investitori immobiliari.
|
248 |
+
Il tuo compito è analizzare i dati di un file CSV contenente un elenco di immobili e fornire consigli, idee e analisi dettagliate
|
249 |
+
per massimizzare il profitto attraverso la riqualificazione e rivendita degli stessi.
|
250 |
+
Devi considerare vari fattori come la posizione degli immobili, il prezzo di acquisto, il potenziale valore di mercato post-riqualificazione,
|
251 |
+
i costi stimati per la ristrutturazione e altri dati pertinenti.
|
252 |
+
Il tuo obiettivo è offrire suggerimenti strategici basati sui dati, evidenziare le migliori opportunità di investimento,
|
253 |
+
identificare eventuali rischi, e fornire consigli pratici per ottimizzare i profitti. Rispondi in modo chiaro, conciso e professionale."""
|
254 |
+
},
|
255 |
+
{
|
256 |
+
"role": "user",
|
257 |
+
"content": f"""Ho un file CSV con un elenco di immobili che sto considerando per un investimento.
|
258 |
+
Vorrei che tu analizzassi i dati e mi fornissi consigli dettagliati su come posso massimizzare il mio profitto attraverso la riqualificazione e la rivendita di questi immobili.
|
259 |
+
Per ogni immobile, per favore prendi in considerazione i seguenti aspetti:\n\n
|
260 |
+
1. Valore attuale: Quanto vale l'immobile al momento dell'acquisto?\n
|
261 |
+
2. Costi di riqualificazione stimati: Quanto potrebbe costare la ristrutturazione o la riqualificazione?\n
|
262 |
+
3. Valore di mercato potenziale: Quanto potrebbe valere l'immobile una volta riqualificato?\n
|
263 |
+
4. Rendimento potenziale: Qual è il margine di profitto previsto, tenendo conto dei costi totali?\n
|
264 |
+
5. Tempistica di rivendita: In quanto tempo è probabile che l'immobile venga venduto una volta riqualificato?\n
|
265 |
+
6. Analisi del mercato locale: Qual è la situazione del mercato immobiliare nella zona specifica? Ci sono trend emergenti?\n
|
266 |
+
7. Rischi potenziali: Quali sono i possibili rischi o svantaggi legati a ciascun immobile?\n
|
267 |
+
Infine, suggeriscimi le migliori opportunità di investimento tra gli immobili elencati,
|
268 |
+
con una breve spiegazione del motivo per cui questi immobili sono i più promettenti.
|
269 |
+
DATI UN PUNTEGGIO DA 0 A 100 e mostra i primi 5 in ordine di punteggio DECRESCENTE!
|
270 |
+
\n\n{output}"""
|
271 |
+
}
|
272 |
+
]
|
273 |
+
elif tipologia==2:
|
274 |
+
prompt_messages = [
|
275 |
+
{
|
276 |
+
"role": "system",
|
277 |
+
"content": """Sei un'assistente virtuale specializzata nel supporto agli investitori immobiliari"""
|
278 |
+
},
|
279 |
+
{
|
280 |
+
"role": "user",
|
281 |
+
"content": f"""Ho un file CSV con un elenco di immobili che sto considerando per un investimento.
|
282 |
+
Analizza i dati fornendo un punteggio da 1 a 100 degli immobili specificando PRO e CONTRO per ognuno. Mettili in ORDINE di punteggio DECRESCENTE. Restituisci un CSV formattato\n\n{output}"""
|
283 |
+
}
|
284 |
+
]
|
285 |
+
print(prompt_messages)
|
286 |
+
|
287 |
response_area = st.empty()
|
288 |
+
with st.spinner("Generazione in corso..."):
|
289 |
+
completion = client.chat.completions.create(
|
290 |
+
model="llama-3.1-70b-versatile",
|
291 |
+
messages=prompt_messages,
|
292 |
+
temperature=1,
|
293 |
+
max_tokens=2048,
|
294 |
+
top_p=1,
|
295 |
+
stream=True,
|
296 |
+
stop=None,
|
297 |
+
)
|
298 |
+
response_text = ""
|
299 |
+
for chunk in completion:
|
300 |
+
response_text += chunk.choices[0].delta.content or ""
|
301 |
+
response_area.markdown(response_text + "▌")
|
302 |
+
response_area.markdown(response_text)
|
303 |
|
304 |
+
if cerca_premuto:
|
305 |
if len(comune_input)>0:
|
306 |
comuni_selezionati = comune_input
|
307 |
comuni_selezionati = [comune.upper() for comune in comuni_selezionati]
|
|
|
323 |
st.write(f"### Comuni Selezionati")
|
324 |
scrivi_dataframe(output, True)
|
325 |
if st.numero_immobili_validi > 0 and analisi_ai:
|
326 |
+
st.title("✨ Analisi Intelligenza Artificiale")
|
327 |
+
st.write("### Considerazioni")
|
328 |
+
analizza_dati_ai(output, 1)
|
329 |
+
#st.divider()
|
330 |
+
#st.write("### Dettagliata")
|
331 |
+
#analizza_dati_ai(output, 2)
|
332 |
st.success("Elaborazione Completata")
|
333 |
else:
|
334 |
+
st.error("Per favore, inserisci il nome di un comune.")
|