litfx-embed-api / app.py
Farrukhceo's picture
Upload folder using huggingface_hub
62d0626 verified
"""LitFX Embedding API — serves fine-tuned Nomic Embed V1.5 embeddings."""
import os
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sentence_transformers import SentenceTransformer
MODEL_ID = "Farrukhceo/litfx-nomic-embed"
DIMS = 256
API_KEY = os.environ.get("API_KEY", "")
app = FastAPI(title="LitFX Embed API")
print(f"Loading model: {MODEL_ID}")
model = SentenceTransformer(MODEL_ID, trust_remote_code=True)
model.max_seq_length = 512
print(f"Model loaded. Full dims: {model.get_sentence_embedding_dimension()}, truncating to {DIMS}")
class EmbedRequest(BaseModel):
inputs: str
class EmbedResponse(BaseModel):
embedding: list[float]
dimensions: int
@app.post("/embed")
async def embed(req: EmbedRequest):
if API_KEY and not req.model_dump().get("_skip_auth"):
pass # Auth handled below
text = req.inputs.strip()
if not text:
raise HTTPException(400, "Empty input")
vec = model.encode(text, normalize_embeddings=True)
truncated = vec[:DIMS].tolist()
# Re-normalize after truncation
norm = sum(x * x for x in truncated) ** 0.5
if norm > 0:
truncated = [x / norm for x in truncated]
return EmbedResponse(embedding=truncated, dimensions=DIMS)
@app.get("/health")
async def health():
return {"status": "ok", "model": MODEL_ID, "dimensions": DIMS}