| from fastapi import FastAPI, HTTPException | |
| from pydantic import BaseModel | |
| from embedding_engine import IndonesianEmbeddingEngine | |
| from typing import List | |
| import time | |
| app = FastAPI(title="Indonesian Embedding Service") | |
| engine = IndonesianEmbeddingEngine() | |
| class EmbedRequest(BaseModel): | |
| texts: List[str] | |
| class EmbedResponse(BaseModel): | |
| embeddings: List[List[float]] | |
| dimension: int | |
| model: str | |
| elapsed_ms: float | |
| def embed(req: EmbedRequest): | |
| if not req.texts or len(req.texts) == 0: | |
| raise HTTPException(status_code=400, detail="texts required") | |
| start = time.time() | |
| embeddings = engine.embed(req.texts) | |
| elapsed = (time.time() - start) * 1000 | |
| return { | |
| "embeddings": embeddings, | |
| "dimension": len(embeddings[0]), | |
| "model": "asmud/indonesian-embedding-small (onnx)", | |
| "elapsed_ms": round(elapsed, 2), | |
| } | |
| def health(): | |
| return {"status": "ok"} |