ex510 commited on
Commit
696e98d
·
verified ·
1 Parent(s): 1c7d491

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +23 -10
main.py CHANGED
@@ -1,16 +1,26 @@
1
  from fastapi import FastAPI, HTTPException
2
- from pydantic import BaseModel
3
  from sentence_transformers import SentenceTransformer
4
  import uvicorn
 
 
5
 
6
- app = FastAPI(title="Text Embedding API (multilinguale5small)")
7
 
8
  class TextRequest(BaseModel):
9
- text: str
10
 
11
- # Load Model
 
12
  model_id = 'intfloat/multilingual-e5-small'
13
- model = SentenceTransformer(model_id)
 
 
 
 
 
 
 
14
 
15
  @app.get("/")
16
  def home():
@@ -19,17 +29,20 @@ def home():
19
  @app.post("/embed/text")
20
  async def embed_text(request: TextRequest):
21
  try:
22
- # Generate embedding
23
- embedding = model.encode(request.text).tolist()
 
 
 
24
 
25
  return {
26
- "success": True,
27
  "model": model_id,
28
- "dimension": len(embedding),
29
  "embedding": embedding
30
  }
31
  except Exception as e:
32
- raise HTTPException(status_code=400, detail=str(e))
33
 
34
  if __name__ == "__main__":
35
  uvicorn.run(app, host="0.0.0.0", port=7860)
 
1
  from fastapi import FastAPI, HTTPException
2
+ from pydantic import BaseModel, Field
3
  from sentence_transformers import SentenceTransformer
4
  import uvicorn
5
+ import asyncio
6
+ from concurrent.futures import ThreadPoolExecutor
7
 
8
+ app = FastAPI(title="Text Embedding API (multilingual-e5-small)")
9
 
10
  class TextRequest(BaseModel):
11
+ text: str = Field(..., min_length=1, max_length=10000, description="Text to embed")
12
 
13
+ # Globals
14
+ model = None
15
  model_id = 'intfloat/multilingual-e5-small'
16
+ executor = ThreadPoolExecutor(max_workers=4)
17
+
18
+ @app.on_event("startup")
19
+ async def load_model():
20
+ global model
21
+ print(f"Loading model: {model_id}...")
22
+ model = SentenceTransformer(model_id)
23
+ print("Model loaded successfully")
24
 
25
  @app.get("/")
26
  def home():
 
29
  @app.post("/embed/text")
30
  async def embed_text(request: TextRequest):
31
  try:
32
+ loop = asyncio.get_event_loop()
33
+ embedding = await loop.run_in_executor(
34
+ executor,
35
+ lambda: model.encode(request.text, normalize_embeddings=True).tolist()
36
+ )
37
 
38
  return {
39
+ "success": True,
40
  "model": model_id,
41
+ "dimension": len(embedding),
42
  "embedding": embedding
43
  }
44
  except Exception as e:
45
+ raise HTTPException(status_code=500, detail=str(e))
46
 
47
  if __name__ == "__main__":
48
  uvicorn.run(app, host="0.0.0.0", port=7860)