Spaces:
Build error
Build error
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.")
|