evermemos 0.3.9__tar.gz → 0.3.11__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 (114) hide show
  1. evermemos-0.3.11/.release-please-manifest.json +3 -0
  2. {evermemos-0.3.9 → evermemos-0.3.11}/CHANGELOG.md +69 -0
  3. {evermemos-0.3.9 → evermemos-0.3.11}/PKG-INFO +24 -26
  4. {evermemos-0.3.9 → evermemos-0.3.11}/README.md +23 -25
  5. evermemos-0.3.11/api.md +55 -0
  6. {evermemos-0.3.9 → evermemos-0.3.11}/bin/check-release-environment +0 -4
  7. evermemos-0.3.11/bin/publish-pypi +11 -0
  8. {evermemos-0.3.9 → evermemos-0.3.11}/pyproject.toml +1 -1
  9. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_base_client.py +5 -2
  10. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_client.py +20 -20
  11. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_compat.py +3 -3
  12. evermemos-0.3.11/src/evermemos/_utils/_json.py +35 -0
  13. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_version.py +1 -1
  14. evermemos-0.3.11/src/evermemos/resources/__init__.py +19 -0
  15. evermemos-0.3.11/src/evermemos/resources/v0/__init__.py +47 -0
  16. {evermemos-0.3.9/src/evermemos/resources/v1 → evermemos-0.3.11/src/evermemos/resources/v0}/memories/conversation_meta.py +148 -20
  17. {evermemos-0.3.9/src/evermemos/resources/v1 → evermemos-0.3.11/src/evermemos/resources/v0}/memories/memories.py +176 -193
  18. evermemos-0.3.11/src/evermemos/resources/v0/status/__init__.py +33 -0
  19. evermemos-0.3.11/src/evermemos/resources/v0/status/request.py +175 -0
  20. evermemos-0.3.11/src/evermemos/resources/v0/status/status.py +102 -0
  21. evermemos-0.3.9/src/evermemos/resources/v1/v1.py → evermemos-0.3.11/src/evermemos/resources/v0/v0.py +59 -27
  22. {evermemos-0.3.9/src/evermemos/types/v1 → evermemos-0.3.11/src/evermemos/types/v0}/__init__.py +2 -4
  23. evermemos-0.3.11/src/evermemos/types/v0/memories/conversation_meta_create_params.py +144 -0
  24. evermemos-0.3.11/src/evermemos/types/v0/memories/conversation_meta_create_response.py +109 -0
  25. evermemos-0.3.11/src/evermemos/types/v0/memories/conversation_meta_get_response.py +109 -0
  26. evermemos-0.3.11/src/evermemos/types/v0/memories/conversation_meta_update_params.py +117 -0
  27. {evermemos-0.3.9/src/evermemos/types/v1 → evermemos-0.3.11/src/evermemos/types/v0}/memories/conversation_meta_update_response.py +11 -0
  28. evermemos-0.3.11/src/evermemos/types/v0/memory_add_params.py +60 -0
  29. evermemos-0.3.9/src/evermemos/types/v1/memory_create_response.py → evermemos-0.3.11/src/evermemos/types/v0/memory_add_response.py +2 -2
  30. {evermemos-0.3.9/src/evermemos/types/v1 → evermemos-0.3.11/src/evermemos/types/v0}/memory_delete_params.py +9 -0
  31. {evermemos-0.3.9/src/evermemos/types/v1 → evermemos-0.3.11/src/evermemos/types/v0}/memory_delete_response.py +7 -0
  32. {evermemos-0.3.9/src/evermemos/types/v1 → evermemos-0.3.11/src/evermemos/types/v0}/memory_get_response.py +13 -87
  33. evermemos-0.3.11/src/evermemos/types/v0/memory_search_response.py +196 -0
  34. evermemos-0.3.11/src/evermemos/types/v0/status/__init__.py +6 -0
  35. evermemos-0.3.11/src/evermemos/types/v0/status/request_get_params.py +13 -0
  36. evermemos-0.3.11/src/evermemos/types/v0/status/request_get_response.py +21 -0
  37. {evermemos-0.3.9/tests/api_resources/v1 → evermemos-0.3.11/tests/api_resources/v0}/memories/test_conversation_meta.py +119 -51
  38. evermemos-0.3.11/tests/api_resources/v0/status/__init__.py +1 -0
  39. evermemos-0.3.11/tests/api_resources/v0/status/test_request.py +92 -0
  40. {evermemos-0.3.9/tests/api_resources/v1 → evermemos-0.3.11/tests/api_resources/v0}/test_memories.py +113 -246
  41. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_client.py +20 -20
  42. evermemos-0.3.11/tests/test_utils/test_json.py +126 -0
  43. evermemos-0.3.9/.release-please-manifest.json +0 -3
  44. evermemos-0.3.9/api.md +0 -43
  45. evermemos-0.3.9/bin/publish-pypi +0 -7
  46. evermemos-0.3.9/src/evermemos/resources/__init__.py +0 -19
  47. evermemos-0.3.9/src/evermemos/resources/v1/__init__.py +0 -33
  48. evermemos-0.3.9/src/evermemos/types/v1/global_user_profile/__init__.py +0 -3
  49. evermemos-0.3.9/src/evermemos/types/v1/memories/conversation_meta_create_params.py +0 -38
  50. evermemos-0.3.9/src/evermemos/types/v1/memories/conversation_meta_create_response.py +0 -41
  51. evermemos-0.3.9/src/evermemos/types/v1/memories/conversation_meta_get_response.py +0 -41
  52. evermemos-0.3.9/src/evermemos/types/v1/memories/conversation_meta_update_params.py +0 -34
  53. evermemos-0.3.9/src/evermemos/types/v1/memory_create_params.py +0 -32
  54. evermemos-0.3.9/src/evermemos/types/v1/memory_load_params.py +0 -56
  55. evermemos-0.3.9/src/evermemos/types/v1/memory_load_response.py +0 -19
  56. evermemos-0.3.9/src/evermemos/types/v1/memory_search_response.py +0 -99
  57. evermemos-0.3.9/src/evermemos/types/v1/stats/__init__.py +0 -3
  58. {evermemos-0.3.9 → evermemos-0.3.11}/.gitignore +0 -0
  59. {evermemos-0.3.9 → evermemos-0.3.11}/CONTRIBUTING.md +0 -0
  60. {evermemos-0.3.9 → evermemos-0.3.11}/LICENSE +0 -0
  61. {evermemos-0.3.9 → evermemos-0.3.11}/SECURITY.md +0 -0
  62. {evermemos-0.3.9 → evermemos-0.3.11}/examples/.keep +0 -0
  63. {evermemos-0.3.9 → evermemos-0.3.11}/release-please-config.json +0 -0
  64. {evermemos-0.3.9 → evermemos-0.3.11}/requirements-dev.lock +0 -0
  65. {evermemos-0.3.9 → evermemos-0.3.11}/src/EverMemOS/lib/.keep +0 -0
  66. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/__init__.py +0 -0
  67. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_constants.py +0 -0
  68. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_exceptions.py +0 -0
  69. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_files.py +0 -0
  70. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_models.py +0 -0
  71. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_qs.py +0 -0
  72. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_resource.py +0 -0
  73. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_response.py +0 -0
  74. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_streaming.py +0 -0
  75. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_types.py +0 -0
  76. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/__init__.py +0 -0
  77. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_compat.py +0 -0
  78. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_datetime_parse.py +0 -0
  79. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_logs.py +0 -0
  80. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_proxy.py +0 -0
  81. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_reflection.py +0 -0
  82. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_resources_proxy.py +0 -0
  83. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_streams.py +0 -0
  84. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_sync.py +0 -0
  85. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_transform.py +0 -0
  86. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_typing.py +0 -0
  87. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/_utils/_utils.py +0 -0
  88. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/lib/.keep +0 -0
  89. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/py.typed +0 -0
  90. {evermemos-0.3.9/src/evermemos/resources/v1 → evermemos-0.3.11/src/evermemos/resources/v0}/memories/__init__.py +0 -0
  91. {evermemos-0.3.9 → evermemos-0.3.11}/src/evermemos/types/__init__.py +0 -0
  92. {evermemos-0.3.9/src/evermemos/types/v1 → evermemos-0.3.11/src/evermemos/types/v0}/memories/__init__.py +0 -0
  93. {evermemos-0.3.9/src/evermemos/types/v1 → evermemos-0.3.11/src/evermemos/types/v0}/memory_type.py +0 -0
  94. {evermemos-0.3.9/src/evermemos/types/v1 → evermemos-0.3.11/src/evermemos/types/v0}/metadata.py +0 -0
  95. {evermemos-0.3.9 → evermemos-0.3.11}/tests/__init__.py +0 -0
  96. {evermemos-0.3.9 → evermemos-0.3.11}/tests/api_resources/__init__.py +0 -0
  97. {evermemos-0.3.9/tests/api_resources/v1 → evermemos-0.3.11/tests/api_resources/v0}/__init__.py +0 -0
  98. {evermemos-0.3.9/tests/api_resources/v1 → evermemos-0.3.11/tests/api_resources/v0}/memories/__init__.py +0 -0
  99. {evermemos-0.3.9 → evermemos-0.3.11}/tests/conftest.py +0 -0
  100. {evermemos-0.3.9 → evermemos-0.3.11}/tests/sample_file.txt +0 -0
  101. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_deepcopy.py +0 -0
  102. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_extract_files.py +0 -0
  103. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_files.py +0 -0
  104. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_models.py +0 -0
  105. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_qs.py +0 -0
  106. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_required_args.py +0 -0
  107. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_response.py +0 -0
  108. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_streaming.py +0 -0
  109. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_transform.py +0 -0
  110. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_utils/test_datetime_parse.py +0 -0
  111. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_utils/test_proxy.py +0 -0
  112. {evermemos-0.3.9 → evermemos-0.3.11}/tests/test_utils/test_typing.py +0 -0
  113. {evermemos-0.3.9 → evermemos-0.3.11}/tests/utils.py +0 -0
  114. {evermemos-0.3.9 → evermemos-0.3.11}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.3.11"
3
+ }
@@ -1,5 +1,74 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.3.11 (2026-02-06)
4
+
5
+ Full Changelog: [v0.4.0...v0.3.11](https://github.com/evermemos/evermemos-python/compare/v0.4.0...v0.3.11)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([ddfdd8c](https://github.com/evermemos/evermemos-python/commit/ddfdd8c03ce83031ddadf78d5c99a60e2a640c91))
10
+ * **api:** api update ([0981f02](https://github.com/evermemos/evermemos-python/commit/0981f021d776d39cb9278f8ced62d749459fd613))
11
+ * **api:** api update ([98f0599](https://github.com/evermemos/evermemos-python/commit/98f05990549d226b03aa4a006b994df14ca91967))
12
+ * **api:** api update ([9cef371](https://github.com/evermemos/evermemos-python/commit/9cef37158fce900009a56362b9c9b962084be202))
13
+ * **api:** api update ([e2cc79c](https://github.com/evermemos/evermemos-python/commit/e2cc79c7b19cd8da12385d59bd6fcb7e83be6c84))
14
+ * **api:** api update ([b5a5ad3](https://github.com/evermemos/evermemos-python/commit/b5a5ad30160d7b74918456a269d2be73feb173ba))
15
+ * **api:** api update ([ff8658d](https://github.com/evermemos/evermemos-python/commit/ff8658dbfa447af49ad0bf42ddf3a7bf84c5af08))
16
+ * **api:** api update ([c401fd7](https://github.com/evermemos/evermemos-python/commit/c401fd730329f8dd4b35925b9cf58cd90557dd4c))
17
+ * **api:** api update ([7e45e6a](https://github.com/evermemos/evermemos-python/commit/7e45e6ae832e94bd98c4e45abad5cdc555448e37))
18
+ * **client:** add custom JSON encoder for extended type support ([07e2cfe](https://github.com/evermemos/evermemos-python/commit/07e2cfe00b6360c7227fa0149c8aaf8697d3ec3f))
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * updates version to v0.3.5 ([26dd42f](https://github.com/evermemos/evermemos-python/commit/26dd42fa94230ddd0762731d98713c0b4e031e91))
24
+ * updates version to v0.3.6 ([d2c9c91](https://github.com/evermemos/evermemos-python/commit/d2c9c91ecd826067e245c8c7aafb3445a8e5fdca))
25
+
26
+
27
+ ### Chores
28
+
29
+ * sync repo ([492f867](https://github.com/evermemos/evermemos-python/commit/492f8671ad8664e7153da413aac24d37575339bc))
30
+ * update SDK settings ([135157a](https://github.com/evermemos/evermemos-python/commit/135157adbfe192a90a78aa0c51418a764649d054))
31
+ * update SDK settings ([d6a254c](https://github.com/evermemos/evermemos-python/commit/d6a254c0c35bc5e1a0a74bb5c5f8b7d96f1c92e1))
32
+ * update SDK settings ([dda1b57](https://github.com/evermemos/evermemos-python/commit/dda1b5786d59336c1ace3363876de645fcffccb7))
33
+ * update SDK settings ([7ea187d](https://github.com/evermemos/evermemos-python/commit/7ea187dd45a43f915258b17cd9d98b2e8624f948))
34
+ * update SDK settings ([f727a84](https://github.com/evermemos/evermemos-python/commit/f727a84dbc4e5cb8a04adfa14ce79f6254f54ead))
35
+ * update SDK settings ([c6d796d](https://github.com/evermemos/evermemos-python/commit/c6d796d7bbbec539954c1802094932a919d0b8e5))
36
+ * update SDK settings ([11a1c09](https://github.com/evermemos/evermemos-python/commit/11a1c09da854becb6567ad5428db716e38e81ee0))
37
+ * update SDK settings ([7846bc7](https://github.com/evermemos/evermemos-python/commit/7846bc750ca4ab190a39feeb9dfd096854618cb1))
38
+ * update SDK settings ([fa846b9](https://github.com/evermemos/evermemos-python/commit/fa846b9647c78fbd9b072b6d397b8c74bbdfa2d4))
39
+ * update SDK settings ([aeeff07](https://github.com/evermemos/evermemos-python/commit/aeeff070828972d2e554cb3a0037d71ee1b7e795))
40
+ * update SDK settings ([691323b](https://github.com/evermemos/evermemos-python/commit/691323ba6b690b4572eeb1a2f2a65f834d4bc70e))
41
+ * update SDK settings ([6080ec3](https://github.com/evermemos/evermemos-python/commit/6080ec350c2aeed1448824b2aea863e80d17e6cf))
42
+ * update SDK settings ([14b82aa](https://github.com/evermemos/evermemos-python/commit/14b82aad0c71e9fa6b5513762769de826aa739dc))
43
+ * update SDK settings ([9c6197a](https://github.com/evermemos/evermemos-python/commit/9c6197a694d6d3bc52d1728c2fd0d507e993d627))
44
+ * update SDK settings ([aa51d08](https://github.com/evermemos/evermemos-python/commit/aa51d085e5b2569944c78cbd4a39fbb2218a47f5))
45
+ * updates version to v0.3.3 ([f84f905](https://github.com/evermemos/evermemos-python/commit/f84f9056ffb360af552138ccc9650766c98f79e6))
46
+
47
+ ## 0.4.0 (2026-02-06)
48
+
49
+ Full Changelog: [v0.3.10...v0.4.0](https://github.com/evermemos/evermemos-python/compare/v0.3.10...v0.4.0)
50
+
51
+ ### Features
52
+
53
+ * **api:** api update ([ddfdd8c](https://github.com/evermemos/evermemos-python/commit/ddfdd8c03ce83031ddadf78d5c99a60e2a640c91))
54
+ * **api:** api update ([0981f02](https://github.com/evermemos/evermemos-python/commit/0981f021d776d39cb9278f8ced62d749459fd613))
55
+
56
+ ## 0.3.10 (2026-01-31)
57
+
58
+ Full Changelog: [v0.3.9...v0.3.10](https://github.com/evermemos/evermemos-python/compare/v0.3.9...v0.3.10)
59
+
60
+ ### Features
61
+
62
+ * **api:** api update ([98f0599](https://github.com/evermemos/evermemos-python/commit/98f05990549d226b03aa4a006b994df14ca91967))
63
+ * **client:** add custom JSON encoder for extended type support ([07e2cfe](https://github.com/evermemos/evermemos-python/commit/07e2cfe00b6360c7227fa0149c8aaf8697d3ec3f))
64
+
65
+
66
+ ### Chores
67
+
68
+ * update SDK settings ([135157a](https://github.com/evermemos/evermemos-python/commit/135157adbfe192a90a78aa0c51418a764649d054))
69
+ * update SDK settings ([d6a254c](https://github.com/evermemos/evermemos-python/commit/d6a254c0c35bc5e1a0a74bb5c5f8b7d96f1c92e1))
70
+ * update SDK settings ([dda1b57](https://github.com/evermemos/evermemos-python/commit/dda1b5786d59336c1ace3363876de645fcffccb7))
71
+
3
72
  ## 0.3.9 (2026-01-29)
4
73
 
5
74
  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.9
3
+ Version: 0.3.11
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
- memory = client.v1.memories.create(
70
+ response = client.v0.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(memory.request_id)
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
- memory = await client.v1.memories.create(
99
+ response = await client.v0.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(memory.request_id)
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
- memory = await client.v1.memories.create(
138
+ response = await client.v0.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(memory.request_id)
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
- 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
- "name": "User Support Chat",
174
- "scene": "assistant",
175
- "scene_desc": {},
176
- "tags": ["support"],
177
- "user_details": {
178
- "user_001": "bar",
179
- "robot_001": "bar",
168
+ conversation_meta = client.v0.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(response.conversation_meta)
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.create(
200
+ client.v0.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.create(
248
+ client.with_options(max_retries=5).v0.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.create(
276
+ client.with_options(timeout=5.0).v0.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.create(
322
+ response = client.v0.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.create()` would have returned
330
+ memory = response.parse() # get the object that `v0.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.create(
345
+ with client.v0.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
- memory = client.v1.memories.create(
35
+ response = client.v0.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(memory.request_id)
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
- memory = await client.v1.memories.create(
64
+ response = await client.v0.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(memory.request_id)
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
- memory = await client.v1.memories.create(
103
+ response = await client.v0.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(memory.request_id)
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
- 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
- "name": "User Support Chat",
139
- "scene": "assistant",
140
- "scene_desc": {},
141
- "tags": ["support"],
142
- "user_details": {
143
- "user_001": "bar",
144
- "robot_001": "bar",
133
+ conversation_meta = client.v0.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(response.conversation_meta)
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.create(
165
+ client.v0.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.create(
213
+ client.with_options(max_retries=5).v0.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.create(
241
+ client.with_options(timeout=5.0).v0.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.create(
287
+ response = client.v0.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.create()` would have returned
295
+ memory = response.parse() # get the object that `v0.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.create(
310
+ with client.v0.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",
@@ -0,0 +1,55 @@
1
+ # V0
2
+
3
+ ## Memories
4
+
5
+ Types:
6
+
7
+ ```python
8
+ from evermemos.types.v0 import (
9
+ MemoryType,
10
+ Metadata,
11
+ MemoryDeleteResponse,
12
+ MemoryAddResponse,
13
+ MemoryGetResponse,
14
+ MemorySearchResponse,
15
+ )
16
+ ```
17
+
18
+ Methods:
19
+
20
+ - <code title="delete /api/v0/memories">client.v0.memories.<a href="./src/evermemos/resources/v0/memories/memories.py">delete</a>(\*\*<a href="src/evermemos/types/v0/memory_delete_params.py">params</a>) -> <a href="./src/evermemos/types/v0/memory_delete_response.py">MemoryDeleteResponse</a></code>
21
+ - <code title="post /api/v0/memories">client.v0.memories.<a href="./src/evermemos/resources/v0/memories/memories.py">add</a>(\*\*<a href="src/evermemos/types/v0/memory_add_params.py">params</a>) -> <a href="./src/evermemos/types/v0/memory_add_response.py">MemoryAddResponse</a></code>
22
+ - <code title="get /api/v0/memories">client.v0.memories.<a href="./src/evermemos/resources/v0/memories/memories.py">get</a>() -> <a href="./src/evermemos/types/v0/memory_get_response.py">MemoryGetResponse</a></code>
23
+ - <code title="get /api/v0/memories/search">client.v0.memories.<a href="./src/evermemos/resources/v0/memories/memories.py">search</a>() -> <a href="./src/evermemos/types/v0/memory_search_response.py">MemorySearchResponse</a></code>
24
+
25
+ ### ConversationMeta
26
+
27
+ Types:
28
+
29
+ ```python
30
+ from evermemos.types.v0.memories import (
31
+ ConversationMetaCreateResponse,
32
+ ConversationMetaUpdateResponse,
33
+ ConversationMetaGetResponse,
34
+ )
35
+ ```
36
+
37
+ Methods:
38
+
39
+ - <code title="post /api/v0/memories/conversation-meta">client.v0.memories.conversation_meta.<a href="./src/evermemos/resources/v0/memories/conversation_meta.py">create</a>(\*\*<a href="src/evermemos/types/v0/memories/conversation_meta_create_params.py">params</a>) -> <a href="./src/evermemos/types/v0/memories/conversation_meta_create_response.py">ConversationMetaCreateResponse</a></code>
40
+ - <code title="patch /api/v0/memories/conversation-meta">client.v0.memories.conversation_meta.<a href="./src/evermemos/resources/v0/memories/conversation_meta.py">update</a>(\*\*<a href="src/evermemos/types/v0/memories/conversation_meta_update_params.py">params</a>) -> <a href="./src/evermemos/types/v0/memories/conversation_meta_update_response.py">ConversationMetaUpdateResponse</a></code>
41
+ - <code title="get /api/v0/memories/conversation-meta">client.v0.memories.conversation_meta.<a href="./src/evermemos/resources/v0/memories/conversation_meta.py">get</a>() -> <a href="./src/evermemos/types/v0/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.v0.status import RequestGetResponse
51
+ ```
52
+
53
+ Methods:
54
+
55
+ - <code title="get /api/v0/status/request">client.v0.status.request.<a href="./src/evermemos/resources/v0/status/request.py">get</a>(\*\*<a href="src/evermemos/types/v0/status/request_get_params.py">params</a>) -> <a href="./src/evermemos/types/v0/status/request_get_response.py">RequestGetResponse</a></code>
@@ -2,10 +2,6 @@
2
2
 
3
3
  errors=()
4
4
 
5
- if [ -z "${PYPI_TOKEN}" ]; then
6
- errors+=("The PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.")
7
- fi
8
-
9
5
  lenErrors=${#errors[@]}
10
6
 
11
7
  if [[ lenErrors -gt 0 ]]; then
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -eux
4
+ rm -rf dist
5
+ mkdir -p dist
6
+ uv build
7
+ if [ -n "${PYPI_TOKEN:-}" ]; then
8
+ uv publish --token=$PYPI_TOKEN
9
+ else
10
+ uv publish
11
+ fi
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "evermemos"
3
- version = "0.3.9"
3
+ version = "0.3.11"
4
4
  description = "The official Python library for the EverMemOS API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -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
- else:
558
- kwargs["json"] = json_data if is_given(json_data) else None
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)
@@ -31,8 +31,8 @@ from ._base_client import (
31
31
  )
32
32
 
33
33
  if TYPE_CHECKING:
34
- from .resources import v1
35
- from .resources.v1.v1 import V1Resource, AsyncV1Resource
34
+ from .resources import v0
35
+ from .resources.v0.v0 import V0Resource, AsyncV0Resource
36
36
 
37
37
  __all__ = [
38
38
  "Timeout",
@@ -102,10 +102,10 @@ class EverMemOS(SyncAPIClient):
102
102
  )
103
103
 
104
104
  @cached_property
105
- def v1(self) -> V1Resource:
106
- from .resources.v1 import V1Resource
105
+ def v0(self) -> V0Resource:
106
+ from .resources.v0 import V0Resource
107
107
 
108
- return V1Resource(self)
108
+ return V0Resource(self)
109
109
 
110
110
  @cached_property
111
111
  def with_raw_response(self) -> EverMemOSWithRawResponse:
@@ -276,10 +276,10 @@ class AsyncEverMemOS(AsyncAPIClient):
276
276
  )
277
277
 
278
278
  @cached_property
279
- def v1(self) -> AsyncV1Resource:
280
- from .resources.v1 import AsyncV1Resource
279
+ def v0(self) -> AsyncV0Resource:
280
+ from .resources.v0 import AsyncV0Resource
281
281
 
282
- return AsyncV1Resource(self)
282
+ return AsyncV0Resource(self)
283
283
 
284
284
  @cached_property
285
285
  def with_raw_response(self) -> AsyncEverMemOSWithRawResponse:
@@ -401,10 +401,10 @@ class EverMemOSWithRawResponse:
401
401
  self._client = client
402
402
 
403
403
  @cached_property
404
- def v1(self) -> v1.V1ResourceWithRawResponse:
405
- from .resources.v1 import V1ResourceWithRawResponse
404
+ def v0(self) -> v0.V0ResourceWithRawResponse:
405
+ from .resources.v0 import V0ResourceWithRawResponse
406
406
 
407
- return V1ResourceWithRawResponse(self._client.v1)
407
+ return V0ResourceWithRawResponse(self._client.v0)
408
408
 
409
409
 
410
410
  class AsyncEverMemOSWithRawResponse:
@@ -414,10 +414,10 @@ class AsyncEverMemOSWithRawResponse:
414
414
  self._client = client
415
415
 
416
416
  @cached_property
417
- def v1(self) -> v1.AsyncV1ResourceWithRawResponse:
418
- from .resources.v1 import AsyncV1ResourceWithRawResponse
417
+ def v0(self) -> v0.AsyncV0ResourceWithRawResponse:
418
+ from .resources.v0 import AsyncV0ResourceWithRawResponse
419
419
 
420
- return AsyncV1ResourceWithRawResponse(self._client.v1)
420
+ return AsyncV0ResourceWithRawResponse(self._client.v0)
421
421
 
422
422
 
423
423
  class EverMemOSWithStreamedResponse:
@@ -427,10 +427,10 @@ class EverMemOSWithStreamedResponse:
427
427
  self._client = client
428
428
 
429
429
  @cached_property
430
- def v1(self) -> v1.V1ResourceWithStreamingResponse:
431
- from .resources.v1 import V1ResourceWithStreamingResponse
430
+ def v0(self) -> v0.V0ResourceWithStreamingResponse:
431
+ from .resources.v0 import V0ResourceWithStreamingResponse
432
432
 
433
- return V1ResourceWithStreamingResponse(self._client.v1)
433
+ return V0ResourceWithStreamingResponse(self._client.v0)
434
434
 
435
435
 
436
436
  class AsyncEverMemOSWithStreamedResponse:
@@ -440,10 +440,10 @@ class AsyncEverMemOSWithStreamedResponse:
440
440
  self._client = client
441
441
 
442
442
  @cached_property
443
- def v1(self) -> v1.AsyncV1ResourceWithStreamingResponse:
444
- from .resources.v1 import AsyncV1ResourceWithStreamingResponse
443
+ def v0(self) -> v0.AsyncV0ResourceWithStreamingResponse:
444
+ from .resources.v0 import AsyncV0ResourceWithStreamingResponse
445
445
 
446
- return AsyncV1ResourceWithStreamingResponse(self._client.v1)
446
+ return AsyncV0ResourceWithStreamingResponse(self._client.v0)
447
447
 
448
448
 
449
449
  Client = EverMemOS
@@ -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)
@@ -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.9" # x-release-please-version
4
+ __version__ = "0.3.11" # x-release-please-version
@@ -0,0 +1,19 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from .v0 import (
4
+ V0Resource,
5
+ AsyncV0Resource,
6
+ V0ResourceWithRawResponse,
7
+ AsyncV0ResourceWithRawResponse,
8
+ V0ResourceWithStreamingResponse,
9
+ AsyncV0ResourceWithStreamingResponse,
10
+ )
11
+
12
+ __all__ = [
13
+ "V0Resource",
14
+ "AsyncV0Resource",
15
+ "V0ResourceWithRawResponse",
16
+ "AsyncV0ResourceWithRawResponse",
17
+ "V0ResourceWithStreamingResponse",
18
+ "AsyncV0ResourceWithStreamingResponse",
19
+ ]