summaryrefslogtreecommitdiff
path: root/supplemental/search
diff options
context:
space:
mode:
authorLain Soykaf <lain@lain.com>2024-05-19 12:47:08 +0400
committerLain Soykaf <lain@lain.com>2024-05-19 12:47:08 +0400
commitdd48810186e3b4ee14e1d3727f37bd470d0711a4 (patch)
treeee7b0480adedac30316b76ff74f099b13c82ca23 /supplemental/search
parente142ea400a9ed3595f8d432edd90ea26fc7d2eb5 (diff)
downloadpleroma-dd48810186e3b4ee14e1d3727f37bd470d0711a4.tar.gz
pleroma-dd48810186e3b4ee14e1d3727f37bd470d0711a4.zip
B FastembedAPI: Move to more appropriate folder
Diffstat (limited to 'supplemental/search')
-rw-r--r--supplemental/search/fastembed-api/Dockerfile8
-rw-r--r--supplemental/search/fastembed-api/compose.yml5
-rw-r--r--supplemental/search/fastembed-api/fastembed-server.py23
3 files changed, 36 insertions, 0 deletions
diff --git a/supplemental/search/fastembed-api/Dockerfile b/supplemental/search/fastembed-api/Dockerfile
new file mode 100644
index 000000000..f83c1c1b3
--- /dev/null
+++ b/supplemental/search/fastembed-api/Dockerfile
@@ -0,0 +1,8 @@
+FROM python:3.9
+
+WORKDIR /code
+COPY fastembed-server.py /workdir/fastembed-server.py
+
+RUN pip install --no-cache-dir --upgrade fastembed fastapi uvicorn
+
+CMD ["python", "/workdir/fastembed-server.py"]
diff --git a/supplemental/search/fastembed-api/compose.yml b/supplemental/search/fastembed-api/compose.yml
new file mode 100644
index 000000000..d4cb31722
--- /dev/null
+++ b/supplemental/search/fastembed-api/compose.yml
@@ -0,0 +1,5 @@
+services:
+ web:
+ build: .
+ ports:
+ - "11345:11345"
diff --git a/supplemental/search/fastembed-api/fastembed-server.py b/supplemental/search/fastembed-api/fastembed-server.py
new file mode 100644
index 000000000..dd4a7a9c8
--- /dev/null
+++ b/supplemental/search/fastembed-api/fastembed-server.py
@@ -0,0 +1,23 @@
+from fastembed import TextEmbedding
+from fastapi import FastAPI
+from pydantic import BaseModel
+
+models = {}
+
+app = FastAPI()
+
+class EmbeddingRequest(BaseModel):
+ model: str
+ input: str
+
+@app.post("/v1/embeddings")
+def embeddings(request: EmbeddingRequest):
+ model = models.get(request.model) or TextEmbedding(request.model)
+ models[request.model] = model
+ embeddings = next(model.embed(request.input)).tolist()
+ return {"data": [{"embedding": embeddings}]}
+
+if __name__ == "__main__":
+ import uvicorn
+
+ uvicorn.run(app, host="0.0.0.0", port=11345)