openvector_dev 0.1.5__py3-none-any.whl → 0.1.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
lein_vector/api/facade.py CHANGED
@@ -7,6 +7,7 @@ import redis.asyncio as aioredis
7
7
  from lein_vector import MemoryManagerQdrant, QdrantAdapter, RedisShortTermMemory
8
8
  from lein_vector.schemas.chunk import Chunk, ChunkPayload
9
9
  from lein_vector.sentence_transformer import EmbeddingProviderGemini
10
+ import warnings
10
11
 
11
12
 
12
13
  class Memory:
@@ -23,6 +24,8 @@ class Memory:
23
24
  self._msg_no: dict[int, int] = {}
24
25
  self.merge_n = merge_n
25
26
 
27
+ self.score_threshold = 0.72
28
+
26
29
  @classmethod
27
30
  async def from_qdrant(
28
31
  cls,
@@ -62,6 +65,11 @@ class Memory:
62
65
  :param history_n: Размер окна кратковременной памяти.
63
66
  :returns: Словарь с short_term и long_term сообщениями.
64
67
  """
68
+ warnings.warn(
69
+ "Заменили на низкоуровневые методы",
70
+ DeprecationWarning,
71
+ stacklevel=2
72
+ )
65
73
  key = (user_id, bot)
66
74
  curr_no = self._msg_no.get(key, 0) + 1
67
75
  self._msg_no[key] = curr_no
@@ -100,6 +108,11 @@ class Memory:
100
108
  :param history_n: Размер окна кратковременной памяти.
101
109
  :returns: Данные short_term и long_term в формате OpenAI-совместимого вывода.
102
110
  """
111
+ warnings.warn(
112
+ "Заменили на низкоуровневые методы",
113
+ DeprecationWarning,
114
+ stacklevel=2
115
+ )
103
116
  data = await self.step_user(user_id, bot, user_msg, topk=topk, history_n=history_n)
104
117
  data["short_term"] = self._to_openai(data["short_term"])
105
118
  data["long_term"] = self._chunk_texts(data["long_term"])
@@ -127,11 +140,12 @@ class Memory:
127
140
  save_pair: bool = True,
128
141
  ):
129
142
  """
130
- :param user_id: Идентификатор пользователя.
131
- :param gf_msg: Сообщение от gf (assistant).
132
- :param bot: Идентификатор бота.
133
- :param block_size: Размер блока для сохранения в долговременной памяти.
134
- :param save_pair: Флаг, сохранять ли пару сообщений при достижении block_size.
143
+ Добавляет в чанк памяти ответ ассистента.
144
+ :param user_id: Идентификатор пользователя
145
+ :param gf_msg: Сообщение от gf (assistant)
146
+ :param bot: Идентификатор бота
147
+ :param block_size: Размер блока для сохранения в долговременной памяти
148
+ :param save_pair: Флаг, сохранять ли пару сообщений при достижении block_size
135
149
  """
136
150
  key = (user_id, bot)
137
151
  curr_no = self._msg_no.get(key, 0) + 1
@@ -170,50 +184,46 @@ class Memory:
170
184
  if curr_no % 40 == 0:
171
185
  await self.long.merge_old_chunks(user_id, "type0", n=self.merge_n)
172
186
 
173
- async def _get_short_term(self, n=10) -> list:
174
- """
175
- :param n: Количество последних сообщений кратковременной памяти.
176
- :returns: Список сообщений.
177
- """
178
- return await self.short.window(n)
179
-
180
- async def _get_long_term(
181
- self, user_id: int, embedding: list[float], topk: int = 3
182
- ) -> list:
183
- """
184
- :param user_id: Идентификатор пользователя.
185
- :param embedding: Вектор эмбеддинга для поиска.
186
- :param topk: Количество возвращаемых чанков.
187
- :returns: Список чанков.
187
+ async def get_long_memories(self, user_id: int, bot: str, search_terms: list[str], topk: int = 3) -> list:
188
188
  """
189
- return await self.long.retrieve_by_embedding(user_id, embedding, topk)
190
-
191
- async def get_memories(self, user_id: int, search_terms: list[str], topk: int = 3) -> list:
192
- """
193
- :param user_id: Идентификатор пользователя.
194
- :param search_terms: Список поисковых запросов (строк).
195
- :param topk: Количество возвращаемых чанков на запрос.
196
- :returns: Список релевантных чанков.
189
+ Возвращает ТОЛЬКО длительную память по списку тем.
190
+ :param bot: Кодовое имя бота
191
+ :param user_id: Идентификатор пользователя
192
+ :param search_terms: Список поисковых запросов (строк)
193
+ :param topk: Количество возвращаемых чанков на запрос
194
+ :returns: Список релевантных чанков
197
195
  """
196
+ # wtf: Добавить фильтр только саммари
198
197
  search_terms = [await self.embed.get_embedding(term) for term in search_terms]
199
- return await self.long.retrieve_by_embeddings(user_id, search_terms, topk)
198
+ return await self.long.retrieve_by_embeddings(user_id, search_terms, topk,
199
+ bot=bot, score_threshold=0.72, filter_={"chunk_type": "type1"})
200
200
 
201
- async def _add_to_short(self, role: str, text: str) -> None:
201
+ async def get_short_memories(self, user_id: int, bot: str, n_memories: int = 20) -> list:
202
202
  """
203
- :param role: Роль сообщения.
204
- :param text: Текст сообщения.
203
+ Возвращает ТОЛЬКО кратковременную память по списку тем
204
+ :param bot: Кодовое имя бота
205
+ :param user_id: Идентификатор пользователя
206
+ :param n_memories: Количество последних сообщений кратковременной памяти
207
+ :returns: Список сообщений
205
208
  """
206
- await self.short.add(role, text)
209
+ data = await self.short.window(user_id, bot, n_memories)
210
+ return self._to_openai(data)
207
211
 
208
- async def _add_to_long(self, user_id: int, chunk: Chunk) -> None:
212
+ async def add_short_msg(self, user_id: int, bot: str, text: str, *, role: str = "user"):
209
213
  """
210
- :param user_id: Идентификатор пользователя.
211
- :param chunk: Экземпляр Chunk для сохранения.
214
+ Добавляет в "короткую память" новое сообщение
215
+ :param user_id: Идентификатор пользователя
216
+ :param bot: Кодовое имя бота
217
+ :param text: Сообщение для записи
218
+ :param role: Роль в диалоге
219
+ :type role: str = "user"
220
+ :return:
212
221
  """
213
- await self.long.upsert_chunk(user_id, chunk)
222
+ await self.short.add(bot=bot, user_id=user_id, role=role, text=text)
214
223
 
215
224
  async def delete_memory(self, user_id: int) -> None:
216
225
  """
226
+ Удаляет
217
227
  :param user_id: Идентификатор пользователя.
218
228
  """
219
229
  await self.long.delete_all(user_id)
@@ -144,6 +144,7 @@ class MemoryManagerQdrant(MemoryManagerABC):
144
144
  async def retrieve_filtered(
145
145
  self, user_id: int, bot: str, filter_: dict[str, Any], topk: int = 10
146
146
  ) -> list[ChunkPayload]:
147
+ raise NotImplementedError
147
148
  q_filter = {"user_id": user_id, "bot": bot}
148
149
  q_filter.update(filter_)
149
150
  return await self.qdrant.get_all_chunks_with_filter(q_filter, topk=topk)
@@ -22,11 +22,10 @@ class EmbeddingProviderGemini(EmbeddingProviderABC):
22
22
  async def get_embedding(self, text: str) -> list[float]:
23
23
  # В Gemini SDK обычно нет async, значит — обёртка через run_in_executor:
24
24
  import asyncio
25
-
25
+ if not isinstance(text, str):
26
+ return
26
27
  loop = asyncio.get_running_loop()
27
- # SDK call внутри executor
28
28
  embedding = await loop.run_in_executor(None, lambda: self._genai_embed(text))
29
- # Ответ — dict с 'embedding' или 'values'
30
29
  return embedding.embeddings[0].values
31
30
 
32
31
  async def get_embeddings(self, texts: list[str]) -> list[list[float]]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: openvector_dev
3
- Version: 0.1.5
3
+ Version: 0.1.7
4
4
  Summary:
5
5
  Author: p00ler
6
6
  Author-email: liveitspain@gmail.com
@@ -1,17 +1,17 @@
1
1
  lein_vector/__init__.py,sha256=ieXy65X4eVzUtSHNvlh00s4aMwKReafNni4s2q68z3Q,496
2
2
  lein_vector/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- lein_vector/api/facade.py,sha256=ge85_b0d-6n_B8PTRKL9kxIVhQQ5KazxanFLs6S_uEQ,9888
3
+ lein_vector/api/facade.py,sha256=f0Cwib5maw4Ae9QEmc5xDkx4Y2ozIzDQUqJ7jOdg2pg,10634
4
4
  lein_vector/bases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  lein_vector/bases/embeding_provider_abc.py,sha256=WBpVC6ra-SYqhJeZs8R8U679wfGebXgwOOVPIii-IvY,265
6
6
  lein_vector/bases/memory_manager_abc.py,sha256=pWuIw_wYlvUlt40jbiE92lWzdYaowZKg3XK0Mq0tQrw,1687
7
- lein_vector/memory_manager_qdrant.py,sha256=lTZu9i32S0d1ks8lIkXBZTkWklwctfxNiFy0s8VW0xc,6140
7
+ lein_vector/memory_manager_qdrant.py,sha256=gbOyXl3bm3H5EfvStOC6n4sWD85i8zWe97iKp6AvPDw,6175
8
8
  lein_vector/memory_manager_ram.py,sha256=lUATu6U-cZuRHnR6U1L8aJQB8FNK0Wi40vXsZ5fjDgI,6002
9
9
  lein_vector/qdrant_adapter.py,sha256=uPhYAp0KmYQhY3DF29JMO1JTbM__xDWGlnZZPor3VKI,4193
10
10
  lein_vector/redis_short_term.py,sha256=uCcncjgXAlNAY46b3_Pjvrn_G0NEI16kRRR9hxayzak,3155
11
11
  lein_vector/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  lein_vector/schemas/chunk.py,sha256=FSUwaFUSZk2ptoxupsdIfj5HYAMnHnu3eBfNpXCUMpM,1195
13
- lein_vector/sentence_transformer.py,sha256=ep6Y9qu8O4_qK4q14BPNxtSe0gBi-mH04xfy1-dhlUE,1898
13
+ lein_vector/sentence_transformer.py,sha256=gbWtkT01QFFA0IR_Ta-xsfBfb6owDzGnZDKY1g9fvBQ,1851
14
14
  lein_vector/short_term.py,sha256=KFot9r26d9TZYLscVT42V0NwufIQUkx-hftOe2p7qLU,1933
15
- openvector_dev-0.1.5.dist-info/METADATA,sha256=LIdZ629onFJKS8Cxw-jlr7Q4FbyvVUKvcXh0Gp3vfW4,3167
16
- openvector_dev-0.1.5.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
17
- openvector_dev-0.1.5.dist-info/RECORD,,
15
+ openvector_dev-0.1.7.dist-info/METADATA,sha256=jNE4MlXel9eZ0iNEIg-JaFdIcAOCqBdxVUdVlNoKBqE,3167
16
+ openvector_dev-0.1.7.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
17
+ openvector_dev-0.1.7.dist-info/RECORD,,