Charan5775 commited on
Commit
3ee72b0
·
verified ·
1 Parent(s): d70de12

Update server.py

Browse files
Files changed (1) hide show
  1. server.py +30 -33
server.py CHANGED
@@ -1,57 +1,54 @@
1
- # server.py
2
  import os
3
  from fastapi import FastAPI, Request
4
- from pydantic import BaseModel
5
  from sentence_transformers import SentenceTransformer
6
  import uvicorn
7
 
8
- # ✅ Fix Hugging Face cache issue
9
- os.environ["HF_HOME"] = "/tmp/hf"
10
- os.environ["TRANSFORMERS_CACHE"] = "/tmp/hf"
11
 
12
- # Load embeddings model
13
  MODEL_NAME = "sentence-transformers/all-MiniLM-L6-v2"
14
- model = SentenceTransformer(MODEL_NAME)
15
 
16
- # FastAPI app
17
- app = FastAPI(title="OpenAI-Compatible Embeddings API")
18
-
19
- # Request schema (mimics OpenAI's /embeddings endpoint)
20
- class EmbeddingRequest(BaseModel):
21
- model: str
22
- input: list[str] | str
23
 
24
  @app.post("/v1/embeddings")
25
- async def create_embeddings(request: EmbeddingRequest):
26
- if isinstance(request.input, str):
27
- texts = [request.input]
28
- else:
29
- texts = request.input
30
-
31
- embeddings = model.encode(texts, convert_to_numpy=True).tolist()
32
-
33
- return {
 
 
 
 
 
 
 
 
 
 
 
34
  "object": "list",
35
  "data": [
36
  {
37
  "object": "embedding",
38
  "embedding": emb,
39
  "index": idx
40
- }
41
- for idx, emb in enumerate(embeddings)
42
  ],
43
  "model": MODEL_NAME,
44
  "usage": {
45
- "prompt_tokens": len(texts),
46
- "total_tokens": len(texts),
47
  }
48
  }
 
49
 
50
- # Health check
51
- @app.get("/")
52
- async def root():
53
- return {"status": "ok", "model": MODEL_NAME}
54
-
55
- # Run app
56
  if __name__ == "__main__":
57
  uvicorn.run(app, host="0.0.0.0", port=7860)
 
 
1
  import os
2
  from fastapi import FastAPI, Request
3
+ from fastapi.responses import JSONResponse
4
  from sentence_transformers import SentenceTransformer
5
  import uvicorn
6
 
7
+ # ✅ Fix cache permissions issue
8
+ os.environ["HF_HOME"] = "/tmp"
 
9
 
10
+ # Model selection
11
  MODEL_NAME = "sentence-transformers/all-MiniLM-L6-v2"
12
+ model = SentenceTransformer(MODEL_NAME, cache_folder="/tmp")
13
 
14
+ app = FastAPI()
 
 
 
 
 
 
15
 
16
  @app.post("/v1/embeddings")
17
+ async def create_embeddings(request: Request):
18
+ """
19
+ OpenAI-compatible embeddings endpoint.
20
+ Accepts: {"input": "your text here"}
21
+ """
22
+ data = await request.json()
23
+ text_input = data.get("input")
24
+
25
+ if text_input is None:
26
+ return JSONResponse(
27
+ {"error": {"message": "Missing 'input' field", "type": "invalid_request"}}, status_code=400
28
+ )
29
+
30
+ # ✅ Handle single string or list of strings
31
+ if isinstance(text_input, str):
32
+ text_input = [text_input]
33
+
34
+ embeddings = model.encode(text_input, convert_to_numpy=True).tolist()
35
+
36
+ response = {
37
  "object": "list",
38
  "data": [
39
  {
40
  "object": "embedding",
41
  "embedding": emb,
42
  "index": idx
43
+ } for idx, emb in enumerate(embeddings)
 
44
  ],
45
  "model": MODEL_NAME,
46
  "usage": {
47
+ "prompt_tokens": len(text_input),
48
+ "total_tokens": len(text_input),
49
  }
50
  }
51
+ return JSONResponse(response)
52
 
 
 
 
 
 
 
53
  if __name__ == "__main__":
54
  uvicorn.run(app, host="0.0.0.0", port=7860)