Spaces:
Sleeping
Sleeping
File size: 4,954 Bytes
bbf6791 4316a60 7eb8d3b bbf6791 4316a60 ece3b1a 7eb8d3b 4316a60 7eb8d3b 5aa1b8c bbf6791 ece3b1a 5aa1b8c 4316a60 ece3b1a 4de73ea 4316a60 bbf6791 ece3b1a bbf6791 ece3b1a bbf6791 ece3b1a bbf6791 ece3b1a bbf6791 7eb8d3b bbf6791 5aa1b8c 4316a60 ece3b1a 4316a60 4de73ea dfa76ef ece3b1a 5aa1b8c 7eb8d3b 5aa1b8c dfa76ef 4316a60 bbf6791 4316a60 7eb8d3b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# app.py - کاتب 2025 — تم خفن، بدون ارور css، 100% کارکردنی روی HF Spaces
import gradio as gr
from catboost import CatBoostRegressor
import numpy as np
# لود مدل (26 مگ = فوق سریع)
model = CatBoostRegressor()
model.load_model("kaatib_v8_optimized.cbm")
def predict(area_type, area, rooms, neighborhood, elevator, parking, warehouse, age):
effective_area = area if area_type == "متراژ مفید (معمول در دیوار)" else area * 0.87
pred = model.predict([[
effective_area,
np.log1p(effective_area),
rooms, age, 1 if age <= 5 else 0,
neighborhood.strip(), int(elevator), int(parking), int(warehouse)
]])[0] / 1_000_000_000
return f"""
<div class="result-card">
<h2>{pred:.2f} میلیارد تومان</h2>
<p>رنج واقعی بازار: {(pred*0.88):.2f} – {(pred*1.15):.2f} میلیارد</p>
</div>
"""
# تم 2025 خفن — با gr.HTML() کار میکنه
css_html = """
<style>
:root {--primary:#d4af37; --bg:#ffffff; --text:#1a1a1a; --gray:#666666;}
.gradio-container {
max-width: 920px !important; margin: 20px auto !important;
background: linear-gradient(135deg, #f8f9ff, #ffffff) !important;
border-radius: 28px !important; box-shadow: 0 20px 60px rgba(0,0,0,0.08) !important;
padding: 30px !important; direction: rtl !important;
font-family: 'Vazir', system-ui, sans-serif !important;
}
body {background: #f0f4f8 !important;}
.header {text-align:center; padding:50px 20px; background:linear-gradient(135deg,#0d2b1f,#1e4d38);
border-radius:24px; margin-bottom:35px; color:white;}
.header h1 {font-size:68px; margin:0; color:#d4af37; text-shadow:0 0 40px rgba(212,175,55,0.6);}
.gr-form {background:white !important; padding:24px !important; border-radius:20px !important;
box-shadow:0 8px 30px rgba(0,0,0,0.06) !important; margin-bottom:20px;}
label {color:var(--text) !important; font-weight:600 !important; font-size:16px !important;}
.gr-textbox, .gr-dropdown, .gr-slider > div {background:white !important; border:2px solid #e2e8f0 !important;
border-radius:16px !important; color:var(--gray) !important;}
.gr-textbox input::placeholder {color:#94a3b8 !important;}
.gr-button {background:linear-gradient(45deg,#d4af37,#f4d03f) !important; color:black !important;
font-weight:bold !important; font-size:22px !important; padding:18px !important;
border-radius:18px !important; box-shadow:0 10px 30px rgba(212,175,55,0.4) !important;
transition:all 0.3s !important;}
.gr-button:hover {transform:translateY(-4px) scale(1.02); box-shadow:0 20px 40px rgba(212,175,55,0.6) !important;}
.result-card {text-align:center; padding:40px; background:linear-gradient(135deg,#0d2b1f,#1e4d38);
border-radius:24px; border:4px solid var(--primary); color:white; animation:fadeIn 0.8s;}
.result-card h2 {font-size:52px; color:#d4af37; margin:10px 0;}
@keyframes fadeIn {from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
</style>
"""
# اپ اصلی — بدون css= در Blocks
with gr.Blocks(title="کاتب 2025 - قیمت آپارتمان تهران") as app:
gr.HTML(css_html) # فقط این خط مهمه!
gr.HTML('<div class="header"><h1>کاتب</h1><p style="font-size:28px;margin:15px 0 5px">هوش مصنوعی پیشبینی قیمت مسکن تهران</p><p style="font-size:20px;color:#a0d8c8">۸۱,۰۰۰ آگهی واقعی دیوار ۱۴۰۴</p></div>')
area_type = gr.Radio(["متراژ مفید (معمول در دیوار)", "متراژ سندی"], value="متراژ مفید (معمول در دیوار)", label="نوع متراژ")
with gr.Row():
area = gr.Slider(40, 450, 90, step=1, label="متراژ")
rooms = gr.Dropdown([1,2,3,4,5,6], value=3, label="تعداد خواب")
neighborhood = gr.Textbox(placeholder="مثل: سعادت آباد، نیاوران، پونک، جردن...", label="محله")
with gr.Row():
elevator = gr.Checkbox(label="آسانسور", value=True)
parking = gr.Checkbox(label="پارکینگ", value=True)
warehouse = gr.Checkbox(label="انباری", value=True)
age = gr.Slider(0, 50, 8, step=1, label="سن بنا (سال)")
gr.Button("پیشبینی قیمت", variant="primary").click(
predict,
inputs=[area_type, area, rooms, neighborhood, elevator, parking, warehouse, age],
outputs=gr.Markdown()
)
gr.HTML('<div style="text-align:center;margin-top:50px;padding:35px;background:white;border-radius:20px;box-shadow:0 8px 30px rgba(0,0,0,0.08);border:2px dashed #d4af37"><p style="color:#d4af37;font-size:26px;margin:0">ساخته شده با افتخار در ایران</p></div>')
app.launch() |