rajiv-ramteke's picture
initial commit
6b64d63
Raw
History Blame Contribute Delete
3.84 kB
"""
Deep-Dive Video Note Taker
==========================
Main FastAPI Application Entry Point
"""
import os
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from fastapi.middleware.cors import CORSMiddleware
from backend.api.routes import router
from backend.utils.logger import get_logger
from backend.utils.config import settings
logger = get_logger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Application lifespan manager β€” runs on startup and shutdown."""
# ── STARTUP ──────────────────────────────────────────────
logger.info("πŸš€ Starting Deep-Dive Video Note Taker...")
# Ensure all data directories exist
dirs = [
settings.UPLOAD_DIR,
settings.AUDIO_DIR,
settings.TRANSCRIPT_DIR,
settings.SUMMARY_DIR,
"data/embeddings",
"outputs/final_notes",
"outputs/timestamps",
"outputs/action_items",
"outputs/reports",
"frontend/static/uploads",
"models/whisper",
"models/summarization_model",
"models/embedding_model",
]
for d in dirs:
os.makedirs(d, exist_ok=True)
logger.info("βœ… Directories initialised")
logger.info(f"🌐 Server running at http://{settings.APP_HOST}:{settings.APP_PORT}")
yield
# ── SHUTDOWN ─────────────────────────────────────────────
logger.info("πŸ›‘ Shutting down Deep-Dive Video Note Taker...")
# ── Application ───────────────────────────────────────────────────────────────
app = FastAPI(
title="Deep-Dive Video Note Taker",
description=(
"An AI-powered system that converts long-form videos into "
"structured notes, timestamped highlights, and actionable insights."
),
version="1.0.0",
lifespan=lifespan,
docs_url="/docs",
redoc_url="/redoc",
)
# ── CORS ──────────────────────────────────────────────────────────────────────
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# ── Static Files & Templates ──────────────────────────────────────────────────
app.mount("/static", StaticFiles(directory="frontend/static"), name="static")
templates = Jinja2Templates(directory="frontend/templates")
# ── Routers ───────────────────────────────────────────────────────────────────
app.include_router(router, prefix="/api/v1")
# ── Root redirect ─────────────────────────────────────────────────────────────
from fastapi import Request
from fastapi.responses import HTMLResponse
@app.get("/", response_class=HTMLResponse, include_in_schema=False)
async def root(request: Request):
return templates.TemplateResponse(request=request, name="index.html")
@app.get("/health")
async def health_check():
return {
"status": "healthy",
"app": "Deep-Dive Video Note Taker",
"version": "1.0.0",
}