Calcifer0323 commited on
Commit
9ebcd3b
·
1 Parent(s): 8b656e5

fix: update sentence-transformers>=2.7.0 for ru-en-RoSBERTa compatibility

Browse files
Files changed (4) hide show
  1. .env.example +1 -1
  2. Dockerfile +1 -2
  3. main.py +10 -5
  4. requirements.txt +7 -6
.env.example CHANGED
@@ -1,5 +1,5 @@
1
  # ============================================
2
- # Embedding Service v2.1.0 Configuration
3
  # ============================================
4
 
5
  # Model settings
 
1
  # ============================================
2
+ # Embedding Service v2.2.0 Configuration
3
  # ============================================
4
 
5
  # Model settings
Dockerfile CHANGED
@@ -18,9 +18,8 @@ WORKDIR /app
18
 
19
  # Base settings
20
  ENV PYTHONUNBUFFERED=1
21
- ENV TRANSFORMERS_CACHE=/home/user/.cache/transformers
22
- ENV SENTENCE_TRANSFORMERS_HOME=/home/user/.cache/sentence_transformers
23
  ENV HF_HOME=/home/user/.cache/huggingface
 
24
 
25
  # Model settings
26
  ENV EMBEDDING_MODEL=ai-forever/ru-en-RoSBERTa
 
18
 
19
  # Base settings
20
  ENV PYTHONUNBUFFERED=1
 
 
21
  ENV HF_HOME=/home/user/.cache/huggingface
22
+ ENV SENTENCE_TRANSFORMERS_HOME=/home/user/.cache/sentence_transformers
23
 
24
  # Model settings
25
  ENV EMBEDDING_MODEL=ai-forever/ru-en-RoSBERTa
main.py CHANGED
@@ -415,6 +415,11 @@ async def metrics_middleware(request: Request, call_next):
415
 
416
  # ============== Pydantic Models ==============
417
 
 
 
 
 
 
418
  class EmbedRequest(BaseModel):
419
  """Запрос на генерацию эмбеддинга из готового текста."""
420
  text: str = Field(..., min_length=1, max_length=MAX_TEXT_LENGTH, description="Текст для эмбеддинга")
@@ -427,7 +432,7 @@ class EmbedRequest(BaseModel):
427
  return v
428
 
429
 
430
- class EmbedResponse(BaseModel):
431
  """Ответ с эмбеддингом."""
432
  embedding: List[float]
433
  dimensions: int
@@ -452,7 +457,7 @@ class PrepareAndEmbedRequest(BaseModel):
452
  address: Optional[str] = Field(default=None, max_length=500, description="Адрес")
453
 
454
 
455
- class PrepareAndEmbedResponse(BaseModel):
456
  """Ответ с эмбеддингом."""
457
  embedding: List[float]
458
  dimensions: int
@@ -498,7 +503,7 @@ class BatchResultItem(BaseModel):
498
  cached: bool = Field(default=False, description="Результат из кэша")
499
 
500
 
501
- class BatchResponse(BaseModel):
502
  """Ответ на пакетную обработку."""
503
  results: List[BatchResultItem]
504
  dimensions: int
@@ -509,7 +514,7 @@ class BatchResponse(BaseModel):
509
  model_checksum: str
510
 
511
 
512
- class HealthResponse(BaseModel):
513
  """Ответ health check."""
514
  status: str
515
  model: str
@@ -536,7 +541,7 @@ class ReindexRequest(BaseModel):
536
  address: Optional[str] = Field(default=None, max_length=500, description="Адрес")
537
 
538
 
539
- class ReindexResponse(BaseModel):
540
  """Ответ на переиндексацию."""
541
  entity_id: str
542
  entity_type: str
 
415
 
416
  # ============== Pydantic Models ==============
417
 
418
+ class BaseModelConfig(BaseModel):
419
+ """Базовая модель с отключенным protected namespace для полей model_*"""
420
+ model_config = {"protected_namespaces": ()}
421
+
422
+
423
  class EmbedRequest(BaseModel):
424
  """Запрос на генерацию эмбеддинга из готового текста."""
425
  text: str = Field(..., min_length=1, max_length=MAX_TEXT_LENGTH, description="Текст для эмбеддинга")
 
432
  return v
433
 
434
 
435
+ class EmbedResponse(BaseModelConfig):
436
  """Ответ с эмбеддингом."""
437
  embedding: List[float]
438
  dimensions: int
 
457
  address: Optional[str] = Field(default=None, max_length=500, description="Адрес")
458
 
459
 
460
+ class PrepareAndEmbedResponse(BaseModelConfig):
461
  """Ответ с эмбеддингом."""
462
  embedding: List[float]
463
  dimensions: int
 
503
  cached: bool = Field(default=False, description="Результат из кэша")
504
 
505
 
506
+ class BatchResponse(BaseModelConfig):
507
  """Ответ на пакетную обработку."""
508
  results: List[BatchResultItem]
509
  dimensions: int
 
514
  model_checksum: str
515
 
516
 
517
+ class HealthResponse(BaseModelConfig):
518
  """Ответ health check."""
519
  status: str
520
  model: str
 
541
  address: Optional[str] = Field(default=None, max_length=500, description="Адрес")
542
 
543
 
544
+ class ReindexResponse(BaseModelConfig):
545
  """Ответ на переиндексацию."""
546
  entity_id: str
547
  entity_type: str
requirements.txt CHANGED
@@ -7,13 +7,14 @@ numpy>=1.24.0,<2.0.0
7
  pydantic==2.5.3
8
  python-dotenv==1.0.0
9
 
10
- # PyTorch - используем стандартную версию (HuggingFace имеет достаточно памяти)
11
- torch>=2.1.0,<2.2.0
12
- transformers==4.36.2
 
13
 
14
- # Sentence Transformers с совместимой версией huggingface_hub
15
- sentence-transformers==2.3.1
16
- huggingface_hub>=0.19.0,<0.20.0
17
 
18
  # Production-ready улучшения (v2.1.0)
19
  prometheus-client>=0.19.0 # Метрики для мониторинга
 
7
  pydantic==2.5.3
8
  python-dotenv==1.0.0
9
 
10
+ # PyTorch - CPU версия для уменьшения размера образа
11
+ --extra-index-url https://download.pytorch.org/whl/cpu
12
+ torch>=2.1.0
13
+ transformers>=4.38.0
14
 
15
+ # Sentence Transformers - обновлённая версия для совместимости с ru-en-RoSBERTa
16
+ sentence-transformers>=2.7.0
17
+ huggingface_hub>=0.20.0
18
 
19
  # Production-ready улучшения (v2.1.0)
20
  prometheus-client>=0.19.0 # Метрики для мониторинга