diff --git a/pyproject.toml b/pyproject.toml index a21275c..ba752b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.4.3" +version = "3.5.0" description = "" readme = "README.md" authors = [] diff --git a/reference.md b/reference.md index 6c3fd90..e5ea89f 100644 --- a/reference.md +++ b/reference.md @@ -2411,6 +2411,76 @@ client.user.get_threads( + + + + +
client.user.warm(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Hints Zep to warm a user's graph for low-latency search +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.user.warm( + user_id="userId", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**user_id:** `str` — User ID + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 467b6dd..1b98dc4 100644 --- a/src/zep_cloud/core/client_wrapper.py +++ b/src/zep_cloud/core/client_wrapper.py @@ -22,10 +22,10 @@ def __init__( def get_headers(self) -> typing.Dict[str, str]: headers: typing.Dict[str, str] = { - "User-Agent": "zep-cloud/3.4.1", + "User-Agent": "zep-cloud/3.5.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.4.1", + "X-Fern-SDK-Version": "3.5.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/user/client.py b/src/zep_cloud/user/client.py index edeeacc..fccf15c 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -325,6 +325,37 @@ def get_threads( _response = self._raw_client.get_threads(user_id, request_options=request_options) return _response.data + def warm(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse: + """ + Hints Zep to warm a user's graph for low-latency search + + Parameters + ---------- + user_id : str + User ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Warm hint accepted + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.user.warm( + user_id="userId", + ) + """ + _response = self._raw_client.warm(user_id, request_options=request_options) + return _response.data + class AsyncUserClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -692,3 +723,42 @@ async def main() -> None: """ _response = await self._raw_client.get_threads(user_id, request_options=request_options) return _response.data + + async def warm(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse: + """ + Hints Zep to warm a user's graph for low-latency search + + Parameters + ---------- + user_id : str + User ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Warm hint accepted + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.user.warm( + user_id="userId", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.warm(user_id, request_options=request_options) + return _response.data diff --git a/src/zep_cloud/user/raw_client.py b/src/zep_cloud/user/raw_client.py index ff64890..5d93f8c 100644 --- a/src/zep_cloud/user/raw_client.py +++ b/src/zep_cloud/user/raw_client.py @@ -566,6 +566,71 @@ def get_threads( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def warm( + self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[SuccessResponse]: + """ + Hints Zep to warm a user's graph for low-latency search + + Parameters + ---------- + user_id : str + User ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Warm hint accepted + """ + _response = self._client_wrapper.httpx_client.request( + f"users/{jsonable_encoder(user_id)}/warm", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + SuccessResponse, + parse_obj_as( + type_=SuccessResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + ) + class AsyncRawUserClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -1109,3 +1174,68 @@ async def get_threads( raise core_api_error_ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + + async def warm( + self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Hints Zep to warm a user's graph for low-latency search + + Parameters + ---------- + user_id : str + User ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Warm hint accepted + """ + _response = await self._client_wrapper.httpx_client.request( + f"users/{jsonable_encoder(user_id)}/warm", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + SuccessResponse, + parse_obj_as( + type_=SuccessResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 404: + raise NotFoundError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + if _response.status_code == 500: + raise InternalServerError( + headers=dict(_response.headers), + body=typing.cast( + types_api_error_ApiError, + parse_obj_as( + type_=types_api_error_ApiError, # type: ignore + object_=_response.json(), + ), + ), + ) + _response_json = _response.json() + except JSONDecodeError: + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response.text + ) + raise core_api_error_ApiError( + status_code=_response.status_code, headers=dict(_response.headers), body=_response_json + )