Bui Vu Duc Nghia commited on
Commit
b7846e0
·
1 Parent(s): f17fb45

feat: initialize embedding service

Browse files
Files changed (4) hide show
  1. Dockerfile +18 -0
  2. README.md +30 -6
  3. app.py +34 -0
  4. requirements.txt +4 -0
Dockerfile ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.10-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # Cài system deps tối thiểu
6
+ RUN apt-get update && apt-get install -y \
7
+ git \
8
+ && rm -rf /var/lib/apt/lists/*
9
+
10
+ COPY requirements.txt .
11
+ RUN pip install --no-cache-dir -r requirements.txt
12
+
13
+ COPY app.py .
14
+
15
+ EXPOSE 7860
16
+
17
+ CMD ["python", "app.py"]
18
+
README.md CHANGED
@@ -1,11 +1,35 @@
1
  ---
2
- title: Embedding
3
- emoji: 🚀
4
  colorFrom: blue
5
- colorTo: yellow
6
  sdk: docker
7
- pinned: false
8
- short_description: Voicebot Embedding
9
  ---
10
 
11
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: Text EmbeddinG
3
+ emoji: 🔢
4
  colorFrom: blue
5
+ colorTo: purple
6
  sdk: docker
7
+ app_port: 7860
 
8
  ---
9
 
10
+ # Text Embedding API
11
+
12
+ This Space provides a simple REST API to generate text embeddings using:
13
+
14
+ **Model:** `Alibaba-NLP/gte-multilingual-base`
15
+
16
+ ## 🚀 Features
17
+
18
+ - Multilingual text embedding
19
+ - SentenceTransformers-based
20
+ - FastAPI + Docker
21
+ - Ready for RAG / Vector DB (Qdrant, FAISS, Milvus…)
22
+
23
+ ---
24
+
25
+ ## 📡 API Endpoints
26
+
27
+ ### `POST /embed`
28
+
29
+ Generate embedding for input text.
30
+
31
+ **Request**
32
+ ```json
33
+ {
34
+ "text": "Xin chào, đây là một câu tiếng Việt"
35
+ }
app.py ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ from sentence_transformers import SentenceTransformer
4
+ import uvicorn
5
+
6
+ MODEL_NAME = "Alibaba-NLP/gte-multilingual-base"
7
+
8
+ app = FastAPI(title="Text Embedding API")
9
+
10
+ model = SentenceTransformer(MODEL_NAME)
11
+
12
+ class EmbedRequest(BaseModel):
13
+ text: str
14
+
15
+ class EmbedResponse(BaseModel):
16
+ embedding: list[float]
17
+ dim: int
18
+ model: str
19
+
20
+ @app.post("/embed", response_model=EmbedResponse)
21
+ def embed(req: EmbedRequest):
22
+ embedding = model.encode(req.text, normalize_embeddings=True)
23
+ return {
24
+ "embedding": embedding.tolist(),
25
+ "dim": len(embedding),
26
+ "model": MODEL_NAME
27
+ }
28
+
29
+ @app.get("/")
30
+ def health():
31
+ return {"status": "ok", "model": MODEL_NAME}
32
+
33
+ if __name__ == "__main__":
34
+ uvicorn.run(app, host="0.0.0.0", port=7860)
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ sentence-transformers
4
+ torch