from fastapi import APIRouter, HTTPException, Request from fastapi.responses import StreamingResponse from service import JEmbeddingService from utils import jingrow_api_verify_and_billing from settings import settings import json router = APIRouter(prefix=settings.router_prefix) service = JEmbeddingService() @router.post(settings.generate_route) @jingrow_api_verify_and_billing(api_name=settings.api_name) async def generate_embeddings(data: dict, request: Request): try: if "texts" not in data or not isinstance(data["texts"], list): raise HTTPException(status_code=400, detail="缺少texts参数或类型错误") vectors = await service.embed(data["texts"]) return {"success": True, "embeddings": vectors, "successful_count": len(vectors)} except HTTPException: raise except Exception as e: raise HTTPException(status_code=400, detail=str(e)) @router.post(settings.batch_route) @jingrow_api_verify_and_billing(api_name=settings.api_name) async def generate_embeddings_stream(data: dict, request: Request): if "items" not in data or not isinstance(data["items"], list) or len(data["items"]) == 0: raise HTTPException(status_code=400, detail="items不能为空") async def streamer(): async for result in service.process_batch(data["items"]): yield json.dumps(result) + "\n" return StreamingResponse(streamer(), media_type="application/x-ndjson")