Skip to content

Commit 313b5c6

Browse files
Merge pull request #4 from supermemoryai/release-please--branches--main--changes--next
2 parents e8da506 + 8e9fb42 commit 313b5c6

File tree

13 files changed

+229
-12
lines changed

13 files changed

+229
-12
lines changed

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "3.0.0-alpha.2"
2+
".": "3.0.0-alpha.19"
33
}

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 8
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/supermemory--inc%2Fsupermemory-4c45e387cbdc7c80d75cdb8eb924cf92a3a48a0c10060fda917b83a7e454aef5.yml
3-
openapi_spec_hash: c859ac2e3429ad3663337b99c722f317
1+
configured_endpoints: 9
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/supermemory--inc%2Fsupermemory-0e2874da641d72b5833ebef8cc792d86250d397b96eeedba7d4759ffabc076de.yml
3+
openapi_spec_hash: f13ea02b49134e11025cb18f3d45d313
44
config_hash: 8477e3ee6fd596ab6ac911d052e4de79

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## 3.0.0-alpha.19 (2025-06-26)
4+
5+
Full Changelog: [v3.0.0-alpha.2...v3.0.0-alpha.19](https://github.com/supermemoryai/python-sdk/compare/v3.0.0-alpha.2...v3.0.0-alpha.19)
6+
7+
### Features
8+
9+
* **api:** api update ([10e12a2](https://github.com/supermemoryai/python-sdk/commit/10e12a2f0453c3e5a2eaeee86a3da9738c161e50))
10+
311
## 3.0.0-alpha.2 (2025-06-24)
412

513
Full Changelog: [v3.0.0-alpha.1...v3.0.0-alpha.2](https://github.com/supermemoryai/python-sdk/compare/v3.0.0-alpha.1...v3.0.0-alpha.2)

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,23 @@ Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typ
111111

112112
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`.
113113

114+
## File uploads
115+
116+
Request parameters that correspond to file uploads can be passed as `bytes`, or a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`.
117+
118+
```python
119+
from pathlib import Path
120+
from supermemory import Supermemory
121+
122+
client = Supermemory()
123+
124+
client.memories.upload_file(
125+
file=Path("/path/to/file"),
126+
)
127+
```
128+
129+
The async client uses the exact same interface. If you pass a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance, the file contents will be read asynchronously automatically.
130+
114131
## Handling errors
115132

116133
When the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `supermemory.APIConnectionError` is raised.

api.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33
Types:
44

55
```python
6-
from supermemory.types import MemoryUpdateResponse, MemoryAddResponse, MemoryGetResponse
6+
from supermemory.types import (
7+
MemoryUpdateResponse,
8+
MemoryAddResponse,
9+
MemoryGetResponse,
10+
MemoryUploadFileResponse,
11+
)
712
```
813

914
Methods:
@@ -12,6 +17,7 @@ Methods:
1217
- <code title="delete /v3/memories/{id}">client.memories.<a href="./src/supermemory/resources/memories.py">delete</a>(id) -> None</code>
1318
- <code title="post /v3/memories">client.memories.<a href="./src/supermemory/resources/memories.py">add</a>(\*\*<a href="src/supermemory/types/memory_add_params.py">params</a>) -> <a href="./src/supermemory/types/memory_add_response.py">MemoryAddResponse</a></code>
1419
- <code title="get /v3/memories/{id}">client.memories.<a href="./src/supermemory/resources/memories.py">get</a>(id) -> <a href="./src/supermemory/types/memory_get_response.py">MemoryGetResponse</a></code>
20+
- <code title="post /v3/memories/file">client.memories.<a href="./src/supermemory/resources/memories.py">upload_file</a>(\*\*<a href="src/supermemory/types/memory_upload_file_params.py">params</a>) -> <a href="./src/supermemory/types/memory_upload_file_response.py">MemoryUploadFileResponse</a></code>
1521

1622
# Settings
1723

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "supermemory"
3-
version = "3.0.0-alpha.2"
3+
version = "3.0.0-alpha.19"
44
description = "The official Python library for the supermemory API"
55
dynamic = ["readme"]
66
license = "Apache-2.0"

src/supermemory/_files.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def assert_is_file_content(obj: object, *, key: str | None = None) -> None:
3434
if not is_file_content(obj):
3535
prefix = f"Expected entry at `{key}`" if key is not None else f"Expected file input `{obj!r}`"
3636
raise RuntimeError(
37-
f"{prefix} to be bytes, an io.IOBase instance, PathLike or a tuple but received {type(obj)} instead."
37+
f"{prefix} to be bytes, an io.IOBase instance, PathLike or a tuple but received {type(obj)} instead. See https://github.com/supermemoryai/python-sdk/tree/main#file-uploads"
3838
) from None
3939

4040

src/supermemory/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "supermemory"
4-
__version__ = "3.0.0-alpha.2" # x-release-please-version
4+
__version__ = "3.0.0-alpha.19" # x-release-please-version

src/supermemory/resources/memories.py

Lines changed: 95 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
from __future__ import annotations
44

5-
from typing import Dict, List, Union
5+
from typing import Dict, List, Union, Mapping, cast
66

77
import httpx
88

9-
from ..types import memory_add_params, memory_update_params
10-
from .._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
11-
from .._utils import maybe_transform, async_maybe_transform
9+
from ..types import memory_add_params, memory_update_params, memory_upload_file_params
10+
from .._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven, FileTypes
11+
from .._utils import extract_files, maybe_transform, deepcopy_minimal, async_maybe_transform
1212
from .._compat import cached_property
1313
from .._resource import SyncAPIResource, AsyncAPIResource
1414
from .._response import (
@@ -21,6 +21,7 @@
2121
from ..types.memory_add_response import MemoryAddResponse
2222
from ..types.memory_get_response import MemoryGetResponse
2323
from ..types.memory_update_response import MemoryUpdateResponse
24+
from ..types.memory_upload_file_response import MemoryUploadFileResponse
2425

2526
__all__ = ["MemoriesResource", "AsyncMemoriesResource"]
2627

@@ -243,6 +244,45 @@ def get(
243244
cast_to=MemoryGetResponse,
244245
)
245246

247+
def upload_file(
248+
self,
249+
*,
250+
file: FileTypes,
251+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
252+
# The extra values given here take precedence over values defined on the client or passed to this method.
253+
extra_headers: Headers | None = None,
254+
extra_query: Query | None = None,
255+
extra_body: Body | None = None,
256+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
257+
) -> MemoryUploadFileResponse:
258+
"""
259+
Upload a file to be processed
260+
261+
Args:
262+
extra_headers: Send extra headers
263+
264+
extra_query: Add additional query parameters to the request
265+
266+
extra_body: Add additional JSON properties to the request
267+
268+
timeout: Override the client-level default timeout for this request, in seconds
269+
"""
270+
body = deepcopy_minimal({"file": file})
271+
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
272+
# It should be noted that the actual Content-Type header that will be
273+
# sent to the server will contain a `boundary` parameter, e.g.
274+
# multipart/form-data; boundary=---abc--
275+
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
276+
return self._post(
277+
"/v3/memories/file",
278+
body=maybe_transform(body, memory_upload_file_params.MemoryUploadFileParams),
279+
files=files,
280+
options=make_request_options(
281+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
282+
),
283+
cast_to=MemoryUploadFileResponse,
284+
)
285+
246286

247287
class AsyncMemoriesResource(AsyncAPIResource):
248288
@cached_property
@@ -462,6 +502,45 @@ async def get(
462502
cast_to=MemoryGetResponse,
463503
)
464504

505+
async def upload_file(
506+
self,
507+
*,
508+
file: FileTypes,
509+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
510+
# The extra values given here take precedence over values defined on the client or passed to this method.
511+
extra_headers: Headers | None = None,
512+
extra_query: Query | None = None,
513+
extra_body: Body | None = None,
514+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
515+
) -> MemoryUploadFileResponse:
516+
"""
517+
Upload a file to be processed
518+
519+
Args:
520+
extra_headers: Send extra headers
521+
522+
extra_query: Add additional query parameters to the request
523+
524+
extra_body: Add additional JSON properties to the request
525+
526+
timeout: Override the client-level default timeout for this request, in seconds
527+
"""
528+
body = deepcopy_minimal({"file": file})
529+
files = extract_files(cast(Mapping[str, object], body), paths=[["file"]])
530+
# It should be noted that the actual Content-Type header that will be
531+
# sent to the server will contain a `boundary` parameter, e.g.
532+
# multipart/form-data; boundary=---abc--
533+
extra_headers = {"Content-Type": "multipart/form-data", **(extra_headers or {})}
534+
return await self._post(
535+
"/v3/memories/file",
536+
body=await async_maybe_transform(body, memory_upload_file_params.MemoryUploadFileParams),
537+
files=files,
538+
options=make_request_options(
539+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
540+
),
541+
cast_to=MemoryUploadFileResponse,
542+
)
543+
465544

466545
class MemoriesResourceWithRawResponse:
467546
def __init__(self, memories: MemoriesResource) -> None:
@@ -479,6 +558,9 @@ def __init__(self, memories: MemoriesResource) -> None:
479558
self.get = to_raw_response_wrapper(
480559
memories.get,
481560
)
561+
self.upload_file = to_raw_response_wrapper(
562+
memories.upload_file,
563+
)
482564

483565

484566
class AsyncMemoriesResourceWithRawResponse:
@@ -497,6 +579,9 @@ def __init__(self, memories: AsyncMemoriesResource) -> None:
497579
self.get = async_to_raw_response_wrapper(
498580
memories.get,
499581
)
582+
self.upload_file = async_to_raw_response_wrapper(
583+
memories.upload_file,
584+
)
500585

501586

502587
class MemoriesResourceWithStreamingResponse:
@@ -515,6 +600,9 @@ def __init__(self, memories: MemoriesResource) -> None:
515600
self.get = to_streamed_response_wrapper(
516601
memories.get,
517602
)
603+
self.upload_file = to_streamed_response_wrapper(
604+
memories.upload_file,
605+
)
518606

519607

520608
class AsyncMemoriesResourceWithStreamingResponse:
@@ -533,3 +621,6 @@ def __init__(self, memories: AsyncMemoriesResource) -> None:
533621
self.get = async_to_streamed_response_wrapper(
534622
memories.get,
535623
)
624+
self.upload_file = async_to_streamed_response_wrapper(
625+
memories.upload_file,
626+
)

src/supermemory/types/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@
1212
from .connection_get_response import ConnectionGetResponse as ConnectionGetResponse
1313
from .setting_update_response import SettingUpdateResponse as SettingUpdateResponse
1414
from .connection_create_params import ConnectionCreateParams as ConnectionCreateParams
15+
from .memory_upload_file_params import MemoryUploadFileParams as MemoryUploadFileParams
1516
from .connection_create_response import ConnectionCreateResponse as ConnectionCreateResponse
17+
from .memory_upload_file_response import MemoryUploadFileResponse as MemoryUploadFileResponse

0 commit comments

Comments
 (0)