veadk-python 0.2.6__py3-none-any.whl → 0.2.8__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.

Potentially problematic release.


This version of veadk-python might be problematic. Click here for more details.

Files changed (102) hide show
  1. veadk/agent.py +11 -18
  2. veadk/agent_builder.py +94 -0
  3. veadk/{database/__init__.py → auth/base_auth.py} +7 -2
  4. veadk/auth/veauth/apmplus_veauth.py +65 -0
  5. veadk/auth/veauth/ark_veauth.py +77 -0
  6. veadk/auth/veauth/base_veauth.py +50 -0
  7. veadk/auth/veauth/opensearch_veauth.py +75 -0
  8. veadk/auth/veauth/postgresql_veauth.py +75 -0
  9. veadk/auth/veauth/prompt_pilot_veauth.py +60 -0
  10. veadk/auth/veauth/vesearch_veauth.py +62 -0
  11. veadk/cli/cli.py +4 -0
  12. veadk/cli/cli_deploy.py +3 -2
  13. veadk/cli/cli_eval.py +160 -0
  14. veadk/cli/cli_init.py +1 -1
  15. veadk/cli/cli_pipeline.py +220 -0
  16. veadk/cli/cli_prompt.py +4 -4
  17. veadk/cli/cli_web.py +3 -1
  18. veadk/config.py +45 -81
  19. veadk/configs/database_configs.py +117 -0
  20. veadk/configs/model_configs.py +74 -0
  21. veadk/configs/tool_configs.py +42 -0
  22. veadk/configs/tracing_configs.py +110 -0
  23. veadk/consts.py +13 -1
  24. veadk/evaluation/base_evaluator.py +60 -44
  25. veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +18 -12
  26. veadk/evaluation/eval_set_recorder.py +2 -2
  27. veadk/integrations/ve_code_pipeline/__init__.py +13 -0
  28. veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +431 -0
  29. veadk/integrations/ve_cozeloop/__init__.py +13 -0
  30. veadk/integrations/ve_cozeloop/ve_cozeloop.py +96 -0
  31. veadk/integrations/ve_cr/ve_cr.py +20 -5
  32. veadk/integrations/ve_faas/template/cookiecutter.json +1 -1
  33. veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +2 -2
  34. veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +1 -1
  35. veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +1 -5
  36. veadk/integrations/ve_faas/ve_faas.py +351 -36
  37. veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +6 -3
  38. veadk/integrations/ve_tls/__init__.py +13 -0
  39. veadk/integrations/ve_tls/utils.py +117 -0
  40. veadk/integrations/ve_tls/ve_tls.py +208 -0
  41. veadk/integrations/ve_tos/ve_tos.py +71 -75
  42. veadk/knowledgebase/backends/__init__.py +13 -0
  43. veadk/knowledgebase/backends/base_backend.py +59 -0
  44. veadk/knowledgebase/backends/in_memory_backend.py +82 -0
  45. veadk/knowledgebase/backends/opensearch_backend.py +136 -0
  46. veadk/knowledgebase/backends/redis_backend.py +144 -0
  47. veadk/knowledgebase/backends/utils.py +91 -0
  48. veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +412 -0
  49. veadk/knowledgebase/knowledgebase.py +109 -55
  50. veadk/memory/__init__.py +22 -0
  51. veadk/memory/long_term_memory.py +120 -51
  52. veadk/memory/long_term_memory_backends/__init__.py +13 -0
  53. veadk/{database/base_database.py → memory/long_term_memory_backends/base_backend.py} +10 -22
  54. veadk/memory/long_term_memory_backends/in_memory_backend.py +65 -0
  55. veadk/memory/long_term_memory_backends/opensearch_backend.py +120 -0
  56. veadk/memory/long_term_memory_backends/redis_backend.py +127 -0
  57. veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +148 -0
  58. veadk/memory/short_term_memory.py +80 -72
  59. veadk/memory/short_term_memory_backends/__init__.py +13 -0
  60. veadk/memory/short_term_memory_backends/base_backend.py +31 -0
  61. veadk/memory/short_term_memory_backends/mysql_backend.py +41 -0
  62. veadk/memory/short_term_memory_backends/postgresql_backend.py +41 -0
  63. veadk/memory/short_term_memory_backends/sqlite_backend.py +48 -0
  64. veadk/memory/short_term_memory_processor.py +9 -4
  65. veadk/runner.py +204 -247
  66. veadk/tools/builtin_tools/vesearch.py +2 -2
  67. veadk/tools/builtin_tools/video_generate.py +27 -20
  68. veadk/tools/builtin_tools/web_scraper.py +1 -1
  69. veadk/tools/builtin_tools/web_search.py +7 -7
  70. veadk/tools/load_knowledgebase_tool.py +1 -1
  71. veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +20 -2
  72. veadk/tracing/telemetry/exporters/apmplus_exporter.py +178 -14
  73. veadk/tracing/telemetry/exporters/cozeloop_exporter.py +6 -9
  74. veadk/tracing/telemetry/exporters/inmemory_exporter.py +22 -8
  75. veadk/tracing/telemetry/exporters/tls_exporter.py +6 -10
  76. veadk/tracing/telemetry/opentelemetry_tracer.py +5 -8
  77. veadk/tracing/telemetry/telemetry.py +66 -60
  78. veadk/utils/logger.py +1 -1
  79. veadk/utils/misc.py +63 -0
  80. veadk/utils/volcengine_sign.py +6 -2
  81. veadk/version.py +1 -1
  82. {veadk_python-0.2.6.dist-info → veadk_python-0.2.8.dist-info}/METADATA +16 -3
  83. {veadk_python-0.2.6.dist-info → veadk_python-0.2.8.dist-info}/RECORD +93 -64
  84. veadk/database/database_adapter.py +0 -368
  85. veadk/database/database_factory.py +0 -80
  86. veadk/database/kv/redis_database.py +0 -159
  87. veadk/database/local_database.py +0 -61
  88. veadk/database/relational/mysql_database.py +0 -173
  89. veadk/database/vector/opensearch_vector_database.py +0 -263
  90. veadk/database/vector/type.py +0 -50
  91. veadk/database/viking/viking_database.py +0 -471
  92. veadk/database/viking/viking_memory_db.py +0 -525
  93. /veadk/{database/kv → auth}/__init__.py +0 -0
  94. /veadk/{database/relational → auth/veauth}/__init__.py +0 -0
  95. /veadk/{database/vector/__init__.py → auth/veauth/cozeloop_veauth.py} +0 -0
  96. /veadk/{database/viking → configs}/__init__.py +0 -0
  97. /veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{{ cookiecutter.app_name|replace('-', '_') }} → {{ cookiecutter.app_name }}}/__init__.py +0 -0
  98. /veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{{ cookiecutter.app_name|replace('-', '_') }} → {{ cookiecutter.app_name }}}/agent.py +0 -0
  99. {veadk_python-0.2.6.dist-info → veadk_python-0.2.8.dist-info}/WHEEL +0 -0
  100. {veadk_python-0.2.6.dist-info → veadk_python-0.2.8.dist-info}/entry_points.txt +0 -0
  101. {veadk_python-0.2.6.dist-info → veadk_python-0.2.8.dist-info}/licenses/LICENSE +0 -0
  102. {veadk_python-0.2.6.dist-info → veadk_python-0.2.8.dist-info}/top_level.txt +0 -0
@@ -1,525 +0,0 @@
1
- # Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- import json
16
- import random
17
- import string
18
- import threading
19
- import time
20
- from datetime import datetime
21
- from typing import Any
22
-
23
- from pydantic import BaseModel, Field
24
- from volcengine.ApiInfo import ApiInfo
25
- from volcengine.auth.SignerV4 import SignerV4
26
- from volcengine.base.Service import Service
27
- from volcengine.Credentials import Credentials
28
- from volcengine.ServiceInfo import ServiceInfo
29
-
30
- from veadk.config import getenv
31
- from veadk.database.base_database import BaseDatabase
32
- from veadk.utils.logger import get_logger
33
-
34
- logger = get_logger(__name__)
35
-
36
-
37
- class VikingMemConfig(BaseModel):
38
- volcengine_ak: str = Field(
39
- default_factory=lambda: getenv("VOLCENGINE_ACCESS_KEY"),
40
- description="VikingDB access key",
41
- )
42
- volcengine_sk: str = Field(
43
- default_factory=lambda: getenv("VOLCENGINE_SECRET_KEY"),
44
- description="VikingDB secret key",
45
- )
46
- project: str = Field(
47
- default_factory=lambda: getenv("DATABASE_VIKING_PROJECT"),
48
- description="VikingDB project name",
49
- )
50
- region: str = Field(
51
- default_factory=lambda: getenv("DATABASE_VIKING_REGION"),
52
- description="VikingDB region",
53
- )
54
-
55
-
56
- # ======= adapted from https://github.com/volcengine/mcp-server/blob/main/server/mcp_server_vikingdb_memory/src/mcp_server_vikingdb_memory/common/memory_client.py =======
57
- class VikingMemoryException(Exception):
58
- def __init__(self, code, request_id, message=None):
59
- self.code = code
60
- self.request_id = request_id
61
- self.message = "{}, code:{},request_id:{}".format(
62
- message, self.code, self.request_id
63
- )
64
-
65
- def __str__(self):
66
- return self.message
67
-
68
-
69
- class VikingMemoryService(Service):
70
- _instance_lock = threading.Lock()
71
-
72
- def __new__(cls, *args, **kwargs):
73
- if not hasattr(VikingMemoryService, "_instance"):
74
- with VikingMemoryService._instance_lock:
75
- if not hasattr(VikingMemoryService, "_instance"):
76
- VikingMemoryService._instance = object.__new__(cls)
77
- return VikingMemoryService._instance
78
-
79
- def __init__(
80
- self,
81
- host="api-knowledgebase.mlp.cn-beijing.volces.com",
82
- region="cn-beijing",
83
- ak="",
84
- sk="",
85
- sts_token="",
86
- scheme="http",
87
- connection_timeout=30,
88
- socket_timeout=30,
89
- ):
90
- self.service_info = VikingMemoryService.get_service_info(
91
- host, region, scheme, connection_timeout, socket_timeout
92
- )
93
- self.api_info = VikingMemoryService.get_api_info()
94
- super(VikingMemoryService, self).__init__(self.service_info, self.api_info)
95
- if ak:
96
- self.set_ak(ak)
97
- if sk:
98
- self.set_sk(sk)
99
- if sts_token:
100
- self.set_session_token(session_token=sts_token)
101
- try:
102
- self.get_body("Ping", {}, json.dumps({}))
103
- except Exception as e:
104
- raise VikingMemoryException(
105
- 1000028, "missed", "host or region is incorrect: {}".format(str(e))
106
- ) from None
107
-
108
- def setHeader(self, header):
109
- api_info = VikingMemoryService.get_api_info()
110
- for key in api_info:
111
- for item in header:
112
- api_info[key].header[item] = header[item]
113
- self.api_info = api_info
114
-
115
- @staticmethod
116
- def get_service_info(host, region, scheme, connection_timeout, socket_timeout):
117
- service_info = ServiceInfo(
118
- host,
119
- {"Host": host},
120
- Credentials("", "", "air", region),
121
- connection_timeout,
122
- socket_timeout,
123
- scheme=scheme,
124
- )
125
- return service_info
126
-
127
- @staticmethod
128
- def get_api_info():
129
- api_info = {
130
- "CreateCollection": ApiInfo(
131
- "POST",
132
- "/api/memory/collection/create",
133
- {},
134
- {},
135
- {"Accept": "application/json", "Content-Type": "application/json"},
136
- ),
137
- "GetCollection": ApiInfo(
138
- "POST",
139
- "/api/memory/collection/info",
140
- {},
141
- {},
142
- {"Accept": "application/json", "Content-Type": "application/json"},
143
- ),
144
- "DropCollection": ApiInfo(
145
- "POST",
146
- "/api/memory/collection/delete",
147
- {},
148
- {},
149
- {"Accept": "application/json", "Content-Type": "application/json"},
150
- ),
151
- "UpdateCollection": ApiInfo(
152
- "POST",
153
- "/api/memory/collection/update",
154
- {},
155
- {},
156
- {"Accept": "application/json", "Content-Type": "application/json"},
157
- ),
158
- "SearchMemory": ApiInfo(
159
- "POST",
160
- "/api/memory/search",
161
- {},
162
- {},
163
- {"Accept": "application/json", "Content-Type": "application/json"},
164
- ),
165
- "AddMessages": ApiInfo(
166
- "POST",
167
- "/api/memory/messages/add",
168
- {},
169
- {},
170
- {"Accept": "application/json", "Content-Type": "application/json"},
171
- ),
172
- "Ping": ApiInfo(
173
- "GET",
174
- "/api/memory/ping",
175
- {},
176
- {},
177
- {"Accept": "application/json", "Content-Type": "application/json"},
178
- ),
179
- }
180
- return api_info
181
-
182
- def get_body(self, api, params, body):
183
- if api not in self.api_info:
184
- raise Exception("no such api")
185
- api_info = self.api_info[api]
186
- r = self.prepare_request(api_info, params)
187
- r.headers["Content-Type"] = "application/json"
188
- r.headers["Traffic-Source"] = "SDK"
189
- r.body = body
190
-
191
- SignerV4.sign(r, self.service_info.credentials)
192
-
193
- url = r.build()
194
- resp = self.session.get(
195
- url,
196
- headers=r.headers,
197
- data=r.body,
198
- timeout=(
199
- self.service_info.connection_timeout,
200
- self.service_info.socket_timeout,
201
- ),
202
- )
203
- if resp.status_code == 200:
204
- return json.dumps(resp.json())
205
- else:
206
- raise Exception(resp.text.encode("utf-8"))
207
-
208
- def get_body_exception(self, api, params, body):
209
- try:
210
- res = self.get_body(api, params, body)
211
- except Exception as e:
212
- try:
213
- res_json = json.loads(e.args[0].decode("utf-8"))
214
- except Exception:
215
- raise VikingMemoryException(
216
- 1000028, "missed", "json load res error, res:{}".format(str(e))
217
- ) from None
218
- code = res_json.get("code", 1000028)
219
- request_id = res_json.get("request_id", 1000028)
220
- message = res_json.get("message", None)
221
-
222
- raise VikingMemoryException(code, request_id, message)
223
-
224
- if res == "":
225
- raise VikingMemoryException(
226
- 1000028,
227
- "missed",
228
- "empty response due to unknown error, please contact customer service",
229
- ) from None
230
- return res
231
-
232
- def get_exception(self, api, params):
233
- try:
234
- res = self.get(api, params)
235
- except Exception as e:
236
- try:
237
- res_json = json.loads(e.args[0].decode("utf-8"))
238
- except Exception:
239
- raise VikingMemoryException(
240
- 1000028, "missed", "json load res error, res:{}".format(str(e))
241
- ) from None
242
- code = res_json.get("code", 1000028)
243
- request_id = res_json.get("request_id", 1000028)
244
- message = res_json.get("message", None)
245
- raise VikingMemoryException(code, request_id, message)
246
- if res == "":
247
- raise VikingMemoryException(
248
- 1000028,
249
- "missed",
250
- "empty response due to unknown error, please contact customer service",
251
- ) from None
252
- return res
253
-
254
- def create_collection(
255
- self,
256
- collection_name,
257
- description="",
258
- custom_event_type_schemas=None,
259
- custom_entity_type_schemas=None,
260
- builtin_event_types=None,
261
- builtin_entity_types=None,
262
- ):
263
- if custom_event_type_schemas is None:
264
- custom_event_type_schemas = []
265
- if custom_entity_type_schemas is None:
266
- custom_entity_type_schemas = []
267
- if builtin_entity_types is None:
268
- builtin_entity_types = ["sys_profile_v1"]
269
- if builtin_event_types is None:
270
- builtin_event_types = ["sys_event_v1", "sys_profile_collect_v1"]
271
- params = {
272
- "CollectionName": collection_name,
273
- "Description": description,
274
- "CustomEventTypeSchemas": custom_event_type_schemas,
275
- "CustomEntityTypeSchemas": custom_entity_type_schemas,
276
- "BuiltinEventTypes": builtin_event_types,
277
- "BuiltinEntityTypes": builtin_entity_types,
278
- }
279
- res = self.json("CreateCollection", {}, json.dumps(params))
280
- return json.loads(res)
281
-
282
- def get_collection(self, collection_name):
283
- params = {"CollectionName": collection_name}
284
- res = self.json("GetCollection", {}, json.dumps(params))
285
- return json.loads(res)
286
-
287
- def drop_collection(self, collection_name):
288
- params = {"CollectionName": collection_name}
289
- res = self.json("DropCollection", {}, json.dumps(params))
290
- return json.loads(res)
291
-
292
- def update_collection(
293
- self,
294
- collection_name,
295
- custom_event_type_schemas=[],
296
- custom_entity_type_schemas=[],
297
- builtin_event_types=[],
298
- builtin_entity_types=[],
299
- ):
300
- params = {
301
- "CollectionName": collection_name,
302
- "CustomEventTypeSchemas": custom_event_type_schemas,
303
- "CustomEntityTypeSchemas": custom_entity_type_schemas,
304
- "BuiltinEventTypes": builtin_event_types,
305
- "BuiltinEntityTypes": builtin_entity_types,
306
- }
307
- res = self.json("UpdateCollection", {}, json.dumps(params))
308
- return json.loads(res)
309
-
310
- def search_memory(self, collection_name, query, filter, limit=10):
311
- params = {
312
- "collection_name": collection_name,
313
- "limit": limit,
314
- "filter": filter,
315
- }
316
- if query:
317
- params["query"] = query
318
- res = self.json("SearchMemory", {}, json.dumps(params))
319
- return json.loads(res)
320
-
321
- def add_messages(
322
- self, collection_name, session_id, messages, metadata, entities=None
323
- ):
324
- params = {
325
- "collection_name": collection_name,
326
- "session_id": session_id,
327
- "messages": messages,
328
- "metadata": metadata,
329
- }
330
- if entities is not None:
331
- params["entities"] = entities
332
- res = self.json("AddMessages", {}, json.dumps(params))
333
- return json.loads(res)
334
-
335
-
336
- def memory2event(role, text):
337
- return json.dumps({"role": role, "parts": [{"text": text}]}, ensure_ascii=False)
338
-
339
-
340
- def generate_random_letters(length):
341
- # 生成包含所有大小写字母的字符集
342
- letters = string.ascii_letters
343
- return "".join(random.choice(letters) for _ in range(length))
344
-
345
-
346
- def format_milliseconds(timestamp_ms):
347
- """
348
- Convert the millisecond - level timestamp to a string in the 'YYYYMMDD HH:MM:SS' format.
349
-
350
- Parameters:
351
- - timestamp_ms: Millisecond - level timestamp (integer or float)
352
-
353
- Returns:
354
- - Formatted time string
355
-
356
- """
357
- # Convert milliseconds to seconds
358
- timestamp_seconds = timestamp_ms / 1000
359
-
360
- # Convert to a datetime object
361
- dt = datetime.fromtimestamp(timestamp_seconds)
362
-
363
- # Output in the specified format
364
- return dt.strftime("%Y%m%d %H:%M:%S")
365
-
366
-
367
- # ======= adapted from https://github.com/volcengine/mcp-server/blob/main/server/mcp_server_vikingdb_memory/src/mcp_server_vikingdb_memory/common/memory_client.py =======
368
-
369
-
370
- class VikingMemoryDatabase(BaseModel, BaseDatabase):
371
- config: VikingMemConfig = Field(
372
- default_factory=VikingMemConfig,
373
- description="VikingDB configuration",
374
- )
375
-
376
- def model_post_init(self, context: Any, /) -> None:
377
- self._vm = VikingMemoryService(
378
- ak=self.config.volcengine_ak, sk=self.config.volcengine_sk
379
- )
380
-
381
- def add_memories(
382
- self,
383
- collection_name: str,
384
- text: str,
385
- user_id: str,
386
- ) -> str:
387
- # Add Messages
388
- session_id = generate_random_letters(10)
389
- # proces
390
- message = json.loads(text)
391
- content = message["parts"][0]["text"]
392
- role = (
393
- "user" if message["role"] == "user" else "assistant"
394
- ) # field 'role': viking memory only allow 'assistant','system','user',
395
- messages = [{"role": role, "content": content}]
396
- metadata = {
397
- "default_user_id": user_id,
398
- "default_assistant_id": "assistant",
399
- "time": int(time.time() * 1000),
400
- }
401
-
402
- rsp = self._vm.add_messages(
403
- collection_name=collection_name,
404
- session_id=session_id,
405
- messages=messages,
406
- metadata=metadata,
407
- )
408
- return str(rsp)
409
-
410
- def add(self, data: list[str], **kwargs):
411
- collection_name = kwargs.get("collection_name")
412
- assert collection_name is not None, "collection_name is required"
413
- user_id = kwargs.get("user_id")
414
- assert user_id is not None, "user_id is required"
415
- try:
416
- self._vm.get_collection(collection_name=collection_name)
417
- except Exception:
418
- self._vm.create_collection(
419
- collection_name=collection_name,
420
- )
421
-
422
- for text in data:
423
- self.add_memories(
424
- collection_name=collection_name, text=text, user_id=user_id
425
- )
426
-
427
- return "success"
428
-
429
- def search_memory(
430
- self, collection_name: str, query: str, user_id: str, top_k: int = 5
431
- ) -> list[str]:
432
- """
433
- Search for stored memories. This method is called whenever a user asks any question.
434
- If a search yields no results, do not repeat the search within the same conversation.
435
- The retrieved memories are used to supplement your understanding of the user and to reply to the user's question.
436
- Args:
437
- collection_name: viking db collection_name
438
- query: Any question asked by the user.
439
- Returns:
440
- The user's memories related to the query.
441
- """
442
-
443
- result = []
444
- try:
445
- # ------- get profiles -----------
446
- try:
447
- limit = 1
448
- filter = {
449
- "user_id": user_id,
450
- "memory_type": ["sys_profile_v1"],
451
- }
452
- rsp = self._vm.search_memory(
453
- collection_name=collection_name,
454
- query="sys_profile_v1",
455
- filter=filter,
456
- limit=limit,
457
- )
458
- profiles = [
459
- item.get("memory_info").get("user_profile")
460
- for item in rsp.get("data").get("result_list")
461
- ]
462
- if len(profiles) > 0:
463
- result.append(memory2event("user", profiles[0]))
464
- except Exception as e:
465
- result.append(
466
- memory2event("user", f"SearchMemory: Get Profiles Error: {str(e)}")
467
- )
468
-
469
- # -------- get memory -----------
470
- try:
471
- # Search Memory
472
- limit = top_k
473
- filter = {
474
- "user_id": user_id,
475
- "memory_type": ["sys_event_v1"],
476
- }
477
- rsp = self._vm.search_memory(
478
- collection_name=collection_name,
479
- query=query,
480
- filter=filter,
481
- limit=limit,
482
- )
483
- result_list = rsp.get("data").get("result_list")
484
-
485
- content = [
486
- memory2event("user", item.get("memory_info").get("summary"))
487
- for item in result_list
488
- ]
489
-
490
- result.extend(content)
491
-
492
- except Exception as e:
493
- result.append(
494
- memory2event("user", f"SearchMemory: Get Memory Error: {str(e)}")
495
- )
496
-
497
- return result
498
-
499
- except Exception as e:
500
- logger.error(f"Error in get_doc: {str(e)}")
501
- result.append(
502
- memory2event("user", f"SearchMemory: Get Memory Error: {str(e)}")
503
- )
504
- return result
505
-
506
- def query(self, query: str, **kwargs: Any) -> list[str]:
507
- """
508
- Args:
509
- query: query text
510
- **kwargs: collection_name(required), top_k(optional, default 5)
511
-
512
- Returns: list of str, the search result
513
- """
514
- collection_name = kwargs.get("collection_name")
515
- assert collection_name is not None, "collection_name is required"
516
- user_id = kwargs.get("user_id")
517
- assert user_id is not None, "user_id is required"
518
- top_k = kwargs.get("top_k", 5)
519
- resp = self.search_memory(collection_name, query, user_id=user_id, top_k=top_k)
520
- return resp
521
-
522
- def delete(self, **kwargs: Any):
523
- collection_name = kwargs.get("collection_name")
524
- assert collection_name is not None, "collection_name is required"
525
- self._vm.drop_collection(collection_name)
File without changes
File without changes
File without changes