Help_Me_3 / main.py
giyos1212's picture
Upload 72 files
98b6d67 verified
raw
history blame
2.85 kB
# 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')