File size: 2,851 Bytes
98b6d67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
85
86
87
88
89
90
91
92
# app/main.py - YANGILANGAN VERSIYA

import os
import asyncio
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles

from app.api.routes import router as bemor_router
from app.api.dispatcher_routes import router as dispatcher_router
from app.services.models import load_models

# πŸ†• Brigade Simulator import
from app.services.brigade_simulator import get_simulator
from app.core.database import db

# Papkalarni yaratish
TEMP_AUDIO_DIR = "static/audio"
UPLOAD_DIR = "static/uploads"
DATA_DIR = "data"
BEMOR_FRONTEND = "static/bemor"
DISPATCHER_FRONTEND = "static/dispatcher"

os.makedirs(TEMP_AUDIO_DIR, exist_ok=True)
os.makedirs(UPLOAD_DIR, exist_ok=True)
os.makedirs(DATA_DIR, exist_ok=True)
os.makedirs(BEMOR_FRONTEND, exist_ok=True)
os.makedirs(DISPATCHER_FRONTEND, exist_ok=True)

# πŸ†• Global simulator task
simulator_task = None

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Ilova ishga tushishidan oldin
    print("πŸš€ Ilova ishga tushmoqda...")
    
    print("πŸ“¦ AI modellari yuklanmoqda...")
    load_models()
    print("βœ… Barcha modellar tayyor!")
    
    # πŸ†• Brigade simulator ishga tushirish
    print("πŸš‘ Brigade simulator ishga tushmoqda...")
    global simulator_task
    simulator = get_simulator(db)
    simulator_task = asyncio.create_task(simulator.start())
    print("βœ… Brigade simulator tayyor!")
    
    yield
    
    # Ilova to'xtagandan keyin
    print("πŸ›‘ Ilova to'xtatilmoqda...")
    
    # πŸ†• Simulator to'xtatish
    if simulator_task:
        simulator.stop()
        simulator_task.cancel()
        try:
            await simulator_task
        except asyncio.CancelledError:
            pass
        print("βœ… Simulator to'xtatildi")
    
    print("πŸ‘‹ Ilova ishini yakunladi.")

app = FastAPI(
    title="Help.me - Tez Tibbiy Yordam AI Tizimi",
    description="Bemorlardan ovozli xabarlar qabul qilib, AI tahlil qiluvchi va dispetcherlarga yuboruvchi tizim",
    version="1.0.0 (MVP)",
    lifespan=lifespan
)

# Routerlarni ulash
app.include_router(bemor_router)  # Bemor WebSocket va APIlar
app.include_router(dispatcher_router)  # Dispetcher APIlar

# Static fayllar
app.mount("/audio", StaticFiles(directory=TEMP_AUDIO_DIR), name="audio")
app.mount("/static", StaticFiles(directory="static"), name="static")

# Bemor interfeysi (Root URL)
@app.get("/", include_in_schema=False)
async def read_root():
    """Bemor uchun asosiy sahifa"""
    return FileResponse('static/bemor/index.html')

# Dispetcher paneli
@app.get("/dispatcher", include_in_schema=False)
async def dispatcher_panel():
    """Dispetcher dashboard"""
    return FileResponse('static/dispatcher/index.html')