evermemos 0.3.9__tar.gz → 0.3.10__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.10/.release-please-manifest.json +3 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/CHANGELOG.md +16 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/PKG-INFO +24 -26
- {evermemos-0.3.9 → evermemos-0.3.10}/README.md +23 -25
- {evermemos-0.3.9 → evermemos-0.3.10}/api.md +16 -4
- {evermemos-0.3.9 → evermemos-0.3.10}/bin/check-release-environment +0 -4
- evermemos-0.3.10/bin/publish-pypi +11 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/pyproject.toml +1 -1
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_base_client.py +5 -2
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_compat.py +3 -3
- evermemos-0.3.10/src/evermemos/_utils/_json.py +35 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_version.py +1 -1
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/resources/v1/__init__.py +14 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/resources/v1/memories/conversation_meta.py +138 -10
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/resources/v1/memories/memories.py +165 -182
- evermemos-0.3.10/src/evermemos/resources/v1/status/__init__.py +33 -0
- evermemos-0.3.10/src/evermemos/resources/v1/status/request.py +175 -0
- evermemos-0.3.10/src/evermemos/resources/v1/status/status.py +102 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/resources/v1/v1.py +32 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/v1/__init__.py +2 -4
- evermemos-0.3.10/src/evermemos/types/v1/memories/conversation_meta_create_params.py +144 -0
- evermemos-0.3.10/src/evermemos/types/v1/memories/conversation_meta_create_response.py +109 -0
- evermemos-0.3.10/src/evermemos/types/v1/memories/conversation_meta_get_response.py +109 -0
- evermemos-0.3.10/src/evermemos/types/v1/memories/conversation_meta_update_params.py +117 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/v1/memories/conversation_meta_update_response.py +11 -0
- evermemos-0.3.10/src/evermemos/types/v1/memory_add_params.py +60 -0
- evermemos-0.3.9/src/evermemos/types/v1/memory_create_response.py → evermemos-0.3.10/src/evermemos/types/v1/memory_add_response.py +2 -2
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/v1/memory_delete_params.py +9 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/v1/memory_delete_response.py +7 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/v1/memory_get_response.py +12 -5
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/v1/memory_search_response.py +5 -0
- evermemos-0.3.10/src/evermemos/types/v1/status/__init__.py +6 -0
- evermemos-0.3.10/src/evermemos/types/v1/status/request_get_params.py +13 -0
- evermemos-0.3.10/src/evermemos/types/v1/status/request_get_response.py +21 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/api_resources/v1/memories/test_conversation_meta.py +96 -28
- evermemos-0.3.10/tests/api_resources/v1/status/__init__.py +1 -0
- evermemos-0.3.10/tests/api_resources/v1/status/test_request.py +92 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/api_resources/v1/test_memories.py +103 -236
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_client.py +10 -10
- evermemos-0.3.10/tests/test_utils/test_json.py +126 -0
- evermemos-0.3.9/.release-please-manifest.json +0 -3
- evermemos-0.3.9/bin/publish-pypi +0 -7
- evermemos-0.3.9/src/evermemos/types/v1/global_user_profile/__init__.py +0 -3
- evermemos-0.3.9/src/evermemos/types/v1/memories/conversation_meta_create_params.py +0 -38
- evermemos-0.3.9/src/evermemos/types/v1/memories/conversation_meta_create_response.py +0 -41
- evermemos-0.3.9/src/evermemos/types/v1/memories/conversation_meta_get_response.py +0 -41
- evermemos-0.3.9/src/evermemos/types/v1/memories/conversation_meta_update_params.py +0 -34
- evermemos-0.3.9/src/evermemos/types/v1/memory_create_params.py +0 -32
- evermemos-0.3.9/src/evermemos/types/v1/memory_load_params.py +0 -56
- evermemos-0.3.9/src/evermemos/types/v1/memory_load_response.py +0 -19
- evermemos-0.3.9/src/evermemos/types/v1/stats/__init__.py +0 -3
- {evermemos-0.3.9 → evermemos-0.3.10}/.gitignore +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/CONTRIBUTING.md +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/LICENSE +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/SECURITY.md +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/examples/.keep +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/release-please-config.json +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/requirements-dev.lock +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/EverMemOS/lib/.keep +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_client.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_constants.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_exceptions.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_files.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_models.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_qs.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_resource.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_response.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_streaming.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_types.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_compat.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_datetime_parse.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_logs.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_proxy.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_reflection.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_resources_proxy.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_streams.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_sync.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_transform.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_typing.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/_utils/_utils.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/lib/.keep +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/py.typed +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/resources/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/resources/v1/memories/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/v1/memories/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/v1/memory_type.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/src/evermemos/types/v1/metadata.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/api_resources/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/api_resources/v1/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/api_resources/v1/memories/__init__.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/conftest.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/sample_file.txt +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_deepcopy.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_extract_files.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_files.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_models.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_qs.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_required_args.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_response.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_streaming.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_transform.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_utils/test_datetime_parse.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_utils/test_proxy.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/test_utils/test_typing.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/tests/utils.py +0 -0
- {evermemos-0.3.9 → evermemos-0.3.10}/uv.lock +0 -0
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.10 (2026-01-31)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.3.9...v0.3.10](https://github.com/evermemos/evermemos-python/compare/v0.3.9...v0.3.10)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([98f0599](https://github.com/evermemos/evermemos-python/commit/98f05990549d226b03aa4a006b994df14ca91967))
|
|
10
|
+
* **client:** add custom JSON encoder for extended type support ([07e2cfe](https://github.com/evermemos/evermemos-python/commit/07e2cfe00b6360c7227fa0149c8aaf8697d3ec3f))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Chores
|
|
14
|
+
|
|
15
|
+
* update SDK settings ([135157a](https://github.com/evermemos/evermemos-python/commit/135157adbfe192a90a78aa0c51418a764649d054))
|
|
16
|
+
* update SDK settings ([d6a254c](https://github.com/evermemos/evermemos-python/commit/d6a254c0c35bc5e1a0a74bb5c5f8b7d96f1c92e1))
|
|
17
|
+
* update SDK settings ([dda1b57](https://github.com/evermemos/evermemos-python/commit/dda1b5786d59336c1ace3363876de645fcffccb7))
|
|
18
|
+
|
|
3
19
|
## 0.3.9 (2026-01-29)
|
|
4
20
|
|
|
5
21
|
Full Changelog: [v0.3.8...v0.3.9](https://github.com/evermemos/evermemos-python/compare/v0.3.8...v0.3.9)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: evermemos
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.10
|
|
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
|
|
@@ -67,13 +67,13 @@ client = EverMemOS(
|
|
|
67
67
|
api_key=os.environ.get("EVERMEMOS_API_KEY"), # This is the default and can be omitted
|
|
68
68
|
)
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
response = client.v1.memories.add(
|
|
71
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
74
|
sender="user_001",
|
|
75
75
|
)
|
|
76
|
-
print(
|
|
76
|
+
print(response.request_id)
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
While you can provide an `api_key` keyword argument,
|
|
@@ -96,13 +96,13 @@ client = AsyncEverMemOS(
|
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
async def main() -> None:
|
|
99
|
-
|
|
99
|
+
response = await client.v1.memories.add(
|
|
100
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
103
|
sender="user_001",
|
|
104
104
|
)
|
|
105
|
-
print(
|
|
105
|
+
print(response.request_id)
|
|
106
106
|
|
|
107
107
|
|
|
108
108
|
asyncio.run(main())
|
|
@@ -135,13 +135,13 @@ async def main() -> None:
|
|
|
135
135
|
api_key=os.environ.get("EVERMEMOS_API_KEY"), # This is the default and can be omitted
|
|
136
136
|
http_client=DefaultAioHttpClient(),
|
|
137
137
|
) as client:
|
|
138
|
-
|
|
138
|
+
response = await client.v1.memories.add(
|
|
139
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
142
|
sender="user_001",
|
|
143
143
|
)
|
|
144
|
-
print(
|
|
144
|
+
print(response.request_id)
|
|
145
145
|
|
|
146
146
|
|
|
147
147
|
asyncio.run(main())
|
|
@@ -165,22 +165,20 @@ from evermemos import EverMemOS
|
|
|
165
165
|
|
|
166
166
|
client = EverMemOS()
|
|
167
167
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
"
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
"
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
"user_001": "bar",
|
|
179
|
-
"robot_001": "bar",
|
|
168
|
+
conversation_meta = client.v1.memories.conversation_meta.create(
|
|
169
|
+
created_at="2025-01-15T10:00:00+00:00",
|
|
170
|
+
llm_custom_setting={
|
|
171
|
+
"boundary": {
|
|
172
|
+
"model": "gpt-4o-mini",
|
|
173
|
+
"provider": "openai",
|
|
174
|
+
},
|
|
175
|
+
"extraction": {
|
|
176
|
+
"model": "gpt-4o",
|
|
177
|
+
"provider": "openai",
|
|
180
178
|
},
|
|
181
179
|
},
|
|
182
180
|
)
|
|
183
|
-
print(
|
|
181
|
+
print(conversation_meta.llm_custom_setting)
|
|
184
182
|
```
|
|
185
183
|
|
|
186
184
|
## Handling errors
|
|
@@ -199,7 +197,7 @@ from evermemos import EverMemOS
|
|
|
199
197
|
client = EverMemOS()
|
|
200
198
|
|
|
201
199
|
try:
|
|
202
|
-
client.v1.memories.
|
|
200
|
+
client.v1.memories.add(
|
|
203
201
|
content="Let's discuss the technical solution for the new feature today",
|
|
204
202
|
create_time="2025-01-15T10:00:00+00:00",
|
|
205
203
|
message_id="msg_001",
|
|
@@ -247,7 +245,7 @@ client = EverMemOS(
|
|
|
247
245
|
)
|
|
248
246
|
|
|
249
247
|
# Or, configure per-request:
|
|
250
|
-
client.with_options(max_retries=5).v1.memories.
|
|
248
|
+
client.with_options(max_retries=5).v1.memories.add(
|
|
251
249
|
content="Let's discuss the technical solution for the new feature today",
|
|
252
250
|
create_time="2025-01-15T10:00:00+00:00",
|
|
253
251
|
message_id="msg_001",
|
|
@@ -275,7 +273,7 @@ client = EverMemOS(
|
|
|
275
273
|
)
|
|
276
274
|
|
|
277
275
|
# Override per-request:
|
|
278
|
-
client.with_options(timeout=5.0).v1.memories.
|
|
276
|
+
client.with_options(timeout=5.0).v1.memories.add(
|
|
279
277
|
content="Let's discuss the technical solution for the new feature today",
|
|
280
278
|
create_time="2025-01-15T10:00:00+00:00",
|
|
281
279
|
message_id="msg_001",
|
|
@@ -321,7 +319,7 @@ The "raw" Response object can be accessed by prefixing `.with_raw_response.` to
|
|
|
321
319
|
from evermemos import EverMemOS
|
|
322
320
|
|
|
323
321
|
client = EverMemOS()
|
|
324
|
-
response = client.v1.memories.with_raw_response.
|
|
322
|
+
response = client.v1.memories.with_raw_response.add(
|
|
325
323
|
content="Let's discuss the technical solution for the new feature today",
|
|
326
324
|
create_time="2025-01-15T10:00:00+00:00",
|
|
327
325
|
message_id="msg_001",
|
|
@@ -329,7 +327,7 @@ response = client.v1.memories.with_raw_response.create(
|
|
|
329
327
|
)
|
|
330
328
|
print(response.headers.get('X-My-Header'))
|
|
331
329
|
|
|
332
|
-
memory = response.parse() # get the object that `v1.memories.
|
|
330
|
+
memory = response.parse() # get the object that `v1.memories.add()` would have returned
|
|
333
331
|
print(memory.request_id)
|
|
334
332
|
```
|
|
335
333
|
|
|
@@ -344,7 +342,7 @@ The above interface eagerly reads the full response body when you make the reque
|
|
|
344
342
|
To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.
|
|
345
343
|
|
|
346
344
|
```python
|
|
347
|
-
with client.v1.memories.with_streaming_response.
|
|
345
|
+
with client.v1.memories.with_streaming_response.add(
|
|
348
346
|
content="Let's discuss the technical solution for the new feature today",
|
|
349
347
|
create_time="2025-01-15T10:00:00+00:00",
|
|
350
348
|
message_id="msg_001",
|
|
@@ -32,13 +32,13 @@ client = EverMemOS(
|
|
|
32
32
|
api_key=os.environ.get("EVERMEMOS_API_KEY"), # This is the default and can be omitted
|
|
33
33
|
)
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
response = client.v1.memories.add(
|
|
36
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
39
|
sender="user_001",
|
|
40
40
|
)
|
|
41
|
-
print(
|
|
41
|
+
print(response.request_id)
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
While you can provide an `api_key` keyword argument,
|
|
@@ -61,13 +61,13 @@ client = AsyncEverMemOS(
|
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
async def main() -> None:
|
|
64
|
-
|
|
64
|
+
response = await client.v1.memories.add(
|
|
65
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
68
|
sender="user_001",
|
|
69
69
|
)
|
|
70
|
-
print(
|
|
70
|
+
print(response.request_id)
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
asyncio.run(main())
|
|
@@ -100,13 +100,13 @@ async def main() -> None:
|
|
|
100
100
|
api_key=os.environ.get("EVERMEMOS_API_KEY"), # This is the default and can be omitted
|
|
101
101
|
http_client=DefaultAioHttpClient(),
|
|
102
102
|
) as client:
|
|
103
|
-
|
|
103
|
+
response = await client.v1.memories.add(
|
|
104
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
107
|
sender="user_001",
|
|
108
108
|
)
|
|
109
|
-
print(
|
|
109
|
+
print(response.request_id)
|
|
110
110
|
|
|
111
111
|
|
|
112
112
|
asyncio.run(main())
|
|
@@ -130,22 +130,20 @@ from evermemos import EverMemOS
|
|
|
130
130
|
|
|
131
131
|
client = EverMemOS()
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
"
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
"
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
"user_001": "bar",
|
|
144
|
-
"robot_001": "bar",
|
|
133
|
+
conversation_meta = client.v1.memories.conversation_meta.create(
|
|
134
|
+
created_at="2025-01-15T10:00:00+00:00",
|
|
135
|
+
llm_custom_setting={
|
|
136
|
+
"boundary": {
|
|
137
|
+
"model": "gpt-4o-mini",
|
|
138
|
+
"provider": "openai",
|
|
139
|
+
},
|
|
140
|
+
"extraction": {
|
|
141
|
+
"model": "gpt-4o",
|
|
142
|
+
"provider": "openai",
|
|
145
143
|
},
|
|
146
144
|
},
|
|
147
145
|
)
|
|
148
|
-
print(
|
|
146
|
+
print(conversation_meta.llm_custom_setting)
|
|
149
147
|
```
|
|
150
148
|
|
|
151
149
|
## Handling errors
|
|
@@ -164,7 +162,7 @@ from evermemos import EverMemOS
|
|
|
164
162
|
client = EverMemOS()
|
|
165
163
|
|
|
166
164
|
try:
|
|
167
|
-
client.v1.memories.
|
|
165
|
+
client.v1.memories.add(
|
|
168
166
|
content="Let's discuss the technical solution for the new feature today",
|
|
169
167
|
create_time="2025-01-15T10:00:00+00:00",
|
|
170
168
|
message_id="msg_001",
|
|
@@ -212,7 +210,7 @@ client = EverMemOS(
|
|
|
212
210
|
)
|
|
213
211
|
|
|
214
212
|
# Or, configure per-request:
|
|
215
|
-
client.with_options(max_retries=5).v1.memories.
|
|
213
|
+
client.with_options(max_retries=5).v1.memories.add(
|
|
216
214
|
content="Let's discuss the technical solution for the new feature today",
|
|
217
215
|
create_time="2025-01-15T10:00:00+00:00",
|
|
218
216
|
message_id="msg_001",
|
|
@@ -240,7 +238,7 @@ client = EverMemOS(
|
|
|
240
238
|
)
|
|
241
239
|
|
|
242
240
|
# Override per-request:
|
|
243
|
-
client.with_options(timeout=5.0).v1.memories.
|
|
241
|
+
client.with_options(timeout=5.0).v1.memories.add(
|
|
244
242
|
content="Let's discuss the technical solution for the new feature today",
|
|
245
243
|
create_time="2025-01-15T10:00:00+00:00",
|
|
246
244
|
message_id="msg_001",
|
|
@@ -286,7 +284,7 @@ The "raw" Response object can be accessed by prefixing `.with_raw_response.` to
|
|
|
286
284
|
from evermemos import EverMemOS
|
|
287
285
|
|
|
288
286
|
client = EverMemOS()
|
|
289
|
-
response = client.v1.memories.with_raw_response.
|
|
287
|
+
response = client.v1.memories.with_raw_response.add(
|
|
290
288
|
content="Let's discuss the technical solution for the new feature today",
|
|
291
289
|
create_time="2025-01-15T10:00:00+00:00",
|
|
292
290
|
message_id="msg_001",
|
|
@@ -294,7 +292,7 @@ response = client.v1.memories.with_raw_response.create(
|
|
|
294
292
|
)
|
|
295
293
|
print(response.headers.get('X-My-Header'))
|
|
296
294
|
|
|
297
|
-
memory = response.parse() # get the object that `v1.memories.
|
|
295
|
+
memory = response.parse() # get the object that `v1.memories.add()` would have returned
|
|
298
296
|
print(memory.request_id)
|
|
299
297
|
```
|
|
300
298
|
|
|
@@ -309,7 +307,7 @@ The above interface eagerly reads the full response body when you make the reque
|
|
|
309
307
|
To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.
|
|
310
308
|
|
|
311
309
|
```python
|
|
312
|
-
with client.v1.memories.with_streaming_response.
|
|
310
|
+
with client.v1.memories.with_streaming_response.add(
|
|
313
311
|
content="Let's discuss the technical solution for the new feature today",
|
|
314
312
|
create_time="2025-01-15T10:00:00+00:00",
|
|
315
313
|
message_id="msg_001",
|
|
@@ -8,20 +8,18 @@ Types:
|
|
|
8
8
|
from evermemos.types.v1 import (
|
|
9
9
|
MemoryType,
|
|
10
10
|
Metadata,
|
|
11
|
-
MemoryCreateResponse,
|
|
12
11
|
MemoryDeleteResponse,
|
|
12
|
+
MemoryAddResponse,
|
|
13
13
|
MemoryGetResponse,
|
|
14
|
-
MemoryLoadResponse,
|
|
15
14
|
MemorySearchResponse,
|
|
16
15
|
)
|
|
17
16
|
```
|
|
18
17
|
|
|
19
18
|
Methods:
|
|
20
19
|
|
|
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>
|
|
22
20
|
- <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>
|
|
21
|
+
- <code title="post /api/v1/memories">client.v1.memories.<a href="./src/evermemos/resources/v1/memories/memories.py">add</a>(\*\*<a href="src/evermemos/types/v1/memory_add_params.py">params</a>) -> <a href="./src/evermemos/types/v1/memory_add_response.py">MemoryAddResponse</a></code>
|
|
23
22
|
- <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>
|
|
25
23
|
- <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>
|
|
26
24
|
|
|
27
25
|
### ConversationMeta
|
|
@@ -41,3 +39,17 @@ Methods:
|
|
|
41
39
|
- <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>
|
|
42
40
|
- <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>
|
|
43
41
|
- <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>
|
|
42
|
+
|
|
43
|
+
## Status
|
|
44
|
+
|
|
45
|
+
### Request
|
|
46
|
+
|
|
47
|
+
Types:
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
from evermemos.types.v1.status import RequestGetResponse
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Methods:
|
|
54
|
+
|
|
55
|
+
- <code title="get /api/v1/status/request">client.v1.status.request.<a href="./src/evermemos/resources/v1/status/request.py">get</a>(\*\*<a href="src/evermemos/types/v1/status/request_get_params.py">params</a>) -> <a href="./src/evermemos/types/v1/status/request_get_response.py">RequestGetResponse</a></code>
|
|
@@ -86,6 +86,7 @@ from ._exceptions import (
|
|
|
86
86
|
APIConnectionError,
|
|
87
87
|
APIResponseValidationError,
|
|
88
88
|
)
|
|
89
|
+
from ._utils._json import openapi_dumps
|
|
89
90
|
|
|
90
91
|
log: logging.Logger = logging.getLogger(__name__)
|
|
91
92
|
|
|
@@ -554,8 +555,10 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
554
555
|
kwargs["content"] = options.content
|
|
555
556
|
elif isinstance(json_data, bytes):
|
|
556
557
|
kwargs["content"] = json_data
|
|
557
|
-
|
|
558
|
-
|
|
558
|
+
elif not files:
|
|
559
|
+
# Don't set content when JSON is sent as multipart/form-data,
|
|
560
|
+
# since httpx's content param overrides other body arguments
|
|
561
|
+
kwargs["content"] = openapi_dumps(json_data) if is_given(json_data) and json_data is not None else None
|
|
559
562
|
kwargs["files"] = files
|
|
560
563
|
else:
|
|
561
564
|
headers.pop("Content-Type", None)
|
|
@@ -139,6 +139,7 @@ def model_dump(
|
|
|
139
139
|
exclude_defaults: bool = False,
|
|
140
140
|
warnings: bool = True,
|
|
141
141
|
mode: Literal["json", "python"] = "python",
|
|
142
|
+
by_alias: bool | None = None,
|
|
142
143
|
) -> dict[str, Any]:
|
|
143
144
|
if (not PYDANTIC_V1) or hasattr(model, "model_dump"):
|
|
144
145
|
return model.model_dump(
|
|
@@ -148,13 +149,12 @@ def model_dump(
|
|
|
148
149
|
exclude_defaults=exclude_defaults,
|
|
149
150
|
# warnings are not supported in Pydantic v1
|
|
150
151
|
warnings=True if PYDANTIC_V1 else warnings,
|
|
152
|
+
by_alias=by_alias,
|
|
151
153
|
)
|
|
152
154
|
return cast(
|
|
153
155
|
"dict[str, Any]",
|
|
154
156
|
model.dict( # pyright: ignore[reportDeprecated, reportUnnecessaryCast]
|
|
155
|
-
exclude=exclude,
|
|
156
|
-
exclude_unset=exclude_unset,
|
|
157
|
-
exclude_defaults=exclude_defaults,
|
|
157
|
+
exclude=exclude, exclude_unset=exclude_unset, exclude_defaults=exclude_defaults, by_alias=bool(by_alias)
|
|
158
158
|
),
|
|
159
159
|
)
|
|
160
160
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from typing import Any
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
from typing_extensions import override
|
|
5
|
+
|
|
6
|
+
import pydantic
|
|
7
|
+
|
|
8
|
+
from .._compat import model_dump
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def openapi_dumps(obj: Any) -> bytes:
|
|
12
|
+
"""
|
|
13
|
+
Serialize an object to UTF-8 encoded JSON bytes.
|
|
14
|
+
|
|
15
|
+
Extends the standard json.dumps with support for additional types
|
|
16
|
+
commonly used in the SDK, such as `datetime`, `pydantic.BaseModel`, etc.
|
|
17
|
+
"""
|
|
18
|
+
return json.dumps(
|
|
19
|
+
obj,
|
|
20
|
+
cls=_CustomEncoder,
|
|
21
|
+
# Uses the same defaults as httpx's JSON serialization
|
|
22
|
+
ensure_ascii=False,
|
|
23
|
+
separators=(",", ":"),
|
|
24
|
+
allow_nan=False,
|
|
25
|
+
).encode()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class _CustomEncoder(json.JSONEncoder):
|
|
29
|
+
@override
|
|
30
|
+
def default(self, o: Any) -> Any:
|
|
31
|
+
if isinstance(o, datetime):
|
|
32
|
+
return o.isoformat()
|
|
33
|
+
if isinstance(o, pydantic.BaseModel):
|
|
34
|
+
return model_dump(o, exclude_unset=True, mode="json", by_alias=True)
|
|
35
|
+
return super().default(o)
|
|
@@ -8,6 +8,14 @@ from .v1 import (
|
|
|
8
8
|
V1ResourceWithStreamingResponse,
|
|
9
9
|
AsyncV1ResourceWithStreamingResponse,
|
|
10
10
|
)
|
|
11
|
+
from .status import (
|
|
12
|
+
StatusResource,
|
|
13
|
+
AsyncStatusResource,
|
|
14
|
+
StatusResourceWithRawResponse,
|
|
15
|
+
AsyncStatusResourceWithRawResponse,
|
|
16
|
+
StatusResourceWithStreamingResponse,
|
|
17
|
+
AsyncStatusResourceWithStreamingResponse,
|
|
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
|
+
"StatusResource",
|
|
36
|
+
"AsyncStatusResource",
|
|
37
|
+
"StatusResourceWithRawResponse",
|
|
38
|
+
"AsyncStatusResourceWithRawResponse",
|
|
39
|
+
"StatusResourceWithStreamingResponse",
|
|
40
|
+
"AsyncStatusResourceWithStreamingResponse",
|
|
27
41
|
"V1Resource",
|
|
28
42
|
"AsyncV1Resource",
|
|
29
43
|
"V1ResourceWithRawResponse",
|