Automated Action 74c911b746 Fix dependency issues and update OpenAI API usage
- Updated OpenAI package from 1.3.7 to 1.51.0 for latest API compatibility
- Added PyTorch and torchaudio dependencies for Whisper model support
- Fixed OpenAI API calls to use new AsyncOpenAI client format
- Updated transcription service to use client.audio.transcriptions.create()
- Updated translation service to use client.chat.completions.create()
- Added proper logging to language detection service
- Added environment variable loading with python-dotenv in main.py
- Fixed import order to comply with linting standards

🤖 Generated with BackendIM

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-28 08:19:30 +00:00

103 lines
3.1 KiB
Python

from pathlib import Path
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
import logging
from dotenv import load_dotenv
from app.db.session import engine
from app.db.base import Base
from app.routes import auth, videos, transcription, translation, voice_cloning, video_processing, profile
# Load environment variables from .env file
load_dotenv()
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
try:
# Create database directory
logger.info("Starting application initialization...")
storage_dir = Path("/app/storage/db")
storage_dir.mkdir(parents=True, exist_ok=True)
logger.info(f"Created storage directory: {storage_dir}")
# Import all models to ensure they're registered with Base
# Only create tables if database doesn't exist (for development)
# In production, use Alembic migrations instead
db_path = storage_dir / "db.sqlite"
if not db_path.exists():
logger.info("Database file doesn't exist, creating initial tables...")
Base.metadata.create_all(bind=engine)
else:
logger.info("Database file exists, skipping table creation (use Alembic for migrations)")
logger.info("Database initialization completed")
yield
except Exception as e:
logger.error(f"Error during application startup: {e}")
raise
app = FastAPI(
title="AI Video Dubbing API",
description="Backend API for AI-powered video dubbing with voice cloning and translation",
version="1.0.0",
lifespan=lifespan
)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allow_headers=["*"],
expose_headers=["*"]
)
# Include routers
app.include_router(auth.router, prefix="/auth", tags=["Authentication"])
app.include_router(profile.router, prefix="/profile", tags=["Profile"])
app.include_router(videos.router, prefix="/videos", tags=["Videos"])
app.include_router(transcription.router, prefix="/transcription", tags=["Transcription"])
app.include_router(translation.router, prefix="/translation", tags=["Translation"])
app.include_router(voice_cloning.router, prefix="/voice", tags=["Voice Cloning"])
app.include_router(video_processing.router, prefix="/process", tags=["Video Processing"])
@app.get("/")
async def root():
return {
"title": "AI Video Dubbing API",
"documentation": "/docs",
"health": "/health"
}
@app.get("/health")
async def health_check():
return {
"status": "healthy",
"service": "AI Video Dubbing API",
"database": "connected"
}
@app.get("/test")
async def test_endpoint():
logger.info("Test endpoint called")
return {
"message": "API is working correctly",
"timestamp": "2024-01-01T00:00:00Z",
"status": "success"
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)