evermemos 0.3.6__tar.gz → 0.3.8__tar.gz
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.
- evermemos-0.3.8/.release-please-manifest.json +3 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/CHANGELOG.md +29 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/PKG-INFO +49 -21
- {evermemos-0.3.6 → evermemos-0.3.8}/README.md +48 -20
- {evermemos-0.3.6 → evermemos-0.3.8}/api.md +18 -2
- {evermemos-0.3.6 → evermemos-0.3.8}/pyproject.toml +1 -1
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_version.py +1 -1
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/resources/v1/__init__.py +14 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/resources/v1/memories/conversation_meta.py +2 -78
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/resources/v1/memories/memories.py +182 -101
- evermemos-0.3.8/src/evermemos/resources/v1/stats/__init__.py +33 -0
- evermemos-0.3.8/src/evermemos/resources/v1/stats/request.py +175 -0
- evermemos-0.3.8/src/evermemos/resources/v1/stats/stats.py +102 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/resources/v1/v1.py +32 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/__init__.py +3 -1
- evermemos-0.3.8/src/evermemos/types/v1/global_user_profile/__init__.py +3 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memories/conversation_meta_create_params.py +0 -3
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memories/conversation_meta_create_response.py +0 -3
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memories/conversation_meta_get_response.py +0 -3
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memory_create_params.py +17 -2
- evermemos-0.3.8/src/evermemos/types/v1/memory_create_response.py +13 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memory_delete_params.py +3 -3
- evermemos-0.3.6/src/evermemos/types/v1/memory_list_response.py → evermemos-0.3.8/src/evermemos/types/v1/memory_get_response.py +88 -5
- evermemos-0.3.8/src/evermemos/types/v1/memory_load_params.py +83 -0
- evermemos-0.3.8/src/evermemos/types/v1/memory_load_response.py +26 -0
- evermemos-0.3.8/src/evermemos/types/v1/stats/__init__.py +6 -0
- evermemos-0.3.8/src/evermemos/types/v1/stats/request_get_params.py +13 -0
- evermemos-0.3.8/src/evermemos/types/v1/stats/request_get_response.py +26 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/api_resources/v1/memories/test_conversation_meta.py +68 -52
- evermemos-0.3.8/tests/api_resources/v1/stats/__init__.py +1 -0
- evermemos-0.3.8/tests/api_resources/v1/stats/test_request.py +92 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/api_resources/v1/test_memories.py +214 -73
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_client.py +20 -20
- evermemos-0.3.6/.release-please-manifest.json +0 -3
- evermemos-0.3.6/src/evermemos/types/v1/memory_create_response.py +0 -39
- {evermemos-0.3.6 → evermemos-0.3.8}/.gitignore +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/CONTRIBUTING.md +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/LICENSE +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/SECURITY.md +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/bin/check-release-environment +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/bin/publish-pypi +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/examples/.keep +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/release-please-config.json +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/requirements-dev.lock +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/EverMemOS/lib/.keep +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_base_client.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_client.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_compat.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_constants.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_exceptions.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_files.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_models.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_qs.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_resource.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_response.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_streaming.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_types.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_compat.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_datetime_parse.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_logs.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_proxy.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_reflection.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_resources_proxy.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_streams.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_sync.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_transform.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_typing.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/_utils/_utils.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/lib/.keep +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/py.typed +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/resources/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/resources/v1/memories/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memories/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memories/conversation_meta_update_params.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memories/conversation_meta_update_response.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memory_delete_response.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memory_search_response.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/memory_type.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/types/v1/metadata.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/api_resources/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/api_resources/v1/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/api_resources/v1/memories/__init__.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/conftest.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/sample_file.txt +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_deepcopy.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_extract_files.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_files.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_models.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_qs.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_required_args.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_response.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_streaming.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_transform.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_utils/test_datetime_parse.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_utils/test_proxy.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/test_utils/test_typing.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/tests/utils.py +0 -0
- {evermemos-0.3.6 → evermemos-0.3.8}/uv.lock +0 -0
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.8 (2026-01-28)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.3.7...v0.3.8](https://github.com/evermemos/evermemos-python/compare/v0.3.7...v0.3.8)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([e2cc79c](https://github.com/evermemos/evermemos-python/commit/e2cc79c7b19cd8da12385d59bd6fcb7e83be6c84))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Chores
|
|
13
|
+
|
|
14
|
+
* update SDK settings ([c6d796d](https://github.com/evermemos/evermemos-python/commit/c6d796d7bbbec539954c1802094932a919d0b8e5))
|
|
15
|
+
* update SDK settings ([11a1c09](https://github.com/evermemos/evermemos-python/commit/11a1c09da854becb6567ad5428db716e38e81ee0))
|
|
16
|
+
|
|
17
|
+
## 0.3.7 (2026-01-27)
|
|
18
|
+
|
|
19
|
+
Full Changelog: [v0.3.6...v0.3.7](https://github.com/evermemos/evermemos-python/compare/v0.3.6...v0.3.7)
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* **api:** api update ([b5a5ad3](https://github.com/evermemos/evermemos-python/commit/b5a5ad30160d7b74918456a269d2be73feb173ba))
|
|
24
|
+
* **api:** api update ([ff8658d](https://github.com/evermemos/evermemos-python/commit/ff8658dbfa447af49ad0bf42ddf3a7bf84c5af08))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Chores
|
|
28
|
+
|
|
29
|
+
* update SDK settings ([7846bc7](https://github.com/evermemos/evermemos-python/commit/7846bc750ca4ab190a39feeb9dfd096854618cb1))
|
|
30
|
+
* update SDK settings ([fa846b9](https://github.com/evermemos/evermemos-python/commit/fa846b9647c78fbd9b072b6d397b8c74bbdfa2d4))
|
|
31
|
+
|
|
3
32
|
## 0.3.6 (2026-01-26)
|
|
4
33
|
|
|
5
34
|
Full Changelog: [v0.3.6...v0.3.6](https://github.com/evermemos/evermemos-python/compare/v0.3.6...v0.3.6)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: evermemos
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.8
|
|
4
4
|
Summary: The official Python library for the EverMemOS API
|
|
5
5
|
Project-URL: Homepage, https://github.com/evermemos/evermemos-python
|
|
6
6
|
Project-URL: Repository, https://github.com/evermemos/evermemos-python
|
|
@@ -68,12 +68,12 @@ client = EverMemOS(
|
|
|
68
68
|
)
|
|
69
69
|
|
|
70
70
|
memory = client.v1.memories.create(
|
|
71
|
-
content="
|
|
71
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
72
72
|
create_time="2025-01-15T10:00:00+00:00",
|
|
73
73
|
message_id="msg_001",
|
|
74
|
-
sender="
|
|
74
|
+
sender="user_001",
|
|
75
75
|
)
|
|
76
|
-
print(memory.
|
|
76
|
+
print(memory.request_id)
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
While you can provide an `api_key` keyword argument,
|
|
@@ -97,12 +97,12 @@ client = AsyncEverMemOS(
|
|
|
97
97
|
|
|
98
98
|
async def main() -> None:
|
|
99
99
|
memory = await client.v1.memories.create(
|
|
100
|
-
content="
|
|
100
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
101
101
|
create_time="2025-01-15T10:00:00+00:00",
|
|
102
102
|
message_id="msg_001",
|
|
103
|
-
sender="
|
|
103
|
+
sender="user_001",
|
|
104
104
|
)
|
|
105
|
-
print(memory.
|
|
105
|
+
print(memory.request_id)
|
|
106
106
|
|
|
107
107
|
|
|
108
108
|
asyncio.run(main())
|
|
@@ -136,12 +136,12 @@ async def main() -> None:
|
|
|
136
136
|
http_client=DefaultAioHttpClient(),
|
|
137
137
|
) as client:
|
|
138
138
|
memory = await client.v1.memories.create(
|
|
139
|
-
content="
|
|
139
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
140
140
|
create_time="2025-01-15T10:00:00+00:00",
|
|
141
141
|
message_id="msg_001",
|
|
142
|
-
sender="
|
|
142
|
+
sender="user_001",
|
|
143
143
|
)
|
|
144
|
-
print(memory.
|
|
144
|
+
print(memory.request_id)
|
|
145
145
|
|
|
146
146
|
|
|
147
147
|
asyncio.run(main())
|
|
@@ -156,6 +156,34 @@ Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typ
|
|
|
156
156
|
|
|
157
157
|
Typed requests and responses provide autocomplete and documentation within your editor. If you would like to see type errors in VS Code to help catch bugs earlier, set `python.analysis.typeCheckingMode` to `basic`.
|
|
158
158
|
|
|
159
|
+
## Nested params
|
|
160
|
+
|
|
161
|
+
Nested parameters are dictionaries, typed using `TypedDict`, for example:
|
|
162
|
+
|
|
163
|
+
```python
|
|
164
|
+
from evermemos import EverMemOS
|
|
165
|
+
|
|
166
|
+
client = EverMemOS()
|
|
167
|
+
|
|
168
|
+
response = client.v1.memories.load(
|
|
169
|
+
conversation_meta={
|
|
170
|
+
"group_id": "chat_user_001_assistant",
|
|
171
|
+
"created_at": "2025-06-26T00:00:00Z",
|
|
172
|
+
"default_timezone": "UTC",
|
|
173
|
+
"description": "Conversation between user and assistant",
|
|
174
|
+
"name": "User Support Chat",
|
|
175
|
+
"scene": "assistant",
|
|
176
|
+
"scene_desc": {"description": "bar"},
|
|
177
|
+
"tags": ["support"],
|
|
178
|
+
"user_details": {
|
|
179
|
+
"user_001": "bar",
|
|
180
|
+
"robot_001": "bar",
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
)
|
|
184
|
+
print(response.conversation_meta)
|
|
185
|
+
```
|
|
186
|
+
|
|
159
187
|
## Handling errors
|
|
160
188
|
|
|
161
189
|
When the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `evermemos.APIConnectionError` is raised.
|
|
@@ -173,10 +201,10 @@ client = EverMemOS()
|
|
|
173
201
|
|
|
174
202
|
try:
|
|
175
203
|
client.v1.memories.create(
|
|
176
|
-
content="
|
|
204
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
177
205
|
create_time="2025-01-15T10:00:00+00:00",
|
|
178
206
|
message_id="msg_001",
|
|
179
|
-
sender="
|
|
207
|
+
sender="user_001",
|
|
180
208
|
)
|
|
181
209
|
except evermemos.APIConnectionError as e:
|
|
182
210
|
print("The server could not be reached")
|
|
@@ -221,10 +249,10 @@ client = EverMemOS(
|
|
|
221
249
|
|
|
222
250
|
# Or, configure per-request:
|
|
223
251
|
client.with_options(max_retries=5).v1.memories.create(
|
|
224
|
-
content="
|
|
252
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
225
253
|
create_time="2025-01-15T10:00:00+00:00",
|
|
226
254
|
message_id="msg_001",
|
|
227
|
-
sender="
|
|
255
|
+
sender="user_001",
|
|
228
256
|
)
|
|
229
257
|
```
|
|
230
258
|
|
|
@@ -249,10 +277,10 @@ client = EverMemOS(
|
|
|
249
277
|
|
|
250
278
|
# Override per-request:
|
|
251
279
|
client.with_options(timeout=5.0).v1.memories.create(
|
|
252
|
-
content="
|
|
280
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
253
281
|
create_time="2025-01-15T10:00:00+00:00",
|
|
254
282
|
message_id="msg_001",
|
|
255
|
-
sender="
|
|
283
|
+
sender="user_001",
|
|
256
284
|
)
|
|
257
285
|
```
|
|
258
286
|
|
|
@@ -295,15 +323,15 @@ from evermemos import EverMemOS
|
|
|
295
323
|
|
|
296
324
|
client = EverMemOS()
|
|
297
325
|
response = client.v1.memories.with_raw_response.create(
|
|
298
|
-
content="
|
|
326
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
299
327
|
create_time="2025-01-15T10:00:00+00:00",
|
|
300
328
|
message_id="msg_001",
|
|
301
|
-
sender="
|
|
329
|
+
sender="user_001",
|
|
302
330
|
)
|
|
303
331
|
print(response.headers.get('X-My-Header'))
|
|
304
332
|
|
|
305
333
|
memory = response.parse() # get the object that `v1.memories.create()` would have returned
|
|
306
|
-
print(memory.
|
|
334
|
+
print(memory.request_id)
|
|
307
335
|
```
|
|
308
336
|
|
|
309
337
|
These methods return an [`APIResponse`](https://github.com/evermemos/evermemos-python/tree/main/src/evermemos/_response.py) object.
|
|
@@ -318,10 +346,10 @@ To stream the response body, use `.with_streaming_response` instead, which requi
|
|
|
318
346
|
|
|
319
347
|
```python
|
|
320
348
|
with client.v1.memories.with_streaming_response.create(
|
|
321
|
-
content="
|
|
349
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
322
350
|
create_time="2025-01-15T10:00:00+00:00",
|
|
323
351
|
message_id="msg_001",
|
|
324
|
-
sender="
|
|
352
|
+
sender="user_001",
|
|
325
353
|
) as response:
|
|
326
354
|
print(response.headers.get("X-My-Header"))
|
|
327
355
|
|
|
@@ -33,12 +33,12 @@ client = EverMemOS(
|
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
memory = client.v1.memories.create(
|
|
36
|
-
content="
|
|
36
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
37
37
|
create_time="2025-01-15T10:00:00+00:00",
|
|
38
38
|
message_id="msg_001",
|
|
39
|
-
sender="
|
|
39
|
+
sender="user_001",
|
|
40
40
|
)
|
|
41
|
-
print(memory.
|
|
41
|
+
print(memory.request_id)
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
While you can provide an `api_key` keyword argument,
|
|
@@ -62,12 +62,12 @@ client = AsyncEverMemOS(
|
|
|
62
62
|
|
|
63
63
|
async def main() -> None:
|
|
64
64
|
memory = await client.v1.memories.create(
|
|
65
|
-
content="
|
|
65
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
66
66
|
create_time="2025-01-15T10:00:00+00:00",
|
|
67
67
|
message_id="msg_001",
|
|
68
|
-
sender="
|
|
68
|
+
sender="user_001",
|
|
69
69
|
)
|
|
70
|
-
print(memory.
|
|
70
|
+
print(memory.request_id)
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
asyncio.run(main())
|
|
@@ -101,12 +101,12 @@ async def main() -> None:
|
|
|
101
101
|
http_client=DefaultAioHttpClient(),
|
|
102
102
|
) as client:
|
|
103
103
|
memory = await client.v1.memories.create(
|
|
104
|
-
content="
|
|
104
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
105
105
|
create_time="2025-01-15T10:00:00+00:00",
|
|
106
106
|
message_id="msg_001",
|
|
107
|
-
sender="
|
|
107
|
+
sender="user_001",
|
|
108
108
|
)
|
|
109
|
-
print(memory.
|
|
109
|
+
print(memory.request_id)
|
|
110
110
|
|
|
111
111
|
|
|
112
112
|
asyncio.run(main())
|
|
@@ -121,6 +121,34 @@ Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typ
|
|
|
121
121
|
|
|
122
122
|
Typed requests and responses provide autocomplete and documentation within your editor. If you would like to see type errors in VS Code to help catch bugs earlier, set `python.analysis.typeCheckingMode` to `basic`.
|
|
123
123
|
|
|
124
|
+
## Nested params
|
|
125
|
+
|
|
126
|
+
Nested parameters are dictionaries, typed using `TypedDict`, for example:
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
from evermemos import EverMemOS
|
|
130
|
+
|
|
131
|
+
client = EverMemOS()
|
|
132
|
+
|
|
133
|
+
response = client.v1.memories.load(
|
|
134
|
+
conversation_meta={
|
|
135
|
+
"group_id": "chat_user_001_assistant",
|
|
136
|
+
"created_at": "2025-06-26T00:00:00Z",
|
|
137
|
+
"default_timezone": "UTC",
|
|
138
|
+
"description": "Conversation between user and assistant",
|
|
139
|
+
"name": "User Support Chat",
|
|
140
|
+
"scene": "assistant",
|
|
141
|
+
"scene_desc": {"description": "bar"},
|
|
142
|
+
"tags": ["support"],
|
|
143
|
+
"user_details": {
|
|
144
|
+
"user_001": "bar",
|
|
145
|
+
"robot_001": "bar",
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
)
|
|
149
|
+
print(response.conversation_meta)
|
|
150
|
+
```
|
|
151
|
+
|
|
124
152
|
## Handling errors
|
|
125
153
|
|
|
126
154
|
When the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `evermemos.APIConnectionError` is raised.
|
|
@@ -138,10 +166,10 @@ client = EverMemOS()
|
|
|
138
166
|
|
|
139
167
|
try:
|
|
140
168
|
client.v1.memories.create(
|
|
141
|
-
content="
|
|
169
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
142
170
|
create_time="2025-01-15T10:00:00+00:00",
|
|
143
171
|
message_id="msg_001",
|
|
144
|
-
sender="
|
|
172
|
+
sender="user_001",
|
|
145
173
|
)
|
|
146
174
|
except evermemos.APIConnectionError as e:
|
|
147
175
|
print("The server could not be reached")
|
|
@@ -186,10 +214,10 @@ client = EverMemOS(
|
|
|
186
214
|
|
|
187
215
|
# Or, configure per-request:
|
|
188
216
|
client.with_options(max_retries=5).v1.memories.create(
|
|
189
|
-
content="
|
|
217
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
190
218
|
create_time="2025-01-15T10:00:00+00:00",
|
|
191
219
|
message_id="msg_001",
|
|
192
|
-
sender="
|
|
220
|
+
sender="user_001",
|
|
193
221
|
)
|
|
194
222
|
```
|
|
195
223
|
|
|
@@ -214,10 +242,10 @@ client = EverMemOS(
|
|
|
214
242
|
|
|
215
243
|
# Override per-request:
|
|
216
244
|
client.with_options(timeout=5.0).v1.memories.create(
|
|
217
|
-
content="
|
|
245
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
218
246
|
create_time="2025-01-15T10:00:00+00:00",
|
|
219
247
|
message_id="msg_001",
|
|
220
|
-
sender="
|
|
248
|
+
sender="user_001",
|
|
221
249
|
)
|
|
222
250
|
```
|
|
223
251
|
|
|
@@ -260,15 +288,15 @@ from evermemos import EverMemOS
|
|
|
260
288
|
|
|
261
289
|
client = EverMemOS()
|
|
262
290
|
response = client.v1.memories.with_raw_response.create(
|
|
263
|
-
content="
|
|
291
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
264
292
|
create_time="2025-01-15T10:00:00+00:00",
|
|
265
293
|
message_id="msg_001",
|
|
266
|
-
sender="
|
|
294
|
+
sender="user_001",
|
|
267
295
|
)
|
|
268
296
|
print(response.headers.get('X-My-Header'))
|
|
269
297
|
|
|
270
298
|
memory = response.parse() # get the object that `v1.memories.create()` would have returned
|
|
271
|
-
print(memory.
|
|
299
|
+
print(memory.request_id)
|
|
272
300
|
```
|
|
273
301
|
|
|
274
302
|
These methods return an [`APIResponse`](https://github.com/evermemos/evermemos-python/tree/main/src/evermemos/_response.py) object.
|
|
@@ -283,10 +311,10 @@ To stream the response body, use `.with_streaming_response` instead, which requi
|
|
|
283
311
|
|
|
284
312
|
```python
|
|
285
313
|
with client.v1.memories.with_streaming_response.create(
|
|
286
|
-
content="
|
|
314
|
+
content="Let's discuss the technical solution for the new feature today",
|
|
287
315
|
create_time="2025-01-15T10:00:00+00:00",
|
|
288
316
|
message_id="msg_001",
|
|
289
|
-
sender="
|
|
317
|
+
sender="user_001",
|
|
290
318
|
) as response:
|
|
291
319
|
print(response.headers.get("X-My-Header"))
|
|
292
320
|
|
|
@@ -9,8 +9,9 @@ from evermemos.types.v1 import (
|
|
|
9
9
|
MemoryType,
|
|
10
10
|
Metadata,
|
|
11
11
|
MemoryCreateResponse,
|
|
12
|
-
MemoryListResponse,
|
|
13
12
|
MemoryDeleteResponse,
|
|
13
|
+
MemoryGetResponse,
|
|
14
|
+
MemoryLoadResponse,
|
|
14
15
|
MemorySearchResponse,
|
|
15
16
|
)
|
|
16
17
|
```
|
|
@@ -18,8 +19,9 @@ from evermemos.types.v1 import (
|
|
|
18
19
|
Methods:
|
|
19
20
|
|
|
20
21
|
- <code title="post /api/v1/memories">client.v1.memories.<a href="./src/evermemos/resources/v1/memories/memories.py">create</a>(\*\*<a href="src/evermemos/types/v1/memory_create_params.py">params</a>) -> <a href="./src/evermemos/types/v1/memory_create_response.py">MemoryCreateResponse</a></code>
|
|
21
|
-
- <code title="get /api/v1/memories">client.v1.memories.<a href="./src/evermemos/resources/v1/memories/memories.py">list</a>() -> <a href="./src/evermemos/types/v1/memory_list_response.py">MemoryListResponse</a></code>
|
|
22
22
|
- <code title="delete /api/v1/memories">client.v1.memories.<a href="./src/evermemos/resources/v1/memories/memories.py">delete</a>(\*\*<a href="src/evermemos/types/v1/memory_delete_params.py">params</a>) -> <a href="./src/evermemos/types/v1/memory_delete_response.py">MemoryDeleteResponse</a></code>
|
|
23
|
+
- <code title="get /api/v1/memories">client.v1.memories.<a href="./src/evermemos/resources/v1/memories/memories.py">get</a>() -> <a href="./src/evermemos/types/v1/memory_get_response.py">MemoryGetResponse</a></code>
|
|
24
|
+
- <code title="post /api/v1/memories/import">client.v1.memories.<a href="./src/evermemos/resources/v1/memories/memories.py">load</a>(\*\*<a href="src/evermemos/types/v1/memory_load_params.py">params</a>) -> <a href="./src/evermemos/types/v1/memory_load_response.py">MemoryLoadResponse</a></code>
|
|
23
25
|
- <code title="get /api/v1/memories/search">client.v1.memories.<a href="./src/evermemos/resources/v1/memories/memories.py">search</a>() -> <a href="./src/evermemos/types/v1/memory_search_response.py">MemorySearchResponse</a></code>
|
|
24
26
|
|
|
25
27
|
### ConversationMeta
|
|
@@ -39,3 +41,17 @@ Methods:
|
|
|
39
41
|
- <code title="post /api/v1/memories/conversation-meta">client.v1.memories.conversation_meta.<a href="./src/evermemos/resources/v1/memories/conversation_meta.py">create</a>(\*\*<a href="src/evermemos/types/v1/memories/conversation_meta_create_params.py">params</a>) -> <a href="./src/evermemos/types/v1/memories/conversation_meta_create_response.py">ConversationMetaCreateResponse</a></code>
|
|
40
42
|
- <code title="patch /api/v1/memories/conversation-meta">client.v1.memories.conversation_meta.<a href="./src/evermemos/resources/v1/memories/conversation_meta.py">update</a>(\*\*<a href="src/evermemos/types/v1/memories/conversation_meta_update_params.py">params</a>) -> <a href="./src/evermemos/types/v1/memories/conversation_meta_update_response.py">ConversationMetaUpdateResponse</a></code>
|
|
41
43
|
- <code title="get /api/v1/memories/conversation-meta">client.v1.memories.conversation_meta.<a href="./src/evermemos/resources/v1/memories/conversation_meta.py">get</a>() -> <a href="./src/evermemos/types/v1/memories/conversation_meta_get_response.py">ConversationMetaGetResponse</a></code>
|
|
44
|
+
|
|
45
|
+
## Stats
|
|
46
|
+
|
|
47
|
+
### Request
|
|
48
|
+
|
|
49
|
+
Types:
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
from evermemos.types.v1.stats import RequestGetResponse
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Methods:
|
|
56
|
+
|
|
57
|
+
- <code title="get /api/v1/stats/request">client.v1.stats.request.<a href="./src/evermemos/resources/v1/stats/request.py">get</a>(\*\*<a href="src/evermemos/types/v1/stats/request_get_params.py">params</a>) -> <a href="./src/evermemos/types/v1/stats/request_get_response.py">RequestGetResponse</a></code>
|
|
@@ -8,6 +8,14 @@ from .v1 import (
|
|
|
8
8
|
V1ResourceWithStreamingResponse,
|
|
9
9
|
AsyncV1ResourceWithStreamingResponse,
|
|
10
10
|
)
|
|
11
|
+
from .stats import (
|
|
12
|
+
StatsResource,
|
|
13
|
+
AsyncStatsResource,
|
|
14
|
+
StatsResourceWithRawResponse,
|
|
15
|
+
AsyncStatsResourceWithRawResponse,
|
|
16
|
+
StatsResourceWithStreamingResponse,
|
|
17
|
+
AsyncStatsResourceWithStreamingResponse,
|
|
18
|
+
)
|
|
11
19
|
from .memories import (
|
|
12
20
|
MemoriesResource,
|
|
13
21
|
AsyncMemoriesResource,
|
|
@@ -24,6 +32,12 @@ __all__ = [
|
|
|
24
32
|
"AsyncMemoriesResourceWithRawResponse",
|
|
25
33
|
"MemoriesResourceWithStreamingResponse",
|
|
26
34
|
"AsyncMemoriesResourceWithStreamingResponse",
|
|
35
|
+
"StatsResource",
|
|
36
|
+
"AsyncStatsResource",
|
|
37
|
+
"StatsResourceWithRawResponse",
|
|
38
|
+
"AsyncStatsResourceWithRawResponse",
|
|
39
|
+
"StatsResourceWithStreamingResponse",
|
|
40
|
+
"AsyncStatsResourceWithStreamingResponse",
|
|
27
41
|
"V1Resource",
|
|
28
42
|
"AsyncV1Resource",
|
|
29
43
|
"V1ResourceWithRawResponse",
|
{evermemos-0.3.6 → evermemos-0.3.8}/src/evermemos/resources/v1/memories/conversation_meta.py
RENAMED
|
@@ -52,7 +52,6 @@ class ConversationMetaResource(SyncAPIResource):
|
|
|
52
52
|
name: str,
|
|
53
53
|
scene: str,
|
|
54
54
|
scene_desc: Dict[str, object],
|
|
55
|
-
version: str,
|
|
56
55
|
default_timezone: Optional[str] | Omit = omit,
|
|
57
56
|
description: Optional[str] | Omit = omit,
|
|
58
57
|
group_id: Optional[str] | Omit = omit,
|
|
@@ -69,19 +68,6 @@ class ConversationMetaResource(SyncAPIResource):
|
|
|
69
68
|
Save conversation metadata information, including scene, participants, tags,
|
|
70
69
|
etc.
|
|
71
70
|
|
|
72
|
-
## Functionality:
|
|
73
|
-
- If group_id exists, update the entire record (upsert)
|
|
74
|
-
- If group_id does not exist, create a new record
|
|
75
|
-
- If group_id is omitted, save as default config for the scene
|
|
76
|
-
- All fields must be provided with complete data
|
|
77
|
-
|
|
78
|
-
## Default Config:
|
|
79
|
-
- Default config is used as fallback when specific group_id config not found
|
|
80
|
-
|
|
81
|
-
## Notes:
|
|
82
|
-
- This is a full update interface that will replace the entire record
|
|
83
|
-
- If you only need to update partial fields, use the PATCH /conversation-meta interface
|
|
84
|
-
|
|
85
71
|
Args:
|
|
86
72
|
created_at: Conversation creation time (ISO 8601 format)
|
|
87
73
|
|
|
@@ -97,8 +83,6 @@ class ConversationMetaResource(SyncAPIResource):
|
|
|
97
83
|
|
|
98
84
|
scene_desc: Scene description object, can include fields like description
|
|
99
85
|
|
|
100
|
-
version: Metadata version number
|
|
101
|
-
|
|
102
86
|
default_timezone: Default timezone
|
|
103
87
|
|
|
104
88
|
description: Conversation description
|
|
@@ -126,7 +110,6 @@ class ConversationMetaResource(SyncAPIResource):
|
|
|
126
110
|
"name": name,
|
|
127
111
|
"scene": scene,
|
|
128
112
|
"scene_desc": scene_desc,
|
|
129
|
-
"version": version,
|
|
130
113
|
"default_timezone": default_timezone,
|
|
131
114
|
"description": description,
|
|
132
115
|
"group_id": group_id,
|
|
@@ -161,12 +144,6 @@ class ConversationMetaResource(SyncAPIResource):
|
|
|
161
144
|
"""
|
|
162
145
|
Partially update conversation metadata, only updating provided fields
|
|
163
146
|
|
|
164
|
-
## Functionality:
|
|
165
|
-
- Locate the conversation metadata to update by group_id
|
|
166
|
-
- When group_id is null or not provided, updates the default config
|
|
167
|
-
- Only update fields provided in the request, keep unchanged fields as-is
|
|
168
|
-
- Suitable for scenarios requiring modification of partial information
|
|
169
|
-
|
|
170
147
|
Args:
|
|
171
148
|
default_timezone: New default timezone
|
|
172
149
|
|
|
@@ -220,22 +197,7 @@ class ConversationMetaResource(SyncAPIResource):
|
|
|
220
197
|
extra_body: Body | None = None,
|
|
221
198
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
222
199
|
) -> ConversationMetaGetResponse:
|
|
223
|
-
"""
|
|
224
|
-
Retrieve conversation metadata by group_id with fallback to default config
|
|
225
|
-
|
|
226
|
-
## Functionality:
|
|
227
|
-
- Query by group_id to get conversation metadata
|
|
228
|
-
- If group_id not found, fallback to default config
|
|
229
|
-
- If group_id not provided, returns default config
|
|
230
|
-
|
|
231
|
-
## Fallback Logic:
|
|
232
|
-
- Try exact group_id first, then use default config
|
|
233
|
-
|
|
234
|
-
## Use Cases:
|
|
235
|
-
- Get specific group's metadata
|
|
236
|
-
- Get default settings (group_id not provided or null)
|
|
237
|
-
- Auto-fallback to defaults when group config not set
|
|
238
|
-
"""
|
|
200
|
+
"""Retrieve conversation metadata by group_id with fallback to default config"""
|
|
239
201
|
return self._get(
|
|
240
202
|
"/api/v1/memories/conversation-meta",
|
|
241
203
|
options=make_request_options(
|
|
@@ -272,7 +234,6 @@ class AsyncConversationMetaResource(AsyncAPIResource):
|
|
|
272
234
|
name: str,
|
|
273
235
|
scene: str,
|
|
274
236
|
scene_desc: Dict[str, object],
|
|
275
|
-
version: str,
|
|
276
237
|
default_timezone: Optional[str] | Omit = omit,
|
|
277
238
|
description: Optional[str] | Omit = omit,
|
|
278
239
|
group_id: Optional[str] | Omit = omit,
|
|
@@ -289,19 +250,6 @@ class AsyncConversationMetaResource(AsyncAPIResource):
|
|
|
289
250
|
Save conversation metadata information, including scene, participants, tags,
|
|
290
251
|
etc.
|
|
291
252
|
|
|
292
|
-
## Functionality:
|
|
293
|
-
- If group_id exists, update the entire record (upsert)
|
|
294
|
-
- If group_id does not exist, create a new record
|
|
295
|
-
- If group_id is omitted, save as default config for the scene
|
|
296
|
-
- All fields must be provided with complete data
|
|
297
|
-
|
|
298
|
-
## Default Config:
|
|
299
|
-
- Default config is used as fallback when specific group_id config not found
|
|
300
|
-
|
|
301
|
-
## Notes:
|
|
302
|
-
- This is a full update interface that will replace the entire record
|
|
303
|
-
- If you only need to update partial fields, use the PATCH /conversation-meta interface
|
|
304
|
-
|
|
305
253
|
Args:
|
|
306
254
|
created_at: Conversation creation time (ISO 8601 format)
|
|
307
255
|
|
|
@@ -317,8 +265,6 @@ class AsyncConversationMetaResource(AsyncAPIResource):
|
|
|
317
265
|
|
|
318
266
|
scene_desc: Scene description object, can include fields like description
|
|
319
267
|
|
|
320
|
-
version: Metadata version number
|
|
321
|
-
|
|
322
268
|
default_timezone: Default timezone
|
|
323
269
|
|
|
324
270
|
description: Conversation description
|
|
@@ -346,7 +292,6 @@ class AsyncConversationMetaResource(AsyncAPIResource):
|
|
|
346
292
|
"name": name,
|
|
347
293
|
"scene": scene,
|
|
348
294
|
"scene_desc": scene_desc,
|
|
349
|
-
"version": version,
|
|
350
295
|
"default_timezone": default_timezone,
|
|
351
296
|
"description": description,
|
|
352
297
|
"group_id": group_id,
|
|
@@ -381,12 +326,6 @@ class AsyncConversationMetaResource(AsyncAPIResource):
|
|
|
381
326
|
"""
|
|
382
327
|
Partially update conversation metadata, only updating provided fields
|
|
383
328
|
|
|
384
|
-
## Functionality:
|
|
385
|
-
- Locate the conversation metadata to update by group_id
|
|
386
|
-
- When group_id is null or not provided, updates the default config
|
|
387
|
-
- Only update fields provided in the request, keep unchanged fields as-is
|
|
388
|
-
- Suitable for scenarios requiring modification of partial information
|
|
389
|
-
|
|
390
329
|
Args:
|
|
391
330
|
default_timezone: New default timezone
|
|
392
331
|
|
|
@@ -440,22 +379,7 @@ class AsyncConversationMetaResource(AsyncAPIResource):
|
|
|
440
379
|
extra_body: Body | None = None,
|
|
441
380
|
timeout: float | httpx.Timeout | None | NotGiven = not_given,
|
|
442
381
|
) -> ConversationMetaGetResponse:
|
|
443
|
-
"""
|
|
444
|
-
Retrieve conversation metadata by group_id with fallback to default config
|
|
445
|
-
|
|
446
|
-
## Functionality:
|
|
447
|
-
- Query by group_id to get conversation metadata
|
|
448
|
-
- If group_id not found, fallback to default config
|
|
449
|
-
- If group_id not provided, returns default config
|
|
450
|
-
|
|
451
|
-
## Fallback Logic:
|
|
452
|
-
- Try exact group_id first, then use default config
|
|
453
|
-
|
|
454
|
-
## Use Cases:
|
|
455
|
-
- Get specific group's metadata
|
|
456
|
-
- Get default settings (group_id not provided or null)
|
|
457
|
-
- Auto-fallback to defaults when group config not set
|
|
458
|
-
"""
|
|
382
|
+
"""Retrieve conversation metadata by group_id with fallback to default config"""
|
|
459
383
|
return await self._get(
|
|
460
384
|
"/api/v1/memories/conversation-meta",
|
|
461
385
|
options=make_request_options(
|