Spaces:
Paused
Paused
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') |