openvector_dev 0.1.6__py3-none-any.whl → 0.1.7.1__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 +19 -88
- lein_vector/memory_manager_qdrant.py +1 -1
- lein_vector/sentence_transformer.py +2 -3
- {openvector_dev-0.1.6.dist-info → openvector_dev-0.1.7.1.dist-info}/METADATA +1 -1
- {openvector_dev-0.1.6.dist-info → openvector_dev-0.1.7.1.dist-info}/RECORD +6 -6
- {openvector_dev-0.1.6.dist-info → openvector_dev-0.1.7.1.dist-info}/WHEEL +0 -0
lein_vector/api/facade.py
CHANGED
@@ -24,6 +24,8 @@ class Memory:
|
|
24
24
|
self._msg_no: dict[int, int] = {}
|
25
25
|
self.merge_n = merge_n
|
26
26
|
|
27
|
+
self.score_threshold = 0.72
|
28
|
+
|
27
29
|
@classmethod
|
28
30
|
async def from_qdrant(
|
29
31
|
cls,
|
@@ -52,70 +54,6 @@ class Memory:
|
|
52
54
|
long_mem = MemoryManagerQdrant(adapter, embedder)
|
53
55
|
return cls(short_mem, long_mem, embedder)
|
54
56
|
|
55
|
-
async def step_user(
|
56
|
-
self, *, bot: str, user_id: int, user_msg: str, topk: int = 3, history_n: int = 20
|
57
|
-
):
|
58
|
-
"""
|
59
|
-
:param bot: Идентификатор бота.
|
60
|
-
:param user_id: Идентификатор пользователя.
|
61
|
-
:param user_msg: Текст сообщения пользователя.
|
62
|
-
:param topk: Количество релевантных чанков из долговременной памяти.
|
63
|
-
:param history_n: Размер окна кратковременной памяти.
|
64
|
-
:returns: Словарь с short_term и long_term сообщениями.
|
65
|
-
"""
|
66
|
-
warnings.warn(
|
67
|
-
"Заменили на низкоуровневые методы",
|
68
|
-
DeprecationWarning,
|
69
|
-
stacklevel=2
|
70
|
-
)
|
71
|
-
key = (user_id, bot)
|
72
|
-
curr_no = self._msg_no.get(key, 0) + 1
|
73
|
-
self._msg_no[key] = curr_no
|
74
|
-
await self.short.add(
|
75
|
-
bot=bot,
|
76
|
-
user_id=user_id,
|
77
|
-
role="user",
|
78
|
-
text=user_msg,
|
79
|
-
extra={"msg_no": curr_no},
|
80
|
-
)
|
81
|
-
embedding = await self.embed.get_embedding(user_msg)
|
82
|
-
long_memories = await self.long.retrieve_by_embedding(
|
83
|
-
user_id=user_id,
|
84
|
-
embedding=embedding,
|
85
|
-
topk=topk,
|
86
|
-
filter_={"bot": bot},
|
87
|
-
score_threshold=0.7
|
88
|
-
)
|
89
|
-
short_ctx = await self.short.window(user_id, history_n)
|
90
|
-
return {"short_term": short_ctx, "long_term": long_memories}
|
91
|
-
|
92
|
-
async def step_user_oai(
|
93
|
-
self,
|
94
|
-
user_id: int,
|
95
|
-
user_msg: str,
|
96
|
-
bot: str,
|
97
|
-
*,
|
98
|
-
topk: int = 3,
|
99
|
-
history_n: int = 20,
|
100
|
-
) -> dict:
|
101
|
-
"""
|
102
|
-
:param user_id: Идентификатор пользователя.
|
103
|
-
:param user_msg: Текст сообщения пользователя.
|
104
|
-
:param bot: Идентификатор бота.
|
105
|
-
:param topk: Количество релевантных чанков из долговременной памяти.
|
106
|
-
:param history_n: Размер окна кратковременной памяти.
|
107
|
-
:returns: Данные short_term и long_term в формате OpenAI-совместимого вывода.
|
108
|
-
"""
|
109
|
-
warnings.warn(
|
110
|
-
"Заменили на низкоуровневые методы",
|
111
|
-
DeprecationWarning,
|
112
|
-
stacklevel=2
|
113
|
-
)
|
114
|
-
data = await self.step_user(user_id, bot, user_msg, topk=topk, history_n=history_n)
|
115
|
-
data["short_term"] = self._to_openai(data["short_term"])
|
116
|
-
data["long_term"] = self._chunk_texts(data["long_term"])
|
117
|
-
return data
|
118
|
-
|
119
57
|
@staticmethod
|
120
58
|
def _to_openai(msgs: list[dict]) -> list[dict]:
|
121
59
|
"""
|
@@ -193,8 +131,13 @@ class Memory:
|
|
193
131
|
"""
|
194
132
|
# wtf: Добавить фильтр только саммари
|
195
133
|
search_terms = [await self.embed.get_embedding(term) for term in search_terms]
|
196
|
-
return await self.long.retrieve_by_embeddings(
|
197
|
-
|
134
|
+
return await self.long.retrieve_by_embeddings(
|
135
|
+
user_id=user_id,
|
136
|
+
bot=bot,
|
137
|
+
embeddings=search_terms,
|
138
|
+
score_threshold=0.72,
|
139
|
+
filter_={"chunk_type": "type1"},
|
140
|
+
)
|
198
141
|
|
199
142
|
async def get_short_memories(self, user_id: int, bot: str, n_memories: int = 20) -> list:
|
200
143
|
"""
|
@@ -207,33 +150,21 @@ class Memory:
|
|
207
150
|
data = await self.short.window(user_id, bot, n_memories)
|
208
151
|
return self._to_openai(data)
|
209
152
|
|
210
|
-
async def
|
211
|
-
self, user_id: int, embedding: list[float], topk: int = 3
|
212
|
-
) -> list:
|
213
|
-
"""
|
214
|
-
:param user_id: Идентификатор пользователя.
|
215
|
-
:param embedding: Вектор эмбеддинга для поиска.
|
216
|
-
:param topk: Количество возвращаемых чанков.
|
217
|
-
:returns: Список чанков.
|
218
|
-
"""
|
219
|
-
return await self.long.retrieve_by_embedding(user_id, embedding, topk)
|
220
|
-
|
221
|
-
async def _add_to_short(self, role: str, text: str) -> None:
|
153
|
+
async def add_short_msg(self, user_id: int, bot: str, text: str, *, role: str = "user"):
|
222
154
|
"""
|
223
|
-
|
224
|
-
:param
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
:param user_id: Идентификатор пользователя.
|
231
|
-
:param chunk: Экземпляр Chunk для сохранения.
|
155
|
+
Добавляет в "короткую память" новое сообщение
|
156
|
+
:param user_id: Идентификатор пользователя
|
157
|
+
:param bot: Кодовое имя бота
|
158
|
+
:param text: Сообщение для записи
|
159
|
+
:param role: Роль в диалоге
|
160
|
+
:type role: str = "user"
|
161
|
+
:return:
|
232
162
|
"""
|
233
|
-
await self.
|
163
|
+
await self.short.add(bot=bot, user_id=user_id, role=role, text=text)
|
234
164
|
|
235
165
|
async def delete_memory(self, user_id: int) -> None:
|
236
166
|
"""
|
167
|
+
Удаляет
|
237
168
|
:param user_id: Идентификатор пользователя.
|
238
169
|
"""
|
239
170
|
await self.long.delete_all(user_id)
|
@@ -52,10 +52,10 @@ class MemoryManagerQdrant(MemoryManagerABC):
|
|
52
52
|
|
53
53
|
async def retrieve_by_embeddings(
|
54
54
|
self,
|
55
|
+
bot: str,
|
55
56
|
user_id: int,
|
56
57
|
embeddings: list[list[float]],
|
57
58
|
*,
|
58
|
-
bot: str,
|
59
59
|
topk: int = 3,
|
60
60
|
filter_: dict[str, Any] | None = None,
|
61
61
|
score_threshold: float | None = None,
|
@@ -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,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=
|
3
|
+
lein_vector/api/facade.py,sha256=URxGEad8QrhYY6QJTrz552mk_9z8TWi7RB1veykyD-4,7886
|
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=
|
7
|
+
lein_vector/memory_manager_qdrant.py,sha256=DFhvtpDl3OxLSpCQiNXnKVSoqQ3475cSDcfE5wF8Njw,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=
|
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.
|
16
|
-
openvector_dev-0.1.
|
17
|
-
openvector_dev-0.1.
|
15
|
+
openvector_dev-0.1.7.1.dist-info/METADATA,sha256=KE8ReRI_WlvHVGKcpAz0grpFK4H4s8SOAAygsVH4jCY,3169
|
16
|
+
openvector_dev-0.1.7.1.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
17
|
+
openvector_dev-0.1.7.1.dist-info/RECORD,,
|
File without changes
|