支持fastapi服务
This commit is contained in:
133
api/app.py
Normal file
133
api/app.py
Normal file
@@ -0,0 +1,133 @@
|
||||
"""
|
||||
ReelForge FastAPI Application
|
||||
|
||||
Main FastAPI app with all routers and middleware.
|
||||
"""
|
||||
|
||||
from contextlib import asynccontextmanager
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from loguru import logger
|
||||
|
||||
from api.config import api_config
|
||||
from api.tasks import task_manager
|
||||
from api.dependencies import shutdown_reelforge
|
||||
|
||||
# Import routers
|
||||
from api.routers import (
|
||||
health_router,
|
||||
llm_router,
|
||||
tts_router,
|
||||
image_router,
|
||||
content_router,
|
||||
video_router,
|
||||
tasks_router,
|
||||
files_router,
|
||||
)
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
"""
|
||||
Application lifespan manager
|
||||
|
||||
Handles startup and shutdown events.
|
||||
"""
|
||||
# Startup
|
||||
logger.info("🚀 Starting ReelForge API...")
|
||||
await task_manager.start()
|
||||
logger.info("✅ ReelForge API started successfully\n")
|
||||
|
||||
yield
|
||||
|
||||
# Shutdown
|
||||
logger.info("🛑 Shutting down ReelForge API...")
|
||||
await task_manager.stop()
|
||||
await shutdown_reelforge()
|
||||
logger.info("✅ ReelForge API shutdown complete")
|
||||
|
||||
|
||||
# Create FastAPI app
|
||||
app = FastAPI(
|
||||
title="ReelForge API",
|
||||
description="""
|
||||
## ReelForge - AI Video Generation Platform API
|
||||
|
||||
### Features
|
||||
- 🤖 **LLM**: Large language model integration
|
||||
- 🔊 **TTS**: Text-to-speech synthesis
|
||||
- 🎨 **Image**: AI image generation
|
||||
- 📝 **Content**: Automated content generation
|
||||
- 🎬 **Video**: End-to-end video generation
|
||||
|
||||
### Video Generation Modes
|
||||
- **Sync**: `/api/video/generate/sync` - For small videos (< 30s)
|
||||
- **Async**: `/api/video/generate/async` - For large videos with task tracking
|
||||
|
||||
### Getting Started
|
||||
1. Check health: `GET /health`
|
||||
2. Generate narrations: `POST /api/content/narration`
|
||||
3. Generate video: `POST /api/video/generate/sync` or `/async`
|
||||
4. Track task progress: `GET /api/tasks/{task_id}`
|
||||
""",
|
||||
version="0.1.0",
|
||||
docs_url=api_config.docs_url,
|
||||
redoc_url=api_config.redoc_url,
|
||||
openapi_url=api_config.openapi_url,
|
||||
lifespan=lifespan,
|
||||
)
|
||||
|
||||
# Add CORS middleware
|
||||
if api_config.cors_enabled:
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=api_config.cors_origins,
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
logger.info(f"CORS enabled for origins: {api_config.cors_origins}")
|
||||
|
||||
# Include routers
|
||||
# Health check (no prefix)
|
||||
app.include_router(health_router)
|
||||
|
||||
# API routers (with /api prefix)
|
||||
app.include_router(llm_router, prefix=api_config.api_prefix)
|
||||
app.include_router(tts_router, prefix=api_config.api_prefix)
|
||||
app.include_router(image_router, prefix=api_config.api_prefix)
|
||||
app.include_router(content_router, prefix=api_config.api_prefix)
|
||||
app.include_router(video_router, prefix=api_config.api_prefix)
|
||||
app.include_router(tasks_router, prefix=api_config.api_prefix)
|
||||
app.include_router(files_router, prefix=api_config.api_prefix)
|
||||
|
||||
|
||||
@app.get("/")
|
||||
async def root():
|
||||
"""Root endpoint with API information"""
|
||||
return {
|
||||
"service": "ReelForge API",
|
||||
"version": "0.1.0",
|
||||
"docs": api_config.docs_url,
|
||||
"health": "/health",
|
||||
"api": {
|
||||
"llm": f"{api_config.api_prefix}/llm",
|
||||
"tts": f"{api_config.api_prefix}/tts",
|
||||
"image": f"{api_config.api_prefix}/image",
|
||||
"content": f"{api_config.api_prefix}/content",
|
||||
"video": f"{api_config.api_prefix}/video",
|
||||
"tasks": f"{api_config.api_prefix}/tasks",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import uvicorn
|
||||
|
||||
uvicorn.run(
|
||||
"api.app:app",
|
||||
host=api_config.host,
|
||||
port=api_config.port,
|
||||
reload=api_config.reload,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user