File size: 3,034 Bytes
5aa1b8c
4316a60
7eb8d3b
4316a60
5aa1b8c
7eb8d3b
 
4316a60
 
7eb8d3b
5aa1b8c
 
 
 
 
 
 
 
 
 
 
 
4316a60
5aa1b8c
 
 
4de73ea
 
4316a60
5aa1b8c
4316a60
5aa1b8c
 
 
 
4316a60
 
7eb8d3b
4316a60
5aa1b8c
 
 
4316a60
5aa1b8c
4316a60
 
 
 
4de73ea
dfa76ef
5aa1b8c
 
7eb8d3b
5aa1b8c
dfa76ef
4316a60
 
5aa1b8c
 
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
# app.py - نسخه فوق سبک و تضمینی برای HF Spaces (با T4/A10G)
import gradio as gr
from catboost import CatBoostRegressor

# لود مدل با پیام انتظار (تا کاربر بفهمه داره لود می‌شه)
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,
        __import__("numpy").log1p(effective_area),
        rooms,
        age,
        1 if age <= 5 else 0,
        neighborhood.strip(),
        elevator,
        parking,
        warehouse
    ]])[0] / 1_000_000_000

    return f"""
    <div style="text-align:center;padding:35px;background:#0d2b1f;color:white;border-radius:18px;border:4px solid #d4af37;">
      <h1 style="color:#d4af37;font-size:48px;margin:10px 0">{pred:.2f} میلیارد تومان</h1>
      <p style="font-size:20px;color:#b8d5cd">رنج واقعی: {(pred*0.88):.2f}{(pred*1.15):.2f} میلیارد</p>
    </div>
    """

with gr.Blocks(title="کاتب - پیش‌بینی قیمت آپارتمان تهران") as app:
    gr.HTML("""
    <div style="text-align:center;padding:50px;background:linear-gradient(135deg,#0d2b1f,#1e4d38);border-radius:20px;margin-bottom:30px">
        <h1 style="font-size:62px;margin:0;color:#d4af37;text-shadow:0 0 30px #d4af3777">کاتب</h1>
        <p style="font-size:28px;color:#b8d5cd">هوش مصنوعی پیش‌بینی قیمت مسکن تهران</p>
        <p style="font-size:20px;color:#8fb8a2">۸۱,۰۰۰ آگهی واقعی دیوار ۱۴۰۴</p>
    </div>
    """)

    with gr.Row():
        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("پیش‌بینی قیمت").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:30px;background:#f8f9fa;border-radius:18px;border:2px dashed #d4af37">
        <p style="color:#d4af37;font-size:24px">ساخته شده با افتخار در ایران</p>
    </div>
    """)

app.launch()