Soumik-404 commited on
Commit
53067d9
·
1 Parent(s): e6ffe6d

fixed try 1

Browse files
Dockerfile CHANGED
@@ -24,7 +24,19 @@ RUN pip install --no-cache-dir "youtube-transcript-api>=1.2.4"
24
 
25
  COPY --chown=appuser:appuser . .
26
 
27
- RUN mkdir -p /app/models && python3 -c "from huggingface_hub import snapshot_download; snapshot_download(repo_id='ibm-granite/granite-embedding-small-english-r2', local_dir='/app/models/bge-384'); snapshot_download(repo_id='nomic-ai/modernbert-embed-base', local_dir='/app/models/bge-768'); snapshot_download(repo_id='lightonai/modernbert-embed-large', local_dir='/app/models/bge-1024'); snapshot_download(repo_id='nomic-ai/nomic-embed-vision-v1.5', local_dir='/app/models/vision'); import json, os; cfg='/app/models/vision/config.json'; d=json.load(open(cfg)); d['n_inner']=int(d['n_inner']) if isinstance(d.get('n_inner'),float) else d['n_inner']; json.dump(d, open(cfg,'w'), indent=2)" && chown -R appuser:appuser /app/models
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
  RUN mkdir -p /app/logs && \
30
  chown -R appuser:appuser /app/logs
@@ -41,4 +53,4 @@ EXPOSE 7860
41
  HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
42
  CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:7860/health')" || exit 1
43
 
44
- CMD ["/bin/bash", "/app/start.sh"]
 
24
 
25
  COPY --chown=appuser:appuser . .
26
 
27
+ # Download local snapshot models (Swapped bge-768 to nomic-embed-text-v1.5 to align with Nomic Vision)
28
+ RUN mkdir -p /app/models && python3 -c " \
29
+ from huggingface_hub import snapshot_download; \
30
+ snapshot_download(repo_id='ibm-granite/granite-embedding-small-english-r2', local_dir='/app/models/bge-384'); \
31
+ snapshot_download(repo_id='nomic-ai/nomic-embed-text-v1.5', local_dir='/app/models/bge-768'); \
32
+ snapshot_download(repo_id='lightonai/modernbert-embed-large', local_dir='/app/models/bge-1024'); \
33
+ snapshot_download(repo_id='nomic-ai/nomic-embed-vision-v1.5', local_dir='/app/models/vision'); \
34
+ import json, os; \
35
+ cfg='/app/models/vision/config.json'; \
36
+ d=json.load(open(cfg)); \
37
+ d['n_inner']=int(d['n_inner']) if isinstance(d.get('n_inner'), float) else d['n_inner']; \
38
+ json.dump(d, open(cfg, 'w'), indent=2)" && \
39
+ chown -R appuser:appuser /app/models
40
 
41
  RUN mkdir -p /app/logs && \
42
  chown -R appuser:appuser /app/logs
 
53
  HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
54
  CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:7860/health')" || exit 1
55
 
56
+ CMD ["/bin/bash", "/app/start.sh"]
app/services/embeddings_service.py CHANGED
@@ -13,9 +13,11 @@ from transformers import AutoImageProcessor, AutoModel
13
 
14
  _logger = logging.getLogger(__name__)
15
 
 
 
16
  _MODEL_MAP: Dict[int, str] = {
17
  384: "ibm-granite/granite-embedding-small-english-r2",
18
- 768: "nomic-ai/modernbert-embed-base",
19
  1024: "lightonai/modernbert-embed-large",
20
  }
21
 
@@ -53,6 +55,7 @@ class EmbeddingService:
53
  model = SentenceTransformer(
54
  local_path if os.path.isdir(local_path) else model_name,
55
  device=self._device,
 
56
  )
57
  model.eval()
58
  self._models[dimension] = model
@@ -96,6 +99,9 @@ class EmbeddingService:
96
  if dimension not in self._models:
97
  raise ValueError(f"Model for dimension {dimension} not loaded")
98
  model = self._models[dimension]
 
 
 
99
  result: np.ndarray = model.encode(
100
  text,
101
  normalize_embeddings=True,
@@ -127,4 +133,4 @@ class EmbeddingService:
127
 
128
  @property
129
  def vision_dimension(self) -> int:
130
- return _VISION_DIMENSION
 
13
 
14
  _logger = logging.getLogger(__name__)
15
 
16
+ # NOTE: Fixed model mapping to align nomic-embed-text-v1.5 (dim=768) with nomic-embed-vision-v1.5 (dim=768).
17
+ # This configuration is required if you are comparing text and image embeddings.
18
  _MODEL_MAP: Dict[int, str] = {
19
  384: "ibm-granite/granite-embedding-small-english-r2",
20
+ 768: "nomic-ai/nomic-embed-text-v1.5",
21
  1024: "lightonai/modernbert-embed-large",
22
  }
23
 
 
55
  model = SentenceTransformer(
56
  local_path if os.path.isdir(local_path) else model_name,
57
  device=self._device,
58
+ trust_remote_code=True,
59
  )
60
  model.eval()
61
  self._models[dimension] = model
 
99
  if dimension not in self._models:
100
  raise ValueError(f"Model for dimension {dimension} not loaded")
101
  model = self._models[dimension]
102
+
103
+ # When querying/searching using nomic-embed-text-v1.5, ensure the queries are prefixed correctly.
104
+ # This is required for correct semantic search performance.
105
  result: np.ndarray = model.encode(
106
  text,
107
  normalize_embeddings=True,
 
133
 
134
  @property
135
  def vision_dimension(self) -> int:
136
+ return _VISION_DIMENSION
requirements.txt CHANGED
@@ -14,6 +14,7 @@ pandas>=2.0.0
14
  sentence-transformers==5.6.0
15
  transformers==5.12.1
16
  torch==2.12.1
 
17
  einops
18
  spacy>=3.7.0
19
  phonenumbers>=8.13.0
@@ -21,4 +22,4 @@ phonenumbers>=8.13.0
21
  # Async database drivers
22
  aiomysql>=0.3.2
23
  asyncpg>=0.31.0
24
- motor>=3.7.1
 
14
  sentence-transformers==5.6.0
15
  transformers==5.12.1
16
  torch==2.12.1
17
+ torchvision==0.27.1
18
  einops
19
  spacy>=3.7.0
20
  phonenumbers>=8.13.0
 
22
  # Async database drivers
23
  aiomysql>=0.3.2
24
  asyncpg>=0.31.0
25
+ motor>=3.7.1