Spaces:
Sleeping
Sleeping
File size: 5,236 Bytes
5ee6501 8b31749 e46589a 8b656e5 e46589a 8b656e5 e46589a 8b31749 e46589a 8b31749 8b656e5 e46589a 8b31749 e46589a 8b656e5 e46589a 8b31749 8b656e5 e46589a 8b31749 e46589a 8b656e5 8b31749 e46589a 8b31749 8b656e5 8b31749 8b656e5 e46589a 8b31749 8b656e5 8b31749 8b656e5 8b31749 e46589a 8b31749 e46589a 8b656e5 8b31749 8b656e5 8b31749 8b656e5 8b31749 5ee6501 8b656e5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
---
title: Matching Embedding Service
emoji: 🏠
colorFrom: blue
colorTo: green
sdk: docker
pinned: false
license: mit
app_port: 7860
---
# Matching Embedding Service v2.2.0
**Production-Ready** сервис для генерации эмбеддингов текста и семантического поиска объектов недвижимости.
## 🆕 Что нового в v2.2.0
- ✅ **Новая модель** — `ai-forever/ru-en-RoSBERTa` (768 dimensions)
- ✅ **Нормализация эмбеддингов** — `normalize_embeddings=True` для cosine similarity
- ✅ **Унифицированная кэш-логика** — корректный флаг `cached`
- ✅ **Асинхронная обработка** — не блокирует event loop
- ✅ **Prometheus метрики** — `/metrics` endpoint
- ✅ **Rate limiting** — защита от перегрузки
- ✅ **In-memory кэширование** — до 100x ускорение повторных запросов
## Возможности
- 🔢 Генерация эмбеддингов для русского и английского текста
- 🔍 Семантический поиск и матчинг
- 🚀 FastAPI с автоматической документацией
- 🌐 CORS-ready для интеграции с Go Backend
- 📊 Prometheus метрики для мониторинга
## Модель
Используется модель: `ai-forever/ru-en-RoSBERTa`
- 🇷🇺 Оптимизирована для русского языка
- 🇬🇧 Поддержка английского языка
- Размерность векторов: **768**
- Нормализованные эмбеддинги для pgvector + cosine similarity
## Endpoints
### Основные
| Метод | Endpoint | Описание |
|-------|----------|----------|
| `GET` | `/health` | Проверка здоровья |
| `GET` | `/metrics` | Prometheus метрики |
| `GET` | `/model-info` | Информация о модели |
| `POST` | `/embed` | Эмбеддинг из текста |
| `POST` | `/prepare-and-embed` | ⭐ Основной endpoint |
| `POST` | `/batch` | Пакетная обработка |
### Переиндексация
| Метод | Endpoint | Описание |
|-------|----------|----------|
| `POST` | `/reindex` | Переиндексация объекта |
| `POST` | `/reindex-batch` | Пакетная переиндексация |
### Кэш
| Метод | Endpoint | Описание |
|-------|----------|----------|
| `GET` | `/cache/stats` | Статистика кэша |
| `POST` | `/cache/clear` | Очистка кэша |
## Конфигурация
| Переменная | По умолчанию | Описание |
|------------|--------------|----------|
| `EMBEDDING_MODEL` | `paraphrase-multilingual-MiniLM-L12-v2` | Модель |
| `MAX_BATCH_SIZE` | `128` | Макс. элементов в батче |
| `MAX_TEXT_LENGTH` | `10000` | Макс. символов |
| `RATE_LIMIT` | `100/minute` | Rate limit |
| `CACHE_ENABLED` | `true` | Включить кэш |
| `CACHE_TTL_SECONDS` | `3600` | TTL кэша |
## Использование
### Python
```python
import requests
# Health check
response = requests.get("https://your-space.hf.space/health")
print(response.json())
# {"status": "healthy", "model": "...", "version": "2.1.0", "cache_enabled": true}
# Генерация эмбеддинга
response = requests.post(
"https://your-space.hf.space/prepare-and-embed",
json={
"title": "Уютная квартира в центре",
"description": "Для семьи с детьми",
"price": 10000000,
"rooms": 3
}
)
result = response.json()
embedding = result["embedding"] # [0.123, -0.456, ...]
checksum = result["model_checksum"] # "a1b2c3d4e5f6"
cached = result["cached"] # true/false
```
### Go
```go
type EmbedRequest struct {
Title string `json:"title"`
Description string `json:"description"`
Price float64 `json:"price,omitempty"`
Rooms int `json:"rooms,omitempty"`
}
type EmbedResponse struct {
Embedding []float64 `json:"embedding"`
Dimensions int `json:"dimensions"`
ModelVersion string `json:"model_version"`
ModelChecksum string `json:"model_checksum"`
Cached bool `json:"cached"`
}
// Сохраняем в PostgreSQL + pgvector
// UPDATE leads SET embedding = $1, model_checksum = $2 WHERE id = $3
```
## Разработка
### Локальный запуск
```bash
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 7860
```
### Docker
```bash
docker build -t matching-service .
docker run -p 7860:7860 \
-e CACHE_ENABLED=true \
-e RATE_LIMIT=100/minute \
matching-service
```
### Мониторинг
Prometheus scrape config:
```yaml
scrape_configs:
- job_name: 'embedding-service'
static_configs:
- targets: ['localhost:7860']
metrics_path: '/metrics'
```
## Changelog
См. [CHANGELOG.md](CHANGELOG.md) для полного списка изменений.
|