text2vector / app /main.py
emilbm's picture
format
4147a65
Raw History Blame Contribute Delete
1.48 kB
from fastapi import FastAPI, HTTPException
from fastapi.responses import FileResponse
from fastapi.middleware.cors import CORSMiddleware
from app.models import EmbedRequest, EmbedResponse
from app.embeddings import embed_text
from logging import getLogger
logger = getLogger(__name__)
app = FastAPI(
title="Embedding API",
description="A simple API to generate text embeddings using Microsoft's `multilingual-e5-large` model.",
version="1.0.0",
)
# Allow simple cross-origin requests from local development (adjust in production)
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.post("/embed", response_model=EmbedResponse)
async def embed(request: EmbedRequest) -> dict[str, list[list[float]]]:
"""Generate embeddings for a list of texts."""
try:
vectors = embed_text(request.texts)
return {"embeddings": vectors}
except Exception as e:
logger.exception("Error generating embeddings")
raise HTTPException(status_code=500, detail=str(e))
@app.get("/health")
async def health_check() -> dict[str, str]:
"""Health check endpoint."""
return {"status": "ok"}
@app.get("/", response_model=None)
async def root() -> FileResponse | dict[str, str]:
"""Serve the frontend `index.html` if present, otherwise return small JSON status."""
index_file = "frontend/index.html"
return FileResponse(index_file)