yumoqing 769fc4968e feat: initial wan22 video generation service
- Wan2.2-TI2V-5B GPU 视频推理
- ahserver + longtasks 异步任务队列
- OpenAI 兼容 API: POST /api/submit, GET /api/task, GET /api/status
- 模型常驻内存,惰性加载
- 全局串行推理锁(GPU 安全)
- 支持 t2v/i2v/ti2v/s2v 四种任务类型
2026-06-09 22:00:22 +08:00

50 lines
1.4 KiB
Python

# -*- coding:utf-8 -*-
import os
from ahserver.webapp import webapp
from ahserver.serverenv import ServerEnv
from ahserver.configuredServer import add_startup
from longtasks.longtasks import LongTasks, schedule_once
from appPublic.log import debug
class Wan22Tasks(LongTasks):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.gpu_id = int(os.environ.get('WAN22_GPU_ID', '2'))
async def process_task(self, payload: dict, workid: int = None):
import json
if isinstance(payload, str):
payload = json.loads(payload)
task_type = payload.get('task_type', '')
debug(f'Wan22Tasks processing: type={task_type}')
if task_type == 'generate_video':
from workers.generate import run_generate
return await run_generate(self, payload)
raise ValueError(f'Unknown task_type: {task_type}')
async def on_app_built(app):
env = ServerEnv()
longtasks = env.longtasks
if longtasks:
schedule_once(0.1, longtasks.run)
debug(f'longtasks worker started, GPU: {longtasks.gpu_id}')
def init():
env = ServerEnv()
longtasks = Wan22Tasks(
'redis://127.0.0.1:6379',
'wan22',
worker_cnt=1,
stuck_seconds=3600,
max_age_hours=24
)
env.longtasks = longtasks
add_startup(on_app_built)
if __name__ == '__main__':
webapp(init)