40 lines
1.4 KiB
Python

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")