evermemos 0.3.6__tar.gz → 0.3.7__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.
Files changed (109) hide show
  1. evermemos-0.3.7/.release-please-manifest.json +3 -0
  2. {evermemos-0.3.6 → evermemos-0.3.7}/CHANGELOG.md +15 -0
  3. {evermemos-0.3.6 → evermemos-0.3.7}/PKG-INFO +45 -17
  4. {evermemos-0.3.6 → evermemos-0.3.7}/README.md +44 -16
  5. {evermemos-0.3.6 → evermemos-0.3.7}/api.md +32 -2
  6. {evermemos-0.3.6 → evermemos-0.3.7}/pyproject.toml +1 -1
  7. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_version.py +1 -1
  8. evermemos-0.3.7/src/evermemos/resources/v1/__init__.py +61 -0
  9. evermemos-0.3.7/src/evermemos/resources/v1/global_user_profile/__init__.py +33 -0
  10. evermemos-0.3.7/src/evermemos/resources/v1/global_user_profile/custom.py +185 -0
  11. evermemos-0.3.7/src/evermemos/resources/v1/global_user_profile/global_user_profile.py +102 -0
  12. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/resources/v1/memories/conversation_meta.py +2 -78
  13. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/resources/v1/memories/memories.py +172 -101
  14. evermemos-0.3.7/src/evermemos/resources/v1/stats/__init__.py +33 -0
  15. evermemos-0.3.7/src/evermemos/resources/v1/stats/request.py +175 -0
  16. evermemos-0.3.7/src/evermemos/resources/v1/stats/stats.py +102 -0
  17. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/resources/v1/v1.py +64 -0
  18. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/__init__.py +3 -1
  19. evermemos-0.3.7/src/evermemos/types/v1/global_user_profile/__init__.py +6 -0
  20. evermemos-0.3.7/src/evermemos/types/v1/global_user_profile/custom_upsert_params.py +24 -0
  21. evermemos-0.3.7/src/evermemos/types/v1/global_user_profile/custom_upsert_response.py +23 -0
  22. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memories/conversation_meta_create_params.py +0 -3
  23. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memories/conversation_meta_create_response.py +0 -3
  24. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memories/conversation_meta_get_response.py +0 -3
  25. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memory_create_params.py +10 -2
  26. evermemos-0.3.6/src/evermemos/types/v1/memory_list_response.py → evermemos-0.3.7/src/evermemos/types/v1/memory_get_response.py +84 -3
  27. evermemos-0.3.7/src/evermemos/types/v1/memory_load_params.py +83 -0
  28. evermemos-0.3.7/src/evermemos/types/v1/memory_load_response.py +26 -0
  29. evermemos-0.3.7/src/evermemos/types/v1/stats/__init__.py +6 -0
  30. evermemos-0.3.7/src/evermemos/types/v1/stats/request_get_params.py +13 -0
  31. evermemos-0.3.7/src/evermemos/types/v1/stats/request_get_response.py +26 -0
  32. evermemos-0.3.7/tests/api_resources/v1/global_user_profile/test_custom.py +134 -0
  33. evermemos-0.3.7/tests/api_resources/v1/memories/__init__.py +1 -0
  34. {evermemos-0.3.6 → evermemos-0.3.7}/tests/api_resources/v1/memories/test_conversation_meta.py +68 -52
  35. evermemos-0.3.7/tests/api_resources/v1/stats/__init__.py +1 -0
  36. evermemos-0.3.7/tests/api_resources/v1/stats/test_request.py +92 -0
  37. {evermemos-0.3.6 → evermemos-0.3.7}/tests/api_resources/v1/test_memories.py +212 -73
  38. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_client.py +20 -20
  39. evermemos-0.3.6/.release-please-manifest.json +0 -3
  40. evermemos-0.3.6/src/evermemos/resources/v1/__init__.py +0 -33
  41. {evermemos-0.3.6 → evermemos-0.3.7}/.gitignore +0 -0
  42. {evermemos-0.3.6 → evermemos-0.3.7}/CONTRIBUTING.md +0 -0
  43. {evermemos-0.3.6 → evermemos-0.3.7}/LICENSE +0 -0
  44. {evermemos-0.3.6 → evermemos-0.3.7}/SECURITY.md +0 -0
  45. {evermemos-0.3.6 → evermemos-0.3.7}/bin/check-release-environment +0 -0
  46. {evermemos-0.3.6 → evermemos-0.3.7}/bin/publish-pypi +0 -0
  47. {evermemos-0.3.6 → evermemos-0.3.7}/examples/.keep +0 -0
  48. {evermemos-0.3.6 → evermemos-0.3.7}/release-please-config.json +0 -0
  49. {evermemos-0.3.6 → evermemos-0.3.7}/requirements-dev.lock +0 -0
  50. {evermemos-0.3.6 → evermemos-0.3.7}/src/EverMemOS/lib/.keep +0 -0
  51. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/__init__.py +0 -0
  52. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_base_client.py +0 -0
  53. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_client.py +0 -0
  54. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_compat.py +0 -0
  55. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_constants.py +0 -0
  56. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_exceptions.py +0 -0
  57. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_files.py +0 -0
  58. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_models.py +0 -0
  59. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_qs.py +0 -0
  60. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_resource.py +0 -0
  61. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_response.py +0 -0
  62. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_streaming.py +0 -0
  63. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_types.py +0 -0
  64. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/__init__.py +0 -0
  65. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_compat.py +0 -0
  66. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_datetime_parse.py +0 -0
  67. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_logs.py +0 -0
  68. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_proxy.py +0 -0
  69. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_reflection.py +0 -0
  70. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_resources_proxy.py +0 -0
  71. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_streams.py +0 -0
  72. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_sync.py +0 -0
  73. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_transform.py +0 -0
  74. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_typing.py +0 -0
  75. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/_utils/_utils.py +0 -0
  76. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/lib/.keep +0 -0
  77. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/py.typed +0 -0
  78. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/resources/__init__.py +0 -0
  79. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/resources/v1/memories/__init__.py +0 -0
  80. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/__init__.py +0 -0
  81. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memories/__init__.py +0 -0
  82. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memories/conversation_meta_update_params.py +0 -0
  83. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memories/conversation_meta_update_response.py +0 -0
  84. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memory_create_response.py +0 -0
  85. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memory_delete_params.py +0 -0
  86. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memory_delete_response.py +0 -0
  87. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memory_search_response.py +0 -0
  88. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/memory_type.py +0 -0
  89. {evermemos-0.3.6 → evermemos-0.3.7}/src/evermemos/types/v1/metadata.py +0 -0
  90. {evermemos-0.3.6 → evermemos-0.3.7}/tests/__init__.py +0 -0
  91. {evermemos-0.3.6 → evermemos-0.3.7}/tests/api_resources/__init__.py +0 -0
  92. {evermemos-0.3.6 → evermemos-0.3.7}/tests/api_resources/v1/__init__.py +0 -0
  93. {evermemos-0.3.6/tests/api_resources/v1/memories → evermemos-0.3.7/tests/api_resources/v1/global_user_profile}/__init__.py +0 -0
  94. {evermemos-0.3.6 → evermemos-0.3.7}/tests/conftest.py +0 -0
  95. {evermemos-0.3.6 → evermemos-0.3.7}/tests/sample_file.txt +0 -0
  96. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_deepcopy.py +0 -0
  97. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_extract_files.py +0 -0
  98. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_files.py +0 -0
  99. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_models.py +0 -0
  100. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_qs.py +0 -0
  101. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_required_args.py +0 -0
  102. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_response.py +0 -0
  103. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_streaming.py +0 -0
  104. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_transform.py +0 -0
  105. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_utils/test_datetime_parse.py +0 -0
  106. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_utils/test_proxy.py +0 -0
  107. {evermemos-0.3.6 → evermemos-0.3.7}/tests/test_utils/test_typing.py +0 -0
  108. {evermemos-0.3.6 → evermemos-0.3.7}/tests/utils.py +0 -0
  109. {evermemos-0.3.6 → evermemos-0.3.7}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.3.7"
3
+ }
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.7 (2026-01-27)
4
+
5
+ Full Changelog: [v0.3.6...v0.3.7](https://github.com/evermemos/evermemos-python/compare/v0.3.6...v0.3.7)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([b5a5ad3](https://github.com/evermemos/evermemos-python/commit/b5a5ad30160d7b74918456a269d2be73feb173ba))
10
+ * **api:** api update ([ff8658d](https://github.com/evermemos/evermemos-python/commit/ff8658dbfa447af49ad0bf42ddf3a7bf84c5af08))
11
+
12
+
13
+ ### Chores
14
+
15
+ * update SDK settings ([7846bc7](https://github.com/evermemos/evermemos-python/commit/7846bc750ca4ab190a39feeb9dfd096854618cb1))
16
+ * update SDK settings ([fa846b9](https://github.com/evermemos/evermemos-python/commit/fa846b9647c78fbd9b072b6d397b8c74bbdfa2d4))
17
+
3
18
  ## 0.3.6 (2026-01-26)
4
19
 
5
20
  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.6
3
+ Version: 0.3.7
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,10 +68,10 @@ client = EverMemOS(
68
68
  )
69
69
 
70
70
  memory = client.v1.memories.create(
71
- content="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
74
+ sender="user_001",
75
75
  )
76
76
  print(memory.message)
77
77
  ```
@@ -97,10 +97,10 @@ client = AsyncEverMemOS(
97
97
 
98
98
  async def main() -> None:
99
99
  memory = await client.v1.memories.create(
100
- content="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
103
+ sender="user_001",
104
104
  )
105
105
  print(memory.message)
106
106
 
@@ -136,10 +136,10 @@ async def main() -> None:
136
136
  http_client=DefaultAioHttpClient(),
137
137
  ) as client:
138
138
  memory = await client.v1.memories.create(
139
- content="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
142
+ sender="user_001",
143
143
  )
144
144
  print(memory.message)
145
145
 
@@ -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="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
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="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
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="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
283
+ sender="user_001",
256
284
  )
257
285
  ```
258
286
 
@@ -295,10 +323,10 @@ from evermemos import EverMemOS
295
323
 
296
324
  client = EverMemOS()
297
325
  response = client.v1.memories.with_raw_response.create(
298
- content="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
329
+ sender="user_001",
302
330
  )
303
331
  print(response.headers.get('X-My-Header'))
304
332
 
@@ -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="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
352
+ sender="user_001",
325
353
  ) as response:
326
354
  print(response.headers.get("X-My-Header"))
327
355
 
@@ -33,10 +33,10 @@ client = EverMemOS(
33
33
  )
34
34
 
35
35
  memory = client.v1.memories.create(
36
- content="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
39
+ sender="user_001",
40
40
  )
41
41
  print(memory.message)
42
42
  ```
@@ -62,10 +62,10 @@ client = AsyncEverMemOS(
62
62
 
63
63
  async def main() -> None:
64
64
  memory = await client.v1.memories.create(
65
- content="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
68
+ sender="user_001",
69
69
  )
70
70
  print(memory.message)
71
71
 
@@ -101,10 +101,10 @@ async def main() -> None:
101
101
  http_client=DefaultAioHttpClient(),
102
102
  ) as client:
103
103
  memory = await client.v1.memories.create(
104
- content="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
107
+ sender="user_001",
108
108
  )
109
109
  print(memory.message)
110
110
 
@@ -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="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
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="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
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="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
248
+ sender="user_001",
221
249
  )
222
250
  ```
223
251
 
@@ -260,10 +288,10 @@ from evermemos import EverMemOS
260
288
 
261
289
  client = EverMemOS()
262
290
  response = client.v1.memories.with_raw_response.create(
263
- content="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
294
+ sender="user_001",
267
295
  )
268
296
  print(response.headers.get('X-My-Header'))
269
297
 
@@ -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="I prefer morning meetings, usually around 9am works best for me.",
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="user_alice",
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,31 @@ 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
+ ## GlobalUserProfile
46
+
47
+ ### Custom
48
+
49
+ Types:
50
+
51
+ ```python
52
+ from evermemos.types.v1.global_user_profile import CustomUpsertResponse
53
+ ```
54
+
55
+ Methods:
56
+
57
+ - <code title="post /api/v1/global-user-profile/custom">client.v1.global_user_profile.custom.<a href="./src/evermemos/resources/v1/global_user_profile/custom.py">upsert</a>(\*\*<a href="src/evermemos/types/v1/global_user_profile/custom_upsert_params.py">params</a>) -> <a href="./src/evermemos/types/v1/global_user_profile/custom_upsert_response.py">CustomUpsertResponse</a></code>
58
+
59
+ ## Stats
60
+
61
+ ### Request
62
+
63
+ Types:
64
+
65
+ ```python
66
+ from evermemos.types.v1.stats import RequestGetResponse
67
+ ```
68
+
69
+ Methods:
70
+
71
+ - <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>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "evermemos"
3
- version = "0.3.6"
3
+ version = "0.3.7"
4
4
  description = "The official Python library for the EverMemOS API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "evermemos"
4
- __version__ = "0.3.6" # x-release-please-version
4
+ __version__ = "0.3.7" # x-release-please-version
@@ -0,0 +1,61 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from .v1 import (
4
+ V1Resource,
5
+ AsyncV1Resource,
6
+ V1ResourceWithRawResponse,
7
+ AsyncV1ResourceWithRawResponse,
8
+ V1ResourceWithStreamingResponse,
9
+ AsyncV1ResourceWithStreamingResponse,
10
+ )
11
+ from .stats import (
12
+ StatsResource,
13
+ AsyncStatsResource,
14
+ StatsResourceWithRawResponse,
15
+ AsyncStatsResourceWithRawResponse,
16
+ StatsResourceWithStreamingResponse,
17
+ AsyncStatsResourceWithStreamingResponse,
18
+ )
19
+ from .memories import (
20
+ MemoriesResource,
21
+ AsyncMemoriesResource,
22
+ MemoriesResourceWithRawResponse,
23
+ AsyncMemoriesResourceWithRawResponse,
24
+ MemoriesResourceWithStreamingResponse,
25
+ AsyncMemoriesResourceWithStreamingResponse,
26
+ )
27
+ from .global_user_profile import (
28
+ GlobalUserProfileResource,
29
+ AsyncGlobalUserProfileResource,
30
+ GlobalUserProfileResourceWithRawResponse,
31
+ AsyncGlobalUserProfileResourceWithRawResponse,
32
+ GlobalUserProfileResourceWithStreamingResponse,
33
+ AsyncGlobalUserProfileResourceWithStreamingResponse,
34
+ )
35
+
36
+ __all__ = [
37
+ "MemoriesResource",
38
+ "AsyncMemoriesResource",
39
+ "MemoriesResourceWithRawResponse",
40
+ "AsyncMemoriesResourceWithRawResponse",
41
+ "MemoriesResourceWithStreamingResponse",
42
+ "AsyncMemoriesResourceWithStreamingResponse",
43
+ "GlobalUserProfileResource",
44
+ "AsyncGlobalUserProfileResource",
45
+ "GlobalUserProfileResourceWithRawResponse",
46
+ "AsyncGlobalUserProfileResourceWithRawResponse",
47
+ "GlobalUserProfileResourceWithStreamingResponse",
48
+ "AsyncGlobalUserProfileResourceWithStreamingResponse",
49
+ "StatsResource",
50
+ "AsyncStatsResource",
51
+ "StatsResourceWithRawResponse",
52
+ "AsyncStatsResourceWithRawResponse",
53
+ "StatsResourceWithStreamingResponse",
54
+ "AsyncStatsResourceWithStreamingResponse",
55
+ "V1Resource",
56
+ "AsyncV1Resource",
57
+ "V1ResourceWithRawResponse",
58
+ "AsyncV1ResourceWithRawResponse",
59
+ "V1ResourceWithStreamingResponse",
60
+ "AsyncV1ResourceWithStreamingResponse",
61
+ ]
@@ -0,0 +1,33 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from .custom import (
4
+ CustomResource,
5
+ AsyncCustomResource,
6
+ CustomResourceWithRawResponse,
7
+ AsyncCustomResourceWithRawResponse,
8
+ CustomResourceWithStreamingResponse,
9
+ AsyncCustomResourceWithStreamingResponse,
10
+ )
11
+ from .global_user_profile import (
12
+ GlobalUserProfileResource,
13
+ AsyncGlobalUserProfileResource,
14
+ GlobalUserProfileResourceWithRawResponse,
15
+ AsyncGlobalUserProfileResourceWithRawResponse,
16
+ GlobalUserProfileResourceWithStreamingResponse,
17
+ AsyncGlobalUserProfileResourceWithStreamingResponse,
18
+ )
19
+
20
+ __all__ = [
21
+ "CustomResource",
22
+ "AsyncCustomResource",
23
+ "CustomResourceWithRawResponse",
24
+ "AsyncCustomResourceWithRawResponse",
25
+ "CustomResourceWithStreamingResponse",
26
+ "AsyncCustomResourceWithStreamingResponse",
27
+ "GlobalUserProfileResource",
28
+ "AsyncGlobalUserProfileResource",
29
+ "GlobalUserProfileResourceWithRawResponse",
30
+ "AsyncGlobalUserProfileResourceWithRawResponse",
31
+ "GlobalUserProfileResourceWithStreamingResponse",
32
+ "AsyncGlobalUserProfileResourceWithStreamingResponse",
33
+ ]
@@ -0,0 +1,185 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ import httpx
6
+
7
+ from ...._types import Body, Query, Headers, NotGiven, not_given
8
+ from ...._utils import maybe_transform, async_maybe_transform
9
+ from ...._compat import cached_property
10
+ from ...._resource import SyncAPIResource, AsyncAPIResource
11
+ from ...._response import (
12
+ to_raw_response_wrapper,
13
+ to_streamed_response_wrapper,
14
+ async_to_raw_response_wrapper,
15
+ async_to_streamed_response_wrapper,
16
+ )
17
+ from ...._base_client import make_request_options
18
+ from ....types.v1.global_user_profile import custom_upsert_params
19
+ from ....types.v1.global_user_profile.custom_upsert_response import CustomUpsertResponse
20
+
21
+ __all__ = ["CustomResource", "AsyncCustomResource"]
22
+
23
+
24
+ class CustomResource(SyncAPIResource):
25
+ @cached_property
26
+ def with_raw_response(self) -> CustomResourceWithRawResponse:
27
+ """
28
+ This property can be used as a prefix for any HTTP method call to return
29
+ the raw response object instead of the parsed content.
30
+
31
+ For more information, see https://www.github.com/evermemos/evermemos-python#accessing-raw-response-data-eg-headers
32
+ """
33
+ return CustomResourceWithRawResponse(self)
34
+
35
+ @cached_property
36
+ def with_streaming_response(self) -> CustomResourceWithStreamingResponse:
37
+ """
38
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
39
+
40
+ For more information, see https://www.github.com/evermemos/evermemos-python#with_streaming_response
41
+ """
42
+ return CustomResourceWithStreamingResponse(self)
43
+
44
+ def upsert(
45
+ self,
46
+ *,
47
+ custom_profile_data: custom_upsert_params.CustomProfileData,
48
+ user_id: str,
49
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
50
+ # The extra values given here take precedence over values defined on the client or passed to this method.
51
+ extra_headers: Headers | None = None,
52
+ extra_query: Query | None = None,
53
+ extra_body: Body | None = None,
54
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
55
+ ) -> CustomUpsertResponse:
56
+ """
57
+ Upsert custom profile data for a user
58
+
59
+ Args:
60
+ custom_profile_data: Custom profile data to upsert
61
+
62
+ user_id: User ID
63
+
64
+ extra_headers: Send extra headers
65
+
66
+ extra_query: Add additional query parameters to the request
67
+
68
+ extra_body: Add additional JSON properties to the request
69
+
70
+ timeout: Override the client-level default timeout for this request, in seconds
71
+ """
72
+ return self._post(
73
+ "/api/v1/global-user-profile/custom",
74
+ body=maybe_transform(
75
+ {
76
+ "custom_profile_data": custom_profile_data,
77
+ "user_id": user_id,
78
+ },
79
+ custom_upsert_params.CustomUpsertParams,
80
+ ),
81
+ options=make_request_options(
82
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
83
+ ),
84
+ cast_to=CustomUpsertResponse,
85
+ )
86
+
87
+
88
+ class AsyncCustomResource(AsyncAPIResource):
89
+ @cached_property
90
+ def with_raw_response(self) -> AsyncCustomResourceWithRawResponse:
91
+ """
92
+ This property can be used as a prefix for any HTTP method call to return
93
+ the raw response object instead of the parsed content.
94
+
95
+ For more information, see https://www.github.com/evermemos/evermemos-python#accessing-raw-response-data-eg-headers
96
+ """
97
+ return AsyncCustomResourceWithRawResponse(self)
98
+
99
+ @cached_property
100
+ def with_streaming_response(self) -> AsyncCustomResourceWithStreamingResponse:
101
+ """
102
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
103
+
104
+ For more information, see https://www.github.com/evermemos/evermemos-python#with_streaming_response
105
+ """
106
+ return AsyncCustomResourceWithStreamingResponse(self)
107
+
108
+ async def upsert(
109
+ self,
110
+ *,
111
+ custom_profile_data: custom_upsert_params.CustomProfileData,
112
+ user_id: str,
113
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
114
+ # The extra values given here take precedence over values defined on the client or passed to this method.
115
+ extra_headers: Headers | None = None,
116
+ extra_query: Query | None = None,
117
+ extra_body: Body | None = None,
118
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
119
+ ) -> CustomUpsertResponse:
120
+ """
121
+ Upsert custom profile data for a user
122
+
123
+ Args:
124
+ custom_profile_data: Custom profile data to upsert
125
+
126
+ user_id: User ID
127
+
128
+ extra_headers: Send extra headers
129
+
130
+ extra_query: Add additional query parameters to the request
131
+
132
+ extra_body: Add additional JSON properties to the request
133
+
134
+ timeout: Override the client-level default timeout for this request, in seconds
135
+ """
136
+ return await self._post(
137
+ "/api/v1/global-user-profile/custom",
138
+ body=await async_maybe_transform(
139
+ {
140
+ "custom_profile_data": custom_profile_data,
141
+ "user_id": user_id,
142
+ },
143
+ custom_upsert_params.CustomUpsertParams,
144
+ ),
145
+ options=make_request_options(
146
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
147
+ ),
148
+ cast_to=CustomUpsertResponse,
149
+ )
150
+
151
+
152
+ class CustomResourceWithRawResponse:
153
+ def __init__(self, custom: CustomResource) -> None:
154
+ self._custom = custom
155
+
156
+ self.upsert = to_raw_response_wrapper(
157
+ custom.upsert,
158
+ )
159
+
160
+
161
+ class AsyncCustomResourceWithRawResponse:
162
+ def __init__(self, custom: AsyncCustomResource) -> None:
163
+ self._custom = custom
164
+
165
+ self.upsert = async_to_raw_response_wrapper(
166
+ custom.upsert,
167
+ )
168
+
169
+
170
+ class CustomResourceWithStreamingResponse:
171
+ def __init__(self, custom: CustomResource) -> None:
172
+ self._custom = custom
173
+
174
+ self.upsert = to_streamed_response_wrapper(
175
+ custom.upsert,
176
+ )
177
+
178
+
179
+ class AsyncCustomResourceWithStreamingResponse:
180
+ def __init__(self, custom: AsyncCustomResource) -> None:
181
+ self._custom = custom
182
+
183
+ self.upsert = async_to_streamed_response_wrapper(
184
+ custom.upsert,
185
+ )