From 2ae52510a31249d8585cddfd167bb96623b091e4 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Wed, 16 Apr 2025 15:16:59 -0400 Subject: [PATCH 01/74] chore: Fix fact ratings table --- examples/chat_history/memory.py | 15 ++- examples/graph_example/entity_types.py | 17 +-- examples/graph_example/tickets_example.py | 156 ++++++++++++++++++++++ 3 files changed, 171 insertions(+), 17 deletions(-) create mode 100644 examples/graph_example/tickets_example.py diff --git a/examples/chat_history/memory.py b/examples/chat_history/memory.py index 362b4c2..d5c3f54 100644 --- a/examples/chat_history/memory.py +++ b/examples/chat_history/memory.py @@ -20,7 +20,7 @@ from chat_history_shoe_purchase import history from zep_cloud.client import AsyncZep -from zep_cloud.types import Message +from zep_cloud.types import Message, FactRatingInstruction, FactRatingExamples load_dotenv( dotenv_path=find_dotenv() @@ -36,7 +36,15 @@ async def main() -> None: # Create a user user_id = uuid.uuid4().hex # unique user id. can be any alphanum string - + fact_rating_instruction = """Rate the facts by poignancy. Highly poignant + facts have a significant emotional impact or relevance to the user. + Facts with low poignancy are minimally relevant or of little emotional + significance.""" + fact_rating_examples = FactRatingExamples( + high="The user received news of a family member's serious illness.", + medium="The user completed a challenging marathon.", + low="The user bought a new brand of toothpaste.", + ) await client.user.add( user_id=user_id, email="user@example.com", @@ -44,9 +52,10 @@ async def main() -> None: last_name="Smith", metadata={"vip": "true"}, ) + # await asyncio.sleep(1) print(f"User added: {user_id}") - + return session_id = uuid.uuid4().hex # unique session id. can be any alphanum string # Create session associated with the above user diff --git a/examples/graph_example/entity_types.py b/examples/graph_example/entity_types.py index 58aa41b..9aa89e9 100644 --- a/examples/graph_example/entity_types.py +++ b/examples/graph_example/entity_types.py @@ -39,21 +39,10 @@ class Purchase(EntityModel): default=None ) await client.graph.set_entity_types( - entities={ - "Purchase": Purchase, - } + entities={} ) - search_results = await client.graph.search( - user_id="", - query="tickets for the concert", - scope="nodes", - search_filters=SearchFilters( - node_labels=["Purchase"] - ) - ) - print("search_results", search_results) - purchases = [Purchase(**purchase_node.attributes) for purchase_node in search_results.nodes] - print(purchases) + enntl = await client.graph.list_entity_types() + print(enntl) if __name__ == "__main__": diff --git a/examples/graph_example/tickets_example.py b/examples/graph_example/tickets_example.py new file mode 100644 index 0000000..2839f04 --- /dev/null +++ b/examples/graph_example/tickets_example.py @@ -0,0 +1,156 @@ +""" +Example of using Zep Graph API to create a concert ticket purchasing scenario. +This playground demonstrates user interactions with a ticket sales system, +mixing chat messages and purchase events to build a knowledge graph. +""" + +import asyncio +import os +import uuid +import json +from dotenv import find_dotenv, load_dotenv + +from zep_cloud.client import AsyncZep +from zep_cloud.types import Message + +load_dotenv(dotenv_path=find_dotenv()) + +API_KEY = os.environ.get("ZEP_API_KEY") or "YOUR_API_KEY" + +async def create_ticket_playground() -> None: + client = AsyncZep(api_key=API_KEY) + + # Create a user for the playground + user_id = uuid.uuid4().hex + await client.user.add(user_id=user_id, first_name="Sarah", last_name="Smith", email="sarah.smith@example.com") + print(f"Created playground user: {user_id}") + + + # Sample user interactions and system events + episodes = [ + { + "type": "message", + "data": "Sarah (user): Hi, I'm looking for Taylor Swift concert tickets in New York, I am a huge fan!" + }, + { + "type": "json", + "data": { + "event_type": "search_performed", + "user_id": user_id, + "artist": "Taylor Swift", + "location": "New York", + "date_range": "2024-07", + "timestamp": "2024-01-15T10:30:00Z" + } + }, + { + "type": "message", + "data": "TickerSalesBot (assistant): Hi Sarah, welcome to the TicketSales. I found 2 Taylor Swift concerts at Madison Square Garden on July 15 and 16, 2024. Tickets start at $199." + }, + { + "type": "message", + "data": "Sarah (user): Great! I'd like 2 tickets for July 15th please." + }, + { + "type": "json", + "data": { + "event_type": "ticket_purchase", + "user_id": user_id, + "email": "sarah.smith@example.com", + "concert_id": "TS-MSG-0715", + "artist": "Taylor Swift", + "venue": "Madison Square Garden", + "date": "2024-07-15", + "quantity": 2, + "seat_type": "Floor", + "price_per_ticket": 199, + "total_amount": 398, + "transaction_id": "TRX-12345", + "purchase_timestamp": "2024-01-15T10:35:00Z" + } + }, + { + "type": "message", + "data": "Sarah (user): Are there any upcoming Arctic Monkeys concerts?" + }, + { + "type": "json", + "data": { + "event_type": "search_performed", + "user_id": user_id, + "artist": "Arctic Monkeys", + "timestamp": "2024-01-15T10:40:00Z" + } + }, + { + "type": "message", + "data": "TickerSalesBot (assistant): Yes! Arctic Monkeys are playing at Barclays Center on August 5th, 2024." + }, + { + "type": "message", + "data": "Sarah (user): Can you add me to the waitlist for that concert?" + }, + { + "type": "json", + "data": { + "event_type": "waitlist_addition", + "user_id": user_id, + "concert_id": "AM-BC-0805", + "artist": "Arctic Monkeys", + "venue": "Barclays Center", + "date": "2024-08-05", + "timestamp": "2024-01-15T10:42:00Z" + } + }, + { + "type": "message", + "data": "System Notification - Arctic Monkeys tickets are now available for waitlist members!" + }, + { + "type": "json", + "data": { + "event_type": "ticket_purchase", + "user_id": user_id, + "concert_id": "AM-BC-0805", + "artist": "Arctic Monkeys", + "venue": "Barclays Center", + "date": "2024-08-05", + "quantity": 1, + "seat_type": "General Admission", + "price_per_ticket": 150, + "total_amount": 150, + "transaction_id": "TRX-12346", + "purchase_timestamp": "2024-01-15T14:20:00Z" + } + } + ] + + # Add all episodes to the graph + for episode in episodes: + if episode["type"] == "json": + await client.graph.add( + user_id=user_id, + type="json", + data=json.dumps(episode["data"]), + ) + else: # message type + await client.graph.add( + user_id=user_id, + type="message", + data=episode["data"], + ) + + print("Added all ticket purchase episodes to the graph") + print("Waiting for graph processing...") + await asyncio.sleep(30) + + episodes = await client.graph.episode.get_by_user_id(user_id=user_id) + print(episodes) + + + return user_id + +if __name__ == "__main__": + user_id = asyncio.run(create_ticket_playground()) + print(f"\nPlayground ready! User ID: {user_id}") + print("You can now explore the ticket purchase graph and add new episodes!") \ No newline at end of file From 9481ce51f0ced118b1ea24034944b5169736c6e2 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 1 Aug 2025 17:54:53 +0000 Subject: [PATCH 02/74] SDK regeneration --- reference.md | 136 ++++---- src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/graph/client.py | 382 +++++++++++----------- src/zep_cloud/graph/raw_client.py | 464 +++++++++++++-------------- 4 files changed, 493 insertions(+), 493 deletions(-) diff --git a/reference.md b/reference.md index 7214cff..8fd73b0 100644 --- a/reference.md +++ b/reference.md @@ -614,7 +614,7 @@ client.graph.clone() -
client.graph.search(...) +
client.graph.create(...)
@@ -626,7 +626,7 @@ client.graph.clone()
-Perform a graph search query. +Creates a new graph.
@@ -646,8 +646,8 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.search( - query="query", +client.graph.create( + graph_id="graph_id", ) ``` @@ -664,7 +664,7 @@ client.graph.search(
-**query:** `str` — The string to search for (required) +**graph_id:** `str`
@@ -672,7 +672,7 @@ client.graph.search(
-**bfs_origin_node_uuids:** `typing.Optional[typing.Sequence[str]]` — Nodes that are the origins of the BFS searches +**description:** `typing.Optional[str]`
@@ -680,7 +680,7 @@ client.graph.search(
-**center_node_uuid:** `typing.Optional[str]` — Node to rerank around for node distance reranking +**fact_rating_instruction:** `typing.Optional[FactRatingInstruction]`
@@ -688,7 +688,7 @@ client.graph.search(
-**graph_id:** `typing.Optional[str]` — The graph_id to search in. When searching user graph, please use user_id instead. +**name:** `typing.Optional[str]`
@@ -696,55 +696,67 @@ client.graph.search(
-**limit:** `typing.Optional[int]` — The maximum number of facts to retrieve. Defaults to 10. Limited to 50. +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+ +
-
-
-**min_fact_rating:** `typing.Optional[float]` — The minimum rating by which to filter relevant facts -
+
+
client.graph.list_all(...)
-**min_score:** `typing.Optional[float]` — Deprecated - -
-
+#### 📝 Description
-**mmr_lambda:** `typing.Optional[float]` — weighting for maximal marginal relevance - -
-
-
-**reranker:** `typing.Optional[Reranker]` — Defaults to RRF - +Returns all graphs.
+ + + +#### 🔌 Usage
-**scope:** `typing.Optional[GraphSearchScope]` — Defaults to Edges. Communities will be added in the future. - +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.list_all() + +``` +
+
+#### ⚙️ Parameters +
-**search_filters:** `typing.Optional[SearchFilters]` — Search filters to apply to the search +
+
+ +**page_number:** `typing.Optional[int]` — Page number for pagination, starting from 1.
@@ -752,7 +764,7 @@ client.graph.search(
-**user_id:** `typing.Optional[str]` — The user_id when searching user graph. If not searching user graph, please use graph_id instead. +**page_size:** `typing.Optional[int]` — Number of graphs to retrieve per page.
@@ -772,7 +784,7 @@ client.graph.search(
-
client.graph.create(...) +
client.graph.search(...)
@@ -784,7 +796,7 @@ client.graph.search(
-Creates a new graph. +Perform a graph search query.
@@ -804,8 +816,8 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.create( - graph_id="graph_id", +client.graph.search( + query="query", ) ``` @@ -822,7 +834,7 @@ client.graph.create(
-**graph_id:** `str` +**query:** `str` — The string to search for (required)
@@ -830,7 +842,7 @@ client.graph.create(
-**description:** `typing.Optional[str]` +**bfs_origin_node_uuids:** `typing.Optional[typing.Sequence[str]]` — Nodes that are the origins of the BFS searches
@@ -838,7 +850,7 @@ client.graph.create(
-**fact_rating_instruction:** `typing.Optional[FactRatingInstruction]` +**center_node_uuid:** `typing.Optional[str]` — Node to rerank around for node distance reranking
@@ -846,7 +858,7 @@ client.graph.create(
-**name:** `typing.Optional[str]` +**graph_id:** `typing.Optional[str]` — The graph_id to search in. When searching user graph, please use user_id instead.
@@ -854,67 +866,55 @@ client.graph.create(
-**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. +**limit:** `typing.Optional[int]` — The maximum number of facts to retrieve. Defaults to 10. Limited to 50.
- -
+
+
+**min_fact_rating:** `typing.Optional[float]` — The minimum rating by which to filter relevant facts +
-
-
client.graph.list_all(...)
-#### 📝 Description - -
-
+**min_score:** `typing.Optional[float]` — Deprecated + +
+
-Returns all graphs. -
-
+**mmr_lambda:** `typing.Optional[float]` — weighting for maximal marginal relevance +
-#### 🔌 Usage -
-
-
- -```python -from zep_cloud import Zep - -client = Zep( - api_key="YOUR_API_KEY", -) -client.graph.list_all() - -``` -
-
+**reranker:** `typing.Optional[Reranker]` — Defaults to RRF +
-#### ⚙️ Parameters -
+**scope:** `typing.Optional[GraphSearchScope]` — Defaults to Edges. Communities will be added in the future. + +
+
+
-**page_number:** `typing.Optional[int]` — Page number for pagination, starting from 1. +**search_filters:** `typing.Optional[SearchFilters]` — Search filters to apply to the search
@@ -922,7 +922,7 @@ client.graph.list_all()
-**page_size:** `typing.Optional[int]` — Number of graphs to retrieve per page. +**user_id:** `typing.Optional[str]` — The user_id when searching user graph. If not searching user graph, please use graph_id instead.
diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 06964ee..5a9c050 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.0.0", + "User-Agent": "zep-cloud/3.0.5", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.0.0", + "X-Fern-SDK-Version": "3.0.5", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 1da5c10..fc17f2e 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -385,6 +385,96 @@ def clone( ) return _response.data + def create( + self, + *, + graph_id: str, + description: typing.Optional[str] = OMIT, + fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, + name: typing.Optional[str] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> Graph: + """ + Creates a new graph. + + Parameters + ---------- + graph_id : str + + description : typing.Optional[str] + + fact_rating_instruction : typing.Optional[FactRatingInstruction] + + name : typing.Optional[str] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + Graph + The added graph + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.create( + graph_id="graph_id", + ) + """ + _response = self._raw_client.create( + graph_id=graph_id, + description=description, + fact_rating_instruction=fact_rating_instruction, + name=name, + request_options=request_options, + ) + return _response.data + + def list_all( + self, + *, + page_number: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> GraphListResponse: + """ + Returns all graphs. + + Parameters + ---------- + page_number : typing.Optional[int] + Page number for pagination, starting from 1. + + page_size : typing.Optional[int] + Number of graphs to retrieve per page. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + GraphListResponse + Successfully retrieved list of graphs. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.list_all() + """ + _response = self._raw_client.list_all( + page_number=page_number, page_size=page_size, request_options=request_options + ) + return _response.data + def search( self, *, @@ -479,96 +569,6 @@ def search( ) return _response.data - def create( - self, - *, - graph_id: str, - description: typing.Optional[str] = OMIT, - fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, - name: typing.Optional[str] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> Graph: - """ - Creates a new graph. - - Parameters - ---------- - graph_id : str - - description : typing.Optional[str] - - fact_rating_instruction : typing.Optional[FactRatingInstruction] - - name : typing.Optional[str] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - Graph - The added graph - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.graph.create( - graph_id="graph_id", - ) - """ - _response = self._raw_client.create( - graph_id=graph_id, - description=description, - fact_rating_instruction=fact_rating_instruction, - name=name, - request_options=request_options, - ) - return _response.data - - def list_all( - self, - *, - page_number: typing.Optional[int] = None, - page_size: typing.Optional[int] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> GraphListResponse: - """ - Returns all graphs. - - Parameters - ---------- - page_number : typing.Optional[int] - Page number for pagination, starting from 1. - - page_size : typing.Optional[int] - Number of graphs to retrieve per page. - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - GraphListResponse - Successfully retrieved list of graphs. - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.graph.list_all() - """ - _response = self._raw_client.list_all( - page_number=page_number, page_size=page_size, request_options=request_options - ) - return _response.data - def get(self, graph_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> Graph: """ Returns a graph. @@ -1087,71 +1087,35 @@ async def main() -> None: ) return _response.data - async def search( + async def create( self, *, - query: str, - bfs_origin_node_uuids: typing.Optional[typing.Sequence[str]] = OMIT, - center_node_uuid: typing.Optional[str] = OMIT, - graph_id: typing.Optional[str] = OMIT, - limit: typing.Optional[int] = OMIT, - min_fact_rating: typing.Optional[float] = OMIT, - min_score: typing.Optional[float] = OMIT, - mmr_lambda: typing.Optional[float] = OMIT, - reranker: typing.Optional[Reranker] = OMIT, - scope: typing.Optional[GraphSearchScope] = OMIT, - search_filters: typing.Optional[SearchFilters] = OMIT, - user_id: typing.Optional[str] = OMIT, + graph_id: str, + description: typing.Optional[str] = OMIT, + fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, + name: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> GraphSearchResults: + ) -> Graph: """ - Perform a graph search query. + Creates a new graph. Parameters ---------- - query : str - The string to search for (required) - - bfs_origin_node_uuids : typing.Optional[typing.Sequence[str]] - Nodes that are the origins of the BFS searches - - center_node_uuid : typing.Optional[str] - Node to rerank around for node distance reranking - - graph_id : typing.Optional[str] - The graph_id to search in. When searching user graph, please use user_id instead. - - limit : typing.Optional[int] - The maximum number of facts to retrieve. Defaults to 10. Limited to 50. - - min_fact_rating : typing.Optional[float] - The minimum rating by which to filter relevant facts - - min_score : typing.Optional[float] - Deprecated - - mmr_lambda : typing.Optional[float] - weighting for maximal marginal relevance - - reranker : typing.Optional[Reranker] - Defaults to RRF + graph_id : str - scope : typing.Optional[GraphSearchScope] - Defaults to Edges. Communities will be added in the future. + description : typing.Optional[str] - search_filters : typing.Optional[SearchFilters] - Search filters to apply to the search + fact_rating_instruction : typing.Optional[FactRatingInstruction] - user_id : typing.Optional[str] - The user_id when searching user graph. If not searching user graph, please use graph_id instead. + name : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - GraphSearchResults - Graph search results + Graph + The added graph Examples -------- @@ -1165,59 +1129,47 @@ async def search( async def main() -> None: - await client.graph.search( - query="query", + await client.graph.create( + graph_id="graph_id", ) asyncio.run(main()) """ - _response = await self._raw_client.search( - query=query, - bfs_origin_node_uuids=bfs_origin_node_uuids, - center_node_uuid=center_node_uuid, + _response = await self._raw_client.create( graph_id=graph_id, - limit=limit, - min_fact_rating=min_fact_rating, - min_score=min_score, - mmr_lambda=mmr_lambda, - reranker=reranker, - scope=scope, - search_filters=search_filters, - user_id=user_id, + description=description, + fact_rating_instruction=fact_rating_instruction, + name=name, request_options=request_options, ) return _response.data - async def create( + async def list_all( self, *, - graph_id: str, - description: typing.Optional[str] = OMIT, - fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, - name: typing.Optional[str] = OMIT, + page_number: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> Graph: + ) -> GraphListResponse: """ - Creates a new graph. + Returns all graphs. Parameters ---------- - graph_id : str - - description : typing.Optional[str] - - fact_rating_instruction : typing.Optional[FactRatingInstruction] + page_number : typing.Optional[int] + Page number for pagination, starting from 1. - name : typing.Optional[str] + page_size : typing.Optional[int] + Number of graphs to retrieve per page. request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - Graph - The added graph + GraphListResponse + Successfully retrieved list of graphs. Examples -------- @@ -1231,47 +1183,81 @@ async def create( async def main() -> None: - await client.graph.create( - graph_id="graph_id", - ) + await client.graph.list_all() asyncio.run(main()) """ - _response = await self._raw_client.create( - graph_id=graph_id, - description=description, - fact_rating_instruction=fact_rating_instruction, - name=name, - request_options=request_options, + _response = await self._raw_client.list_all( + page_number=page_number, page_size=page_size, request_options=request_options ) return _response.data - async def list_all( + async def search( self, *, - page_number: typing.Optional[int] = None, - page_size: typing.Optional[int] = None, + query: str, + bfs_origin_node_uuids: typing.Optional[typing.Sequence[str]] = OMIT, + center_node_uuid: typing.Optional[str] = OMIT, + graph_id: typing.Optional[str] = OMIT, + limit: typing.Optional[int] = OMIT, + min_fact_rating: typing.Optional[float] = OMIT, + min_score: typing.Optional[float] = OMIT, + mmr_lambda: typing.Optional[float] = OMIT, + reranker: typing.Optional[Reranker] = OMIT, + scope: typing.Optional[GraphSearchScope] = OMIT, + search_filters: typing.Optional[SearchFilters] = OMIT, + user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> GraphListResponse: + ) -> GraphSearchResults: """ - Returns all graphs. + Perform a graph search query. Parameters ---------- - page_number : typing.Optional[int] - Page number for pagination, starting from 1. + query : str + The string to search for (required) - page_size : typing.Optional[int] - Number of graphs to retrieve per page. + bfs_origin_node_uuids : typing.Optional[typing.Sequence[str]] + Nodes that are the origins of the BFS searches + + center_node_uuid : typing.Optional[str] + Node to rerank around for node distance reranking + + graph_id : typing.Optional[str] + The graph_id to search in. When searching user graph, please use user_id instead. + + limit : typing.Optional[int] + The maximum number of facts to retrieve. Defaults to 10. Limited to 50. + + min_fact_rating : typing.Optional[float] + The minimum rating by which to filter relevant facts + + min_score : typing.Optional[float] + Deprecated + + mmr_lambda : typing.Optional[float] + weighting for maximal marginal relevance + + reranker : typing.Optional[Reranker] + Defaults to RRF + + scope : typing.Optional[GraphSearchScope] + Defaults to Edges. Communities will be added in the future. + + search_filters : typing.Optional[SearchFilters] + Search filters to apply to the search + + user_id : typing.Optional[str] + The user_id when searching user graph. If not searching user graph, please use graph_id instead. request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - GraphListResponse - Successfully retrieved list of graphs. + GraphSearchResults + Graph search results Examples -------- @@ -1285,13 +1271,27 @@ async def list_all( async def main() -> None: - await client.graph.list_all() + await client.graph.search( + query="query", + ) asyncio.run(main()) """ - _response = await self._raw_client.list_all( - page_number=page_number, page_size=page_size, request_options=request_options + _response = await self._raw_client.search( + query=query, + bfs_origin_node_uuids=bfs_origin_node_uuids, + center_node_uuid=center_node_uuid, + graph_id=graph_id, + limit=limit, + min_fact_rating=min_fact_rating, + min_score=min_score, + mmr_lambda=mmr_lambda, + reranker=reranker, + scope=scope, + search_filters=search_filters, + user_id=user_id, + request_options=request_options, ) return _response.data diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index 545c350..a9ad872 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -598,90 +598,46 @@ def clone( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def search( + def create( self, *, - query: str, - bfs_origin_node_uuids: typing.Optional[typing.Sequence[str]] = OMIT, - center_node_uuid: typing.Optional[str] = OMIT, - graph_id: typing.Optional[str] = OMIT, - limit: typing.Optional[int] = OMIT, - min_fact_rating: typing.Optional[float] = OMIT, - min_score: typing.Optional[float] = OMIT, - mmr_lambda: typing.Optional[float] = OMIT, - reranker: typing.Optional[Reranker] = OMIT, - scope: typing.Optional[GraphSearchScope] = OMIT, - search_filters: typing.Optional[SearchFilters] = OMIT, - user_id: typing.Optional[str] = OMIT, + graph_id: str, + description: typing.Optional[str] = OMIT, + fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, + name: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[GraphSearchResults]: + ) -> HttpResponse[Graph]: """ - Perform a graph search query. + Creates a new graph. Parameters ---------- - query : str - The string to search for (required) - - bfs_origin_node_uuids : typing.Optional[typing.Sequence[str]] - Nodes that are the origins of the BFS searches - - center_node_uuid : typing.Optional[str] - Node to rerank around for node distance reranking - - graph_id : typing.Optional[str] - The graph_id to search in. When searching user graph, please use user_id instead. - - limit : typing.Optional[int] - The maximum number of facts to retrieve. Defaults to 10. Limited to 50. - - min_fact_rating : typing.Optional[float] - The minimum rating by which to filter relevant facts - - min_score : typing.Optional[float] - Deprecated - - mmr_lambda : typing.Optional[float] - weighting for maximal marginal relevance - - reranker : typing.Optional[Reranker] - Defaults to RRF + graph_id : str - scope : typing.Optional[GraphSearchScope] - Defaults to Edges. Communities will be added in the future. + description : typing.Optional[str] - search_filters : typing.Optional[SearchFilters] - Search filters to apply to the search + fact_rating_instruction : typing.Optional[FactRatingInstruction] - user_id : typing.Optional[str] - The user_id when searching user graph. If not searching user graph, please use graph_id instead. + name : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[GraphSearchResults] - Graph search results + HttpResponse[Graph] + The added graph """ _response = self._client_wrapper.httpx_client.request( - "graph/search", + "graph/create", method="POST", json={ - "bfs_origin_node_uuids": bfs_origin_node_uuids, - "center_node_uuid": center_node_uuid, - "graph_id": graph_id, - "limit": limit, - "min_fact_rating": min_fact_rating, - "min_score": min_score, - "mmr_lambda": mmr_lambda, - "query": query, - "reranker": reranker, - "scope": scope, - "search_filters": convert_and_respect_annotation_metadata( - object_=search_filters, annotation=SearchFilters, direction="write" + "description": description, + "fact_rating_instruction": convert_and_respect_annotation_metadata( + object_=fact_rating_instruction, annotation=FactRatingInstruction, direction="write" ), - "user_id": user_id, + "graph_id": graph_id, + "name": name, }, headers={ "content-type": "application/json", @@ -692,9 +648,9 @@ def search( try: if 200 <= _response.status_code < 300: _data = typing.cast( - GraphSearchResults, + Graph, parse_obj_as( - type_=GraphSearchResults, # type: ignore + type_=Graph, # type: ignore object_=_response.json(), ), ) @@ -730,59 +686,47 @@ def search( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def create( + def list_all( self, *, - graph_id: str, - description: typing.Optional[str] = OMIT, - fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, - name: typing.Optional[str] = OMIT, + page_number: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[Graph]: + ) -> HttpResponse[GraphListResponse]: """ - Creates a new graph. + Returns all graphs. Parameters ---------- - graph_id : str - - description : typing.Optional[str] - - fact_rating_instruction : typing.Optional[FactRatingInstruction] + page_number : typing.Optional[int] + Page number for pagination, starting from 1. - name : typing.Optional[str] + page_size : typing.Optional[int] + Number of graphs to retrieve per page. request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[Graph] - The added graph + HttpResponse[GraphListResponse] + Successfully retrieved list of graphs. """ _response = self._client_wrapper.httpx_client.request( - "graphs", - method="POST", - json={ - "description": description, - "fact_rating_instruction": convert_and_respect_annotation_metadata( - object_=fact_rating_instruction, annotation=FactRatingInstruction, direction="write" - ), - "graph_id": graph_id, - "name": name, - }, - headers={ - "content-type": "application/json", + "graph/list-all", + method="GET", + params={ + "pageNumber": page_number, + "pageSize": page_size, }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - Graph, + GraphListResponse, parse_obj_as( - type_=Graph, # type: ignore + type_=GraphListResponse, # type: ignore object_=_response.json(), ), ) @@ -818,47 +762,103 @@ def create( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def list_all( + def search( self, *, - page_number: typing.Optional[int] = None, - page_size: typing.Optional[int] = None, + query: str, + bfs_origin_node_uuids: typing.Optional[typing.Sequence[str]] = OMIT, + center_node_uuid: typing.Optional[str] = OMIT, + graph_id: typing.Optional[str] = OMIT, + limit: typing.Optional[int] = OMIT, + min_fact_rating: typing.Optional[float] = OMIT, + min_score: typing.Optional[float] = OMIT, + mmr_lambda: typing.Optional[float] = OMIT, + reranker: typing.Optional[Reranker] = OMIT, + scope: typing.Optional[GraphSearchScope] = OMIT, + search_filters: typing.Optional[SearchFilters] = OMIT, + user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[GraphListResponse]: + ) -> HttpResponse[GraphSearchResults]: """ - Returns all graphs. + Perform a graph search query. Parameters ---------- - page_number : typing.Optional[int] - Page number for pagination, starting from 1. + query : str + The string to search for (required) - page_size : typing.Optional[int] - Number of graphs to retrieve per page. + bfs_origin_node_uuids : typing.Optional[typing.Sequence[str]] + Nodes that are the origins of the BFS searches + + center_node_uuid : typing.Optional[str] + Node to rerank around for node distance reranking + + graph_id : typing.Optional[str] + The graph_id to search in. When searching user graph, please use user_id instead. + + limit : typing.Optional[int] + The maximum number of facts to retrieve. Defaults to 10. Limited to 50. + + min_fact_rating : typing.Optional[float] + The minimum rating by which to filter relevant facts + + min_score : typing.Optional[float] + Deprecated + + mmr_lambda : typing.Optional[float] + weighting for maximal marginal relevance + + reranker : typing.Optional[Reranker] + Defaults to RRF + + scope : typing.Optional[GraphSearchScope] + Defaults to Edges. Communities will be added in the future. + + search_filters : typing.Optional[SearchFilters] + Search filters to apply to the search + + user_id : typing.Optional[str] + The user_id when searching user graph. If not searching user graph, please use graph_id instead. request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - HttpResponse[GraphListResponse] - Successfully retrieved list of graphs. + HttpResponse[GraphSearchResults] + Graph search results """ _response = self._client_wrapper.httpx_client.request( - "graphs/list-all", - method="GET", - params={ - "pageNumber": page_number, - "pageSize": page_size, + "graph/search", + method="POST", + json={ + "bfs_origin_node_uuids": bfs_origin_node_uuids, + "center_node_uuid": center_node_uuid, + "graph_id": graph_id, + "limit": limit, + "min_fact_rating": min_fact_rating, + "min_score": min_score, + "mmr_lambda": mmr_lambda, + "query": query, + "reranker": reranker, + "scope": scope, + "search_filters": convert_and_respect_annotation_metadata( + object_=search_filters, annotation=SearchFilters, direction="write" + ), + "user_id": user_id, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GraphListResponse, + GraphSearchResults, parse_obj_as( - type_=GraphListResponse, # type: ignore + type_=GraphSearchResults, # type: ignore object_=_response.json(), ), ) @@ -912,7 +912,7 @@ def get(self, graph_id: str, *, request_options: typing.Optional[RequestOptions] The graph that was retrieved. """ _response = self._client_wrapper.httpx_client.request( - f"graphs/{jsonable_encoder(graph_id)}", + f"graph/{jsonable_encoder(graph_id)}", method="GET", request_options=request_options, ) @@ -977,7 +977,7 @@ def delete( Deleted """ _response = self._client_wrapper.httpx_client.request( - f"graphs/{jsonable_encoder(graph_id)}", + f"graph/{jsonable_encoder(graph_id)}", method="DELETE", request_options=request_options, ) @@ -1065,7 +1065,7 @@ def update( The updated graph object """ _response = self._client_wrapper.httpx_client.request( - f"graphs/{jsonable_encoder(graph_id)}", + f"graph/{jsonable_encoder(graph_id)}", method="PATCH", json={ "description": description, @@ -1696,90 +1696,46 @@ async def clone( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def search( + async def create( self, *, - query: str, - bfs_origin_node_uuids: typing.Optional[typing.Sequence[str]] = OMIT, - center_node_uuid: typing.Optional[str] = OMIT, - graph_id: typing.Optional[str] = OMIT, - limit: typing.Optional[int] = OMIT, - min_fact_rating: typing.Optional[float] = OMIT, - min_score: typing.Optional[float] = OMIT, - mmr_lambda: typing.Optional[float] = OMIT, - reranker: typing.Optional[Reranker] = OMIT, - scope: typing.Optional[GraphSearchScope] = OMIT, - search_filters: typing.Optional[SearchFilters] = OMIT, - user_id: typing.Optional[str] = OMIT, + graph_id: str, + description: typing.Optional[str] = OMIT, + fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, + name: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[GraphSearchResults]: + ) -> AsyncHttpResponse[Graph]: """ - Perform a graph search query. + Creates a new graph. Parameters ---------- - query : str - The string to search for (required) - - bfs_origin_node_uuids : typing.Optional[typing.Sequence[str]] - Nodes that are the origins of the BFS searches - - center_node_uuid : typing.Optional[str] - Node to rerank around for node distance reranking - - graph_id : typing.Optional[str] - The graph_id to search in. When searching user graph, please use user_id instead. - - limit : typing.Optional[int] - The maximum number of facts to retrieve. Defaults to 10. Limited to 50. - - min_fact_rating : typing.Optional[float] - The minimum rating by which to filter relevant facts - - min_score : typing.Optional[float] - Deprecated - - mmr_lambda : typing.Optional[float] - weighting for maximal marginal relevance - - reranker : typing.Optional[Reranker] - Defaults to RRF + graph_id : str - scope : typing.Optional[GraphSearchScope] - Defaults to Edges. Communities will be added in the future. + description : typing.Optional[str] - search_filters : typing.Optional[SearchFilters] - Search filters to apply to the search + fact_rating_instruction : typing.Optional[FactRatingInstruction] - user_id : typing.Optional[str] - The user_id when searching user graph. If not searching user graph, please use graph_id instead. + name : typing.Optional[str] request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[GraphSearchResults] - Graph search results + AsyncHttpResponse[Graph] + The added graph """ _response = await self._client_wrapper.httpx_client.request( - "graph/search", + "graph/create", method="POST", json={ - "bfs_origin_node_uuids": bfs_origin_node_uuids, - "center_node_uuid": center_node_uuid, - "graph_id": graph_id, - "limit": limit, - "min_fact_rating": min_fact_rating, - "min_score": min_score, - "mmr_lambda": mmr_lambda, - "query": query, - "reranker": reranker, - "scope": scope, - "search_filters": convert_and_respect_annotation_metadata( - object_=search_filters, annotation=SearchFilters, direction="write" + "description": description, + "fact_rating_instruction": convert_and_respect_annotation_metadata( + object_=fact_rating_instruction, annotation=FactRatingInstruction, direction="write" ), - "user_id": user_id, + "graph_id": graph_id, + "name": name, }, headers={ "content-type": "application/json", @@ -1790,9 +1746,9 @@ async def search( try: if 200 <= _response.status_code < 300: _data = typing.cast( - GraphSearchResults, + Graph, parse_obj_as( - type_=GraphSearchResults, # type: ignore + type_=Graph, # type: ignore object_=_response.json(), ), ) @@ -1828,59 +1784,47 @@ async def search( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def create( + async def list_all( self, *, - graph_id: str, - description: typing.Optional[str] = OMIT, - fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, - name: typing.Optional[str] = OMIT, + page_number: typing.Optional[int] = None, + page_size: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[Graph]: + ) -> AsyncHttpResponse[GraphListResponse]: """ - Creates a new graph. + Returns all graphs. Parameters ---------- - graph_id : str - - description : typing.Optional[str] - - fact_rating_instruction : typing.Optional[FactRatingInstruction] + page_number : typing.Optional[int] + Page number for pagination, starting from 1. - name : typing.Optional[str] + page_size : typing.Optional[int] + Number of graphs to retrieve per page. request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[Graph] - The added graph + AsyncHttpResponse[GraphListResponse] + Successfully retrieved list of graphs. """ _response = await self._client_wrapper.httpx_client.request( - "graphs", - method="POST", - json={ - "description": description, - "fact_rating_instruction": convert_and_respect_annotation_metadata( - object_=fact_rating_instruction, annotation=FactRatingInstruction, direction="write" - ), - "graph_id": graph_id, - "name": name, - }, - headers={ - "content-type": "application/json", + "graph/list-all", + method="GET", + params={ + "pageNumber": page_number, + "pageSize": page_size, }, request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - Graph, + GraphListResponse, parse_obj_as( - type_=Graph, # type: ignore + type_=GraphListResponse, # type: ignore object_=_response.json(), ), ) @@ -1916,47 +1860,103 @@ async def create( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def list_all( + async def search( self, *, - page_number: typing.Optional[int] = None, - page_size: typing.Optional[int] = None, + query: str, + bfs_origin_node_uuids: typing.Optional[typing.Sequence[str]] = OMIT, + center_node_uuid: typing.Optional[str] = OMIT, + graph_id: typing.Optional[str] = OMIT, + limit: typing.Optional[int] = OMIT, + min_fact_rating: typing.Optional[float] = OMIT, + min_score: typing.Optional[float] = OMIT, + mmr_lambda: typing.Optional[float] = OMIT, + reranker: typing.Optional[Reranker] = OMIT, + scope: typing.Optional[GraphSearchScope] = OMIT, + search_filters: typing.Optional[SearchFilters] = OMIT, + user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[GraphListResponse]: + ) -> AsyncHttpResponse[GraphSearchResults]: """ - Returns all graphs. + Perform a graph search query. Parameters ---------- - page_number : typing.Optional[int] - Page number for pagination, starting from 1. + query : str + The string to search for (required) - page_size : typing.Optional[int] - Number of graphs to retrieve per page. + bfs_origin_node_uuids : typing.Optional[typing.Sequence[str]] + Nodes that are the origins of the BFS searches + + center_node_uuid : typing.Optional[str] + Node to rerank around for node distance reranking + + graph_id : typing.Optional[str] + The graph_id to search in. When searching user graph, please use user_id instead. + + limit : typing.Optional[int] + The maximum number of facts to retrieve. Defaults to 10. Limited to 50. + + min_fact_rating : typing.Optional[float] + The minimum rating by which to filter relevant facts + + min_score : typing.Optional[float] + Deprecated + + mmr_lambda : typing.Optional[float] + weighting for maximal marginal relevance + + reranker : typing.Optional[Reranker] + Defaults to RRF + + scope : typing.Optional[GraphSearchScope] + Defaults to Edges. Communities will be added in the future. + + search_filters : typing.Optional[SearchFilters] + Search filters to apply to the search + + user_id : typing.Optional[str] + The user_id when searching user graph. If not searching user graph, please use graph_id instead. request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[GraphListResponse] - Successfully retrieved list of graphs. + AsyncHttpResponse[GraphSearchResults] + Graph search results """ _response = await self._client_wrapper.httpx_client.request( - "graphs/list-all", - method="GET", - params={ - "pageNumber": page_number, - "pageSize": page_size, + "graph/search", + method="POST", + json={ + "bfs_origin_node_uuids": bfs_origin_node_uuids, + "center_node_uuid": center_node_uuid, + "graph_id": graph_id, + "limit": limit, + "min_fact_rating": min_fact_rating, + "min_score": min_score, + "mmr_lambda": mmr_lambda, + "query": query, + "reranker": reranker, + "scope": scope, + "search_filters": convert_and_respect_annotation_metadata( + object_=search_filters, annotation=SearchFilters, direction="write" + ), + "user_id": user_id, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - GraphListResponse, + GraphSearchResults, parse_obj_as( - type_=GraphListResponse, # type: ignore + type_=GraphSearchResults, # type: ignore object_=_response.json(), ), ) @@ -2012,7 +2012,7 @@ async def get( The graph that was retrieved. """ _response = await self._client_wrapper.httpx_client.request( - f"graphs/{jsonable_encoder(graph_id)}", + f"graph/{jsonable_encoder(graph_id)}", method="GET", request_options=request_options, ) @@ -2077,7 +2077,7 @@ async def delete( Deleted """ _response = await self._client_wrapper.httpx_client.request( - f"graphs/{jsonable_encoder(graph_id)}", + f"graph/{jsonable_encoder(graph_id)}", method="DELETE", request_options=request_options, ) @@ -2165,7 +2165,7 @@ async def update( The updated graph object """ _response = await self._client_wrapper.httpx_client.request( - f"graphs/{jsonable_encoder(graph_id)}", + f"graph/{jsonable_encoder(graph_id)}", method="PATCH", json={ "description": description, From f28745db1a0c1302a821cd773fe4a64f5f8f81f4 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Fri, 1 Aug 2025 13:56:53 -0400 Subject: [PATCH 03/74] chore: Version bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 0560c58..2952462 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.0.0" +version = "3.0.5" description = "" readme = "README.md" authors = [] From acb509bdfad96e4b362f34e5f9076ce7a6be8444 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 5 Aug 2025 17:31:13 -0400 Subject: [PATCH 04/74] chore: Version bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2952462..3f931ad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.0.5" +version = "3.1.0" description = "" readme = "README.md" authors = [] From 94691fb6e0783692bd006c66635689535b1ed173 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 21:32:38 +0000 Subject: [PATCH 05/74] SDK regeneration --- reference.md | 38 ++++++++++++-- src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/graph/client.py | 68 ++++++++++++++++++++---- src/zep_cloud/graph/raw_client.py | 78 +++++++++++++++++++++++++--- 4 files changed, 167 insertions(+), 21 deletions(-) diff --git a/reference.md b/reference.md index 8fd73b0..d52ba21 100644 --- a/reference.md +++ b/reference.md @@ -1,6 +1,6 @@ # Reference ## Graph -
client.graph.list_entity_types() +
client.graph.list_entity_types(...)
@@ -12,7 +12,7 @@
-Returns all entity types for a project. +Returns all entity types for a project, user, or graph.
@@ -48,6 +48,22 @@ client.graph.list_entity_types()
+**user_id:** `typing.Optional[str]` — User ID to get user-specific entity types + +
+
+ +
+
+ +**graph_id:** `typing.Optional[str]` — Graph ID to get group-specific entity types + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -72,7 +88,7 @@ client.graph.list_entity_types()
-Sets the entity types for a project, replacing any existing ones. +Sets the entity types for a project, user, or graph, replacing any existing ones.
@@ -124,6 +140,22 @@ client.graph.set_entity_types_internal()
+**graph_id:** `typing.Optional[str]` + +
+
+ +
+
+ +**user_id:** `typing.Optional[str]` + +
+
+ +
+
+ **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 5a9c050..8bed933 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.0.5", + "User-Agent": "zep-cloud/3.1.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.0.5", + "X-Fern-SDK-Version": "3.1.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index fc17f2e..29379aa 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -49,12 +49,24 @@ def with_raw_response(self) -> RawGraphClient: """ return self._raw_client - def list_entity_types(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: + def list_entity_types( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> EntityTypeResponse: """ - Returns all entity types for a project. + Returns all entity types for a project, user, or graph. Parameters ---------- + user_id : typing.Optional[str] + User ID to get user-specific entity types + + graph_id : typing.Optional[str] + Graph ID to get group-specific entity types + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -72,7 +84,9 @@ def list_entity_types(self, *, request_options: typing.Optional[RequestOptions] ) client.graph.list_entity_types() """ - _response = self._raw_client.list_entity_types(request_options=request_options) + _response = self._raw_client.list_entity_types( + user_id=user_id, graph_id=graph_id, request_options=request_options + ) return _response.data def set_entity_types_internal( @@ -80,10 +94,12 @@ def set_entity_types_internal( *, edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_id: typing.Optional[str] = OMIT, + user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ - Sets the entity types for a project, replacing any existing ones. + Sets the entity types for a project, user, or graph, replacing any existing ones. Parameters ---------- @@ -91,6 +107,10 @@ def set_entity_types_internal( entity_types : typing.Optional[typing.Sequence[EntityType]] + graph_id : typing.Optional[str] + + user_id : typing.Optional[str] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -109,7 +129,11 @@ def set_entity_types_internal( client.graph.set_entity_types_internal() """ _response = self._raw_client.set_entity_types_internal( - edge_types=edge_types, entity_types=entity_types, request_options=request_options + edge_types=edge_types, + entity_types=entity_types, + graph_id=graph_id, + user_id=user_id, + request_options=request_options, ) return _response.data @@ -703,12 +727,24 @@ def with_raw_response(self) -> AsyncRawGraphClient: """ return self._raw_client - async def list_entity_types(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: + async def list_entity_types( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> EntityTypeResponse: """ - Returns all entity types for a project. + Returns all entity types for a project, user, or graph. Parameters ---------- + user_id : typing.Optional[str] + User ID to get user-specific entity types + + graph_id : typing.Optional[str] + Graph ID to get group-specific entity types + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -734,7 +770,9 @@ async def main() -> None: asyncio.run(main()) """ - _response = await self._raw_client.list_entity_types(request_options=request_options) + _response = await self._raw_client.list_entity_types( + user_id=user_id, graph_id=graph_id, request_options=request_options + ) return _response.data async def set_entity_types_internal( @@ -742,10 +780,12 @@ async def set_entity_types_internal( *, edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_id: typing.Optional[str] = OMIT, + user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ - Sets the entity types for a project, replacing any existing ones. + Sets the entity types for a project, user, or graph, replacing any existing ones. Parameters ---------- @@ -753,6 +793,10 @@ async def set_entity_types_internal( entity_types : typing.Optional[typing.Sequence[EntityType]] + graph_id : typing.Optional[str] + + user_id : typing.Optional[str] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -779,7 +823,11 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._raw_client.set_entity_types_internal( - edge_types=edge_types, entity_types=entity_types, request_options=request_options + edge_types=edge_types, + entity_types=entity_types, + graph_id=graph_id, + user_id=user_id, + request_options=request_options, ) return _response.data diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index a9ad872..c36640e 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -40,13 +40,23 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper def list_entity_types( - self, *, request_options: typing.Optional[RequestOptions] = None + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[EntityTypeResponse]: """ - Returns all entity types for a project. + Returns all entity types for a project, user, or graph. Parameters ---------- + user_id : typing.Optional[str] + User ID to get user-specific entity types + + graph_id : typing.Optional[str] + Graph ID to get group-specific entity types + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -58,6 +68,10 @@ def list_entity_types( _response = self._client_wrapper.httpx_client.request( "entity-types", method="GET", + params={ + "user_id": user_id, + "graph_id": graph_id, + }, request_options=request_options, ) try: @@ -70,6 +84,17 @@ def list_entity_types( ), ) return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 404: raise NotFoundError( headers=dict(_response.headers), @@ -106,10 +131,12 @@ def set_entity_types_internal( *, edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_id: typing.Optional[str] = OMIT, + user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[SuccessResponse]: """ - Sets the entity types for a project, replacing any existing ones. + Sets the entity types for a project, user, or graph, replacing any existing ones. Parameters ---------- @@ -117,6 +144,10 @@ def set_entity_types_internal( entity_types : typing.Optional[typing.Sequence[EntityType]] + graph_id : typing.Optional[str] + + user_id : typing.Optional[str] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -135,6 +166,8 @@ def set_entity_types_internal( "entity_types": convert_and_respect_annotation_metadata( object_=entity_types, annotation=typing.Sequence[EntityType], direction="write" ), + "graph_id": graph_id, + "user_id": user_id, }, headers={ "content-type": "application/json", @@ -1138,13 +1171,23 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper async def list_entity_types( - self, *, request_options: typing.Optional[RequestOptions] = None + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[EntityTypeResponse]: """ - Returns all entity types for a project. + Returns all entity types for a project, user, or graph. Parameters ---------- + user_id : typing.Optional[str] + User ID to get user-specific entity types + + graph_id : typing.Optional[str] + Graph ID to get group-specific entity types + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1156,6 +1199,10 @@ async def list_entity_types( _response = await self._client_wrapper.httpx_client.request( "entity-types", method="GET", + params={ + "user_id": user_id, + "graph_id": graph_id, + }, request_options=request_options, ) try: @@ -1168,6 +1215,17 @@ async def list_entity_types( ), ) return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 404: raise NotFoundError( headers=dict(_response.headers), @@ -1204,10 +1262,12 @@ async def set_entity_types_internal( *, edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_id: typing.Optional[str] = OMIT, + user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[SuccessResponse]: """ - Sets the entity types for a project, replacing any existing ones. + Sets the entity types for a project, user, or graph, replacing any existing ones. Parameters ---------- @@ -1215,6 +1275,10 @@ async def set_entity_types_internal( entity_types : typing.Optional[typing.Sequence[EntityType]] + graph_id : typing.Optional[str] + + user_id : typing.Optional[str] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1233,6 +1297,8 @@ async def set_entity_types_internal( "entity_types": convert_and_respect_annotation_metadata( object_=entity_types, annotation=typing.Sequence[EntityType], direction="write" ), + "graph_id": graph_id, + "user_id": user_id, }, headers={ "content-type": "application/json", From 8cae63f9b376769901a6eaafe1002a32b4e67dfa Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 5 Aug 2025 19:10:13 -0400 Subject: [PATCH 06/74] chore: Add support for user/graph ontology targets --- src/zep_cloud/external_clients/graph.py | 52 ++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/zep_cloud/external_clients/graph.py b/src/zep_cloud/external_clients/graph.py index 3ed2d02..2354c08 100644 --- a/src/zep_cloud/external_clients/graph.py +++ b/src/zep_cloud/external_clients/graph.py @@ -32,6 +32,8 @@ def set_ontology( ], ] ] = None, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, ): """ @@ -40,8 +42,17 @@ def set_ontology( Parameters ---------- entities : dict[str, "EntityModel"] + Entity type definitions. edges : typing.Optional[dict[str, typing.Union["EdgeModel", typing.Tuple["EdgeModel", typing.List[EntityEdgeSourceTarget]]]]] + Edge type definitions. + + user_id : typing.Optional[str] + + The user ID for which to set the ontology. If None, sets for the entire project. + + graph_id : typing.Optional[str] + The graph ID for which to set the ontology. If None, sets for the entire project. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -102,6 +113,8 @@ class TravelingTo(EdgeModel): return self.set_entity_types( entities=entities, edges=edges, + user_id=user_id, + graph_id=graph_id, request_options=request_options, ) @@ -117,6 +130,8 @@ def set_entity_types( ], ] ] = None, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, ): """ @@ -128,6 +143,13 @@ def set_entity_types( edges : typing.Optional[dict[str, typing.Union["EdgeModel", typing.Tuple["EdgeModel", typing.List[EntityEdgeSourceTarget]]]]] + user_id : typing.Optional[str] + + The user ID for which to set the ontology. If None, sets for the entire project. + + graph_id : typing.Optional[str] + The graph ID for which to set the ontology. If None, sets for the entire project. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -207,6 +229,8 @@ class TravelingTo(EdgeModel): res = self.set_entity_types_internal( entity_types=api_entity_types, edge_types=api_edge_types, + user_id=user_id, + graph_id=graph_id, request_options=request_options, ) return res @@ -228,6 +252,8 @@ async def set_ontology( ], ] ] = None, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, ): """ @@ -236,8 +262,17 @@ async def set_ontology( Parameters ---------- entities : dict[str, "EntityModel"] + Entity type definitions. edges : typing.Optional[dict[str, typing.Union["EdgeModel", typing.Tuple["EdgeModel", typing.List[EntityEdgeSourceTarget]]]]] + Edge type definitions. + + user_id : typing.Optional[str] + + The user ID for which to set the ontology. If None, sets for the entire project. + + graph_id : typing.Optional[str] + The graph ID for which to set the ontology. If None, sets for the entire project. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -296,7 +331,11 @@ class TravelingTo(EdgeModel): ) """ return await self.set_entity_types( - entities=entities, edges=edges, request_options=request_options + entities=entities, + edges=edges, + request_options=request_options, + user_id=user_id, + graph_id=graph_id ) async def set_entity_types( @@ -311,6 +350,8 @@ async def set_entity_types( ], ] ] = None, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, ): """ @@ -322,6 +363,13 @@ async def set_entity_types( edges : typing.Optional[dict[str, typing.Union["EdgeModel", typing.Tuple["EdgeModel", typing.List[EntityEdgeSourceTarget]]]]] + user_id : typing.Optional[str] + + The user ID for which to set the ontology. If None, sets for the entire project. + + graph_id : typing.Optional[str] + The graph ID for which to set the ontology. If None, sets for the entire project. + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -402,6 +450,8 @@ class TravelingTo(EdgeModel): res = await self.set_entity_types_internal( entity_types=api_entity_types, edge_types=api_edge_types, + user_id=user_id, + graph_id=graph_id, request_options=request_options, ) return res From a905a3da5366c071020aeacead059df9e9fa57d4 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 23:11:48 +0000 Subject: [PATCH 07/74] SDK regeneration --- reference.md | 17 ++++++----- src/zep_cloud/graph/client.py | 50 +++++++++++++++++-------------- src/zep_cloud/graph/raw_client.py | 40 ++++++++++++------------- 3 files changed, 58 insertions(+), 49 deletions(-) diff --git a/reference.md b/reference.md index d52ba21..1c00566 100644 --- a/reference.md +++ b/reference.md @@ -56,7 +56,7 @@ client.graph.list_entity_types()
-**graph_id:** `typing.Optional[str]` — Graph ID to get group-specific entity types +**graph_id:** `typing.Optional[str]` — Graph ID to get graph-specific entity types
@@ -88,7 +88,7 @@ client.graph.list_entity_types()
-Sets the entity types for a project, user, or graph, replacing any existing ones. +Sets the entity types for multiple users and graphs, replacing any existing ones.
@@ -108,7 +108,10 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.set_entity_types_internal() +client.graph.set_entity_types_internal( + graph_ids=["graph_ids"], + user_ids=["user_ids"], +) ``` @@ -124,7 +127,7 @@ client.graph.set_entity_types_internal()
-**edge_types:** `typing.Optional[typing.Sequence[EdgeType]]` +**graph_ids:** `typing.Sequence[str]`
@@ -132,7 +135,7 @@ client.graph.set_entity_types_internal()
-**entity_types:** `typing.Optional[typing.Sequence[EntityType]]` +**user_ids:** `typing.Sequence[str]`
@@ -140,7 +143,7 @@ client.graph.set_entity_types_internal()
-**graph_id:** `typing.Optional[str]` +**edge_types:** `typing.Optional[typing.Sequence[EdgeType]]`
@@ -148,7 +151,7 @@ client.graph.set_entity_types_internal()
-**user_id:** `typing.Optional[str]` +**entity_types:** `typing.Optional[typing.Sequence[EntityType]]`
diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 29379aa..7e9e245 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -65,7 +65,7 @@ def list_entity_types( User ID to get user-specific entity types graph_id : typing.Optional[str] - Graph ID to get group-specific entity types + Graph ID to get graph-specific entity types request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -92,24 +92,24 @@ def list_entity_types( def set_entity_types_internal( self, *, + graph_ids: typing.Sequence[str], + user_ids: typing.Sequence[str], edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, - graph_id: typing.Optional[str] = OMIT, - user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ - Sets the entity types for a project, user, or graph, replacing any existing ones. + Sets the entity types for multiple users and graphs, replacing any existing ones. Parameters ---------- - edge_types : typing.Optional[typing.Sequence[EdgeType]] + graph_ids : typing.Sequence[str] - entity_types : typing.Optional[typing.Sequence[EntityType]] + user_ids : typing.Sequence[str] - graph_id : typing.Optional[str] + edge_types : typing.Optional[typing.Sequence[EdgeType]] - user_id : typing.Optional[str] + entity_types : typing.Optional[typing.Sequence[EntityType]] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -126,13 +126,16 @@ def set_entity_types_internal( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.set_entity_types_internal() + client.graph.set_entity_types_internal( + graph_ids=["graph_ids"], + user_ids=["user_ids"], + ) """ _response = self._raw_client.set_entity_types_internal( + graph_ids=graph_ids, + user_ids=user_ids, edge_types=edge_types, entity_types=entity_types, - graph_id=graph_id, - user_id=user_id, request_options=request_options, ) return _response.data @@ -743,7 +746,7 @@ async def list_entity_types( User ID to get user-specific entity types graph_id : typing.Optional[str] - Graph ID to get group-specific entity types + Graph ID to get graph-specific entity types request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -778,24 +781,24 @@ async def main() -> None: async def set_entity_types_internal( self, *, + graph_ids: typing.Sequence[str], + user_ids: typing.Sequence[str], edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, - graph_id: typing.Optional[str] = OMIT, - user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ - Sets the entity types for a project, user, or graph, replacing any existing ones. + Sets the entity types for multiple users and graphs, replacing any existing ones. Parameters ---------- - edge_types : typing.Optional[typing.Sequence[EdgeType]] + graph_ids : typing.Sequence[str] - entity_types : typing.Optional[typing.Sequence[EntityType]] + user_ids : typing.Sequence[str] - graph_id : typing.Optional[str] + edge_types : typing.Optional[typing.Sequence[EdgeType]] - user_id : typing.Optional[str] + entity_types : typing.Optional[typing.Sequence[EntityType]] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -817,16 +820,19 @@ async def set_entity_types_internal( async def main() -> None: - await client.graph.set_entity_types_internal() + await client.graph.set_entity_types_internal( + graph_ids=["graph_ids"], + user_ids=["user_ids"], + ) asyncio.run(main()) """ _response = await self._raw_client.set_entity_types_internal( + graph_ids=graph_ids, + user_ids=user_ids, edge_types=edge_types, entity_types=entity_types, - graph_id=graph_id, - user_id=user_id, request_options=request_options, ) return _response.data diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index c36640e..ad7650a 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -55,7 +55,7 @@ def list_entity_types( User ID to get user-specific entity types graph_id : typing.Optional[str] - Graph ID to get group-specific entity types + Graph ID to get graph-specific entity types request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -129,24 +129,24 @@ def list_entity_types( def set_entity_types_internal( self, *, + graph_ids: typing.Sequence[str], + user_ids: typing.Sequence[str], edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, - graph_id: typing.Optional[str] = OMIT, - user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[SuccessResponse]: """ - Sets the entity types for a project, user, or graph, replacing any existing ones. + Sets the entity types for multiple users and graphs, replacing any existing ones. Parameters ---------- - edge_types : typing.Optional[typing.Sequence[EdgeType]] + graph_ids : typing.Sequence[str] - entity_types : typing.Optional[typing.Sequence[EntityType]] + user_ids : typing.Sequence[str] - graph_id : typing.Optional[str] + edge_types : typing.Optional[typing.Sequence[EdgeType]] - user_id : typing.Optional[str] + entity_types : typing.Optional[typing.Sequence[EntityType]] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -166,8 +166,8 @@ def set_entity_types_internal( "entity_types": convert_and_respect_annotation_metadata( object_=entity_types, annotation=typing.Sequence[EntityType], direction="write" ), - "graph_id": graph_id, - "user_id": user_id, + "graph_ids": graph_ids, + "user_ids": user_ids, }, headers={ "content-type": "application/json", @@ -1186,7 +1186,7 @@ async def list_entity_types( User ID to get user-specific entity types graph_id : typing.Optional[str] - Graph ID to get group-specific entity types + Graph ID to get graph-specific entity types request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1260,24 +1260,24 @@ async def list_entity_types( async def set_entity_types_internal( self, *, + graph_ids: typing.Sequence[str], + user_ids: typing.Sequence[str], edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, - graph_id: typing.Optional[str] = OMIT, - user_id: typing.Optional[str] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[SuccessResponse]: """ - Sets the entity types for a project, user, or graph, replacing any existing ones. + Sets the entity types for multiple users and graphs, replacing any existing ones. Parameters ---------- - edge_types : typing.Optional[typing.Sequence[EdgeType]] + graph_ids : typing.Sequence[str] - entity_types : typing.Optional[typing.Sequence[EntityType]] + user_ids : typing.Sequence[str] - graph_id : typing.Optional[str] + edge_types : typing.Optional[typing.Sequence[EdgeType]] - user_id : typing.Optional[str] + entity_types : typing.Optional[typing.Sequence[EntityType]] request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1297,8 +1297,8 @@ async def set_entity_types_internal( "entity_types": convert_and_respect_annotation_metadata( object_=entity_types, annotation=typing.Sequence[EntityType], direction="write" ), - "graph_id": graph_id, - "user_id": user_id, + "graph_ids": graph_ids, + "user_ids": user_ids, }, headers={ "content-type": "application/json", From e6f2a200a0785053e79bee9fd52326c07e945c1f Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 5 Aug 2025 19:22:20 -0400 Subject: [PATCH 08/74] chore: Add support for setting entity/edges on a list of users/graphs --- src/zep_cloud/external_clients/graph.py | 64 ++++++++++++------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/zep_cloud/external_clients/graph.py b/src/zep_cloud/external_clients/graph.py index 2354c08..3c65065 100644 --- a/src/zep_cloud/external_clients/graph.py +++ b/src/zep_cloud/external_clients/graph.py @@ -32,8 +32,8 @@ def set_ontology( ], ] ] = None, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, + user_ids: typing.Optional[typing.List[str]] = None, + graph_ids: typing.Optional[typing.List[str]] = None, request_options: typing.Optional[RequestOptions] = None, ): """ @@ -47,12 +47,12 @@ def set_ontology( edges : typing.Optional[dict[str, typing.Union["EdgeModel", typing.Tuple["EdgeModel", typing.List[EntityEdgeSourceTarget]]]]] Edge type definitions. - user_id : typing.Optional[str] + user_ids : typing.Optional[typing.List[str]] - The user ID for which to set the ontology. If None, sets for the entire project. + The user identifiers for which to set the ontology. - graph_id : typing.Optional[str] - The graph ID for which to set the ontology. If None, sets for the entire project. + graph_ids : typing.Optional[typing.List[str]] + The graph identifiers for which to set the ontology. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -113,8 +113,8 @@ class TravelingTo(EdgeModel): return self.set_entity_types( entities=entities, edges=edges, - user_id=user_id, - graph_id=graph_id, + user_ids=user_ids, + graph_ids=graph_ids, request_options=request_options, ) @@ -130,8 +130,8 @@ def set_entity_types( ], ] ] = None, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, + user_ids: typing.Optional[typing.List[str]] = None, + graph_ids: typing.Optional[typing.List[str]] = None, request_options: typing.Optional[RequestOptions] = None, ): """ @@ -143,12 +143,12 @@ def set_entity_types( edges : typing.Optional[dict[str, typing.Union["EdgeModel", typing.Tuple["EdgeModel", typing.List[EntityEdgeSourceTarget]]]]] - user_id : typing.Optional[str] + user_ids : typing.Optional[typing.List[str]] - The user ID for which to set the ontology. If None, sets for the entire project. + The user identifiers for which to set the ontology. - graph_id : typing.Optional[str] - The graph ID for which to set the ontology. If None, sets for the entire project. + graph_ids : typing.Optional[typing.List[str]] + The graph identifiers for which to set the ontology. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -229,8 +229,8 @@ class TravelingTo(EdgeModel): res = self.set_entity_types_internal( entity_types=api_entity_types, edge_types=api_edge_types, - user_id=user_id, - graph_id=graph_id, + user_ids=user_ids, + graph_ids=graph_ids, request_options=request_options, ) return res @@ -252,8 +252,8 @@ async def set_ontology( ], ] ] = None, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, + user_ids: typing.Optional[typing.List[str]] = None, + graph_ids: typing.Optional[typing.List[str]] = None, request_options: typing.Optional[RequestOptions] = None, ): """ @@ -267,12 +267,12 @@ async def set_ontology( edges : typing.Optional[dict[str, typing.Union["EdgeModel", typing.Tuple["EdgeModel", typing.List[EntityEdgeSourceTarget]]]]] Edge type definitions. - user_id : typing.Optional[str] + user_ids : typing.Optional[typing.List[str]] - The user ID for which to set the ontology. If None, sets for the entire project. + The user identifiers for which to set the ontology. - graph_id : typing.Optional[str] - The graph ID for which to set the ontology. If None, sets for the entire project. + graph_ids : typing.Optional[typing.List[str]] + The graph identifiers for which to set the ontology. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -334,8 +334,8 @@ class TravelingTo(EdgeModel): entities=entities, edges=edges, request_options=request_options, - user_id=user_id, - graph_id=graph_id + user_ids=user_ids, + graph_ids=graph_ids ) async def set_entity_types( @@ -350,8 +350,8 @@ async def set_entity_types( ], ] ] = None, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, + user_ids: typing.Optional[typing.List[str]] = None, + graph_ids: typing.Optional[typing.List[str]] = None, request_options: typing.Optional[RequestOptions] = None, ): """ @@ -363,12 +363,12 @@ async def set_entity_types( edges : typing.Optional[dict[str, typing.Union["EdgeModel", typing.Tuple["EdgeModel", typing.List[EntityEdgeSourceTarget]]]]] - user_id : typing.Optional[str] + user_ids : typing.Optional[typing.List[str]] - The user ID for which to set the ontology. If None, sets for the entire project. + The user identifiers for which to set the ontology. - graph_id : typing.Optional[str] - The graph ID for which to set the ontology. If None, sets for the entire project. + graph_ids : typing.Optional[typing.List[str]] + The graph identifiers for which to set the ontology. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -450,8 +450,8 @@ class TravelingTo(EdgeModel): res = await self.set_entity_types_internal( entity_types=api_entity_types, edge_types=api_edge_types, - user_id=user_id, - graph_id=graph_id, + user_ids=user_ids, + graph_ids=graph_ids, request_options=request_options, ) return res From 86d6b3fdc0e85ce39fc768d0f54e73e3cad8b135 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 23:47:10 +0000 Subject: [PATCH 09/74] SDK regeneration --- reference.md | 13 ++++------ src/zep_cloud/graph/client.py | 42 +++++++++++++------------------ src/zep_cloud/graph/raw_client.py | 24 +++++++++--------- 3 files changed, 35 insertions(+), 44 deletions(-) diff --git a/reference.md b/reference.md index 1c00566..0581c56 100644 --- a/reference.md +++ b/reference.md @@ -108,10 +108,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.set_entity_types_internal( - graph_ids=["graph_ids"], - user_ids=["user_ids"], -) +client.graph.set_entity_types_internal() ``` @@ -127,7 +124,7 @@ client.graph.set_entity_types_internal(
-**graph_ids:** `typing.Sequence[str]` +**edge_types:** `typing.Optional[typing.Sequence[EdgeType]]`
@@ -135,7 +132,7 @@ client.graph.set_entity_types_internal(
-**user_ids:** `typing.Sequence[str]` +**entity_types:** `typing.Optional[typing.Sequence[EntityType]]`
@@ -143,7 +140,7 @@ client.graph.set_entity_types_internal(
-**edge_types:** `typing.Optional[typing.Sequence[EdgeType]]` +**graph_ids:** `typing.Optional[typing.Sequence[str]]`
@@ -151,7 +148,7 @@ client.graph.set_entity_types_internal(
-**entity_types:** `typing.Optional[typing.Sequence[EntityType]]` +**user_ids:** `typing.Optional[typing.Sequence[str]]`
diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 7e9e245..1efadea 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -92,10 +92,10 @@ def list_entity_types( def set_entity_types_internal( self, *, - graph_ids: typing.Sequence[str], - user_ids: typing.Sequence[str], edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ @@ -103,14 +103,14 @@ def set_entity_types_internal( Parameters ---------- - graph_ids : typing.Sequence[str] - - user_ids : typing.Sequence[str] - edge_types : typing.Optional[typing.Sequence[EdgeType]] entity_types : typing.Optional[typing.Sequence[EntityType]] + graph_ids : typing.Optional[typing.Sequence[str]] + + user_ids : typing.Optional[typing.Sequence[str]] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -126,16 +126,13 @@ def set_entity_types_internal( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.set_entity_types_internal( - graph_ids=["graph_ids"], - user_ids=["user_ids"], - ) + client.graph.set_entity_types_internal() """ _response = self._raw_client.set_entity_types_internal( - graph_ids=graph_ids, - user_ids=user_ids, edge_types=edge_types, entity_types=entity_types, + graph_ids=graph_ids, + user_ids=user_ids, request_options=request_options, ) return _response.data @@ -781,10 +778,10 @@ async def main() -> None: async def set_entity_types_internal( self, *, - graph_ids: typing.Sequence[str], - user_ids: typing.Sequence[str], edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ @@ -792,14 +789,14 @@ async def set_entity_types_internal( Parameters ---------- - graph_ids : typing.Sequence[str] - - user_ids : typing.Sequence[str] - edge_types : typing.Optional[typing.Sequence[EdgeType]] entity_types : typing.Optional[typing.Sequence[EntityType]] + graph_ids : typing.Optional[typing.Sequence[str]] + + user_ids : typing.Optional[typing.Sequence[str]] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -820,19 +817,16 @@ async def set_entity_types_internal( async def main() -> None: - await client.graph.set_entity_types_internal( - graph_ids=["graph_ids"], - user_ids=["user_ids"], - ) + await client.graph.set_entity_types_internal() asyncio.run(main()) """ _response = await self._raw_client.set_entity_types_internal( - graph_ids=graph_ids, - user_ids=user_ids, edge_types=edge_types, entity_types=entity_types, + graph_ids=graph_ids, + user_ids=user_ids, request_options=request_options, ) return _response.data diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index ad7650a..ec96556 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -129,10 +129,10 @@ def list_entity_types( def set_entity_types_internal( self, *, - graph_ids: typing.Sequence[str], - user_ids: typing.Sequence[str], edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[SuccessResponse]: """ @@ -140,14 +140,14 @@ def set_entity_types_internal( Parameters ---------- - graph_ids : typing.Sequence[str] - - user_ids : typing.Sequence[str] - edge_types : typing.Optional[typing.Sequence[EdgeType]] entity_types : typing.Optional[typing.Sequence[EntityType]] + graph_ids : typing.Optional[typing.Sequence[str]] + + user_ids : typing.Optional[typing.Sequence[str]] + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1260,10 +1260,10 @@ async def list_entity_types( async def set_entity_types_internal( self, *, - graph_ids: typing.Sequence[str], - user_ids: typing.Sequence[str], edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[SuccessResponse]: """ @@ -1271,14 +1271,14 @@ async def set_entity_types_internal( Parameters ---------- - graph_ids : typing.Sequence[str] - - user_ids : typing.Sequence[str] - edge_types : typing.Optional[typing.Sequence[EdgeType]] entity_types : typing.Optional[typing.Sequence[EntityType]] + graph_ids : typing.Optional[typing.Sequence[str]] + + user_ids : typing.Optional[typing.Sequence[str]] + request_options : typing.Optional[RequestOptions] Request-specific configuration. From 6792ca06de6e4c4c6c0a3c82a474351d92424820 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Fri, 8 Aug 2025 20:04:56 -0400 Subject: [PATCH 10/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3f931ad..d1cb396 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.1.0" +version = "3.2.0" description = "" readme = "README.md" authors = [] From 7ee9f5c1501cee3d57b8d1a0df7eb40325edaf50 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Sat, 9 Aug 2025 00:06:40 +0000 Subject: [PATCH 11/74] SDK regeneration --- reference.md | 10 +++++++++- src/zep_cloud/core/client_wrapper.py | 4 ++-- src/zep_cloud/graph/client.py | 4 ++-- src/zep_cloud/graph/raw_client.py | 4 ++-- src/zep_cloud/thread/client.py | 16 ++++++++++++++-- src/zep_cloud/thread/raw_client.py | 10 ++++++++++ 6 files changed, 39 insertions(+), 9 deletions(-) diff --git a/reference.md b/reference.md index 0581c56..f0342e3 100644 --- a/reference.md +++ b/reference.md @@ -752,7 +752,7 @@ client.graph.create(
-Returns all graphs. +List all graphs. In order to list users, use user.list_ordered instead
@@ -1610,6 +1610,14 @@ client.thread.get(
+**lastn:** `typing.Optional[int]` — Number of most recent messages to return (overrides limit and cursor) + +
+
+ +
+
+ **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 8bed933..7018fcf 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.1.0", + "User-Agent": "zep-cloud/3.2.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.1.0", + "X-Fern-SDK-Version": "3.2.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 1efadea..ae8e9ca 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -467,7 +467,7 @@ def list_all( request_options: typing.Optional[RequestOptions] = None, ) -> GraphListResponse: """ - Returns all graphs. + List all graphs. In order to list users, use user.list_ordered instead Parameters ---------- @@ -1201,7 +1201,7 @@ async def list_all( request_options: typing.Optional[RequestOptions] = None, ) -> GraphListResponse: """ - Returns all graphs. + List all graphs. In order to list users, use user.list_ordered instead Parameters ---------- diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index ec96556..22531bc 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -727,7 +727,7 @@ def list_all( request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[GraphListResponse]: """ - Returns all graphs. + List all graphs. In order to list users, use user.list_ordered instead Parameters ---------- @@ -1858,7 +1858,7 @@ async def list_all( request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[GraphListResponse]: """ - Returns all graphs. + List all graphs. In order to list users, use user.list_ordered instead Parameters ---------- diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index e25404a..9939e49 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -202,6 +202,7 @@ def get( *, limit: typing.Optional[int] = None, cursor: typing.Optional[int] = None, + lastn: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> MessageListResponse: """ @@ -218,6 +219,9 @@ def get( cursor : typing.Optional[int] Cursor for pagination + lastn : typing.Optional[int] + Number of most recent messages to return (overrides limit and cursor) + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -237,7 +241,9 @@ def get( thread_id="threadId", ) """ - _response = self._raw_client.get(thread_id, limit=limit, cursor=cursor, request_options=request_options) + _response = self._raw_client.get( + thread_id, limit=limit, cursor=cursor, lastn=lastn, request_options=request_options + ) return _response.data def add_messages( @@ -520,6 +526,7 @@ async def get( *, limit: typing.Optional[int] = None, cursor: typing.Optional[int] = None, + lastn: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> MessageListResponse: """ @@ -536,6 +543,9 @@ async def get( cursor : typing.Optional[int] Cursor for pagination + lastn : typing.Optional[int] + Number of most recent messages to return (overrides limit and cursor) + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -563,7 +573,9 @@ async def main() -> None: asyncio.run(main()) """ - _response = await self._raw_client.get(thread_id, limit=limit, cursor=cursor, request_options=request_options) + _response = await self._raw_client.get( + thread_id, limit=limit, cursor=cursor, lastn=lastn, request_options=request_options + ) return _response.data async def add_messages( diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index b6f9f04..64ebe24 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -345,6 +345,7 @@ def get( *, limit: typing.Optional[int] = None, cursor: typing.Optional[int] = None, + lastn: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[MessageListResponse]: """ @@ -361,6 +362,9 @@ def get( cursor : typing.Optional[int] Cursor for pagination + lastn : typing.Optional[int] + Number of most recent messages to return (overrides limit and cursor) + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -375,6 +379,7 @@ def get( params={ "limit": limit, "cursor": cursor, + "lastn": lastn, }, request_options=request_options, ) @@ -819,6 +824,7 @@ async def get( *, limit: typing.Optional[int] = None, cursor: typing.Optional[int] = None, + lastn: typing.Optional[int] = None, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[MessageListResponse]: """ @@ -835,6 +841,9 @@ async def get( cursor : typing.Optional[int] Cursor for pagination + lastn : typing.Optional[int] + Number of most recent messages to return (overrides limit and cursor) + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -849,6 +858,7 @@ async def get( params={ "limit": limit, "cursor": cursor, + "lastn": lastn, }, request_options=request_options, ) From f2a4c53bd48c905f4999c0fcf595e4e73f70a2a0 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Mon, 11 Aug 2025 21:53:11 -0400 Subject: [PATCH 12/74] feat: Update compose context string util to include episodes and display entity attributes --- .fernignore | 1 + src/zep_cloud/graph/utils.py | 89 ++++++++-- tests/graph/__init__.py | 0 tests/graph/test_utils.py | 329 +++++++++++++++++++++++++++++++++++ 4 files changed, 406 insertions(+), 13 deletions(-) create mode 100644 tests/graph/__init__.py create mode 100644 tests/graph/test_utils.py diff --git a/.fernignore b/.fernignore index 306a05b..ba9cbe2 100644 --- a/.fernignore +++ b/.fernignore @@ -2,6 +2,7 @@ src/zep_cloud/client.py src/zep_cloud/graph/utils.py src/zep_cloud/external_clients/ +tests/graph/ examples/ pyproject.toml poetry.lock diff --git a/src/zep_cloud/graph/utils.py b/src/zep_cloud/graph/utils.py index 208909a..33c95fc 100644 --- a/src/zep_cloud/graph/utils.py +++ b/src/zep_cloud/graph/utils.py @@ -1,24 +1,29 @@ from datetime import datetime from typing import List -from zep_cloud import EntityEdge, EntityNode +from zep_cloud import EntityEdge, EntityNode, Episode DATE_FORMAT = "%Y-%m-%d %H:%M:%S" TEMPLATE_STRING = """ -FACTS and ENTITIES represent relevant context to the current conversation. +FACTS and ENTITIES{episodes_header} represent relevant context to the current conversation. # These are the most relevant facts and their valid date ranges # format: FACT (Date range: from - to) -%s +{facts} # These are the most relevant entities -# ENTITY_NAME: entity summary +# Name: ENTITY_NAME +# Label: entity_label (if present) +# Attributes: (if present) +# attr_name: attr_value +# Summary: entity summary -%s +{entities} +{episodes_section} """ @@ -43,28 +48,86 @@ def format_edge_date_range(edge: EntityEdge) -> str: return f"{valid_at} - {invalid_at}" -def compose_context_string(edges: List[EntityEdge], nodes: List[EntityNode]) -> str: +def compose_context_string(edges: List[EntityEdge], nodes: List[EntityNode], episodes: List[Episode]) -> str: """ - Compose a search context from entity edges and nodes. + Compose a search context from entity edges, nodes, and episodes. Args: edges: List of entity edges. nodes: List of entity nodes. + episodes: List of episodes. Returns: - A formatted string containing facts and entities. + A formatted string containing facts, entities, and episodes. """ facts = [] for edge in edges: - fact = f" - {edge.fact} ({format_edge_date_range(edge)})" + fact = f" - {edge.fact} (Date range: {format_edge_date_range(edge)})" facts.append(fact) entities = [] for node in nodes: - entity = f" - {node.name}: {node.summary}" + entity_parts = [f"Name: {node.name}"] + + if hasattr(node, 'labels') and node.labels: + labels = list(node.labels) # Create a copy to avoid modifying original + if 'Entity' in labels: + labels.remove('Entity') + if labels: # Only add label if there are remaining labels after removing 'Entity' + entity_parts.append(f"Label: {labels[0]}") + + if hasattr(node, 'attributes') and node.attributes: + # Filter out 'labels' from attributes as it's redundant with the Label field + filtered_attributes = {k: v for k, v in node.attributes.items() if k != 'labels'} + if filtered_attributes: # Only add attributes section if there are non-label attributes + entity_parts.append("Attributes:") + for attr_name, attr_value in filtered_attributes.items(): + entity_parts.append(f" {attr_name}: {attr_value}") + + if node.summary: + entity_parts.append(f"Summary: {node.summary}") + + entity = "\n".join(entity_parts) entities.append(entity) - facts_str = "\n".join(facts) - entities_str = "\n".join(entities) + # Format episodes + episodes_list = [] + if episodes: + for episode in episodes: + role_prefix = "" + if hasattr(episode, 'role') and episode.role: + if hasattr(episode, 'role_type') and episode.role_type: + role_prefix = f"{episode.role} ({episode.role_type}): " + else: + role_prefix = f"{episode.role}: " + elif hasattr(episode, 'role_type') and episode.role_type: + role_prefix = f"({episode.role_type}): " + + # Format timestamp + episode_created_at = episode.created_at + if hasattr(episode, 'provided_created_at') and episode.provided_created_at: + episode_created_at = episode.provided_created_at + + # Parse timestamp if it's a string (ISO format) + if isinstance(episode_created_at, str): + timestamp = datetime.fromisoformat(episode_created_at.replace('Z', '+00:00')).strftime(DATE_FORMAT) + else: + timestamp = episode_created_at.strftime(DATE_FORMAT) + + episode_str = f" - {role_prefix}{episode.content} ({timestamp})" + episodes_list.append(episode_str) - return TEMPLATE_STRING % (facts_str, entities_str) \ No newline at end of file + facts_str = "\n".join(facts) if facts else "" + entities_str = "\n".join(entities) if entities else "" + episodes_str = "\n".join(episodes_list) if episodes_list else "" + + # Determine if episodes section should be included + episodes_header = ", and EPISODES" if episodes else "" + episodes_section = f"\n# These are the most relevant episodes\n\n{episodes_str}\n" if episodes else "" + + return TEMPLATE_STRING.format( + episodes_header=episodes_header, + facts=facts_str, + entities=entities_str, + episodes_section=episodes_section + ) \ No newline at end of file diff --git a/tests/graph/__init__.py b/tests/graph/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/graph/test_utils.py b/tests/graph/test_utils.py new file mode 100644 index 0000000..36c643b --- /dev/null +++ b/tests/graph/test_utils.py @@ -0,0 +1,329 @@ +from datetime import datetime +from typing import Any, Dict, Optional + +import pytest + +from zep_cloud import EntityEdge, EntityNode, Episode +from zep_cloud.graph.utils import compose_context_string, format_edge_date_range + + +class TestFormatEdgeDateRange: + def test_format_edge_date_range_with_valid_dates(self): + edge = EntityEdge( + fact="Test fact", + name="test_edge", + uuid_="edge-123", + created_at="2024-01-01T09:00:00Z", + source_node_uuid="source-123", + target_node_uuid="target-123", + valid_at="2024-01-01T10:00:00Z", + invalid_at="2024-01-02T10:00:00Z" + ) + result = format_edge_date_range(edge) + assert result == "2024-01-01 10:00:00 - 2024-01-02 10:00:00" + + def test_format_edge_date_range_with_none_dates(self): + edge = EntityEdge( + fact="Test fact", + name="test_edge", + uuid_="edge-123", + created_at="2024-01-01T09:00:00Z", + source_node_uuid="source-123", + target_node_uuid="target-123", + valid_at=None, + invalid_at=None + ) + result = format_edge_date_range(edge) + assert result == "date unknown - present" + + def test_format_edge_date_range_with_partial_dates(self): + edge = EntityEdge( + fact="Test fact", + name="test_edge", + uuid_="edge-123", + created_at="2024-01-01T09:00:00Z", + source_node_uuid="source-123", + target_node_uuid="target-123", + valid_at="2024-01-01T10:00:00Z", + invalid_at=None + ) + result = format_edge_date_range(edge) + assert result == "2024-01-01 10:00:00 - present" + + +class TestComposeContextString: + def test_empty_inputs(self): + result = compose_context_string([], [], []) + assert "FACTS and ENTITIES represent relevant context" in result + assert "" in result + assert "" in result + assert "EPISODES" not in result + + def test_facts_only(self): + edge = EntityEdge( + fact="User likes pizza", + name="likes", + uuid_="edge-123", + created_at="2024-01-01T09:00:00Z", + source_node_uuid="user-123", + target_node_uuid="pizza-123", + valid_at="2024-01-01T10:00:00Z", + invalid_at="2024-01-02T10:00:00Z" + ) + result = compose_context_string([edge], [], []) + + assert "User likes pizza (Date range: 2024-01-01 10:00:00 - 2024-01-02 10:00:00)" in result + assert "" in result + assert "" in result + assert "EPISODES" not in result + + def test_entities_basic(self): + node = EntityNode( + name="John", + summary="A user", + uuid_="node-123", + created_at="2024-01-01T09:00:00Z" + ) + result = compose_context_string([], [node], []) + + assert "Name: John" in result + assert "Summary: A user" in result + assert "" in result + + def test_entities_with_label_and_attributes(self): + node = EntityNode( + name="John", + summary="A user", + uuid_="node-123", + created_at="2024-01-01T09:00:00Z", + labels=["Person"], + attributes={"age": "30", "city": "New York"} + ) + result = compose_context_string([], [node], []) + + assert "Name: John" in result + assert "Label: Person" in result + assert "Attributes:" in result + assert "age: 30" in result + assert "city: New York" in result + assert "Summary: A user" in result + + def test_entities_with_entity_label_removed(self): + node = EntityNode( + name="Alice", + summary="A customer", + uuid_="node-456", + created_at="2024-01-01T09:00:00Z", + labels=["Entity", "Customer"] + ) + result = compose_context_string([], [node], []) + + assert "Name: Alice" in result + assert "Label: Customer" in result # Should show Customer, not Entity + assert "Label: Entity" not in result # Should not show Entity + assert "Summary: A customer" in result + + def test_entities_with_only_entity_label(self): + node = EntityNode( + name="Bob", + summary="A person", + uuid_="node-789", + created_at="2024-01-01T09:00:00Z", + labels=["Entity"] + ) + result = compose_context_string([], [node], []) + + assert "Name: Bob" in result + # Check that the entities section doesn't contain "Label: " (with space after colon) + entities_section = result[result.find(""):result.find("")] + assert "Label: " not in entities_section # Should not show any label since only Entity was present + assert "Summary: A person" in result + + def test_entities_with_labels_attribute_filtered(self): + node = EntityNode( + name="stores", + summary="Physical locations for shopping", + uuid_="node-123", + created_at="2024-01-01T09:00:00Z", + labels=["Location", "Entity"], + attributes={"labels": ["Location", "Entity"], "location_type": "physical"} + ) + result = compose_context_string([], [node], []) + + assert "Name: stores" in result + assert "Label: Location" in result # Should show Location (first non-Entity label) + assert "Attributes:" in result + assert "location_type: physical" in result + assert "labels:" not in result # Should not show labels in attributes + assert "Summary: Physical locations for shopping" in result + + def test_episodes_basic(self): + episode = Episode( + content="Hello there!", + created_at="2024-01-01T10:00:00Z", + uuid_="episode-123" + ) + result = compose_context_string([], [], [episode]) + + assert "FACTS and ENTITIES, and EPISODES represent" in result + assert "" in result + assert "Hello there! (2024-01-01 10:00:00)" in result + + def test_episodes_with_role(self): + episode = Episode( + content="Hello there!", + created_at="2024-01-01T10:00:00Z", + uuid_="episode-123", + role="user" + ) + result = compose_context_string([], [], [episode]) + + assert "user: Hello there! (2024-01-01 10:00:00)" in result + + def test_episodes_with_role_and_type(self): + # Create a mock episode with role_type since Episode model uses enum + class MockEpisode: + def __init__(self): + self.content = "Hello there!" + self.created_at = "2024-01-01T10:00:00Z" + self.role = "assistant" + self.role_type = "ai" + self.provided_created_at = None + + episode = MockEpisode() + result = compose_context_string([], [], [episode]) + + assert "assistant (ai): Hello there! (2024-01-01 10:00:00)" in result + + def test_episodes_with_role_type_only(self): + class MockEpisode: + def __init__(self): + self.content = "Hello there!" + self.created_at = "2024-01-01T10:00:00Z" + self.role = None + self.role_type = "system" + self.provided_created_at = None + + episode = MockEpisode() + result = compose_context_string([], [], [episode]) + + assert "(system): Hello there! (2024-01-01 10:00:00)" in result + + def test_episodes_with_provided_created_at(self): + class MockEpisode: + def __init__(self): + self.content = "Hello there!" + self.created_at = "2024-01-01T10:00:00Z" + self.role = "user" + self.role_type = None + self.provided_created_at = "2024-01-02T15:30:00Z" + + episode = MockEpisode() + result = compose_context_string([], [], [episode]) + + assert "user: Hello there! (2024-01-02 15:30:00)" in result + + def test_complete_context_with_all_elements(self): + edge = EntityEdge( + fact="User prefers coffee", + name="prefers", + uuid_="edge-123", + created_at="2024-01-01T07:00:00Z", + source_node_uuid="user-123", + target_node_uuid="coffee-123", + valid_at="2024-01-01T08:00:00Z", + invalid_at=None + ) + + node = EntityNode( + name="Alice", + summary="Regular customer", + uuid_="node-123", + created_at="2024-01-01T07:00:00Z", + labels=["Customer"], + attributes={"tier": "gold", "visits": "25"} + ) + + class MockEpisode: + def __init__(self): + self.content = "I'd like my usual coffee" + self.created_at = "2024-01-01T09:00:00Z" + self.role = "user" + self.role_type = "customer" + self.provided_created_at = None + + episode = MockEpisode() + + result = compose_context_string([edge], [node], [episode]) + + # Check for all sections + assert "FACTS and ENTITIES, and EPISODES represent" in result + assert "" in result + assert "" in result + assert "" in result + + # Check content + assert "User prefers coffee" in result + assert "Name: Alice" in result + assert "tier: gold" in result + assert "Summary: Regular customer" in result + assert "user (customer): I'd like my usual coffee" in result + + def test_multiple_items(self): + edges = [ + EntityEdge( + fact="Fact 1", + name="edge1", + uuid_="edge-1", + created_at="2024-01-01T09:00:00Z", + source_node_uuid="source-1", + target_node_uuid="target-1", + valid_at="2024-01-01T10:00:00Z" + ), + EntityEdge( + fact="Fact 2", + name="edge2", + uuid_="edge-2", + created_at="2024-01-02T09:00:00Z", + source_node_uuid="source-2", + target_node_uuid="target-2", + valid_at="2024-01-02T10:00:00Z" + ) + ] + + nodes = [ + EntityNode( + name="Node1", + summary="Summary 1", + uuid_="node-1", + created_at="2024-01-01T09:00:00Z" + ), + EntityNode( + name="Node2", + summary="Summary 2", + uuid_="node-2", + created_at="2024-01-01T09:00:00Z" + ) + ] + + episodes = [ + Episode( + content="Message 1", + created_at="2024-01-01T10:00:00Z", + uuid_="episode-1" + ), + Episode( + content="Message 2", + created_at="2024-01-01T11:00:00Z", + uuid_="episode-2" + ) + ] + + result = compose_context_string(edges, nodes, episodes) + + assert "Fact 1" in result + assert "Fact 2" in result + assert "Node1" in result + assert "Node2" in result + assert "Message 1" in result + assert "Message 2" in result \ No newline at end of file From d24c433be6c496af6cf0042da666211c89eb0b2d Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Mon, 11 Aug 2025 21:53:23 -0400 Subject: [PATCH 13/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d1cb396..f832a3d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.2.0" +version = "3.3.0" description = "" readme = "README.md" authors = [] From 32dd118e818d6289f234aeeb62654b820ad5426f Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Mon, 11 Aug 2025 22:11:15 -0400 Subject: [PATCH 14/74] fix: tests --- src/zep_cloud/graph/utils.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/zep_cloud/graph/utils.py b/src/zep_cloud/graph/utils.py index 33c95fc..d3d4d36 100644 --- a/src/zep_cloud/graph/utils.py +++ b/src/zep_cloud/graph/utils.py @@ -5,6 +5,17 @@ DATE_FORMAT = "%Y-%m-%d %H:%M:%S" + +def parse_iso_datetime(iso_string: str) -> datetime: + """Parse ISO datetime string, handling Z suffix for UTC.""" + try: + return datetime.fromisoformat(iso_string) + except ValueError: + # Handle Z suffix for Python 3.9 compatibility + if iso_string.endswith('Z'): + return datetime.fromisoformat(iso_string[:-1] + '+00:00') + raise + TEMPLATE_STRING = """ FACTS and ENTITIES{episodes_header} represent relevant context to the current conversation. @@ -41,9 +52,9 @@ def format_edge_date_range(edge: EntityEdge) -> str: invalid_at = "present" if edge.valid_at is not None: - valid_at = datetime.fromisoformat(edge.valid_at).strftime(DATE_FORMAT) + valid_at = parse_iso_datetime(edge.valid_at).strftime(DATE_FORMAT) if edge.invalid_at is not None: - invalid_at = datetime.fromisoformat(edge.invalid_at).strftime(DATE_FORMAT) + invalid_at = parse_iso_datetime(edge.invalid_at).strftime(DATE_FORMAT) return f"{valid_at} - {invalid_at}" @@ -110,7 +121,7 @@ def compose_context_string(edges: List[EntityEdge], nodes: List[EntityNode], epi # Parse timestamp if it's a string (ISO format) if isinstance(episode_created_at, str): - timestamp = datetime.fromisoformat(episode_created_at.replace('Z', '+00:00')).strftime(DATE_FORMAT) + timestamp = parse_iso_datetime(episode_created_at).strftime(DATE_FORMAT) else: timestamp = episode_created_at.strftime(DATE_FORMAT) From f41124ca3dacd5923ef3387b9ff03a3bb529c51e Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 12 Aug 2025 14:48:15 -0400 Subject: [PATCH 15/74] chore: Remove redundant timestamp conversion branch --- src/zep_cloud/graph/utils.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/zep_cloud/graph/utils.py b/src/zep_cloud/graph/utils.py index d3d4d36..7cb1a96 100644 --- a/src/zep_cloud/graph/utils.py +++ b/src/zep_cloud/graph/utils.py @@ -113,17 +113,8 @@ def compose_context_string(edges: List[EntityEdge], nodes: List[EntityNode], epi role_prefix = f"{episode.role}: " elif hasattr(episode, 'role_type') and episode.role_type: role_prefix = f"({episode.role_type}): " - - # Format timestamp - episode_created_at = episode.created_at - if hasattr(episode, 'provided_created_at') and episode.provided_created_at: - episode_created_at = episode.provided_created_at - - # Parse timestamp if it's a string (ISO format) - if isinstance(episode_created_at, str): - timestamp = parse_iso_datetime(episode_created_at).strftime(DATE_FORMAT) - else: - timestamp = episode_created_at.strftime(DATE_FORMAT) + + timestamp = parse_iso_datetime(episode.created_at).strftime(DATE_FORMAT) episode_str = f" - {role_prefix}{episode.content} ({timestamp})" episodes_list.append(episode_str) From c168aea3f28d9b16e77367fff4d6209c76ca2b7c Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 12 Aug 2025 23:50:06 +0000 Subject: [PATCH 16/74] SDK regeneration --- reference.md | 106 ++++++++++- src/zep_cloud/__init__.py | 2 + src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/graph/client.py | 8 +- src/zep_cloud/graph/raw_client.py | 8 +- src/zep_cloud/thread/client.py | 132 ++++++++++++++ src/zep_cloud/thread/raw_client.py | 164 ++++++++++++++++++ src/zep_cloud/types/__init__.py | 2 + .../types/add_thread_messages_request.py | 36 ++++ 9 files changed, 451 insertions(+), 11 deletions(-) create mode 100644 src/zep_cloud/types/add_thread_messages_request.py diff --git a/reference.md b/reference.md index f0342e3..b21fc50 100644 --- a/reference.md +++ b/reference.md @@ -752,7 +752,7 @@ client.graph.create(
-List all graphs. In order to list users, use user.list_ordered instead +Returns all graphs. In order to list users, use user.list_ordered instead
@@ -1730,6 +1730,110 @@ that are added to a user's graph.
+ +
+
+ +
client.thread.add_messages_batch(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Add messages to a thread in batch mode. This will process messages concurrently, which is useful for data migrations. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Message, Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.thread.add_messages_batch( + thread_id="threadId", + messages=[ + Message( + content="content", + role="norole", + ) + ], +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**thread_id:** `str` — The ID of the thread to which messages should be added. + +
+
+ +
+
+ +**messages:** `typing.Sequence[Message]` — A list of message objects, where each message contains a role and content. + +
+
+ +
+
+ +**ignore_roles:** `typing.Optional[typing.Sequence[RoleType]]` + +Optional list of role types to ignore when adding messages to graph memory. +The message itself will still be added, retained and used as context for messages +that are added to a user's graph. + +
+
+ +
+
+ +**return_context:** `typing.Optional[bool]` — Optionally return memory context relevant to the most recent messages. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 15009b6..7d5460e 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -3,6 +3,7 @@ # isort: skip_file from .types import ( + AddThreadMessagesRequest, AddThreadMessagesResponse, AddTripleResponse, ApiError, @@ -53,6 +54,7 @@ from .version import __version__ __all__ = [ + "AddThreadMessagesRequest", "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 7018fcf..fc89e02 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.2.0", + "User-Agent": "zep-cloud/3.4.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.2.0", + "X-Fern-SDK-Version": "3.4.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index ae8e9ca..47a3c0d 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -389,7 +389,7 @@ def clone( Returns ------- CloneGraphResponse - Response object containing group_id or user_id pointing to the new graph + Response object containing graph_id or user_id pointing to the new graph Examples -------- @@ -467,7 +467,7 @@ def list_all( request_options: typing.Optional[RequestOptions] = None, ) -> GraphListResponse: """ - List all graphs. In order to list users, use user.list_ordered instead + Returns all graphs. In order to list users, use user.list_ordered instead Parameters ---------- @@ -1107,7 +1107,7 @@ async def clone( Returns ------- CloneGraphResponse - Response object containing group_id or user_id pointing to the new graph + Response object containing graph_id or user_id pointing to the new graph Examples -------- @@ -1201,7 +1201,7 @@ async def list_all( request_options: typing.Optional[RequestOptions] = None, ) -> GraphListResponse: """ - List all graphs. In order to list users, use user.list_ordered instead + Returns all graphs. In order to list users, use user.list_ordered instead Parameters ---------- diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index 22531bc..f34a0fd 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -573,7 +573,7 @@ def clone( Returns ------- HttpResponse[CloneGraphResponse] - Response object containing group_id or user_id pointing to the new graph + Response object containing graph_id or user_id pointing to the new graph """ _response = self._client_wrapper.httpx_client.request( "graph/clone", @@ -727,7 +727,7 @@ def list_all( request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[GraphListResponse]: """ - List all graphs. In order to list users, use user.list_ordered instead + Returns all graphs. In order to list users, use user.list_ordered instead Parameters ---------- @@ -1704,7 +1704,7 @@ async def clone( Returns ------- AsyncHttpResponse[CloneGraphResponse] - Response object containing group_id or user_id pointing to the new graph + Response object containing graph_id or user_id pointing to the new graph """ _response = await self._client_wrapper.httpx_client.request( "graph/clone", @@ -1858,7 +1858,7 @@ async def list_all( request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[GraphListResponse]: """ - List all graphs. In order to list users, use user.list_ordered instead + Returns all graphs. In order to list users, use user.list_ordered instead Parameters ---------- diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index 9939e49..5cdb5c6 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -308,6 +308,68 @@ def add_messages( ) return _response.data + def add_messages_batch( + self, + thread_id: str, + *, + messages: typing.Sequence[Message], + ignore_roles: typing.Optional[typing.Sequence[RoleType]] = OMIT, + return_context: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AddThreadMessagesResponse: + """ + Add messages to a thread in batch mode. This will process messages concurrently, which is useful for data migrations. + + Parameters + ---------- + thread_id : str + The ID of the thread to which messages should be added. + + messages : typing.Sequence[Message] + A list of message objects, where each message contains a role and content. + + ignore_roles : typing.Optional[typing.Sequence[RoleType]] + Optional list of role types to ignore when adding messages to graph memory. + The message itself will still be added, retained and used as context for messages + that are added to a user's graph. + + return_context : typing.Optional[bool] + Optionally return memory context relevant to the most recent messages. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AddThreadMessagesResponse + An object, optionally containing user context retrieved for the last thread message + + Examples + -------- + from zep_cloud import Message, Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.thread.add_messages_batch( + thread_id="threadId", + messages=[ + Message( + content="content", + role="norole", + ) + ], + ) + """ + _response = self._raw_client.add_messages_batch( + thread_id, + messages=messages, + ignore_roles=ignore_roles, + return_context=return_context, + request_options=request_options, + ) + return _response.data + class AsyncThreadClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -647,3 +709,73 @@ async def main() -> None: request_options=request_options, ) return _response.data + + async def add_messages_batch( + self, + thread_id: str, + *, + messages: typing.Sequence[Message], + ignore_roles: typing.Optional[typing.Sequence[RoleType]] = OMIT, + return_context: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AddThreadMessagesResponse: + """ + Add messages to a thread in batch mode. This will process messages concurrently, which is useful for data migrations. + + Parameters + ---------- + thread_id : str + The ID of the thread to which messages should be added. + + messages : typing.Sequence[Message] + A list of message objects, where each message contains a role and content. + + ignore_roles : typing.Optional[typing.Sequence[RoleType]] + Optional list of role types to ignore when adding messages to graph memory. + The message itself will still be added, retained and used as context for messages + that are added to a user's graph. + + return_context : typing.Optional[bool] + Optionally return memory context relevant to the most recent messages. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AddThreadMessagesResponse + An object, optionally containing user context retrieved for the last thread message + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep, Message + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.thread.add_messages_batch( + thread_id="threadId", + messages=[ + Message( + content="content", + role="norole", + ) + ], + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.add_messages_batch( + thread_id, + messages=messages, + ignore_roles=ignore_roles, + return_context=return_context, + request_options=request_options, + ) + return _response.data diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index 64ebe24..60cede3 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -506,6 +506,88 @@ def add_messages( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def add_messages_batch( + self, + thread_id: str, + *, + messages: typing.Sequence[Message], + ignore_roles: typing.Optional[typing.Sequence[RoleType]] = OMIT, + return_context: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[AddThreadMessagesResponse]: + """ + Add messages to a thread in batch mode. This will process messages concurrently, which is useful for data migrations. + + Parameters + ---------- + thread_id : str + The ID of the thread to which messages should be added. + + messages : typing.Sequence[Message] + A list of message objects, where each message contains a role and content. + + ignore_roles : typing.Optional[typing.Sequence[RoleType]] + Optional list of role types to ignore when adding messages to graph memory. + The message itself will still be added, retained and used as context for messages + that are added to a user's graph. + + return_context : typing.Optional[bool] + Optionally return memory context relevant to the most recent messages. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[AddThreadMessagesResponse] + An object, optionally containing user context retrieved for the last thread message + """ + _response = self._client_wrapper.httpx_client.request( + f"threads/{jsonable_encoder(thread_id)}/messages-batch", + method="POST", + json={ + "ignore_roles": ignore_roles, + "messages": convert_and_respect_annotation_metadata( + object_=messages, annotation=typing.Sequence[Message], direction="write" + ), + "return_context": return_context, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + AddThreadMessagesResponse, + parse_obj_as( + type_=AddThreadMessagesResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + 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 AsyncRawThreadClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -984,3 +1066,85 @@ async def add_messages( raise core_api_error_ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + + async def add_messages_batch( + self, + thread_id: str, + *, + messages: typing.Sequence[Message], + ignore_roles: typing.Optional[typing.Sequence[RoleType]] = OMIT, + return_context: typing.Optional[bool] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[AddThreadMessagesResponse]: + """ + Add messages to a thread in batch mode. This will process messages concurrently, which is useful for data migrations. + + Parameters + ---------- + thread_id : str + The ID of the thread to which messages should be added. + + messages : typing.Sequence[Message] + A list of message objects, where each message contains a role and content. + + ignore_roles : typing.Optional[typing.Sequence[RoleType]] + Optional list of role types to ignore when adding messages to graph memory. + The message itself will still be added, retained and used as context for messages + that are added to a user's graph. + + return_context : typing.Optional[bool] + Optionally return memory context relevant to the most recent messages. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[AddThreadMessagesResponse] + An object, optionally containing user context retrieved for the last thread message + """ + _response = await self._client_wrapper.httpx_client.request( + f"threads/{jsonable_encoder(thread_id)}/messages-batch", + method="POST", + json={ + "ignore_roles": ignore_roles, + "messages": convert_and_respect_annotation_metadata( + object_=messages, annotation=typing.Sequence[Message], direction="write" + ), + "return_context": return_context, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + AddThreadMessagesResponse, + parse_obj_as( + type_=AddThreadMessagesResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + 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 + ) diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index b34e60e..5118dc8 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -2,6 +2,7 @@ # isort: skip_file +from .add_thread_messages_request import AddThreadMessagesRequest from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError @@ -45,6 +46,7 @@ from .user_node_response import UserNodeResponse __all__ = [ + "AddThreadMessagesRequest", "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", diff --git a/src/zep_cloud/types/add_thread_messages_request.py b/src/zep_cloud/types/add_thread_messages_request.py new file mode 100644 index 0000000..e20f1d1c --- /dev/null +++ b/src/zep_cloud/types/add_thread_messages_request.py @@ -0,0 +1,36 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .message import Message +from .role_type import RoleType + + +class AddThreadMessagesRequest(UniversalBaseModel): + ignore_roles: typing.Optional[typing.List[RoleType]] = pydantic.Field(default=None) + """ + Optional list of role types to ignore when adding messages to graph memory. + The message itself will still be added, retained and used as context for messages + that are added to a user's graph. + """ + + messages: typing.List[Message] = pydantic.Field() + """ + A list of message objects, where each message contains a role and content. + """ + + return_context: typing.Optional[bool] = pydantic.Field(default=None) + """ + Optionally return memory context relevant to the most recent messages. + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow From 93cfb7c73547712c55993af419000ad9854a214f Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 12 Aug 2025 19:50:23 -0400 Subject: [PATCH 17/74] chore: Version bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f832a3d..97a89ce 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.3.0" +version = "3.4.0" description = "" readme = "README.md" authors = [] From 8b333668f48df5098db96975e8e6f9e962b44083 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 14 Aug 2025 22:57:01 +0000 Subject: [PATCH 18/74] SDK regeneration --- src/zep_cloud/types/add_thread_messages_response.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/zep_cloud/types/add_thread_messages_response.py b/src/zep_cloud/types/add_thread_messages_response.py index 4ccdf29..41b725e 100644 --- a/src/zep_cloud/types/add_thread_messages_response.py +++ b/src/zep_cloud/types/add_thread_messages_response.py @@ -4,10 +4,12 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .message import Message class AddThreadMessagesResponse(UniversalBaseModel): context: typing.Optional[str] = None + messages: typing.Optional[typing.List[Message]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 From 7be10f2841dea5d188b9584ff3ebec0126548b75 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 14 Aug 2025 23:13:13 +0000 Subject: [PATCH 19/74] SDK regeneration --- src/zep_cloud/types/add_thread_messages_response.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/zep_cloud/types/add_thread_messages_response.py b/src/zep_cloud/types/add_thread_messages_response.py index 41b725e..0bef2a8 100644 --- a/src/zep_cloud/types/add_thread_messages_response.py +++ b/src/zep_cloud/types/add_thread_messages_response.py @@ -4,12 +4,11 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .message import Message class AddThreadMessagesResponse(UniversalBaseModel): context: typing.Optional[str] = None - messages: typing.Optional[typing.List[Message]] = None + message_uuids: typing.Optional[typing.List[str]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 From 4aee67c9ad86280c3813c3d8c6c6eff330289fd4 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Thu, 14 Aug 2025 20:15:10 -0400 Subject: [PATCH 20/74] fix: tests --- tests/graph/test_utils.py | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/tests/graph/test_utils.py b/tests/graph/test_utils.py index 36c643b..7ed919c 100644 --- a/tests/graph/test_utils.py +++ b/tests/graph/test_utils.py @@ -188,7 +188,6 @@ def __init__(self): self.created_at = "2024-01-01T10:00:00Z" self.role = "assistant" self.role_type = "ai" - self.provided_created_at = None episode = MockEpisode() result = compose_context_string([], [], [episode]) @@ -202,26 +201,12 @@ def __init__(self): self.created_at = "2024-01-01T10:00:00Z" self.role = None self.role_type = "system" - self.provided_created_at = None episode = MockEpisode() result = compose_context_string([], [], [episode]) assert "(system): Hello there! (2024-01-01 10:00:00)" in result - def test_episodes_with_provided_created_at(self): - class MockEpisode: - def __init__(self): - self.content = "Hello there!" - self.created_at = "2024-01-01T10:00:00Z" - self.role = "user" - self.role_type = None - self.provided_created_at = "2024-01-02T15:30:00Z" - - episode = MockEpisode() - result = compose_context_string([], [], [episode]) - - assert "user: Hello there! (2024-01-02 15:30:00)" in result def test_complete_context_with_all_elements(self): edge = EntityEdge( @@ -250,7 +235,6 @@ def __init__(self): self.created_at = "2024-01-01T09:00:00Z" self.role = "user" self.role_type = "customer" - self.provided_created_at = None episode = MockEpisode() From 6604932189de146a8af79be81f4ba0dafa19c9ad Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Fri, 15 Aug 2025 22:56:39 -0400 Subject: [PATCH 21/74] chore: Version bump --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 97a89ce..8f80572 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.4.0" +version = "3.4.1" description = "" readme = "README.md" authors = [] From 6f795329109e76916247292c3e93682a06584f1a Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Sat, 16 Aug 2025 02:59:08 +0000 Subject: [PATCH 22/74] SDK regeneration --- reference.md | 8 ++++---- src/zep_cloud/core/client_wrapper.py | 4 ++-- src/zep_cloud/thread/client.py | 16 ++++++++-------- src/zep_cloud/thread/raw_client.py | 16 ++++++++-------- .../types/add_thread_messages_request.py | 2 +- src/zep_cloud/types/thread_context_response.py | 2 +- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/reference.md b/reference.md index b21fc50..6c3fd90 100644 --- a/reference.md +++ b/reference.md @@ -1462,7 +1462,7 @@ client.thread.delete(
-Returns most relevant context for a given thread. +Returns most relevant context from the user graph (including memory from any/all past threads) based on the content of the past few messages of the given thread.
@@ -1500,7 +1500,7 @@ client.thread.get_user_context(
-**thread_id:** `str` — The ID of the thread for which to retrieve context. +**thread_id:** `str` — The ID of the current thread (for which context is being retrieved).
@@ -1714,7 +1714,7 @@ that are added to a user's graph.
-**return_context:** `typing.Optional[bool]` — Optionally return memory context relevant to the most recent messages. +**return_context:** `typing.Optional[bool]` — Optionally return context block relevant to the most recent messages.
@@ -1818,7 +1818,7 @@ that are added to a user's graph.
-**return_context:** `typing.Optional[bool]` — Optionally return memory context relevant to the most recent messages. +**return_context:** `typing.Optional[bool]` — Optionally return context block relevant to the most recent messages.
diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index fc89e02..467b6dd 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.0", + "User-Agent": "zep-cloud/3.4.1", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.4.0", + "X-Fern-SDK-Version": "3.4.1", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index 5cdb5c6..07cf67f 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -159,12 +159,12 @@ def get_user_context( request_options: typing.Optional[RequestOptions] = None, ) -> ThreadContextResponse: """ - Returns most relevant context for a given thread. + Returns most relevant context from the user graph (including memory from any/all past threads) based on the content of the past few messages of the given thread. Parameters ---------- thread_id : str - The ID of the thread for which to retrieve context. + The ID of the current thread (for which context is being retrieved). min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. @@ -272,7 +272,7 @@ def add_messages( that are added to a user's graph. return_context : typing.Optional[bool] - Optionally return memory context relevant to the most recent messages. + Optionally return context block relevant to the most recent messages. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -334,7 +334,7 @@ def add_messages_batch( that are added to a user's graph. return_context : typing.Optional[bool] - Optionally return memory context relevant to the most recent messages. + Optionally return context block relevant to the most recent messages. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -537,12 +537,12 @@ async def get_user_context( request_options: typing.Optional[RequestOptions] = None, ) -> ThreadContextResponse: """ - Returns most relevant context for a given thread. + Returns most relevant context from the user graph (including memory from any/all past threads) based on the content of the past few messages of the given thread. Parameters ---------- thread_id : str - The ID of the thread for which to retrieve context. + The ID of the current thread (for which context is being retrieved). min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. @@ -666,7 +666,7 @@ async def add_messages( that are added to a user's graph. return_context : typing.Optional[bool] - Optionally return memory context relevant to the most recent messages. + Optionally return context block relevant to the most recent messages. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -736,7 +736,7 @@ async def add_messages_batch( that are added to a user's graph. return_context : typing.Optional[bool] - Optionally return memory context relevant to the most recent messages. + Optionally return context block relevant to the most recent messages. request_options : typing.Optional[RequestOptions] Request-specific configuration. diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index 60cede3..14390e8 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -268,12 +268,12 @@ def get_user_context( request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[ThreadContextResponse]: """ - Returns most relevant context for a given thread. + Returns most relevant context from the user graph (including memory from any/all past threads) based on the content of the past few messages of the given thread. Parameters ---------- thread_id : str - The ID of the thread for which to retrieve context. + The ID of the current thread (for which context is being retrieved). min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. @@ -450,7 +450,7 @@ def add_messages( that are added to a user's graph. return_context : typing.Optional[bool] - Optionally return memory context relevant to the most recent messages. + Optionally return context block relevant to the most recent messages. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -532,7 +532,7 @@ def add_messages_batch( that are added to a user's graph. return_context : typing.Optional[bool] - Optionally return memory context relevant to the most recent messages. + Optionally return context block relevant to the most recent messages. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -829,12 +829,12 @@ async def get_user_context( request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[ThreadContextResponse]: """ - Returns most relevant context for a given thread. + Returns most relevant context from the user graph (including memory from any/all past threads) based on the content of the past few messages of the given thread. Parameters ---------- thread_id : str - The ID of the thread for which to retrieve context. + The ID of the current thread (for which context is being retrieved). min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. @@ -1011,7 +1011,7 @@ async def add_messages( that are added to a user's graph. return_context : typing.Optional[bool] - Optionally return memory context relevant to the most recent messages. + Optionally return context block relevant to the most recent messages. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1093,7 +1093,7 @@ async def add_messages_batch( that are added to a user's graph. return_context : typing.Optional[bool] - Optionally return memory context relevant to the most recent messages. + Optionally return context block relevant to the most recent messages. request_options : typing.Optional[RequestOptions] Request-specific configuration. diff --git a/src/zep_cloud/types/add_thread_messages_request.py b/src/zep_cloud/types/add_thread_messages_request.py index e20f1d1c..dadaf65 100644 --- a/src/zep_cloud/types/add_thread_messages_request.py +++ b/src/zep_cloud/types/add_thread_messages_request.py @@ -23,7 +23,7 @@ class AddThreadMessagesRequest(UniversalBaseModel): return_context: typing.Optional[bool] = pydantic.Field(default=None) """ - Optionally return memory context relevant to the most recent messages. + Optionally return context block relevant to the most recent messages. """ if IS_PYDANTIC_V2: diff --git a/src/zep_cloud/types/thread_context_response.py b/src/zep_cloud/types/thread_context_response.py index d0352af..f6cc4d9 100644 --- a/src/zep_cloud/types/thread_context_response.py +++ b/src/zep_cloud/types/thread_context_response.py @@ -9,7 +9,7 @@ class ThreadContextResponse(UniversalBaseModel): context: typing.Optional[str] = pydantic.Field(default=None) """ - Memory context containing relevant facts and entities for the session. Can be put into the prompt directly. + Context block containing relevant facts, entities, and messages/episodes from the user graph. Meant to be replaced in the system prompt on every chat turn. """ if IS_PYDANTIC_V2: From c395f571992750fb67d81e84a86cc5c2ad815bc5 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 26 Aug 2025 23:21:08 -0400 Subject: [PATCH 23/74] chore: Simplify date parsing in string composition utility --- pyproject.toml | 2 +- src/zep_cloud/graph/utils.py | 30 ++++++++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8f80572..a1190cf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.4.1" +version = "3.4.2" description = "" readme = "README.md" authors = [] diff --git a/src/zep_cloud/graph/utils.py b/src/zep_cloud/graph/utils.py index 7cb1a96..384a878 100644 --- a/src/zep_cloud/graph/utils.py +++ b/src/zep_cloud/graph/utils.py @@ -1,20 +1,21 @@ from datetime import datetime -from typing import List +from typing import List, Optional +from dateutil import parser as dateutil_parser from zep_cloud import EntityEdge, EntityNode, Episode DATE_FORMAT = "%Y-%m-%d %H:%M:%S" -def parse_iso_datetime(iso_string: str) -> datetime: - """Parse ISO datetime string, handling Z suffix for UTC.""" +def parse_iso_datetime(iso_string: str) -> Optional[datetime]: + """Parse ISO datetime string using dateutil parser.""" + if not iso_string: + return None + try: - return datetime.fromisoformat(iso_string) - except ValueError: - # Handle Z suffix for Python 3.9 compatibility - if iso_string.endswith('Z'): - return datetime.fromisoformat(iso_string[:-1] + '+00:00') - raise + return dateutil_parser.isoparse(iso_string) + except (ValueError, TypeError): + return None TEMPLATE_STRING = """ FACTS and ENTITIES{episodes_header} represent relevant context to the current conversation. @@ -52,9 +53,13 @@ def format_edge_date_range(edge: EntityEdge) -> str: invalid_at = "present" if edge.valid_at is not None: - valid_at = parse_iso_datetime(edge.valid_at).strftime(DATE_FORMAT) + parsed_valid_at = parse_iso_datetime(edge.valid_at) + if parsed_valid_at is not None: + valid_at = parsed_valid_at.strftime(DATE_FORMAT) if edge.invalid_at is not None: - invalid_at = parse_iso_datetime(edge.invalid_at).strftime(DATE_FORMAT) + parsed_invalid_at = parse_iso_datetime(edge.invalid_at) + if parsed_invalid_at is not None: + invalid_at = parsed_invalid_at.strftime(DATE_FORMAT) return f"{valid_at} - {invalid_at}" @@ -114,7 +119,8 @@ def compose_context_string(edges: List[EntityEdge], nodes: List[EntityNode], epi elif hasattr(episode, 'role_type') and episode.role_type: role_prefix = f"({episode.role_type}): " - timestamp = parse_iso_datetime(episode.created_at).strftime(DATE_FORMAT) + parsed_timestamp = parse_iso_datetime(episode.created_at) + timestamp = parsed_timestamp.strftime(DATE_FORMAT) if parsed_timestamp is not None else "date unknown" episode_str = f" - {role_prefix}{episode.content} ({timestamp})" episodes_list.append(episode_str) From 2493c800ce3f0373e46bdb3edfdbe5a4f9c69d89 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 26 Aug 2025 23:39:24 -0400 Subject: [PATCH 24/74] chore: Add python date util dep --- poetry.lock | 8 ++++---- pyproject.toml | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index fe47347..7c0df89 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -2180,7 +2180,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -2550,7 +2550,7 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -3069,4 +3069,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9.0,<4.0" -content-hash = "a18a220eb802180f7b16192d094be45f68c9d6f8b3ef01b3eed61a623f552f88" +content-hash = "1162a281f5781c88d119450ecf074169ddd3e350b5dee1e1a26fa8975d197043" diff --git a/pyproject.toml b/pyproject.toml index a1190cf..a21275c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.4.2" +version = "3.4.3" description = "" readme = "README.md" authors = [] @@ -38,6 +38,7 @@ pydantic = ">= 1.9.2" pydantic-core = ">=2.18.2" typing_extensions = ">= 4.0.0" openai = "^1.9.0" +python-dateutil = "^2.9.0" [tool.poetry.group.dev.dependencies] mypy = "==1.13.0" From 410b86222823dd0d4067c6c9d5adc97af2c8294f Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Fri, 3 Oct 2025 11:41:42 -0400 Subject: [PATCH 25/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 = [] From abfdca1669afb40ad51612e69afb9295a7cabd18 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 15:52:50 +0000 Subject: [PATCH 26/74] SDK regeneration --- reference.md | 70 +++++++++++++++ src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/user/client.py | 74 +++++++++++++++ src/zep_cloud/user/raw_client.py | 130 +++++++++++++++++++++++++++ 4 files changed, 276 insertions(+), 2 deletions(-) diff --git a/reference.md b/reference.md index 6c3fd90..9b43be9 100644 --- a/reference.md +++ b/reference.md @@ -2411,6 +2411,76 @@ client.user.get_threads( + + +
+ +
client.user.warm_user_cache(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.user.warm_user_cache( + 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..5c07536 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -325,6 +325,39 @@ def get_threads( _response = self._raw_client.get_threads(user_id, request_options=request_options) return _response.data + def warm_user_cache( + self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> SuccessResponse: + """ + Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search + + Parameters + ---------- + user_id : str + User ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Cache warm hint accepted + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.user.warm_user_cache( + user_id="userId", + ) + """ + _response = self._raw_client.warm_user_cache(user_id, request_options=request_options) + return _response.data + class AsyncUserClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -692,3 +725,44 @@ async def main() -> None: """ _response = await self._raw_client.get_threads(user_id, request_options=request_options) return _response.data + + async def warm_user_cache( + self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> SuccessResponse: + """ + Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search + + Parameters + ---------- + user_id : str + User ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Cache 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_cache( + user_id="userId", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.warm_user_cache(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..5c0ac7d 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_user_cache( + self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[SuccessResponse]: + """ + Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search + + Parameters + ---------- + user_id : str + User ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Cache 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_user_cache( + self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search + + Parameters + ---------- + user_id : str + User ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Cache 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 + ) From fae9dec0e5cf0afd5da7dd3ebc3c2807a69bed96 Mon Sep 17 00:00:00 2001 From: fern-api <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 3 Oct 2025 16:06:02 +0000 Subject: [PATCH 27/74] SDK regeneration --- reference.md | 6 +++--- src/zep_cloud/user/client.py | 24 ++++++++++-------------- src/zep_cloud/user/raw_client.py | 12 ++++++------ 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/reference.md b/reference.md index 9b43be9..e5ea89f 100644 --- a/reference.md +++ b/reference.md @@ -2415,7 +2415,7 @@ client.user.get_threads(
-
client.user.warm_user_cache(...) +
client.user.warm(...)
@@ -2427,7 +2427,7 @@ client.user.get_threads(
-Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search +Hints Zep to warm a user's graph for low-latency search
@@ -2447,7 +2447,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.user.warm_user_cache( +client.user.warm( user_id="userId", ) diff --git a/src/zep_cloud/user/client.py b/src/zep_cloud/user/client.py index 5c07536..fccf15c 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -325,11 +325,9 @@ def get_threads( _response = self._raw_client.get_threads(user_id, request_options=request_options) return _response.data - def warm_user_cache( - self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> SuccessResponse: + def warm(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse: """ - Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search + Hints Zep to warm a user's graph for low-latency search Parameters ---------- @@ -342,7 +340,7 @@ def warm_user_cache( Returns ------- SuccessResponse - Cache warm hint accepted + Warm hint accepted Examples -------- @@ -351,11 +349,11 @@ def warm_user_cache( client = Zep( api_key="YOUR_API_KEY", ) - client.user.warm_user_cache( + client.user.warm( user_id="userId", ) """ - _response = self._raw_client.warm_user_cache(user_id, request_options=request_options) + _response = self._raw_client.warm(user_id, request_options=request_options) return _response.data @@ -726,11 +724,9 @@ async def main() -> None: _response = await self._raw_client.get_threads(user_id, request_options=request_options) return _response.data - async def warm_user_cache( - self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> SuccessResponse: + async def warm(self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse: """ - Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search + Hints Zep to warm a user's graph for low-latency search Parameters ---------- @@ -743,7 +739,7 @@ async def warm_user_cache( Returns ------- SuccessResponse - Cache warm hint accepted + Warm hint accepted Examples -------- @@ -757,12 +753,12 @@ async def warm_user_cache( async def main() -> None: - await client.user.warm_user_cache( + await client.user.warm( user_id="userId", ) asyncio.run(main()) """ - _response = await self._raw_client.warm_user_cache(user_id, request_options=request_options) + _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 5c0ac7d..5d93f8c 100644 --- a/src/zep_cloud/user/raw_client.py +++ b/src/zep_cloud/user/raw_client.py @@ -566,11 +566,11 @@ def get_threads( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def warm_user_cache( + def warm( self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[SuccessResponse]: """ - Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search + Hints Zep to warm a user's graph for low-latency search Parameters ---------- @@ -583,7 +583,7 @@ def warm_user_cache( Returns ------- HttpResponse[SuccessResponse] - Cache warm hint accepted + Warm hint accepted """ _response = self._client_wrapper.httpx_client.request( f"users/{jsonable_encoder(user_id)}/warm", @@ -1175,11 +1175,11 @@ async def get_threads( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def warm_user_cache( + async def warm( self, user_id: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[SuccessResponse]: """ - Hints TurboPuffer to warm cache for this user's graph namespaces for low-latency search + Hints Zep to warm a user's graph for low-latency search Parameters ---------- @@ -1192,7 +1192,7 @@ async def warm_user_cache( Returns ------- AsyncHttpResponse[SuccessResponse] - Cache warm hint accepted + Warm hint accepted """ _response = await self._client_wrapper.httpx_client.request( f"users/{jsonable_encoder(user_id)}/warm", From 45cc7f60a6a932588b197c332252fa08ac9e8b31 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Mon, 20 Oct 2025 11:43:09 -0400 Subject: [PATCH 28/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ba752b6..cf2ba63 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.5.0" +version = "3.6.0" description = "" readme = "README.md" authors = [] From 03bd3edd056fea0fc834d22c1730384f6b72df40 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 15:44:50 +0000 Subject: [PATCH 29/74] SDK regeneration --- src/zep_cloud/core/client_wrapper.py | 4 ++-- src/zep_cloud/types/entity_edge.py | 12 +++++++++++- src/zep_cloud/types/entity_node.py | 12 +++++++++++- src/zep_cloud/types/episode.py | 12 +++++++++++- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 1b98dc4..3175a89 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.5.0", + "User-Agent": "zep-cloud/3.6.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.5.0", + "X-Fern-SDK-Version": "3.6.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/types/entity_edge.py b/src/zep_cloud/types/entity_edge.py index 8c78d85..a1c7d48 100644 --- a/src/zep_cloud/types/entity_edge.py +++ b/src/zep_cloud/types/entity_edge.py @@ -44,7 +44,17 @@ class EntityEdge(UniversalBaseModel): Name of the edge, relation name """ - score: typing.Optional[float] = None + relevance: typing.Optional[float] = pydantic.Field(default=None) + """ + Relevance is an experimental rank-aligned score in [0,1] derived from Score via logit transformation. + Only populated when using cross_encoder reranker; omitted for other reranker types (e.g., RRF). + """ + + score: typing.Optional[float] = pydantic.Field(default=None) + """ + Score is the reranker output: sigmoid-distributed logits [0,1] when using cross_encoder reranker, or RRF ordinal rank when using rrf reranker + """ + source_node_uuid: str = pydantic.Field() """ UUID of the source node diff --git a/src/zep_cloud/types/entity_node.py b/src/zep_cloud/types/entity_node.py index 1c7fa65..6e3867d 100644 --- a/src/zep_cloud/types/entity_node.py +++ b/src/zep_cloud/types/entity_node.py @@ -29,7 +29,17 @@ class EntityNode(UniversalBaseModel): Name of the node """ - score: typing.Optional[float] = None + relevance: typing.Optional[float] = pydantic.Field(default=None) + """ + Relevance is an experimental rank-aligned score in [0,1] derived from Score via logit transformation. + Only populated when using cross_encoder reranker; omitted for other reranker types (e.g., RRF). + """ + + score: typing.Optional[float] = pydantic.Field(default=None) + """ + Score is the reranker output: sigmoid-distributed logits [0,1] when using cross_encoder reranker, or RRF ordinal rank when using rrf reranker + """ + summary: str = pydantic.Field() """ Regional summary of surrounding edges diff --git a/src/zep_cloud/types/episode.py b/src/zep_cloud/types/episode.py index d747e7f..36a6e94 100644 --- a/src/zep_cloud/types/episode.py +++ b/src/zep_cloud/types/episode.py @@ -14,6 +14,12 @@ class Episode(UniversalBaseModel): content: str created_at: str processed: typing.Optional[bool] = None + relevance: typing.Optional[float] = pydantic.Field(default=None) + """ + Relevance is an experimental rank-aligned score in [0,1] derived from Score via logit transformation. + Only populated when using cross_encoder reranker; omitted for other reranker types (e.g., RRF). + """ + role: typing.Optional[str] = pydantic.Field(default=None) """ Optional role, will only be present if the episode was created using memory.add API @@ -24,7 +30,11 @@ class Episode(UniversalBaseModel): Optional role_type, will only be present if the episode was created using memory.add API """ - score: typing.Optional[float] = None + score: typing.Optional[float] = pydantic.Field(default=None) + """ + Score is the reranker output: sigmoid-distributed logits [0,1] when using cross_encoder reranker, or RRF ordinal rank when using rrf reranker + """ + session_id: typing.Optional[str] = None source: typing.Optional[GraphDataType] = None source_description: typing.Optional[str] = None From 24d6bef3f9425eaa77d49a1dd366ba3053283d0c Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Mon, 20 Oct 2025 17:42:40 -0400 Subject: [PATCH 30/74] chore: Remove langchain dependency --- poetry.lock | 1573 +----------------------------------------------- pyproject.toml | 2 - 2 files changed, 16 insertions(+), 1559 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7c0df89..f73ab6e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,143 +1,12 @@ # This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. -[[package]] -name = "aiohappyeyeballs" -version = "2.6.1" -description = "Happy Eyeballs for asyncio" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8"}, - {file = "aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558"}, -] - -[[package]] -name = "aiohttp" -version = "3.11.18" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:96264854fedbea933a9ca4b7e0c745728f01380691687b7365d18d9e977179c4"}, - {file = "aiohttp-3.11.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9602044ff047043430452bc3a2089743fa85da829e6fc9ee0025351d66c332b6"}, - {file = "aiohttp-3.11.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5691dc38750fcb96a33ceef89642f139aa315c8a193bbd42a0c33476fd4a1609"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554c918ec43f8480b47a5ca758e10e793bd7410b83701676a4782672d670da55"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a4076a2b3ba5b004b8cffca6afe18a3b2c5c9ef679b4d1e9859cf76295f8d4f"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:767a97e6900edd11c762be96d82d13a1d7c4fc4b329f054e88b57cdc21fded94"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0ddc9337a0fb0e727785ad4f41163cc314376e82b31846d3835673786420ef1"}, - {file = "aiohttp-3.11.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f414f37b244f2a97e79b98d48c5ff0789a0b4b4609b17d64fa81771ad780e415"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fdb239f47328581e2ec7744ab5911f97afb10752332a6dd3d98e14e429e1a9e7"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:f2c50bad73ed629cc326cc0f75aed8ecfb013f88c5af116f33df556ed47143eb"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0a8d8f20c39d3fa84d1c28cdb97f3111387e48209e224408e75f29c6f8e0861d"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:106032eaf9e62fd6bc6578c8b9e6dc4f5ed9a5c1c7fb2231010a1b4304393421"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:b491e42183e8fcc9901d8dcd8ae644ff785590f1727f76ca86e731c61bfe6643"}, - {file = "aiohttp-3.11.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ad8c745ff9460a16b710e58e06a9dec11ebc0d8f4dd82091cefb579844d69868"}, - {file = "aiohttp-3.11.18-cp310-cp310-win32.whl", hash = "sha256:8e57da93e24303a883146510a434f0faf2f1e7e659f3041abc4e3fb3f6702a9f"}, - {file = "aiohttp-3.11.18-cp310-cp310-win_amd64.whl", hash = "sha256:cc93a4121d87d9f12739fc8fab0a95f78444e571ed63e40bfc78cd5abe700ac9"}, - {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:427fdc56ccb6901ff8088544bde47084845ea81591deb16f957897f0f0ba1be9"}, - {file = "aiohttp-3.11.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c828b6d23b984255b85b9b04a5b963a74278b7356a7de84fda5e3b76866597b"}, - {file = "aiohttp-3.11.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c2eaa145bb36b33af1ff2860820ba0589e165be4ab63a49aebfd0981c173b66"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d518ce32179f7e2096bf4e3e8438cf445f05fedd597f252de9f54c728574756"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0700055a6e05c2f4711011a44364020d7a10fbbcd02fbf3e30e8f7e7fddc8717"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8bd1cde83e4684324e6ee19adfc25fd649d04078179890be7b29f76b501de8e4"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73b8870fe1c9a201b8c0d12c94fe781b918664766728783241a79e0468427e4f"}, - {file = "aiohttp-3.11.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25557982dd36b9e32c0a3357f30804e80790ec2c4d20ac6bcc598533e04c6361"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7e889c9df381a2433802991288a61e5a19ceb4f61bd14f5c9fa165655dcb1fd1"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9ea345fda05bae217b6cce2acf3682ce3b13d0d16dd47d0de7080e5e21362421"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9f26545b9940c4b46f0a9388fd04ee3ad7064c4017b5a334dd450f616396590e"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3a621d85e85dccabd700294494d7179ed1590b6d07a35709bb9bd608c7f5dd1d"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9c23fd8d08eb9c2af3faeedc8c56e134acdaf36e2117ee059d7defa655130e5f"}, - {file = "aiohttp-3.11.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9e6b0e519067caa4fd7fb72e3e8002d16a68e84e62e7291092a5433763dc0dd"}, - {file = "aiohttp-3.11.18-cp311-cp311-win32.whl", hash = "sha256:122f3e739f6607e5e4c6a2f8562a6f476192a682a52bda8b4c6d4254e1138f4d"}, - {file = "aiohttp-3.11.18-cp311-cp311-win_amd64.whl", hash = "sha256:e6f3c0a3a1e73e88af384b2e8a0b9f4fb73245afd47589df2afcab6b638fa0e6"}, - {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:63d71eceb9cad35d47d71f78edac41fcd01ff10cacaa64e473d1aec13fa02df2"}, - {file = "aiohttp-3.11.18-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d1929da615840969929e8878d7951b31afe0bac883d84418f92e5755d7b49508"}, - {file = "aiohttp-3.11.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d0aebeb2392f19b184e3fdd9e651b0e39cd0f195cdb93328bd124a1d455cd0e"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3849ead845e8444f7331c284132ab314b4dac43bfae1e3cf350906d4fff4620f"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e8452ad6b2863709f8b3d615955aa0807bc093c34b8e25b3b52097fe421cb7f"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b8d2b42073611c860a37f718b3d61ae8b4c2b124b2e776e2c10619d920350ec"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fbf91f6a0ac317c0a07eb328a1384941872f6761f2e6f7208b63c4cc0a7ff6"}, - {file = "aiohttp-3.11.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ff5625413fec55216da5eaa011cf6b0a2ed67a565914a212a51aa3755b0009"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7f33a92a2fde08e8c6b0c61815521324fc1612f397abf96eed86b8e31618fdb4"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:11d5391946605f445ddafda5eab11caf310f90cdda1fd99865564e3164f5cff9"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3cc314245deb311364884e44242e00c18b5896e4fe6d5f942e7ad7e4cb640adb"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0f421843b0f70740772228b9e8093289924359d306530bcd3926f39acbe1adda"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e220e7562467dc8d589e31c1acd13438d82c03d7f385c9cd41a3f6d1d15807c1"}, - {file = "aiohttp-3.11.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ab2ef72f8605046115bc9aa8e9d14fd49086d405855f40b79ed9e5c1f9f4faea"}, - {file = "aiohttp-3.11.18-cp312-cp312-win32.whl", hash = "sha256:12a62691eb5aac58d65200c7ae94d73e8a65c331c3a86a2e9670927e94339ee8"}, - {file = "aiohttp-3.11.18-cp312-cp312-win_amd64.whl", hash = "sha256:364329f319c499128fd5cd2d1c31c44f234c58f9b96cc57f743d16ec4f3238c8"}, - {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:474215ec618974054cf5dc465497ae9708543cbfc312c65212325d4212525811"}, - {file = "aiohttp-3.11.18-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ced70adf03920d4e67c373fd692123e34d3ac81dfa1c27e45904a628567d804"}, - {file = "aiohttp-3.11.18-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2d9f6c0152f8d71361905aaf9ed979259537981f47ad099c8b3d81e0319814bd"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a35197013ed929c0aed5c9096de1fc5a9d336914d73ab3f9df14741668c0616c"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:540b8a1f3a424f1af63e0af2d2853a759242a1769f9f1ab053996a392bd70118"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9e6710ebebfce2ba21cee6d91e7452d1125100f41b906fb5af3da8c78b764c1"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8af2ef3b4b652ff109f98087242e2ab974b2b2b496304063585e3d78de0b000"}, - {file = "aiohttp-3.11.18-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28c3f975e5ae3dbcbe95b7e3dcd30e51da561a0a0f2cfbcdea30fc1308d72137"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c28875e316c7b4c3e745172d882d8a5c835b11018e33432d281211af35794a93"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:13cd38515568ae230e1ef6919e2e33da5d0f46862943fcda74e7e915096815f3"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0e2a92101efb9f4c2942252c69c63ddb26d20f46f540c239ccfa5af865197bb8"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e6d3e32b8753c8d45ac550b11a1090dd66d110d4ef805ffe60fa61495360b3b2"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ea4cf2488156e0f281f93cc2fd365025efcba3e2d217cbe3df2840f8c73db261"}, - {file = "aiohttp-3.11.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d4df95ad522c53f2b9ebc07f12ccd2cb15550941e11a5bbc5ddca2ca56316d7"}, - {file = "aiohttp-3.11.18-cp313-cp313-win32.whl", hash = "sha256:cdd1bbaf1e61f0d94aced116d6e95fe25942f7a5f42382195fd9501089db5d78"}, - {file = "aiohttp-3.11.18-cp313-cp313-win_amd64.whl", hash = "sha256:bdd619c27e44382cf642223f11cfd4d795161362a5a1fc1fa3940397bc89db01"}, - {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:469ac32375d9a716da49817cd26f1916ec787fc82b151c1c832f58420e6d3533"}, - {file = "aiohttp-3.11.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3cec21dd68924179258ae14af9f5418c1ebdbba60b98c667815891293902e5e0"}, - {file = "aiohttp-3.11.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b426495fb9140e75719b3ae70a5e8dd3a79def0ae3c6c27e012fc59f16544a4a"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad2f41203e2808616292db5d7170cccf0c9f9c982d02544443c7eb0296e8b0c7"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bc0ae0a5e9939e423e065a3e5b00b24b8379f1db46046d7ab71753dfc7dd0e1"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe7cdd3f7d1df43200e1c80f1aed86bb36033bf65e3c7cf46a2b97a253ef8798"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5199be2a2f01ffdfa8c3a6f5981205242986b9e63eb8ae03fd18f736e4840721"}, - {file = "aiohttp-3.11.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ccec9e72660b10f8e283e91aa0295975c7bd85c204011d9f5eb69310555cf30"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1596ebf17e42e293cbacc7a24c3e0dc0f8f755b40aff0402cb74c1ff6baec1d3"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eab7b040a8a873020113ba814b7db7fa935235e4cbaf8f3da17671baa1024863"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5d61df4a05476ff891cff0030329fee4088d40e4dc9b013fac01bc3c745542c2"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:46533e6792e1410f9801d09fd40cbbff3f3518d1b501d6c3c5b218f427f6ff08"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c1b90407ced992331dd6d4f1355819ea1c274cc1ee4d5b7046c6761f9ec11829"}, - {file = "aiohttp-3.11.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a2fd04ae4971b914e54fe459dd7edbbd3f2ba875d69e057d5e3c8e8cac094935"}, - {file = "aiohttp-3.11.18-cp39-cp39-win32.whl", hash = "sha256:b2f317d1678002eee6fe85670039fb34a757972284614638f82b903a03feacdc"}, - {file = "aiohttp-3.11.18-cp39-cp39-win_amd64.whl", hash = "sha256:5e7007b8d1d09bce37b54111f593d173691c530b80f27c6493b928dabed9e6ef"}, - {file = "aiohttp-3.11.18.tar.gz", hash = "sha256:ae856e1138612b7e412db63b7708735cff4d38d0399f6a5435d3dac2669f558a"}, -] - -[package.dependencies] -aiohappyeyeballs = ">=2.3.0" -aiosignal = ">=1.1.2" -async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} -attrs = ">=17.3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -propcache = ">=0.2.0" -yarl = ">=1.17.0,<2.0" - -[package.extras] -speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] - -[[package]] -name = "aiosignal" -version = "1.3.2" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, - {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" - [[package]] name = "annotated-types" version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -149,7 +18,7 @@ version = "4.5.2" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "anyio-4.5.2-py3-none-any.whl", hash = "sha256:c011ee36bc1e8ba40e5a81cb9df91925c218fe9b778554e0b56a21e1b5d4716f"}, {file = "anyio-4.5.2.tar.gz", hash = "sha256:23009af4ed04ce05991845451e11ef02fc7c5ed29179ac9a420e5ad0ac7ddc5b"}, @@ -195,39 +64,6 @@ files = [ astroid = ["astroid (>=2,<4)"] test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -markers = "python_version < \"3.11\"" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - -[[package]] -name = "attrs" -version = "25.3.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, - {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, -] - -[package.extras] -benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] - [[package]] name = "black" version = "24.10.0" @@ -281,7 +117,7 @@ version = "2025.7.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.7" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2"}, {file = "certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995"}, @@ -368,108 +204,6 @@ files = [ [package.dependencies] pycparser = "*" -[[package]] -name = "charset-normalizer" -version = "3.4.1" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, - {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, - {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, -] - [[package]] name = "click" version = "8.1.8" @@ -496,7 +230,7 @@ files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -markers = {main = "platform_system == \"Windows\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\""} +markers = {main = "platform_system == \"Windows\"", dev = "sys_platform == \"win32\" or platform_system == \"Windows\""} [[package]] name = "comm" @@ -513,22 +247,6 @@ files = [ [package.extras] test = ["pytest"] -[[package]] -name = "dataclasses-json" -version = "0.6.7" -description = "Easily serialize dataclasses to and from JSON." -optional = false -python-versions = "<4.0,>=3.7" -groups = ["dev"] -files = [ - {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, - {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, -] - -[package.dependencies] -marshmallow = ">=3.18.0,<4.0.0" -typing-inspect = ">=0.4.0,<1" - [[package]] name = "debugpy" version = "1.8.15" @@ -583,7 +301,7 @@ version = "1.9.0" description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -623,197 +341,13 @@ files = [ [package.extras] tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] -[[package]] -name = "frozenlist" -version = "1.6.0" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e6e558ea1e47fd6fa8ac9ccdad403e5dd5ecc6ed8dda94343056fa4277d5c65e"}, - {file = "frozenlist-1.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f4b3cd7334a4bbc0c472164f3744562cb72d05002cc6fcf58adb104630bbc352"}, - {file = "frozenlist-1.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9799257237d0479736e2b4c01ff26b5c7f7694ac9692a426cb717f3dc02fff9b"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a7bb0fe1f7a70fb5c6f497dc32619db7d2cdd53164af30ade2f34673f8b1fc"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:36d2fc099229f1e4237f563b2a3e0ff7ccebc3999f729067ce4e64a97a7f2869"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f27a9f9a86dcf00708be82359db8de86b80d029814e6693259befe82bb58a106"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75ecee69073312951244f11b8627e3700ec2bfe07ed24e3a685a5979f0412d24"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2c7d5aa19714b1b01a0f515d078a629e445e667b9da869a3cd0e6fe7dec78bd"}, - {file = "frozenlist-1.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69bbd454f0fb23b51cadc9bdba616c9678e4114b6f9fa372d462ff2ed9323ec8"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7daa508e75613809c7a57136dec4871a21bca3080b3a8fc347c50b187df4f00c"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:89ffdb799154fd4d7b85c56d5fa9d9ad48946619e0eb95755723fffa11022d75"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:920b6bd77d209931e4c263223381d63f76828bec574440f29eb497cf3394c249"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d3ceb265249fb401702fce3792e6b44c1166b9319737d21495d3611028d95769"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:52021b528f1571f98a7d4258c58aa8d4b1a96d4f01d00d51f1089f2e0323cb02"}, - {file = "frozenlist-1.6.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0f2ca7810b809ed0f1917293050163c7654cefc57a49f337d5cd9de717b8fad3"}, - {file = "frozenlist-1.6.0-cp310-cp310-win32.whl", hash = "sha256:0e6f8653acb82e15e5443dba415fb62a8732b68fe09936bb6d388c725b57f812"}, - {file = "frozenlist-1.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f1a39819a5a3e84304cd286e3dc62a549fe60985415851b3337b6f5cc91907f1"}, - {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae8337990e7a45683548ffb2fee1af2f1ed08169284cd829cdd9a7fa7470530d"}, - {file = "frozenlist-1.6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c952f69dd524558694818a461855f35d36cc7f5c0adddce37e962c85d06eac0"}, - {file = "frozenlist-1.6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f5fef13136c4e2dee91bfb9a44e236fff78fc2cd9f838eddfc470c3d7d90afe"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:716bbba09611b4663ecbb7cd022f640759af8259e12a6ca939c0a6acd49eedba"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7b8c4dc422c1a3ffc550b465090e53b0bf4839047f3e436a34172ac67c45d595"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b11534872256e1666116f6587a1592ef395a98b54476addb5e8d352925cb5d4a"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c6eceb88aaf7221f75be6ab498dc622a151f5f88d536661af3ffc486245a626"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62c828a5b195570eb4b37369fcbbd58e96c905768d53a44d13044355647838ff"}, - {file = "frozenlist-1.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1c6bd2c6399920c9622362ce95a7d74e7f9af9bfec05fff91b8ce4b9647845a"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:49ba23817781e22fcbd45fd9ff2b9b8cdb7b16a42a4851ab8025cae7b22e96d0"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:431ef6937ae0f853143e2ca67d6da76c083e8b1fe3df0e96f3802fd37626e606"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9d124b38b3c299ca68433597ee26b7819209cb8a3a9ea761dfe9db3a04bba584"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:118e97556306402e2b010da1ef21ea70cb6d6122e580da64c056b96f524fbd6a"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fb3b309f1d4086b5533cf7bbcf3f956f0ae6469664522f1bde4feed26fba60f1"}, - {file = "frozenlist-1.6.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54dece0d21dce4fdb188a1ffc555926adf1d1c516e493c2914d7c370e454bc9e"}, - {file = "frozenlist-1.6.0-cp311-cp311-win32.whl", hash = "sha256:654e4ba1d0b2154ca2f096bed27461cf6160bc7f504a7f9a9ef447c293caf860"}, - {file = "frozenlist-1.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:3e911391bffdb806001002c1f860787542f45916c3baf764264a52765d5a5603"}, - {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c5b9e42ace7d95bf41e19b87cec8f262c41d3510d8ad7514ab3862ea2197bfb1"}, - {file = "frozenlist-1.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ca9973735ce9f770d24d5484dcb42f68f135351c2fc81a7a9369e48cf2998a29"}, - {file = "frozenlist-1.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6ac40ec76041c67b928ca8aaffba15c2b2ee3f5ae8d0cb0617b5e63ec119ca25"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95b7a8a3180dfb280eb044fdec562f9b461614c0ef21669aea6f1d3dac6ee576"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c444d824e22da6c9291886d80c7d00c444981a72686e2b59d38b285617cb52c8"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb52c8166499a8150bfd38478248572c924c003cbb45fe3bcd348e5ac7c000f9"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b35298b2db9c2468106278537ee529719228950a5fdda686582f68f247d1dc6e"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d108e2d070034f9d57210f22fefd22ea0d04609fc97c5f7f5a686b3471028590"}, - {file = "frozenlist-1.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e1be9111cb6756868ac242b3c2bd1f09d9aea09846e4f5c23715e7afb647103"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:94bb451c664415f02f07eef4ece976a2c65dcbab9c2f1705b7031a3a75349d8c"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d1a686d0b0949182b8faddea596f3fc11f44768d1f74d4cad70213b2e139d821"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ea8e59105d802c5a38bdbe7362822c522230b3faba2aa35c0fa1765239b7dd70"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:abc4e880a9b920bc5020bf6a431a6bb40589d9bca3975c980495f63632e8382f"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9a79713adfe28830f27a3c62f6b5406c37376c892b05ae070906f07ae4487046"}, - {file = "frozenlist-1.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a0318c2068e217a8f5e3b85e35899f5a19e97141a45bb925bb357cfe1daf770"}, - {file = "frozenlist-1.6.0-cp312-cp312-win32.whl", hash = "sha256:853ac025092a24bb3bf09ae87f9127de9fe6e0c345614ac92536577cf956dfcc"}, - {file = "frozenlist-1.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bdfe2d7e6c9281c6e55523acd6c2bf77963cb422fdc7d142fb0cb6621b66878"}, - {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1d7fb014fe0fbfee3efd6a94fc635aeaa68e5e1720fe9e57357f2e2c6e1a647e"}, - {file = "frozenlist-1.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01bcaa305a0fdad12745502bfd16a1c75b14558dabae226852f9159364573117"}, - {file = "frozenlist-1.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b314faa3051a6d45da196a2c495e922f987dc848e967d8cfeaee8a0328b1cd4"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da62fecac21a3ee10463d153549d8db87549a5e77eefb8c91ac84bb42bb1e4e3"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1eb89bf3454e2132e046f9599fbcf0a4483ed43b40f545551a39316d0201cd1"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18689b40cb3936acd971f663ccb8e2589c45db5e2c5f07e0ec6207664029a9c"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e67ddb0749ed066b1a03fba812e2dcae791dd50e5da03be50b6a14d0c1a9ee45"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc5e64626e6682638d6e44398c9baf1d6ce6bc236d40b4b57255c9d3f9761f1f"}, - {file = "frozenlist-1.6.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:437cfd39564744ae32ad5929e55b18ebd88817f9180e4cc05e7d53b75f79ce85"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:62dd7df78e74d924952e2feb7357d826af8d2f307557a779d14ddf94d7311be8"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:a66781d7e4cddcbbcfd64de3d41a61d6bdde370fc2e38623f30b2bd539e84a9f"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:482fe06e9a3fffbcd41950f9d890034b4a54395c60b5e61fae875d37a699813f"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:e4f9373c500dfc02feea39f7a56e4f543e670212102cc2eeb51d3a99c7ffbde6"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e69bb81de06827147b7bfbaeb284d85219fa92d9f097e32cc73675f279d70188"}, - {file = "frozenlist-1.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7613d9977d2ab4a9141dde4a149f4357e4065949674c5649f920fec86ecb393e"}, - {file = "frozenlist-1.6.0-cp313-cp313-win32.whl", hash = "sha256:4def87ef6d90429f777c9d9de3961679abf938cb6b7b63d4a7eb8a268babfce4"}, - {file = "frozenlist-1.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:37a8a52c3dfff01515e9bbbee0e6063181362f9de3db2ccf9bc96189b557cbfd"}, - {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:46138f5a0773d064ff663d273b309b696293d7a7c00a0994c5c13a5078134b64"}, - {file = "frozenlist-1.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f88bc0a2b9c2a835cb888b32246c27cdab5740059fb3688852bf91e915399b91"}, - {file = "frozenlist-1.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:777704c1d7655b802c7850255639672e90e81ad6fa42b99ce5ed3fbf45e338dd"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85ef8d41764c7de0dcdaf64f733a27352248493a85a80661f3c678acd27e31f2"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:da5cb36623f2b846fb25009d9d9215322318ff1c63403075f812b3b2876c8506"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbb56587a16cf0fb8acd19e90ff9924979ac1431baea8681712716a8337577b0"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6154c3ba59cda3f954c6333025369e42c3acd0c6e8b6ce31eb5c5b8116c07e0"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e8246877afa3f1ae5c979fe85f567d220f86a50dc6c493b9b7d8191181ae01e"}, - {file = "frozenlist-1.6.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b0f6cce16306d2e117cf9db71ab3a9e8878a28176aeaf0dbe35248d97b28d0c"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1b8e8cd8032ba266f91136d7105706ad57770f3522eac4a111d77ac126a25a9b"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e2ada1d8515d3ea5378c018a5f6d14b4994d4036591a52ceaf1a1549dec8e1ad"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:cdb2c7f071e4026c19a3e32b93a09e59b12000751fc9b0b7758da899e657d215"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:03572933a1969a6d6ab509d509e5af82ef80d4a5d4e1e9f2e1cdd22c77a3f4d2"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:77effc978947548b676c54bbd6a08992759ea6f410d4987d69feea9cd0919911"}, - {file = "frozenlist-1.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a2bda8be77660ad4089caf2223fdbd6db1858462c4b85b67fbfa22102021e497"}, - {file = "frozenlist-1.6.0-cp313-cp313t-win32.whl", hash = "sha256:a4d96dc5bcdbd834ec6b0f91027817214216b5b30316494d2b1aebffb87c534f"}, - {file = "frozenlist-1.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e18036cb4caa17ea151fd5f3d70be9d354c99eb8cf817a3ccde8a7873b074348"}, - {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:536a1236065c29980c15c7229fbb830dedf809708c10e159b8136534233545f0"}, - {file = "frozenlist-1.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ed5e3a4462ff25ca84fb09e0fada8ea267df98a450340ead4c91b44857267d70"}, - {file = "frozenlist-1.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e19c0fc9f4f030fcae43b4cdec9e8ab83ffe30ec10c79a4a43a04d1af6c5e1ad"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7c608f833897501dac548585312d73a7dca028bf3b8688f0d712b7acfaf7fb3"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0dbae96c225d584f834b8d3cc688825911960f003a85cb0fd20b6e5512468c42"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:625170a91dd7261a1d1c2a0c1a353c9e55d21cd67d0852185a5fef86587e6f5f"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1db8b2fc7ee8a940b547a14c10e56560ad3ea6499dc6875c354e2335812f739d"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4da6fc43048b648275a220e3a61c33b7fff65d11bdd6dcb9d9c145ff708b804c"}, - {file = "frozenlist-1.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef8e7e8f2f3820c5f175d70fdd199b79e417acf6c72c5d0aa8f63c9f721646f"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aa733d123cc78245e9bb15f29b44ed9e5780dc6867cfc4e544717b91f980af3b"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:ba7f8d97152b61f22d7f59491a781ba9b177dd9f318486c5fbc52cde2db12189"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:56a0b8dd6d0d3d971c91f1df75e824986667ccce91e20dca2023683814344791"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:5c9e89bf19ca148efcc9e3c44fd4c09d5af85c8a7dd3dbd0da1cb83425ef4983"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1330f0a4376587face7637dfd245380a57fe21ae8f9d360c1c2ef8746c4195fa"}, - {file = "frozenlist-1.6.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2187248203b59625566cac53572ec8c2647a140ee2738b4e36772930377a533c"}, - {file = "frozenlist-1.6.0-cp39-cp39-win32.whl", hash = "sha256:2b8cf4cfea847d6c12af06091561a89740f1f67f331c3fa8623391905e878530"}, - {file = "frozenlist-1.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:1255d5d64328c5a0d066ecb0f02034d086537925f1f04b50b1ae60d37afbf572"}, - {file = "frozenlist-1.6.0-py3-none-any.whl", hash = "sha256:535eec9987adb04701266b92745d6cdcef2e77669299359c3009c3404dd5d191"}, - {file = "frozenlist-1.6.0.tar.gz", hash = "sha256:b99655c32c1c8e06d111e7f41c06c29a5318cb1835df23a45518e02a47c63b68"}, -] - -[[package]] -name = "greenlet" -version = "3.2.1" -description = "Lightweight in-process concurrent programming" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" -files = [ - {file = "greenlet-3.2.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:777c1281aa7c786738683e302db0f55eb4b0077c20f1dc53db8852ffaea0a6b0"}, - {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3059c6f286b53ea4711745146ffe5a5c5ff801f62f6c56949446e0f6461f8157"}, - {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e1a40a17e2c7348f5eee5d8e1b4fa6a937f0587eba89411885a36a8e1fc29bd2"}, - {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5193135b3a8d0017cb438de0d49e92bf2f6c1c770331d24aa7500866f4db4017"}, - {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:639a94d001fe874675b553f28a9d44faed90f9864dc57ba0afef3f8d76a18b04"}, - {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fe303381e7e909e42fb23e191fc69659910909fdcd056b92f6473f80ef18543"}, - {file = "greenlet-3.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:72c9b668454e816b5ece25daac1a42c94d1c116d5401399a11b77ce8d883110c"}, - {file = "greenlet-3.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6079ae990bbf944cf66bea64a09dcb56085815630955109ffa98984810d71565"}, - {file = "greenlet-3.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:e63cd2035f49376a23611fbb1643f78f8246e9d4dfd607534ec81b175ce582c2"}, - {file = "greenlet-3.2.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:aa30066fd6862e1153eaae9b51b449a6356dcdb505169647f69e6ce315b9468b"}, - {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b0f3a0a67786facf3b907a25db80efe74310f9d63cc30869e49c79ee3fcef7e"}, - {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64a4d0052de53ab3ad83ba86de5ada6aeea8f099b4e6c9ccce70fb29bc02c6a2"}, - {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:852ef432919830022f71a040ff7ba3f25ceb9fe8f3ab784befd747856ee58530"}, - {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4818116e75a0dd52cdcf40ca4b419e8ce5cb6669630cb4f13a6c384307c9543f"}, - {file = "greenlet-3.2.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9afa05fe6557bce1642d8131f87ae9462e2a8e8c46f7ed7929360616088a3975"}, - {file = "greenlet-3.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5c12f0d17a88664757e81a6e3fc7c2452568cf460a2f8fb44f90536b2614000b"}, - {file = "greenlet-3.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dbb4e1aa2000852937dd8f4357fb73e3911da426df8ca9b8df5db231922da474"}, - {file = "greenlet-3.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:cb5ee928ce5fedf9a4b0ccdc547f7887136c4af6109d8f2fe8e00f90c0db47f5"}, - {file = "greenlet-3.2.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:0ba2811509a30e5f943be048895a983a8daf0b9aa0ac0ead526dfb5d987d80ea"}, - {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4245246e72352b150a1588d43ddc8ab5e306bef924c26571aafafa5d1aaae4e8"}, - {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7abc0545d8e880779f0c7ce665a1afc3f72f0ca0d5815e2b006cafc4c1cc5840"}, - {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6dcc6d604a6575c6225ac0da39df9335cc0c6ac50725063fa90f104f3dbdb2c9"}, - {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2273586879affca2d1f414709bb1f61f0770adcabf9eda8ef48fd90b36f15d12"}, - {file = "greenlet-3.2.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ff38c869ed30fff07f1452d9a204ece1ec6d3c0870e0ba6e478ce7c1515acf22"}, - {file = "greenlet-3.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e934591a7a4084fa10ee5ef50eb9d2ac8c4075d5c9cf91128116b5dca49d43b1"}, - {file = "greenlet-3.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:063bcf7f8ee28eb91e7f7a8148c65a43b73fbdc0064ab693e024b5a940070145"}, - {file = "greenlet-3.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7132e024ebeeeabbe661cf8878aac5d2e643975c4feae833142592ec2f03263d"}, - {file = "greenlet-3.2.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:e1967882f0c42eaf42282a87579685c8673c51153b845fde1ee81be720ae27ac"}, - {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e77ae69032a95640a5fe8c857ec7bee569a0997e809570f4c92048691ce4b437"}, - {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3227c6ec1149d4520bc99edac3b9bc8358d0034825f3ca7572165cb502d8f29a"}, - {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ddda0197c5b46eedb5628d33dad034c455ae77708c7bf192686e760e26d6a0c"}, - {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de62b542e5dcf0b6116c310dec17b82bb06ef2ceb696156ff7bf74a7a498d982"}, - {file = "greenlet-3.2.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c07a0c01010df42f1f058b3973decc69c4d82e036a951c3deaf89ab114054c07"}, - {file = "greenlet-3.2.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2530bfb0abcd451ea81068e6d0a1aac6dabf3f4c23c8bd8e2a8f579c2dd60d95"}, - {file = "greenlet-3.2.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c472adfca310f849903295c351d297559462067f618944ce2650a1878b84123"}, - {file = "greenlet-3.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:24a496479bc8bd01c39aa6516a43c717b4cee7196573c47b1f8e1011f7c12495"}, - {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:175d583f7d5ee57845591fc30d852b75b144eb44b05f38b67966ed6df05c8526"}, - {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ecc9d33ca9428e4536ea53e79d781792cee114d2fa2695b173092bdbd8cd6d5"}, - {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f56382ac4df3860ebed8ed838f268f03ddf4e459b954415534130062b16bc32"}, - {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc45a7189c91c0f89aaf9d69da428ce8301b0fd66c914a499199cfb0c28420fc"}, - {file = "greenlet-3.2.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:51a2f49da08cff79ee42eb22f1658a2aed60c72792f0a0a95f5f0ca6d101b1fb"}, - {file = "greenlet-3.2.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:0c68bbc639359493420282d2f34fa114e992a8724481d700da0b10d10a7611b8"}, - {file = "greenlet-3.2.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:e775176b5c203a1fa4be19f91da00fd3bff536868b77b237da3f4daa5971ae5d"}, - {file = "greenlet-3.2.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:d6668caf15f181c1b82fb6406f3911696975cc4c37d782e19cb7ba499e556189"}, - {file = "greenlet-3.2.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:17964c246d4f6e1327edd95e2008988a8995ae3a7732be2f9fc1efed1f1cdf8c"}, - {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b4ec7f65f0e4a1500ac475c9343f6cc022b2363ebfb6e94f416085e40dea15"}, - {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b38d53cf268da963869aa25a6e4cc84c1c69afc1ae3391738b2603d110749d01"}, - {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a7490f74e8aabc5f29256765a99577ffde979920a2db1f3676d265a3adba41"}, - {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4339b202ac20a89ccd5bde0663b4d00dc62dd25cb3fb14f7f3034dec1b0d9ece"}, - {file = "greenlet-3.2.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a750f1046994b9e038b45ae237d68153c29a3a783075211fb1414a180c8324b"}, - {file = "greenlet-3.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:374ffebaa5fbd10919cd599e5cf8ee18bae70c11f9d61e73db79826c8c93d6f9"}, - {file = "greenlet-3.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b89e5d44f55372efc6072f59ced5ed1efb7b44213dab5ad7e0caba0232c6545"}, - {file = "greenlet-3.2.1-cp39-cp39-win32.whl", hash = "sha256:b7503d6b8bbdac6bbacf5a8c094f18eab7553481a1830975799042f26c9e101b"}, - {file = "greenlet-3.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:e98328b8b8f160925d6b1c5b1879d8e64f6bd8cf11472b7127d579da575b77d9"}, - {file = "greenlet-3.2.1.tar.gz", hash = "sha256:9f4dd4b4946b14bb3bf038f81e1d2e535b7d94f1b2a59fdba1293cd9c1a0a4d7"}, -] - -[package.extras] -docs = ["Sphinx", "furo"] -test = ["objgraph", "psutil"] - [[package]] name = "h11" version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -825,7 +359,7 @@ version = "1.0.9" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, @@ -847,7 +381,7 @@ version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -872,7 +406,7 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -1016,7 +550,7 @@ version = "0.9.0" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "jiter-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:816ec9b60fdfd1fec87da1d7ed46c66c44ffec37ab2ef7de5b147b2fce3fd5ad"}, {file = "jiter-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b1d3086f8a3ee0194ecf2008cf81286a5c3e540d977fa038ff23576c023c0ea"}, @@ -1096,33 +630,6 @@ files = [ {file = "jiter-0.9.0.tar.gz", hash = "sha256:aadba0964deb424daa24492abc3d229c60c4a31bfee205aedbf1acc7639d7893"}, ] -[[package]] -name = "jsonpatch" -version = "1.33" -description = "Apply JSON-Patches (RFC 6902)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -groups = ["dev"] -files = [ - {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, - {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, -] - -[package.dependencies] -jsonpointer = ">=1.9" - -[[package]] -name = "jsonpointer" -version = "3.0.0" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, - {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, -] - [[package]] name = "jupyter-client" version = "8.6.3" @@ -1168,178 +675,6 @@ traitlets = ">=5.3" docs = ["intersphinx-registry", "myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest (<9)", "pytest-cov", "pytest-timeout"] -[[package]] -name = "langchain" -version = "0.1.20" -description = "Building applications with LLMs through composability" -optional = false -python-versions = "<4.0,>=3.8.1" -groups = ["dev"] -files = [ - {file = "langchain-0.1.20-py3-none-any.whl", hash = "sha256:09991999fbd6c3421a12db3c7d1f52d55601fc41d9b2a3ef51aab2e0e9c38da9"}, - {file = "langchain-0.1.20.tar.gz", hash = "sha256:f35c95eed8c8375e02dce95a34f2fd4856a4c98269d6dc34547a23dba5beab7e"}, -] - -[package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -dataclasses-json = ">=0.5.7,<0.7" -langchain-community = ">=0.0.38,<0.1" -langchain-core = ">=0.1.52,<0.2.0" -langchain-text-splitters = ">=0.0.1,<0.1" -langsmith = ">=0.1.17,<0.2.0" -numpy = ">=1,<2" -pydantic = ">=1,<3" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" - -[package.extras] -azure = ["azure-ai-formrecognizer (>=3.2.1,<4.0.0)", "azure-ai-textanalytics (>=5.3.0,<6.0.0)", "azure-cognitiveservices-speech (>=1.28.0,<2.0.0)", "azure-core (>=1.26.4,<2.0.0)", "azure-cosmos (>=4.4.0b1,<5.0.0)", "azure-identity (>=1.12.0,<2.0.0)", "azure-search-documents (==11.4.0b8)", "openai (<2)"] -clarifai = ["clarifai (>=9.1.0)"] -cli = ["typer (>=0.9.0,<0.10.0)"] -cohere = ["cohere (>=4,<6)"] -docarray = ["docarray[hnswlib] (>=0.32.0,<0.33.0)"] -embeddings = ["sentence-transformers (>=2,<3)"] -extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.0,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cohere (>=4,<6)", "couchbase (>=4.1.9,<5.0.0)", "dashvector (>=1.0.1,<2.0.0)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "langchain-openai (>=0.0.2,<0.1)", "lxml (>=4.9.3,<6.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0) ; python_full_version >= \"3.8.1\" and python_version < \"3.12\"", "rdflib (==7.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0) ; python_full_version >= \"3.8.1\" and python_full_version != \"3.9.7\" and python_version < \"4.0\"", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "upstash-redis (>=0.15.0,<0.16.0)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"] -javascript = ["esprima (>=4.0.1,<5.0.0)"] -llms = ["clarifai (>=9.1.0)", "cohere (>=4,<6)", "huggingface_hub (>=0,<1)", "manifest-ml (>=0.0.1,<0.0.2)", "nlpcloud (>=1,<2)", "openai (<2)", "openlm (>=0.0.5,<0.0.6)", "torch (>=1,<3)", "transformers (>=4,<5)"] -openai = ["openai (<2)", "tiktoken (>=0.3.2,<0.6.0) ; python_version >= \"3.9\""] -qdrant = ["qdrant-client (>=1.3.1,<2.0.0) ; python_full_version >= \"3.8.1\" and python_version < \"3.12\""] -text-helpers = ["chardet (>=5.1.0,<6.0.0)"] - -[[package]] -name = "langchain-community" -version = "0.0.38" -description = "Community contributed LangChain integrations." -optional = false -python-versions = "<4.0,>=3.8.1" -groups = ["dev"] -files = [ - {file = "langchain_community-0.0.38-py3-none-any.whl", hash = "sha256:ecb48660a70a08c90229be46b0cc5f6bc9f38f2833ee44c57dfab9bf3a2c121a"}, - {file = "langchain_community-0.0.38.tar.gz", hash = "sha256:127fc4b75bc67b62fe827c66c02e715a730fef8fe69bd2023d466bab06b5810d"}, -] - -[package.dependencies] -aiohttp = ">=3.8.3,<4.0.0" -dataclasses-json = ">=0.5.7,<0.7" -langchain-core = ">=0.1.52,<0.2.0" -langsmith = ">=0.1.0,<0.2.0" -numpy = ">=1,<2" -PyYAML = ">=5.3" -requests = ">=2,<3" -SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<9.0.0" - -[package.extras] -cli = ["typer (>=0.9.0,<0.10.0)"] -extended-testing = ["aiosqlite (>=0.19.0,<0.20.0)", "aleph-alpha-client (>=2.15.0,<3.0.0)", "anthropic (>=0.3.11,<0.4.0)", "arxiv (>=1.4,<2.0)", "assemblyai (>=0.17.0,<0.18.0)", "atlassian-python-api (>=3.36.0,<4.0.0)", "azure-ai-documentintelligence (>=1.0.0b1,<2.0.0)", "azure-identity (>=1.15.0,<2.0.0)", "azure-search-documents (==11.4.0)", "beautifulsoup4 (>=4,<5)", "bibtexparser (>=1.4.0,<2.0.0)", "cassio (>=0.1.6,<0.2.0)", "chardet (>=5.1.0,<6.0.0)", "cloudpickle (>=2.0.0)", "cohere (>=4,<5)", "databricks-vectorsearch (>=0.21,<0.22)", "datasets (>=2.15.0,<3.0.0)", "dgml-utils (>=0.3.0,<0.4.0)", "elasticsearch (>=8.12.0,<9.0.0)", "esprima (>=4.0.1,<5.0.0)", "faiss-cpu (>=1,<2)", "feedparser (>=6.0.10,<7.0.0)", "fireworks-ai (>=0.9.0,<0.10.0)", "friendli-client (>=1.2.4,<2.0.0)", "geopandas (>=0.13.1,<0.14.0)", "gitpython (>=3.1.32,<4.0.0)", "google-cloud-documentai (>=2.20.1,<3.0.0)", "gql (>=3.4.1,<4.0.0)", "gradientai (>=1.4.0,<2.0.0)", "hdbcli (>=2.19.21,<3.0.0)", "hologres-vector (>=0.0.6,<0.0.7)", "html2text (>=2020.1.16,<2021.0.0)", "httpx (>=0.24.1,<0.25.0)", "httpx-sse (>=0.4.0,<0.5.0)", "javelin-sdk (>=0.1.8,<0.2.0)", "jinja2 (>=3,<4)", "jq (>=1.4.1,<2.0.0)", "jsonschema (>1)", "lxml (>=4.9.3,<6.0)", "markdownify (>=0.11.6,<0.12.0)", "motor (>=3.3.1,<4.0.0)", "msal (>=1.25.0,<2.0.0)", "mwparserfromhell (>=0.6.4,<0.7.0)", "mwxml (>=0.3.3,<0.4.0)", "newspaper3k (>=0.2.8,<0.3.0)", "numexpr (>=2.8.6,<3.0.0)", "nvidia-riva-client (>=2.14.0,<3.0.0)", "oci (>=2.119.1,<3.0.0)", "openai (<2)", "openapi-pydantic (>=0.3.2,<0.4.0)", "oracle-ads (>=2.9.1,<3.0.0)", "oracledb (>=2.2.0,<3.0.0)", "pandas (>=2.0.1,<3.0.0)", "pdfminer-six (>=20221105,<20221106)", "pgvector (>=0.1.6,<0.2.0)", "praw (>=7.7.1,<8.0.0)", "premai (>=0.3.25,<0.4.0)", "psychicapi (>=0.8.0,<0.9.0)", "py-trello (>=0.19.0,<0.20.0)", "pyjwt (>=2.8.0,<3.0.0)", "pymupdf (>=1.22.3,<2.0.0)", "pypdf (>=3.4.0,<4.0.0)", "pypdfium2 (>=4.10.0,<5.0.0)", "pyspark (>=3.4.0,<4.0.0)", "rank-bm25 (>=0.2.2,<0.3.0)", "rapidfuzz (>=3.1.1,<4.0.0)", "rapidocr-onnxruntime (>=1.3.2,<2.0.0) ; python_full_version >= \"3.8.1\" and python_version < \"3.12\"", "rdflib (==7.0.0)", "requests-toolbelt (>=1.0.0,<2.0.0)", "rspace_client (>=2.5.0,<3.0.0)", "scikit-learn (>=1.2.2,<2.0.0)", "sqlite-vss (>=0.1.2,<0.2.0)", "streamlit (>=1.18.0,<2.0.0) ; python_full_version >= \"3.8.1\" and python_full_version != \"3.9.7\" and python_version < \"4.0\"", "sympy (>=1.12,<2.0)", "telethon (>=1.28.5,<2.0.0)", "tidb-vector (>=0.0.3,<1.0.0)", "timescale-vector (>=0.0.1,<0.0.2)", "tqdm (>=4.48.0)", "tree-sitter (>=0.20.2,<0.21.0)", "tree-sitter-languages (>=1.8.0,<2.0.0)", "upstash-redis (>=0.15.0,<0.16.0)", "vdms (>=0.0.20,<0.0.21)", "xata (>=1.0.0a7,<2.0.0)", "xmltodict (>=0.13.0,<0.14.0)"] - -[[package]] -name = "langchain-core" -version = "0.1.53" -description = "Building applications with LLMs through composability" -optional = false -python-versions = "<4.0,>=3.8.1" -groups = ["dev"] -files = [ - {file = "langchain_core-0.1.53-py3-none-any.whl", hash = "sha256:02a88a21e3bd294441b5b741625fa4b53b1c684fd58ba6e5d9028e53cbe8542f"}, - {file = "langchain_core-0.1.53.tar.gz", hash = "sha256:df3773a553b5335eb645827b99a61a7018cea4b11dc45efa2613fde156441cec"}, -] - -[package.dependencies] -jsonpatch = ">=1.33,<2.0" -langsmith = ">=0.1.0,<0.2.0" -packaging = ">=23.2,<24.0" -pydantic = ">=1,<3" -PyYAML = ">=5.3" -tenacity = ">=8.1.0,<9.0.0" - -[package.extras] -extended-testing = ["jinja2 (>=3,<4)"] - -[[package]] -name = "langchain-openai" -version = "0.0.3" -description = "An integration package connecting OpenAI and LangChain" -optional = false -python-versions = ">=3.8.1,<4.0" -groups = ["dev"] -files = [ - {file = "langchain_openai-0.0.3-py3-none-any.whl", hash = "sha256:32d8ae288e212ed47af418ffd216c8af3b8115514bb39127ca9e2910c06fc6b2"}, - {file = "langchain_openai-0.0.3.tar.gz", hash = "sha256:19720510abcd7d6217a47d551def7779dc001aebbf978bda5c03e0a8c8167ac3"}, -] - -[package.dependencies] -langchain-core = ">=0.1.13,<0.2" -numpy = ">=1,<2" -openai = ">=1.6.1,<2.0.0" -tiktoken = ">=0.5.2,<0.6.0" - -[[package]] -name = "langchain-text-splitters" -version = "0.0.2" -description = "LangChain text splitting utilities" -optional = false -python-versions = "<4.0,>=3.8.1" -groups = ["dev"] -files = [ - {file = "langchain_text_splitters-0.0.2-py3-none-any.whl", hash = "sha256:13887f32705862c1e1454213cb7834a63aae57c26fcd80346703a1d09c46168d"}, - {file = "langchain_text_splitters-0.0.2.tar.gz", hash = "sha256:ac8927dc0ba08eba702f6961c9ed7df7cead8de19a9f7101ab2b5ea34201b3c1"}, -] - -[package.dependencies] -langchain-core = ">=0.1.28,<0.3" - -[package.extras] -extended-testing = ["beautifulsoup4 (>=4.12.3,<5.0.0)", "lxml (>=4.9.3,<6.0)"] - -[[package]] -name = "langsmith" -version = "0.1.147" -description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." -optional = false -python-versions = "<4.0,>=3.8.1" -groups = ["dev"] -files = [ - {file = "langsmith-0.1.147-py3-none-any.whl", hash = "sha256:7166fc23b965ccf839d64945a78e9f1157757add228b086141eb03a60d699a15"}, - {file = "langsmith-0.1.147.tar.gz", hash = "sha256:2e933220318a4e73034657103b3b1a3a6109cc5db3566a7e8e03be8d6d7def7a"}, -] - -[package.dependencies] -httpx = ">=0.23.0,<1" -orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} -pydantic = [ - {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, - {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, -] -requests = ">=2,<3" -requests-toolbelt = ">=1.0.0,<2.0.0" - -[package.extras] -langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] - -[[package]] -name = "marshmallow" -version = "3.26.1" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "marshmallow-3.26.1-py3-none-any.whl", hash = "sha256:3350409f20a70a7e4e11a27661187b77cdcaeb20abca41c1454fe33636bea09c"}, - {file = "marshmallow-3.26.1.tar.gz", hash = "sha256:e6d8affb6cb61d39d26402096dc0aee12d5a26d490a121f118d2e81dc0719dc6"}, -] - -[package.dependencies] -packaging = ">=17.0" - -[package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "sphinxext-opengraph (==0.9.1)"] -tests = ["pytest", "simplejson"] - [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -1355,123 +690,6 @@ files = [ [package.dependencies] traitlets = "*" -[[package]] -name = "multidict" -version = "6.4.3" -description = "multidict implementation" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32a998bd8a64ca48616eac5a8c1cc4fa38fb244a3facf2eeb14abe186e0f6cc5"}, - {file = "multidict-6.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a54ec568f1fc7f3c313c2f3b16e5db346bf3660e1309746e7fccbbfded856188"}, - {file = "multidict-6.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a7be07e5df178430621c716a63151165684d3e9958f2bbfcb644246162007ab7"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b128dbf1c939674a50dd0b28f12c244d90e5015e751a4f339a96c54f7275e291"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b9cb19dfd83d35b6ff24a4022376ea6e45a2beba8ef3f0836b8a4b288b6ad685"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3cf62f8e447ea2c1395afa289b332e49e13d07435369b6f4e41f887db65b40bf"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:909f7d43ff8f13d1adccb6a397094adc369d4da794407f8dd592c51cf0eae4b1"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0bb8f8302fbc7122033df959e25777b0b7659b1fd6bcb9cb6bed76b5de67afef"}, - {file = "multidict-6.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:224b79471b4f21169ea25ebc37ed6f058040c578e50ade532e2066562597b8a9"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a7bd27f7ab3204f16967a6f899b3e8e9eb3362c0ab91f2ee659e0345445e0078"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:99592bd3162e9c664671fd14e578a33bfdba487ea64bcb41d281286d3c870ad7"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a62d78a1c9072949018cdb05d3c533924ef8ac9bcb06cbf96f6d14772c5cd451"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ccdde001578347e877ca4f629450973c510e88e8865d5aefbcb89b852ccc666"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:eccb67b0e78aa2e38a04c5ecc13bab325a43e5159a181a9d1a6723db913cbb3c"}, - {file = "multidict-6.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8b6fcf6054fc4114a27aa865f8840ef3d675f9316e81868e0ad5866184a6cba5"}, - {file = "multidict-6.4.3-cp310-cp310-win32.whl", hash = "sha256:f92c7f62d59373cd93bc9969d2da9b4b21f78283b1379ba012f7ee8127b3152e"}, - {file = "multidict-6.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:b57e28dbc031d13916b946719f213c494a517b442d7b48b29443e79610acd887"}, - {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f6f19170197cc29baccd33ccc5b5d6a331058796485857cf34f7635aa25fb0cd"}, - {file = "multidict-6.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f2882bf27037eb687e49591690e5d491e677272964f9ec7bc2abbe09108bdfb8"}, - {file = "multidict-6.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fbf226ac85f7d6b6b9ba77db4ec0704fde88463dc17717aec78ec3c8546c70ad"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e329114f82ad4b9dd291bef614ea8971ec119ecd0f54795109976de75c9a852"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:1f4e0334d7a555c63f5c8952c57ab6f1c7b4f8c7f3442df689fc9f03df315c08"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:740915eb776617b57142ce0bb13b7596933496e2f798d3d15a20614adf30d229"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255dac25134d2b141c944b59a0d2f7211ca12a6d4779f7586a98b4b03ea80508"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4e8535bd4d741039b5aad4285ecd9b902ef9e224711f0b6afda6e38d7ac02c7"}, - {file = "multidict-6.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30c433a33be000dd968f5750722eaa0991037be0be4a9d453eba121774985bc8"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4eb33b0bdc50acd538f45041f5f19945a1f32b909b76d7b117c0c25d8063df56"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:75482f43465edefd8a5d72724887ccdcd0c83778ded8f0cb1e0594bf71736cc0"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ce5b3082e86aee80b3925ab4928198450d8e5b6466e11501fe03ad2191c6d777"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e413152e3212c4d39f82cf83c6f91be44bec9ddea950ce17af87fbf4e32ca6b2"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8aac2eeff69b71f229a405c0a4b61b54bade8e10163bc7b44fcd257949620618"}, - {file = "multidict-6.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ab583ac203af1d09034be41458feeab7863c0635c650a16f15771e1386abf2d7"}, - {file = "multidict-6.4.3-cp311-cp311-win32.whl", hash = "sha256:1b2019317726f41e81154df636a897de1bfe9228c3724a433894e44cd2512378"}, - {file = "multidict-6.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:43173924fa93c7486402217fab99b60baf78d33806af299c56133a3755f69589"}, - {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1f1c2f58f08b36f8475f3ec6f5aeb95270921d418bf18f90dffd6be5c7b0e676"}, - {file = "multidict-6.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:26ae9ad364fc61b936fb7bf4c9d8bd53f3a5b4417142cd0be5c509d6f767e2f1"}, - {file = "multidict-6.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:659318c6c8a85f6ecfc06b4e57529e5a78dfdd697260cc81f683492ad7e9435a"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1eb72c741fd24d5a28242ce72bb61bc91f8451877131fa3fe930edb195f7054"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3cd06d88cb7398252284ee75c8db8e680aa0d321451132d0dba12bc995f0adcc"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4543d8dc6470a82fde92b035a92529317191ce993533c3c0c68f56811164ed07"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:30a3ebdc068c27e9d6081fca0e2c33fdf132ecea703a72ea216b81a66860adde"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b038f10e23f277153f86f95c777ba1958bcd5993194fda26a1d06fae98b2f00c"}, - {file = "multidict-6.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c605a2b2dc14282b580454b9b5d14ebe0668381a3a26d0ac39daa0ca115eb2ae"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8bd2b875f4ca2bb527fe23e318ddd509b7df163407b0fb717df229041c6df5d3"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c2e98c840c9c8e65c0e04b40c6c5066c8632678cd50c8721fdbcd2e09f21a507"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66eb80dd0ab36dbd559635e62fba3083a48a252633164857a1d1684f14326427"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c23831bdee0a2a3cf21be057b5e5326292f60472fb6c6f86392bbf0de70ba731"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1535cec6443bfd80d028052e9d17ba6ff8a5a3534c51d285ba56c18af97e9713"}, - {file = "multidict-6.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3b73e7227681f85d19dec46e5b881827cd354aabe46049e1a61d2f9aaa4e285a"}, - {file = "multidict-6.4.3-cp312-cp312-win32.whl", hash = "sha256:8eac0c49df91b88bf91f818e0a24c1c46f3622978e2c27035bfdca98e0e18124"}, - {file = "multidict-6.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:11990b5c757d956cd1db7cb140be50a63216af32cd6506329c2c59d732d802db"}, - {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7a76534263d03ae0cfa721fea40fd2b5b9d17a6f85e98025931d41dc49504474"}, - {file = "multidict-6.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:805031c2f599eee62ac579843555ed1ce389ae00c7e9f74c2a1b45e0564a88dd"}, - {file = "multidict-6.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c56c179839d5dcf51d565132185409d1d5dd8e614ba501eb79023a6cab25576b"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c64f4ddb3886dd8ab71b68a7431ad4aa01a8fa5be5b11543b29674f29ca0ba3"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3002a856367c0b41cad6784f5b8d3ab008eda194ed7864aaa58f65312e2abcac"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d75e621e7d887d539d6e1d789f0c64271c250276c333480a9e1de089611f790"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:995015cf4a3c0d72cbf453b10a999b92c5629eaf3a0c3e1efb4b5c1f602253bb"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b0fabae7939d09d7d16a711468c385272fa1b9b7fb0d37e51143585d8e72e0"}, - {file = "multidict-6.4.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61ed4d82f8a1e67eb9eb04f8587970d78fe7cddb4e4d6230b77eda23d27938f9"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:062428944a8dc69df9fdc5d5fc6279421e5f9c75a9ee3f586f274ba7b05ab3c8"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:b90e27b4674e6c405ad6c64e515a505c6d113b832df52fdacb6b1ffd1fa9a1d1"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7d50d4abf6729921e9613d98344b74241572b751c6b37feed75fb0c37bd5a817"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:43fe10524fb0a0514be3954be53258e61d87341008ce4914f8e8b92bee6f875d"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:236966ca6c472ea4e2d3f02f6673ebfd36ba3f23159c323f5a496869bc8e47c9"}, - {file = "multidict-6.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:422a5ec315018e606473ba1f5431e064cf8b2a7468019233dcf8082fabad64c8"}, - {file = "multidict-6.4.3-cp313-cp313-win32.whl", hash = "sha256:f901a5aace8e8c25d78960dcc24c870c8d356660d3b49b93a78bf38eb682aac3"}, - {file = "multidict-6.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:1c152c49e42277bc9a2f7b78bd5fa10b13e88d1b0328221e7aef89d5c60a99a5"}, - {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:be8751869e28b9c0d368d94f5afcb4234db66fe8496144547b4b6d6a0645cfc6"}, - {file = "multidict-6.4.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d4b31f8a68dccbcd2c0ea04f0e014f1defc6b78f0eb8b35f2265e8716a6df0c"}, - {file = "multidict-6.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:032efeab3049e37eef2ff91271884303becc9e54d740b492a93b7e7266e23756"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e78006af1a7c8a8007e4f56629d7252668344442f66982368ac06522445e375"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:daeac9dd30cda8703c417e4fddccd7c4dc0c73421a0b54a7da2713be125846be"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f6f90700881438953eae443a9c6f8a509808bc3b185246992c4233ccee37fea"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f84627997008390dd15762128dcf73c3365f4ec0106739cde6c20a07ed198ec8"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3307b48cd156153b117c0ea54890a3bdbf858a5b296ddd40dc3852e5f16e9b02"}, - {file = "multidict-6.4.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ead46b0fa1dcf5af503a46e9f1c2e80b5d95c6011526352fa5f42ea201526124"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1748cb2743bedc339d63eb1bca314061568793acd603a6e37b09a326334c9f44"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:acc9fa606f76fc111b4569348cc23a771cb52c61516dcc6bcef46d612edb483b"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:31469d5832b5885adeb70982e531ce86f8c992334edd2f2254a10fa3182ac504"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ba46b51b6e51b4ef7bfb84b82f5db0dc5e300fb222a8a13b8cd4111898a869cf"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:389cfefb599edf3fcfd5f64c0410da686f90f5f5e2c4d84e14f6797a5a337af4"}, - {file = "multidict-6.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:64bc2bbc5fba7b9db5c2c8d750824f41c6994e3882e6d73c903c2afa78d091e4"}, - {file = "multidict-6.4.3-cp313-cp313t-win32.whl", hash = "sha256:0ecdc12ea44bab2807d6b4a7e5eef25109ab1c82a8240d86d3c1fc9f3b72efd5"}, - {file = "multidict-6.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:7146a8742ea71b5d7d955bffcef58a9e6e04efba704b52a460134fefd10a8208"}, - {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5427a2679e95a642b7f8b0f761e660c845c8e6fe3141cddd6b62005bd133fc21"}, - {file = "multidict-6.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24a8caa26521b9ad09732972927d7b45b66453e6ebd91a3c6a46d811eeb7349b"}, - {file = "multidict-6.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6b5a272bc7c36a2cd1b56ddc6bff02e9ce499f9f14ee4a45c45434ef083f2459"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf74dc5e212b8c75165b435c43eb0d5e81b6b300a938a4eb82827119115e840"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9f35de41aec4b323c71f54b0ca461ebf694fb48bec62f65221f52e0017955b39"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae93e0ff43b6f6892999af64097b18561691ffd835e21a8348a441e256592e1f"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e3929269e9d7eff905d6971d8b8c85e7dbc72c18fb99c8eae6fe0a152f2e343"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb6214fe1750adc2a1b801a199d64b5a67671bf76ebf24c730b157846d0e90d2"}, - {file = "multidict-6.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d79cf5c0c6284e90f72123f4a3e4add52d6c6ebb4a9054e88df15b8d08444c6"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2427370f4a255262928cd14533a70d9738dfacadb7563bc3b7f704cc2360fc4e"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:fbd8d737867912b6c5f99f56782b8cb81f978a97b4437a1c476de90a3e41c9a1"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0ee1bf613c448997f73fc4efb4ecebebb1c02268028dd4f11f011f02300cf1e8"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:578568c4ba5f2b8abd956baf8b23790dbfdc953e87d5b110bce343b4a54fc9e7"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a059ad6b80de5b84b9fa02a39400319e62edd39d210b4e4f8c4f1243bdac4752"}, - {file = "multidict-6.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dd53893675b729a965088aaadd6a1f326a72b83742b056c1065bdd2e2a42b4df"}, - {file = "multidict-6.4.3-cp39-cp39-win32.whl", hash = "sha256:abcfed2c4c139f25c2355e180bcc077a7cae91eefbb8b3927bb3f836c9586f1f"}, - {file = "multidict-6.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:b1b389ae17296dd739015d5ddb222ee99fd66adeae910de21ac950e00979d897"}, - {file = "multidict-6.4.3-py3-none-any.whl", hash = "sha256:59fe01ee8e2a1e8ceb3f6dbb216b09c8d9f4ef1c22c4fc825d045a147fa2ebc9"}, - {file = "multidict-6.4.3.tar.gz", hash = "sha256:3ada0b058c9f213c5f95ba301f922d402ac234f1111a7d8fd70f1b99f3c281ec"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.1.0", markers = "python_version < \"3.11\""} - [[package]] name = "mypy" version = "1.13.0" @@ -1550,59 +768,13 @@ files = [ {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] -[[package]] -name = "numpy" -version = "1.26.4" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, -] - [[package]] name = "openai" version = "1.76.2" description = "The official Python library for the openai API" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "openai-1.76.2-py3-none-any.whl", hash = "sha256:9c1d9ad59e6e3bea7205eedc9ca66eeebae18d47b527e505a2b0d2fb1538e26e"}, {file = "openai-1.76.2.tar.gz", hash = "sha256:f430c8b848775907405c6eff54621254c96f6444c593c097e0cc3a9f8fdda96f"}, @@ -1623,89 +795,6 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] realtime = ["websockets (>=13,<16)"] voice-helpers = ["numpy (>=2.0.2)", "sounddevice (>=0.5.1)"] -[[package]] -name = "orjson" -version = "3.10.18" -description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -markers = "platform_python_implementation != \"PyPy\"" -files = [ - {file = "orjson-3.10.18-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a45e5d68066b408e4bc383b6e4ef05e717c65219a9e1390abc6155a520cac402"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be3b9b143e8b9db05368b13b04c84d37544ec85bb97237b3a923f076265ec89c"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9b0aa09745e2c9b3bf779b096fa71d1cc2d801a604ef6dd79c8b1bfef52b2f92"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:53a245c104d2792e65c8d225158f2b8262749ffe64bc7755b00024757d957a13"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f9495ab2611b7f8a0a8a505bcb0f0cbdb5469caafe17b0e404c3c746f9900469"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73be1cbcebadeabdbc468f82b087df435843c809cd079a565fb16f0f3b23238f"}, - {file = "orjson-3.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8936ee2679e38903df158037a2f1c108129dee218975122e37847fb1d4ac68"}, - {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7115fcbc8525c74e4c2b608129bef740198e9a120ae46184dac7683191042056"}, - {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:771474ad34c66bc4d1c01f645f150048030694ea5b2709b87d3bda273ffe505d"}, - {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:7c14047dbbea52886dd87169f21939af5d55143dad22d10db6a7514f058156a8"}, - {file = "orjson-3.10.18-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:641481b73baec8db14fdf58f8967e52dc8bda1f2aba3aa5f5c1b07ed6df50b7f"}, - {file = "orjson-3.10.18-cp310-cp310-win32.whl", hash = "sha256:607eb3ae0909d47280c1fc657c4284c34b785bae371d007595633f4b1a2bbe06"}, - {file = "orjson-3.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:8770432524ce0eca50b7efc2a9a5f486ee0113a5fbb4231526d414e6254eba92"}, - {file = "orjson-3.10.18-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:e0a183ac3b8e40471e8d843105da6fbe7c070faab023be3b08188ee3f85719b8"}, - {file = "orjson-3.10.18-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:5ef7c164d9174362f85238d0cd4afdeeb89d9e523e4651add6a5d458d6f7d42d"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd14c5d99cdc7bf93f22b12ec3b294931518aa019e2a147e8aa2f31fd3240f7"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b672502323b6cd133c4af6b79e3bea36bad2d16bca6c1f645903fce83909a7a"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51f8c63be6e070ec894c629186b1c0fe798662b8687f3d9fdfa5e401c6bd7679"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f9478ade5313d724e0495d167083c6f3be0dd2f1c9c8a38db9a9e912cdaf947"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:187aefa562300a9d382b4b4eb9694806e5848b0cedf52037bb5c228c61bb66d4"}, - {file = "orjson-3.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da552683bc9da222379c7a01779bddd0ad39dd699dd6300abaf43eadee38334"}, - {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e450885f7b47a0231979d9c49b567ed1c4e9f69240804621be87c40bc9d3cf17"}, - {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5e3c9cc2ba324187cd06287ca24f65528f16dfc80add48dc99fa6c836bb3137e"}, - {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:50ce016233ac4bfd843ac5471e232b865271d7d9d44cf9d33773bcd883ce442b"}, - {file = "orjson-3.10.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b3ceff74a8f7ffde0b2785ca749fc4e80e4315c0fd887561144059fb1c138aa7"}, - {file = "orjson-3.10.18-cp311-cp311-win32.whl", hash = "sha256:fdba703c722bd868c04702cac4cb8c6b8ff137af2623bc0ddb3b3e6a2c8996c1"}, - {file = "orjson-3.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:c28082933c71ff4bc6ccc82a454a2bffcef6e1d7379756ca567c772e4fb3278a"}, - {file = "orjson-3.10.18-cp311-cp311-win_arm64.whl", hash = "sha256:a6c7c391beaedd3fa63206e5c2b7b554196f14debf1ec9deb54b5d279b1b46f5"}, - {file = "orjson-3.10.18-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:50c15557afb7f6d63bc6d6348e0337a880a04eaa9cd7c9d569bcb4e760a24753"}, - {file = "orjson-3.10.18-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:356b076f1662c9813d5fa56db7d63ccceef4c271b1fb3dd522aca291375fcf17"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:559eb40a70a7494cd5beab2d73657262a74a2c59aff2068fdba8f0424ec5b39d"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f3c29eb9a81e2fbc6fd7ddcfba3e101ba92eaff455b8d602bf7511088bbc0eae"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6612787e5b0756a171c7d81ba245ef63a3533a637c335aa7fcb8e665f4a0966f"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ac6bd7be0dcab5b702c9d43d25e70eb456dfd2e119d512447468f6405b4a69c"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9f72f100cee8dde70100406d5c1abba515a7df926d4ed81e20a9730c062fe9ad"}, - {file = "orjson-3.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9dca85398d6d093dd41dc0983cbf54ab8e6afd1c547b6b8a311643917fbf4e0c"}, - {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:22748de2a07fcc8781a70edb887abf801bb6142e6236123ff93d12d92db3d406"}, - {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3a83c9954a4107b9acd10291b7f12a6b29e35e8d43a414799906ea10e75438e6"}, - {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:303565c67a6c7b1f194c94632a4a39918e067bd6176a48bec697393865ce4f06"}, - {file = "orjson-3.10.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:86314fdb5053a2f5a5d881f03fca0219bfdf832912aa88d18676a5175c6916b5"}, - {file = "orjson-3.10.18-cp312-cp312-win32.whl", hash = "sha256:187ec33bbec58c76dbd4066340067d9ece6e10067bb0cc074a21ae3300caa84e"}, - {file = "orjson-3.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:f9f94cf6d3f9cd720d641f8399e390e7411487e493962213390d1ae45c7814fc"}, - {file = "orjson-3.10.18-cp312-cp312-win_arm64.whl", hash = "sha256:3d600be83fe4514944500fa8c2a0a77099025ec6482e8087d7659e891f23058a"}, - {file = "orjson-3.10.18-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:69c34b9441b863175cc6a01f2935de994025e773f814412030f269da4f7be147"}, - {file = "orjson-3.10.18-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:1ebeda919725f9dbdb269f59bc94f861afbe2a27dce5608cdba2d92772364d1c"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5adf5f4eed520a4959d29ea80192fa626ab9a20b2ea13f8f6dc58644f6927103"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7592bb48a214e18cd670974f289520f12b7aed1fa0b2e2616b8ed9e069e08595"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f872bef9f042734110642b7a11937440797ace8c87527de25e0c53558b579ccc"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0315317601149c244cb3ecef246ef5861a64824ccbcb8018d32c66a60a84ffbc"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0da26957e77e9e55a6c2ce2e7182a36a6f6b180ab7189315cb0995ec362e049"}, - {file = "orjson-3.10.18-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb70d489bc79b7519e5803e2cc4c72343c9dc1154258adf2f8925d0b60da7c58"}, - {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e9e86a6af31b92299b00736c89caf63816f70a4001e750bda179e15564d7a034"}, - {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c382a5c0b5931a5fc5405053d36c1ce3fd561694738626c77ae0b1dfc0242ca1"}, - {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8e4b2ae732431127171b875cb2668f883e1234711d3c147ffd69fe5be51a8012"}, - {file = "orjson-3.10.18-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d808e34ddb24fc29a4d4041dcfafbae13e129c93509b847b14432717d94b44f"}, - {file = "orjson-3.10.18-cp313-cp313-win32.whl", hash = "sha256:ad8eacbb5d904d5591f27dee4031e2c1db43d559edb8f91778efd642d70e6bea"}, - {file = "orjson-3.10.18-cp313-cp313-win_amd64.whl", hash = "sha256:aed411bcb68bf62e85588f2a7e03a6082cc42e5a2796e06e72a962d7c6310b52"}, - {file = "orjson-3.10.18-cp313-cp313-win_arm64.whl", hash = "sha256:f54c1385a0e6aba2f15a40d703b858bedad36ded0491e55d35d905b2c34a4cc3"}, - {file = "orjson-3.10.18-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95fae14225edfd699454e84f61c3dd938df6629a00c6ce15e704f57b58433bb"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5232d85f177f98e0cefabb48b5e7f60cff6f3f0365f9c60631fecd73849b2a82"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2783e121cafedf0d85c148c248a20470018b4ffd34494a68e125e7d5857655d1"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e54ee3722caf3db09c91f442441e78f916046aa58d16b93af8a91500b7bbf273"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2daf7e5379b61380808c24f6fc182b7719301739e4271c3ec88f2984a2d61f89"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f39b371af3add20b25338f4b29a8d6e79a8c7ed0e9dd49e008228a065d07781"}, - {file = "orjson-3.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b819ed34c01d88c6bec290e6842966f8e9ff84b7694632e88341363440d4cc0"}, - {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2f6c57debaef0b1aa13092822cbd3698a1fb0209a9ea013a969f4efa36bdea57"}, - {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:755b6d61ffdb1ffa1e768330190132e21343757c9aa2308c67257cc81a1a6f5a"}, - {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce8d0a875a85b4c8579eab5ac535fb4b2a50937267482be402627ca7e7570ee3"}, - {file = "orjson-3.10.18-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57b5d0673cbd26781bebc2bf86f99dd19bd5a9cb55f71cc4f66419f6b50f3d77"}, - {file = "orjson-3.10.18-cp39-cp39-win32.whl", hash = "sha256:951775d8b49d1d16ca8818b1f20c4965cae9157e7b562a2ae34d3967b8f21c8e"}, - {file = "orjson-3.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:fdd9d68f83f0bc4406610b1ac68bdcded8c5ee58605cc69e643a06f4d075f429"}, - {file = "orjson-3.10.18.tar.gz", hash = "sha256:e8da3947d92123eda795b68228cafe2724815621fe35e8e320a9e9593a4bcd53"}, -] - [[package]] name = "packaging" version = "23.2" @@ -1810,114 +899,6 @@ files = [ [package.dependencies] wcwidth = "*" -[[package]] -name = "propcache" -version = "0.3.1" -description = "Accelerated property cache" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f27785888d2fdd918bc36de8b8739f2d6c791399552333721b58193f68ea3e98"}, - {file = "propcache-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4e89cde74154c7b5957f87a355bb9c8ec929c167b59c83d90654ea36aeb6180"}, - {file = "propcache-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:730178f476ef03d3d4d255f0c9fa186cb1d13fd33ffe89d39f2cda4da90ceb71"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967a8eec513dbe08330f10137eacb427b2ca52118769e82ebcfcab0fba92a649"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b9145c35cc87313b5fd480144f8078716007656093d23059e8993d3a8fa730f"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e64e948ab41411958670f1093c0a57acfdc3bee5cf5b935671bbd5313bcf229"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:319fa8765bfd6a265e5fa661547556da381e53274bc05094fc9ea50da51bfd46"}, - {file = "propcache-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c66d8ccbc902ad548312b96ed8d5d266d0d2c6d006fd0f66323e9d8f2dd49be7"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2d219b0dbabe75e15e581fc1ae796109b07c8ba7d25b9ae8d650da582bed01b0"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd6a55f65241c551eb53f8cf4d2f4af33512c39da5d9777694e9d9c60872f519"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9979643ffc69b799d50d3a7b72b5164a2e97e117009d7af6dfdd2ab906cb72cd"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4cf9e93a81979f1424f1a3d155213dc928f1069d697e4353edb8a5eba67c6259"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2fce1df66915909ff6c824bbb5eb403d2d15f98f1518e583074671a30fe0c21e"}, - {file = "propcache-0.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4d0dfdd9a2ebc77b869a0b04423591ea8823f791293b527dc1bb896c1d6f1136"}, - {file = "propcache-0.3.1-cp310-cp310-win32.whl", hash = "sha256:1f6cc0ad7b4560e5637eb2c994e97b4fa41ba8226069c9277eb5ea7101845b42"}, - {file = "propcache-0.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:47ef24aa6511e388e9894ec16f0fbf3313a53ee68402bc428744a367ec55b833"}, - {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f30241577d2fef2602113b70ef7231bf4c69a97e04693bde08ddab913ba0ce5"}, - {file = "propcache-0.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:43593c6772aa12abc3af7784bff4a41ffa921608dd38b77cf1dfd7f5c4e71371"}, - {file = "propcache-0.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a75801768bbe65499495660b777e018cbe90c7980f07f8aa57d6be79ea6f71da"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6f1324db48f001c2ca26a25fa25af60711e09b9aaf4b28488602776f4f9a744"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cdb0f3e1eb6dfc9965d19734d8f9c481b294b5274337a8cb5cb01b462dcb7e0"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eb34d90aac9bfbced9a58b266f8946cb5935869ff01b164573a7634d39fbcb5"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f35c7070eeec2cdaac6fd3fe245226ed2a6292d3ee8c938e5bb645b434c5f256"}, - {file = "propcache-0.3.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b23c11c2c9e6d4e7300c92e022046ad09b91fd00e36e83c44483df4afa990073"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3e19ea4ea0bf46179f8a3652ac1426e6dcbaf577ce4b4f65be581e237340420d"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bd39c92e4c8f6cbf5f08257d6360123af72af9f4da75a690bef50da77362d25f"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b0313e8b923b3814d1c4a524c93dfecea5f39fa95601f6a9b1ac96cd66f89ea0"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e861ad82892408487be144906a368ddbe2dc6297074ade2d892341b35c59844a"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:61014615c1274df8da5991a1e5da85a3ccb00c2d4701ac6f3383afd3ca47ab0a"}, - {file = "propcache-0.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:71ebe3fe42656a2328ab08933d420df5f3ab121772eef78f2dc63624157f0ed9"}, - {file = "propcache-0.3.1-cp311-cp311-win32.whl", hash = "sha256:58aa11f4ca8b60113d4b8e32d37e7e78bd8af4d1a5b5cb4979ed856a45e62005"}, - {file = "propcache-0.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:9532ea0b26a401264b1365146c440a6d78269ed41f83f23818d4b79497aeabe7"}, - {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f78eb8422acc93d7b69964012ad7048764bb45a54ba7a39bb9e146c72ea29723"}, - {file = "propcache-0.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:89498dd49c2f9a026ee057965cdf8192e5ae070ce7d7a7bd4b66a8e257d0c976"}, - {file = "propcache-0.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:09400e98545c998d57d10035ff623266927cb784d13dd2b31fd33b8a5316b85b"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8efd8c5adc5a2c9d3b952815ff8f7710cefdcaf5f2c36d26aff51aeca2f12f"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c2fe5c910f6007e716a06d269608d307b4f36e7babee5f36533722660e8c4a70"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a0ab8cf8cdd2194f8ff979a43ab43049b1df0b37aa64ab7eca04ac14429baeb7"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:563f9d8c03ad645597b8d010ef4e9eab359faeb11a0a2ac9f7b4bc8c28ebef25"}, - {file = "propcache-0.3.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb6e0faf8cb6b4beea5d6ed7b5a578254c6d7df54c36ccd3d8b3eb00d6770277"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1c5c7ab7f2bb3f573d1cb921993006ba2d39e8621019dffb1c5bc94cdbae81e8"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:050b571b2e96ec942898f8eb46ea4bfbb19bd5502424747e83badc2d4a99a44e"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e1c4d24b804b3a87e9350f79e2371a705a188d292fd310e663483af6ee6718ee"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e4fe2a6d5ce975c117a6bb1e8ccda772d1e7029c1cca1acd209f91d30fa72815"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:feccd282de1f6322f56f6845bf1207a537227812f0a9bf5571df52bb418d79d5"}, - {file = "propcache-0.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ec314cde7314d2dd0510c6787326bbffcbdc317ecee6b7401ce218b3099075a7"}, - {file = "propcache-0.3.1-cp312-cp312-win32.whl", hash = "sha256:7d2d5a0028d920738372630870e7d9644ce437142197f8c827194fca404bf03b"}, - {file = "propcache-0.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:88c423efef9d7a59dae0614eaed718449c09a5ac79a5f224a8b9664d603f04a3"}, - {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1528ec4374617a7a753f90f20e2f551121bb558fcb35926f99e3c42367164b8"}, - {file = "propcache-0.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc1915ec523b3b494933b5424980831b636fe483d7d543f7afb7b3bf00f0c10f"}, - {file = "propcache-0.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a110205022d077da24e60b3df8bcee73971be9575dec5573dd17ae5d81751111"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d249609e547c04d190e820d0d4c8ca03ed4582bcf8e4e160a6969ddfb57b62e5"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ced33d827625d0a589e831126ccb4f5c29dfdf6766cac441d23995a65825dcb"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4114c4ada8f3181af20808bedb250da6bae56660e4b8dfd9cd95d4549c0962f7"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:975af16f406ce48f1333ec5e912fe11064605d5c5b3f6746969077cc3adeb120"}, - {file = "propcache-0.3.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a34aa3a1abc50740be6ac0ab9d594e274f59960d3ad253cd318af76b996dd654"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9cec3239c85ed15bfaded997773fdad9fb5662b0a7cbc854a43f291eb183179e"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:05543250deac8e61084234d5fc54f8ebd254e8f2b39a16b1dce48904f45b744b"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5cb5918253912e088edbf023788de539219718d3b10aef334476b62d2b53de53"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f3bbecd2f34d0e6d3c543fdb3b15d6b60dd69970c2b4c822379e5ec8f6f621d5"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:aca63103895c7d960a5b9b044a83f544b233c95e0dcff114389d64d762017af7"}, - {file = "propcache-0.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a0a9898fdb99bf11786265468571e628ba60af80dc3f6eb89a3545540c6b0ef"}, - {file = "propcache-0.3.1-cp313-cp313-win32.whl", hash = "sha256:3a02a28095b5e63128bcae98eb59025924f121f048a62393db682f049bf4ac24"}, - {file = "propcache-0.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:813fbb8b6aea2fc9659815e585e548fe706d6f663fa73dff59a1677d4595a037"}, - {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a444192f20f5ce8a5e52761a031b90f5ea6288b1eef42ad4c7e64fef33540b8f"}, - {file = "propcache-0.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0fbe94666e62ebe36cd652f5fc012abfbc2342de99b523f8267a678e4dfdee3c"}, - {file = "propcache-0.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f011f104db880f4e2166bcdcf7f58250f7a465bc6b068dc84c824a3d4a5c94dc"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e584b6d388aeb0001d6d5c2bd86b26304adde6d9bb9bfa9c4889805021b96de"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a17583515a04358b034e241f952f1715243482fc2c2945fd99a1b03a0bd77d6"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5aed8d8308215089c0734a2af4f2e95eeb360660184ad3912686c181e500b2e7"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d8e309ff9a0503ef70dc9a0ebd3e69cf7b3894c9ae2ae81fc10943c37762458"}, - {file = "propcache-0.3.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b655032b202028a582d27aeedc2e813299f82cb232f969f87a4fde491a233f11"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f64d91b751df77931336b5ff7bafbe8845c5770b06630e27acd5dbb71e1931c"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:19a06db789a4bd896ee91ebc50d059e23b3639c25d58eb35be3ca1cbe967c3bf"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bef100c88d8692864651b5f98e871fb090bd65c8a41a1cb0ff2322db39c96c27"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:87380fb1f3089d2a0b8b00f006ed12bd41bd858fabfa7330c954c70f50ed8757"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e474fc718e73ba5ec5180358aa07f6aded0ff5f2abe700e3115c37d75c947e18"}, - {file = "propcache-0.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:17d1c688a443355234f3c031349da69444be052613483f3e4158eef751abcd8a"}, - {file = "propcache-0.3.1-cp313-cp313t-win32.whl", hash = "sha256:359e81a949a7619802eb601d66d37072b79b79c2505e6d3fd8b945538411400d"}, - {file = "propcache-0.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e7fb9a84c9abbf2b2683fa3e7b0d7da4d8ecf139a1c635732a8bda29c5214b0e"}, - {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ed5f6d2edbf349bd8d630e81f474d33d6ae5d07760c44d33cd808e2f5c8f4ae6"}, - {file = "propcache-0.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:668ddddc9f3075af019f784456267eb504cb77c2c4bd46cc8402d723b4d200bf"}, - {file = "propcache-0.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0c86e7ceea56376216eba345aa1fc6a8a6b27ac236181f840d1d7e6a1ea9ba5c"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83be47aa4e35b87c106fc0c84c0fc069d3f9b9b06d3c494cd404ec6747544894"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:27c6ac6aa9fc7bc662f594ef380707494cb42c22786a558d95fcdedb9aa5d035"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64a956dff37080b352c1c40b2966b09defb014347043e740d420ca1eb7c9b908"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82de5da8c8893056603ac2d6a89eb8b4df49abf1a7c19d536984c8dd63f481d5"}, - {file = "propcache-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3c3a203c375b08fd06a20da3cf7aac293b834b6f4f4db71190e8422750cca5"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b303b194c2e6f171cfddf8b8ba30baefccf03d36a4d9cab7fd0bb68ba476a3d7"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:916cd229b0150129d645ec51614d38129ee74c03293a9f3f17537be0029a9641"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a461959ead5b38e2581998700b26346b78cd98540b5524796c175722f18b0294"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:069e7212890b0bcf9b2be0a03afb0c2d5161d91e1bf51569a64f629acc7defbf"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:ef2e4e91fb3945769e14ce82ed53007195e616a63aa43b40fb7ebaaf907c8d4c"}, - {file = "propcache-0.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8638f99dca15b9dff328fb6273e09f03d1c50d9b6512f3b65a4154588a7595fe"}, - {file = "propcache-0.3.1-cp39-cp39-win32.whl", hash = "sha256:6f173bbfe976105aaa890b712d1759de339d8a7cef2fc0a1714cc1a1e1c47f64"}, - {file = "propcache-0.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:603f1fe4144420374f1a69b907494c3acbc867a581c2d49d4175b0de7cc64566"}, - {file = "propcache-0.3.1-py3-none-any.whl", hash = "sha256:9a8ecf38de50a7f518c21568c80f985e776397b902f1ce0b01f799aba1608b40"}, - {file = "propcache-0.3.1.tar.gz", hash = "sha256:40d980c33765359098837527e18eddefc9a24cea5b45e078a7f3bb5b032c6ecf"}, -] - [[package]] name = "psutil" version = "7.0.0" @@ -1989,7 +970,7 @@ version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, @@ -2010,7 +991,7 @@ version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, @@ -2220,69 +1201,6 @@ files = [ {file = "pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d"}, ] -[[package]] -name = "pyyaml" -version = "6.0.2" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, -] - [[package]] name = "pyzmq" version = "27.0.0" @@ -2375,147 +1293,6 @@ files = [ [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} -[[package]] -name = "regex" -version = "2024.11.6" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, - {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, - {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, - {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, - {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, - {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, - {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, - {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, - {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, - {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, - {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, - {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, - {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, - {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, - {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, - {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, - {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, - {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, - {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, - {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, - {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, - {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, - {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, - {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, - {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, - {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, - {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, - {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, - {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, - {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, - {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, - {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, -] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-toolbelt" -version = "1.0.0" -description = "A utility belt for advanced users of python-requests" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["dev"] -files = [ - {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, - {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, -] - -[package.dependencies] -requests = ">=2.0.1,<3.0.0" - [[package]] name = "ruff" version = "0.5.7" @@ -2562,108 +1339,12 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] -[[package]] -name = "sqlalchemy" -version = "2.0.40" -description = "Database Abstraction Library" -optional = false -python-versions = ">=3.7" -groups = ["dev"] -files = [ - {file = "SQLAlchemy-2.0.40-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae9597cab738e7cc823f04a704fb754a9249f0b6695a6aeb63b74055cd417a96"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a5c21ab099a83d669ebb251fddf8f5cee4d75ea40a5a1653d9c43d60e20867"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bece9527f5a98466d67fb5d34dc560c4da964240d8b09024bb21c1246545e04e"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:8bb131ffd2165fae48162c7bbd0d97c84ab961deea9b8bab16366543deeab625"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9408fd453d5f8990405cc9def9af46bfbe3183e6110401b407c2d073c3388f47"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-win32.whl", hash = "sha256:00a494ea6f42a44c326477b5bee4e0fc75f6a80c01570a32b57e89cf0fbef85a"}, - {file = "SQLAlchemy-2.0.40-cp37-cp37m-win_amd64.whl", hash = "sha256:c7b927155112ac858357ccf9d255dd8c044fd9ad2dc6ce4c4149527c901fa4c3"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f1ea21bef99c703f44444ad29c2c1b6bd55d202750b6de8e06a955380f4725d7"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:afe63b208153f3a7a2d1a5b9df452b0673082588933e54e7c8aac457cf35e758"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8aae085ea549a1eddbc9298b113cffb75e514eadbb542133dd2b99b5fb3b6af"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ea9181284754d37db15156eb7be09c86e16e50fbe77610e9e7bee09291771a1"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5434223b795be5c5ef8244e5ac98056e290d3a99bdcc539b916e282b160dda00"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:15d08d5ef1b779af6a0909b97be6c1fd4298057504eb6461be88bd1696cb438e"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-win32.whl", hash = "sha256:cd2f75598ae70bcfca9117d9e51a3b06fe29edd972fdd7fd57cc97b4dbf3b08a"}, - {file = "sqlalchemy-2.0.40-cp310-cp310-win_amd64.whl", hash = "sha256:2cbafc8d39ff1abdfdda96435f38fab141892dc759a2165947d1a8fffa7ef596"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f6bacab7514de6146a1976bc56e1545bee247242fab030b89e5f70336fc0003e"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5654d1ac34e922b6c5711631f2da497d3a7bffd6f9f87ac23b35feea56098011"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35904d63412db21088739510216e9349e335f142ce4a04b69e2528020ee19ed4"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c7a80ed86d6aaacb8160a1caef6680d4ddd03c944d985aecee940d168c411d1"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:519624685a51525ddaa7d8ba8265a1540442a2ec71476f0e75241eb8263d6f51"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2ee5f9999a5b0e9689bed96e60ee53c3384f1a05c2dd8068cc2e8361b0df5b7a"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-win32.whl", hash = "sha256:c0cae71e20e3c02c52f6b9e9722bca70e4a90a466d59477822739dc31ac18b4b"}, - {file = "sqlalchemy-2.0.40-cp311-cp311-win_amd64.whl", hash = "sha256:574aea2c54d8f1dd1699449f332c7d9b71c339e04ae50163a3eb5ce4c4325ee4"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9d3b31d0a1c44b74d3ae27a3de422dfccd2b8f0b75e51ecb2faa2bf65ab1ba0d"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:37f7a0f506cf78c80450ed1e816978643d3969f99c4ac6b01104a6fe95c5490a"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bb933a650323e476a2e4fbef8997a10d0003d4da996aad3fd7873e962fdde4d"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6959738971b4745eea16f818a2cd086fb35081383b078272c35ece2b07012716"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:110179728e442dae85dd39591beb74072ae4ad55a44eda2acc6ec98ead80d5f2"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8040680eaacdce4d635f12c55c714f3d4c7f57da2bc47a01229d115bd319191"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-win32.whl", hash = "sha256:650490653b110905c10adac69408380688cefc1f536a137d0d69aca1069dc1d1"}, - {file = "sqlalchemy-2.0.40-cp312-cp312-win_amd64.whl", hash = "sha256:2be94d75ee06548d2fc591a3513422b873490efb124048f50556369a834853b0"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:915866fd50dd868fdcc18d61d8258db1bf9ed7fbd6dfec960ba43365952f3b01"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a4c5a2905a9ccdc67a8963e24abd2f7afcd4348829412483695c59e0af9a705"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55028d7a3ebdf7ace492fab9895cbc5270153f75442a0472d8516e03159ab364"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cfedff6878b0e0d1d0a50666a817ecd85051d12d56b43d9d425455e608b5ba0"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bb19e30fdae77d357ce92192a3504579abe48a66877f476880238a962e5b96db"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:16d325ea898f74b26ffcd1cf8c593b0beed8714f0317df2bed0d8d1de05a8f26"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-win32.whl", hash = "sha256:a669cbe5be3c63f75bcbee0b266779706f1a54bcb1000f302685b87d1b8c1500"}, - {file = "sqlalchemy-2.0.40-cp313-cp313-win_amd64.whl", hash = "sha256:641ee2e0834812d657862f3a7de95e0048bdcb6c55496f39c6fa3d435f6ac6ad"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:50f5885bbed261fc97e2e66c5156244f9704083a674b8d17f24c72217d29baf5"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf0e99cdb600eabcd1d65cdba0d3c91418fee21c4aa1d28db47d095b1064a7d8"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe147fcd85aaed53ce90645c91ed5fca0cc88a797314c70dfd9d35925bd5d106"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baf7cee56bd552385c1ee39af360772fbfc2f43be005c78d1140204ad6148438"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:4aeb939bcac234b88e2d25d5381655e8353fe06b4e50b1c55ecffe56951d18c2"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:c268b5100cfeaa222c40f55e169d484efa1384b44bf9ca415eae6d556f02cb08"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-win32.whl", hash = "sha256:46628ebcec4f23a1584fb52f2abe12ddb00f3bb3b7b337618b80fc1b51177aff"}, - {file = "sqlalchemy-2.0.40-cp38-cp38-win_amd64.whl", hash = "sha256:7e0505719939e52a7b0c65d20e84a6044eb3712bb6f239c6b1db77ba8e173a37"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c884de19528e0fcd9dc34ee94c810581dd6e74aef75437ff17e696c2bfefae3e"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1abb387710283fc5983d8a1209d9696a4eae9db8d7ac94b402981fe2fe2e39ad"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cfa124eda500ba4b0d3afc3e91ea27ed4754e727c7f025f293a22f512bcd4c9"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b6b28d303b9d57c17a5164eb1fd2d5119bb6ff4413d5894e74873280483eeb5"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b5a5bbe29c10c5bfd63893747a1bf6f8049df607638c786252cb9243b86b6706"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f0fda83e113bb0fb27dc003685f32a5dcb99c9c4f41f4fa0838ac35265c23b5c"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-win32.whl", hash = "sha256:957f8d85d5e834397ef78a6109550aeb0d27a53b5032f7a57f2451e1adc37e98"}, - {file = "sqlalchemy-2.0.40-cp39-cp39-win_amd64.whl", hash = "sha256:1ffdf9c91428e59744f8e6f98190516f8e1d05eec90e936eb08b257332c5e870"}, - {file = "sqlalchemy-2.0.40-py3-none-any.whl", hash = "sha256:32587e2e1e359276957e6fe5dad089758bc042a971a8a09ae8ecf7a8fe23d07a"}, - {file = "sqlalchemy-2.0.40.tar.gz", hash = "sha256:d827099289c64589418ebbcaead0145cd19f4e3e8a93919a0100247af245fa00"}, -] - -[package.dependencies] -greenlet = {version = ">=1", markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} -typing-extensions = ">=4.6.0" - -[package.extras] -aiomysql = ["aiomysql (>=0.2.0)", "greenlet (>=1)"] -aioodbc = ["aioodbc", "greenlet (>=1)"] -aiosqlite = ["aiosqlite", "greenlet (>=1)", "typing_extensions (!=3.10.0.1)"] -asyncio = ["greenlet (>=1)"] -asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (>=1)"] -mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] -mssql = ["pyodbc"] -mssql-pymssql = ["pymssql"] -mssql-pyodbc = ["pyodbc"] -mypy = ["mypy (>=0.910)"] -mysql = ["mysqlclient (>=1.4.0)"] -mysql-connector = ["mysql-connector-python"] -oracle = ["cx_oracle (>=8)"] -oracle-oracledb = ["oracledb (>=1.0.1)"] -postgresql = ["psycopg2 (>=2.7)"] -postgresql-asyncpg = ["asyncpg", "greenlet (>=1)"] -postgresql-pg8000 = ["pg8000 (>=1.29.1)"] -postgresql-psycopg = ["psycopg (>=3.0.7)"] -postgresql-psycopg2binary = ["psycopg2-binary"] -postgresql-psycopg2cffi = ["psycopg2cffi"] -postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] -pymysql = ["pymysql"] -sqlcipher = ["sqlcipher3_binary"] - [[package]] name = "stack-data" version = "0.6.3" @@ -2684,75 +1365,6 @@ pure-eval = "*" [package.extras] tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] -[[package]] -name = "tenacity" -version = "8.5.0" -description = "Retry code until it succeeds" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "tenacity-8.5.0-py3-none-any.whl", hash = "sha256:b594c2a5945830c267ce6b79a166228323ed52718f30302c1359836112346687"}, - {file = "tenacity-8.5.0.tar.gz", hash = "sha256:8bc6c0c8a09b31e6cad13c47afbed1a567518250a9a171418582ed8d9c20ca78"}, -] - -[package.extras] -doc = ["reno", "sphinx"] -test = ["pytest", "tornado (>=4.5)", "typeguard"] - -[[package]] -name = "tiktoken" -version = "0.5.2" -description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" -optional = false -python-versions = ">=3.8" -groups = ["dev"] -files = [ - {file = "tiktoken-0.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c4e654282ef05ec1bd06ead22141a9a1687991cef2c6a81bdd1284301abc71d"}, - {file = "tiktoken-0.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7b3134aa24319f42c27718c6967f3c1916a38a715a0fa73d33717ba121231307"}, - {file = "tiktoken-0.5.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6092e6e77730929c8c6a51bb0d7cfdf1b72b63c4d033d6258d1f2ee81052e9e5"}, - {file = "tiktoken-0.5.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72ad8ae2a747622efae75837abba59be6c15a8f31b4ac3c6156bc56ec7a8e631"}, - {file = "tiktoken-0.5.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51cba7c8711afa0b885445f0637f0fcc366740798c40b981f08c5f984e02c9d1"}, - {file = "tiktoken-0.5.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3d8c7d2c9313f8e92e987d585ee2ba0f7c40a0de84f4805b093b634f792124f5"}, - {file = "tiktoken-0.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:692eca18c5fd8d1e0dde767f895c17686faaa102f37640e884eecb6854e7cca7"}, - {file = "tiktoken-0.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:138d173abbf1ec75863ad68ca289d4da30caa3245f3c8d4bfb274c4d629a2f77"}, - {file = "tiktoken-0.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7388fdd684690973fdc450b47dfd24d7f0cbe658f58a576169baef5ae4658607"}, - {file = "tiktoken-0.5.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a114391790113bcff670c70c24e166a841f7ea8f47ee2fe0e71e08b49d0bf2d4"}, - {file = "tiktoken-0.5.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca96f001e69f6859dd52926d950cfcc610480e920e576183497ab954e645e6ac"}, - {file = "tiktoken-0.5.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:15fed1dd88e30dfadcdd8e53a8927f04e1f6f81ad08a5ca824858a593ab476c7"}, - {file = "tiktoken-0.5.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:93f8e692db5756f7ea8cb0cfca34638316dcf0841fb8469de8ed7f6a015ba0b0"}, - {file = "tiktoken-0.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:bcae1c4c92df2ffc4fe9f475bf8148dbb0ee2404743168bbeb9dcc4b79dc1fdd"}, - {file = "tiktoken-0.5.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b76a1e17d4eb4357d00f0622d9a48ffbb23401dcf36f9716d9bd9c8e79d421aa"}, - {file = "tiktoken-0.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01d8b171bb5df4035580bc26d4f5339a6fd58d06f069091899d4a798ea279d3e"}, - {file = "tiktoken-0.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42adf7d4fb1ed8de6e0ff2e794a6a15005f056a0d83d22d1d6755a39bffd9e7f"}, - {file = "tiktoken-0.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3f894dbe0adb44609f3d532b8ea10820d61fdcb288b325a458dfc60fefb7db"}, - {file = "tiktoken-0.5.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:58ccfddb4e62f0df974e8f7e34a667981d9bb553a811256e617731bf1d007d19"}, - {file = "tiktoken-0.5.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58902a8bad2de4268c2a701f1c844d22bfa3cbcc485b10e8e3e28a050179330b"}, - {file = "tiktoken-0.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:5e39257826d0647fcac403d8fa0a474b30d02ec8ffc012cfaf13083e9b5e82c5"}, - {file = "tiktoken-0.5.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8bde3b0fbf09a23072d39c1ede0e0821f759b4fa254a5f00078909158e90ae1f"}, - {file = "tiktoken-0.5.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2ddee082dcf1231ccf3a591d234935e6acf3e82ee28521fe99af9630bc8d2a60"}, - {file = "tiktoken-0.5.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35c057a6a4e777b5966a7540481a75a31429fc1cb4c9da87b71c8b75b5143037"}, - {file = "tiktoken-0.5.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c4a049b87e28f1dc60509f8eb7790bc8d11f9a70d99b9dd18dfdd81a084ffe6"}, - {file = "tiktoken-0.5.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5bf5ce759089f4f6521ea6ed89d8f988f7b396e9f4afb503b945f5c949c6bec2"}, - {file = "tiktoken-0.5.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0c964f554af1a96884e01188f480dad3fc224c4bbcf7af75d4b74c4b74ae0125"}, - {file = "tiktoken-0.5.2-cp38-cp38-win_amd64.whl", hash = "sha256:368dd5726d2e8788e47ea04f32e20f72a2012a8a67af5b0b003d1e059f1d30a3"}, - {file = "tiktoken-0.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a2deef9115b8cd55536c0a02c0203512f8deb2447f41585e6d929a0b878a0dd2"}, - {file = "tiktoken-0.5.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ed7d380195affbf886e2f8b92b14edfe13f4768ff5fc8de315adba5b773815e"}, - {file = "tiktoken-0.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c76fce01309c8140ffe15eb34ded2bb94789614b7d1d09e206838fc173776a18"}, - {file = "tiktoken-0.5.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60a5654d6a2e2d152637dd9a880b4482267dfc8a86ccf3ab1cec31a8c76bfae8"}, - {file = "tiktoken-0.5.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:41d4d3228e051b779245a8ddd21d4336f8975563e92375662f42d05a19bdff41"}, - {file = "tiktoken-0.5.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c1cdec2c92fcde8c17a50814b525ae6a88e8e5b02030dc120b76e11db93f13"}, - {file = "tiktoken-0.5.2-cp39-cp39-win_amd64.whl", hash = "sha256:84ddb36faedb448a50b246e13d1b6ee3437f60b7169b723a4b2abad75e914f3e"}, - {file = "tiktoken-0.5.2.tar.gz", hash = "sha256:f54c581f134a8ea96ce2023ab221d4d4d81ab614efa0b2fbce926387deb56c80"}, -] - -[package.dependencies] -regex = ">=2022.1.18" -requests = ">=2.26.0" - -[package.extras] -blobfile = ["blobfile (>=2)"] - [[package]] name = "tomli" version = "2.2.1" @@ -2824,7 +1436,7 @@ version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -2880,40 +1492,6 @@ files = [ {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, ] -[[package]] -name = "typing-inspect" -version = "0.9.0" -description = "Runtime inspection utilities for typing module." -optional = false -python-versions = "*" -groups = ["dev"] -files = [ - {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, - {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, -] - -[package.dependencies] -mypy-extensions = ">=0.3.0" -typing-extensions = ">=3.7.4" - -[[package]] -name = "urllib3" -version = "2.4.0" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, - {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - [[package]] name = "wcwidth" version = "0.2.13" @@ -2926,125 +1504,6 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] -[[package]] -name = "yarl" -version = "1.20.0" -description = "Yet another URL library" -optional = false -python-versions = ">=3.9" -groups = ["dev"] -files = [ - {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f1f6670b9ae3daedb325fa55fbe31c22c8228f6e0b513772c2e1c623caa6ab22"}, - {file = "yarl-1.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85a231fa250dfa3308f3c7896cc007a47bc76e9e8e8595c20b7426cac4884c62"}, - {file = "yarl-1.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a06701b647c9939d7019acdfa7ebbfbb78ba6aa05985bb195ad716ea759a569"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7595498d085becc8fb9203aa314b136ab0516c7abd97e7d74f7bb4eb95042abe"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af5607159085dcdb055d5678fc2d34949bd75ae6ea6b4381e784bbab1c3aa195"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95b50910e496567434cb77a577493c26bce0f31c8a305135f3bda6a2483b8e10"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b594113a301ad537766b4e16a5a6750fcbb1497dcc1bc8a4daae889e6402a634"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:083ce0393ea173cd37834eb84df15b6853b555d20c52703e21fbababa8c129d2"}, - {file = "yarl-1.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1a350a652bbbe12f666109fbddfdf049b3ff43696d18c9ab1531fbba1c977a"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fb0caeac4a164aadce342f1597297ec0ce261ec4532bbc5a9ca8da5622f53867"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:d88cc43e923f324203f6ec14434fa33b85c06d18d59c167a0637164863b8e995"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e52d6ed9ea8fd3abf4031325dc714aed5afcbfa19ee4a89898d663c9976eb487"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ce360ae48a5e9961d0c730cf891d40698a82804e85f6e74658fb175207a77cb2"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:06d06c9d5b5bc3eb56542ceeba6658d31f54cf401e8468512447834856fb0e61"}, - {file = "yarl-1.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c27d98f4e5c4060582f44e58309c1e55134880558f1add7a87c1bc36ecfade19"}, - {file = "yarl-1.20.0-cp310-cp310-win32.whl", hash = "sha256:f4d3fa9b9f013f7050326e165c3279e22850d02ae544ace285674cb6174b5d6d"}, - {file = "yarl-1.20.0-cp310-cp310-win_amd64.whl", hash = "sha256:bc906b636239631d42eb8a07df8359905da02704a868983265603887ed68c076"}, - {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fdb5204d17cb32b2de2d1e21c7461cabfacf17f3645e4b9039f210c5d3378bf3"}, - {file = "yarl-1.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eaddd7804d8e77d67c28d154ae5fab203163bd0998769569861258e525039d2a"}, - {file = "yarl-1.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:634b7ba6b4a85cf67e9df7c13a7fb2e44fa37b5d34501038d174a63eaac25ee2"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d409e321e4addf7d97ee84162538c7258e53792eb7c6defd0c33647d754172e"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:ea52f7328a36960ba3231c6677380fa67811b414798a6e071c7085c57b6d20a9"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c8703517b924463994c344dcdf99a2d5ce9eca2b6882bb640aa555fb5efc706a"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:077989b09ffd2f48fb2d8f6a86c5fef02f63ffe6b1dd4824c76de7bb01e4f2e2"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0acfaf1da020253f3533526e8b7dd212838fdc4109959a2c53cafc6db611bff2"}, - {file = "yarl-1.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4230ac0b97ec5eeb91d96b324d66060a43fd0d2a9b603e3327ed65f084e41f8"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a6a1e6ae21cdd84011c24c78d7a126425148b24d437b5702328e4ba640a8902"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:86de313371ec04dd2531f30bc41a5a1a96f25a02823558ee0f2af0beaa7ca791"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dd59c9dd58ae16eaa0f48c3d0cbe6be8ab4dc7247c3ff7db678edecbaf59327f"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a0bc5e05f457b7c1994cc29e83b58f540b76234ba6b9648a4971ddc7f6aa52da"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c9471ca18e6aeb0e03276b5e9b27b14a54c052d370a9c0c04a68cefbd1455eb4"}, - {file = "yarl-1.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:40ed574b4df723583a26c04b298b283ff171bcc387bc34c2683235e2487a65a5"}, - {file = "yarl-1.20.0-cp311-cp311-win32.whl", hash = "sha256:db243357c6c2bf3cd7e17080034ade668d54ce304d820c2a58514a4e51d0cfd6"}, - {file = "yarl-1.20.0-cp311-cp311-win_amd64.whl", hash = "sha256:8c12cd754d9dbd14204c328915e23b0c361b88f3cffd124129955e60a4fbfcfb"}, - {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e06b9f6cdd772f9b665e5ba8161968e11e403774114420737f7884b5bd7bdf6f"}, - {file = "yarl-1.20.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b9ae2fbe54d859b3ade40290f60fe40e7f969d83d482e84d2c31b9bff03e359e"}, - {file = "yarl-1.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d12b8945250d80c67688602c891237994d203d42427cb14e36d1a732eda480e"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:087e9731884621b162a3e06dc0d2d626e1542a617f65ba7cc7aeab279d55ad33"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69df35468b66c1a6e6556248e6443ef0ec5f11a7a4428cf1f6281f1879220f58"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b2992fe29002fd0d4cbaea9428b09af9b8686a9024c840b8a2b8f4ea4abc16f"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4c903e0b42aab48abfbac668b5a9d7b6938e721a6341751331bcd7553de2dcae"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf099e2432131093cc611623e0b0bcc399b8cddd9a91eded8bfb50402ec35018"}, - {file = "yarl-1.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a7f62f5dc70a6c763bec9ebf922be52aa22863d9496a9a30124d65b489ea672"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:54ac15a8b60382b2bcefd9a289ee26dc0920cf59b05368c9b2b72450751c6eb8"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:25b3bc0763a7aca16a0f1b5e8ef0f23829df11fb539a1b70476dcab28bd83da7"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b2586e36dc070fc8fad6270f93242124df68b379c3a251af534030a4a33ef594"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:866349da9d8c5290cfefb7fcc47721e94de3f315433613e01b435473be63daa6"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:33bb660b390a0554d41f8ebec5cd4475502d84104b27e9b42f5321c5192bfcd1"}, - {file = "yarl-1.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737e9f171e5a07031cbee5e9180f6ce21a6c599b9d4b2c24d35df20a52fabf4b"}, - {file = "yarl-1.20.0-cp312-cp312-win32.whl", hash = "sha256:839de4c574169b6598d47ad61534e6981979ca2c820ccb77bf70f4311dd2cc64"}, - {file = "yarl-1.20.0-cp312-cp312-win_amd64.whl", hash = "sha256:3d7dbbe44b443b0c4aa0971cb07dcb2c2060e4a9bf8d1301140a33a93c98e18c"}, - {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2137810a20b933b1b1b7e5cf06a64c3ed3b4747b0e5d79c9447c00db0e2f752f"}, - {file = "yarl-1.20.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:447c5eadd750db8389804030d15f43d30435ed47af1313303ed82a62388176d3"}, - {file = "yarl-1.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42fbe577272c203528d402eec8bf4b2d14fd49ecfec92272334270b850e9cd7d"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18e321617de4ab170226cd15006a565d0fa0d908f11f724a2c9142d6b2812ab0"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4345f58719825bba29895011e8e3b545e6e00257abb984f9f27fe923afca2501"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d9b980d7234614bc4674468ab173ed77d678349c860c3af83b1fffb6a837ddc"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af4baa8a445977831cbaa91a9a84cc09debb10bc8391f128da2f7bd070fc351d"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:123393db7420e71d6ce40d24885a9e65eb1edefc7a5228db2d62bcab3386a5c0"}, - {file = "yarl-1.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab47acc9332f3de1b39e9b702d9c916af7f02656b2a86a474d9db4e53ef8fd7a"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4a34c52ed158f89876cba9c600b2c964dfc1ca52ba7b3ab6deb722d1d8be6df2"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:04d8cfb12714158abf2618f792c77bc5c3d8c5f37353e79509608be4f18705c9"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7dc63ad0d541c38b6ae2255aaa794434293964677d5c1ec5d0116b0e308031f5"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d02b591a64e4e6ca18c5e3d925f11b559c763b950184a64cf47d74d7e41877"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:95fc9876f917cac7f757df80a5dda9de59d423568460fe75d128c813b9af558e"}, - {file = "yarl-1.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:bb769ae5760cd1c6a712135ee7915f9d43f11d9ef769cb3f75a23e398a92d384"}, - {file = "yarl-1.20.0-cp313-cp313-win32.whl", hash = "sha256:70e0c580a0292c7414a1cead1e076c9786f685c1fc4757573d2967689b370e62"}, - {file = "yarl-1.20.0-cp313-cp313-win_amd64.whl", hash = "sha256:4c43030e4b0af775a85be1fa0433119b1565673266a70bf87ef68a9d5ba3174c"}, - {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b6c4c3d0d6a0ae9b281e492b1465c72de433b782e6b5001c8e7249e085b69051"}, - {file = "yarl-1.20.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8681700f4e4df891eafa4f69a439a6e7d480d64e52bf460918f58e443bd3da7d"}, - {file = "yarl-1.20.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:84aeb556cb06c00652dbf87c17838eb6d92cfd317799a8092cee0e570ee11229"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f166eafa78810ddb383e930d62e623d288fb04ec566d1b4790099ae0f31485f1"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5d3d6d14754aefc7a458261027a562f024d4f6b8a798adb472277f675857b1eb"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a8f64df8ed5d04c51260dbae3cc82e5649834eebea9eadfd829837b8093eb00"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d9949eaf05b4d30e93e4034a7790634bbb41b8be2d07edd26754f2e38e491de"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c366b254082d21cc4f08f522ac201d0d83a8b8447ab562732931d31d80eb2a5"}, - {file = "yarl-1.20.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91bc450c80a2e9685b10e34e41aef3d44ddf99b3a498717938926d05ca493f6a"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c2aa4387de4bc3a5fe158080757748d16567119bef215bec643716b4fbf53f9"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:d2cbca6760a541189cf87ee54ff891e1d9ea6406079c66341008f7ef6ab61145"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:798a5074e656f06b9fad1a162be5a32da45237ce19d07884d0b67a0aa9d5fdda"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f106e75c454288472dbe615accef8248c686958c2e7dd3b8d8ee2669770d020f"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:3b60a86551669c23dc5445010534d2c5d8a4e012163218fc9114e857c0586fdd"}, - {file = "yarl-1.20.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e429857e341d5e8e15806118e0294f8073ba9c4580637e59ab7b238afca836f"}, - {file = "yarl-1.20.0-cp313-cp313t-win32.whl", hash = "sha256:65a4053580fe88a63e8e4056b427224cd01edfb5f951498bfefca4052f0ce0ac"}, - {file = "yarl-1.20.0-cp313-cp313t-win_amd64.whl", hash = "sha256:53b2da3a6ca0a541c1ae799c349788d480e5144cac47dba0266c7cb6c76151fe"}, - {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:119bca25e63a7725b0c9d20ac67ca6d98fa40e5a894bd5d4686010ff73397914"}, - {file = "yarl-1.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:35d20fb919546995f1d8c9e41f485febd266f60e55383090010f272aca93edcc"}, - {file = "yarl-1.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:484e7a08f72683c0f160270566b4395ea5412b4359772b98659921411d32ad26"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d8a3d54a090e0fff5837cd3cc305dd8a07d3435a088ddb1f65e33b322f66a94"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f0cf05ae2d3d87a8c9022f3885ac6dea2b751aefd66a4f200e408a61ae9b7f0d"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a884b8974729e3899d9287df46f015ce53f7282d8d3340fa0ed57536b440621c"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8d8aa8dd89ffb9a831fedbcb27d00ffd9f4842107d52dc9d57e64cb34073d5c"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b4e88d6c3c8672f45a30867817e4537df1bbc6f882a91581faf1f6d9f0f1b5a"}, - {file = "yarl-1.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdb77efde644d6f1ad27be8a5d67c10b7f769804fff7a966ccb1da5a4de4b656"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4ba5e59f14bfe8d261a654278a0f6364feef64a794bd456a8c9e823071e5061c"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d0bf955b96ea44ad914bc792c26a0edcd71b4668b93cbcd60f5b0aeaaed06c64"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:27359776bc359ee6eaefe40cb19060238f31228799e43ebd3884e9c589e63b20"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:04d9c7a1dc0a26efb33e1acb56c8849bd57a693b85f44774356c92d610369efa"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:faa709b66ae0e24c8e5134033187a972d849d87ed0a12a0366bedcc6b5dc14a5"}, - {file = "yarl-1.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:44869ee8538208fe5d9342ed62c11cc6a7a1af1b3d0bb79bb795101b6e77f6e0"}, - {file = "yarl-1.20.0-cp39-cp39-win32.whl", hash = "sha256:b7fa0cb9fd27ffb1211cde944b41f5c67ab1c13a13ebafe470b1e206b8459da8"}, - {file = "yarl-1.20.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4fad6e5189c847820288286732075f213eabf81be4d08d6cc309912e62be5b7"}, - {file = "yarl-1.20.0-py3-none-any.whl", hash = "sha256:5d0fe6af927a47a230f31e6004621fd0959eaa915fc62acfafa67ff7229a3124"}, - {file = "yarl-1.20.0.tar.gz", hash = "sha256:686d51e51ee5dfe62dec86e4866ee0e9ed66df700d55c828a615640adc885307"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" -propcache = ">=0.2.1" - [[package]] name = "zipp" version = "3.23.0" @@ -3069,4 +1528,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.1" python-versions = ">=3.9.0,<4.0" -content-hash = "1162a281f5781c88d119450ecf074169ddd3e350b5dee1e1a26fa8975d197043" +content-hash = "a6f5d7b6c9746338f09af4e277ca80817748cb5c4b6086171634e9086351b6f8" diff --git a/pyproject.toml b/pyproject.toml index cf2ba63..fd2cc38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,8 +46,6 @@ pytest = "^7.4.0" pytest-asyncio = "^0.23.5" python-dateutil = "^2.9.0" types-python-dateutil = "^2.9.0.20240316" -langchain = "^0.1.3" -langchain-openai = "^0.0.3" black = "^24.4.2" ruff = "^0.5.0" ipykernel = "^6.29.4" From f2cbf6cd67c8b41eccbdc9dec171f1f9a961234a Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Mon, 20 Oct 2025 18:25:57 -0400 Subject: [PATCH 31/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fd2cc38..7341ee6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.6.0" +version = "3.7.0" description = "" readme = "README.md" authors = [] From 4c46ca34a7afb46c15a84b39c3e1440dbc003c8e Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 22:28:07 +0000 Subject: [PATCH 32/74] SDK regeneration --- reference.md | 79 +++++++++++++ src/zep_cloud/__init__.py | 2 + src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/thread/client.py | 93 +++++++++++++++ src/zep_cloud/thread/raw_client.py | 157 +++++++++++++++++++++++++ src/zep_cloud/types/__init__.py | 2 + src/zep_cloud/types/apidata_message.py | 65 ++++++++++ src/zep_cloud/types/episode.py | 7 +- 8 files changed, 406 insertions(+), 3 deletions(-) create mode 100644 src/zep_cloud/types/apidata_message.py diff --git a/reference.md b/reference.md index e5ea89f..a9fb2c8 100644 --- a/reference.md +++ b/reference.md @@ -1209,6 +1209,85 @@ client.graph.update(
## Thread +
client.thread.update_message_metadata(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Updates the metadata of a message. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.thread.update_message_metadata( + message_uuid="messageUUID", + metadata={"key": "value"}, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**message_uuid:** `str` — The UUID of the message. + +
+
+ +
+
+ +**metadata:** `typing.Dict[str, typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+
client.thread.list_all(...)
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 7d5460e..4e0354c 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,6 +7,7 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, + ApidataMessage, CloneGraphResponse, ComparisonOperator, DateFilter, @@ -58,6 +59,7 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataMessage", "AsyncZep", "BadRequestError", "CloneGraphResponse", diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 3175a89..8211606 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.6.0", + "User-Agent": "zep-cloud/3.7.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.6.0", + "X-Fern-SDK-Version": "3.7.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index 07cf67f..84402a7 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -5,6 +5,7 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions from ..types.add_thread_messages_response import AddThreadMessagesResponse +from ..types.apidata_message import ApidataMessage from ..types.message import Message from ..types.message_list_response import MessageListResponse from ..types.role_type import RoleType @@ -34,6 +35,48 @@ def with_raw_response(self) -> RawThreadClient: """ return self._raw_client + def update_message_metadata( + self, + message_uuid: str, + *, + metadata: typing.Dict[str, typing.Optional[typing.Any]], + request_options: typing.Optional[RequestOptions] = None, + ) -> ApidataMessage: + """ + Updates the metadata of a message. + + Parameters + ---------- + message_uuid : str + The UUID of the message. + + metadata : typing.Dict[str, typing.Optional[typing.Any]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataMessage + The updated message. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.thread.update_message_metadata( + message_uuid="messageUUID", + metadata={"key": "value"}, + ) + """ + _response = self._raw_client.update_message_metadata( + message_uuid, metadata=metadata, request_options=request_options + ) + return _response.data + def list_all( self, *, @@ -386,6 +429,56 @@ def with_raw_response(self) -> AsyncRawThreadClient: """ return self._raw_client + async def update_message_metadata( + self, + message_uuid: str, + *, + metadata: typing.Dict[str, typing.Optional[typing.Any]], + request_options: typing.Optional[RequestOptions] = None, + ) -> ApidataMessage: + """ + Updates the metadata of a message. + + Parameters + ---------- + message_uuid : str + The UUID of the message. + + metadata : typing.Dict[str, typing.Optional[typing.Any]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataMessage + The updated message. + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.thread.update_message_metadata( + message_uuid="messageUUID", + metadata={"key": "value"}, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update_message_metadata( + message_uuid, metadata=metadata, request_options=request_options + ) + return _response.data + async def list_all( self, *, diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index 14390e8..3d0a23b 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -15,6 +15,7 @@ from ..errors.not_found_error import NotFoundError from ..types.add_thread_messages_response import AddThreadMessagesResponse from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.apidata_message import ApidataMessage from ..types.message import Message from ..types.message_list_response import MessageListResponse from ..types.role_type import RoleType @@ -32,6 +33,84 @@ class RawThreadClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper + def update_message_metadata( + self, + message_uuid: str, + *, + metadata: typing.Dict[str, typing.Optional[typing.Any]], + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ApidataMessage]: + """ + Updates the metadata of a message. + + Parameters + ---------- + message_uuid : str + The UUID of the message. + + metadata : typing.Dict[str, typing.Optional[typing.Any]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ApidataMessage] + The updated message. + """ + _response = self._client_wrapper.httpx_client.request( + f"messages/{jsonable_encoder(message_uuid)}/metadata", + method="PATCH", + json={ + "metadata": metadata, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataMessage, + parse_obj_as( + type_=ApidataMessage, # 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 + ) + def list_all( self, *, @@ -593,6 +672,84 @@ class AsyncRawThreadClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper + async def update_message_metadata( + self, + message_uuid: str, + *, + metadata: typing.Dict[str, typing.Optional[typing.Any]], + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ApidataMessage]: + """ + Updates the metadata of a message. + + Parameters + ---------- + message_uuid : str + The UUID of the message. + + metadata : typing.Dict[str, typing.Optional[typing.Any]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ApidataMessage] + The updated message. + """ + _response = await self._client_wrapper.httpx_client.request( + f"messages/{jsonable_encoder(message_uuid)}/metadata", + method="PATCH", + json={ + "metadata": metadata, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataMessage, + parse_obj_as( + type_=ApidataMessage, # 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 + ) + async def list_all( self, *, diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 5118dc8..aab25e9 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,6 +6,7 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError +from .apidata_message import ApidataMessage from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter @@ -50,6 +51,7 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataMessage", "CloneGraphResponse", "ComparisonOperator", "DateFilter", diff --git a/src/zep_cloud/types/apidata_message.py b/src/zep_cloud/types/apidata_message.py new file mode 100644 index 0000000..2b3a7b9 --- /dev/null +++ b/src/zep_cloud/types/apidata_message.py @@ -0,0 +1,65 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ..core.serialization import FieldMetadata +from .role_type import RoleType + + +class ApidataMessage(UniversalBaseModel): + content: str = pydantic.Field() + """ + The content of the message. + """ + + created_at: typing.Optional[str] = pydantic.Field(default=None) + """ + The timestamp of when the message was created. + """ + + metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + """ + The metadata associated with the message. + """ + + processed: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether the message has been processed. + """ + + role: typing.Optional[str] = pydantic.Field(default=None) + """ + Customizable role of the sender of the message (e.g., "john", "sales_agent"). + """ + + role_type: RoleType = pydantic.Field() + """ + The type of the role (e.g., "user", "system"). + """ + + token_count: typing.Optional[int] = pydantic.Field(default=None) + """ + Deprecated + """ + + updated_at: typing.Optional[str] = pydantic.Field(default=None) + """ + Deprecated + """ + + uuid_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="uuid")] = pydantic.Field(default=None) + """ + The unique identifier of the message. + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/episode.py b/src/zep_cloud/types/episode.py index 36a6e94..dfd8825 100644 --- a/src/zep_cloud/types/episode.py +++ b/src/zep_cloud/types/episode.py @@ -13,6 +13,7 @@ class Episode(UniversalBaseModel): content: str created_at: str + metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None processed: typing.Optional[bool] = None relevance: typing.Optional[float] = pydantic.Field(default=None) """ @@ -35,9 +36,13 @@ class Episode(UniversalBaseModel): Score is the reranker output: sigmoid-distributed logits [0,1] when using cross_encoder reranker, or RRF ordinal rank when using rrf reranker """ - session_id: typing.Optional[str] = None source: typing.Optional[GraphDataType] = None source_description: typing.Optional[str] = None + thread_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional thread ID, will be present if the episode is part of a thread + """ + uuid_: typing_extensions.Annotated[str, FieldMetadata(alias="uuid")] if IS_PYDANTIC_V2: From e4b95ad207a89580a3cf2ff1855aa188e81a19aa Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 23:59:05 +0000 Subject: [PATCH 33/74] SDK regeneration --- reference.md | 159 +++++++++--------- src/zep_cloud/thread/__init__.py | 3 +- src/zep_cloud/thread/client.py | 96 +---------- src/zep_cloud/thread/message/__init__.py | 4 + src/zep_cloud/thread/message/client.py | 131 +++++++++++++++ src/zep_cloud/thread/message/raw_client.py | 184 +++++++++++++++++++++ src/zep_cloud/thread/raw_client.py | 157 ------------------ src/zep_cloud/types/message.py | 5 + 8 files changed, 409 insertions(+), 330 deletions(-) create mode 100644 src/zep_cloud/thread/message/__init__.py create mode 100644 src/zep_cloud/thread/message/client.py create mode 100644 src/zep_cloud/thread/message/raw_client.py diff --git a/reference.md b/reference.md index a9fb2c8..5d5c083 100644 --- a/reference.md +++ b/reference.md @@ -1209,85 +1209,6 @@ client.graph.update(
## Thread -
client.thread.update_message_metadata(...) -
-
- -#### 📝 Description - -
-
- -
-
- -Updates the metadata of a message. -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from zep_cloud import Zep - -client = Zep( - api_key="YOUR_API_KEY", -) -client.thread.update_message_metadata( - message_uuid="messageUUID", - metadata={"key": "value"}, -) - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**message_uuid:** `str` — The UUID of the message. - -
-
- -
-
- -**metadata:** `typing.Dict[str, typing.Optional[typing.Any]]` - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- - -
-
-
-
client.thread.list_all(...)
@@ -3627,3 +3548,83 @@ client.graph.node.get(
+## Thread Message +
client.thread.message.update(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Updates a message. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.thread.message.update( + message_uuid="messageUUID", + metadata={"key": "value"}, +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**message_uuid:** `str` — The UUID of the message. + +
+
+ +
+
+ +**metadata:** `typing.Dict[str, typing.Optional[typing.Any]]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ diff --git a/src/zep_cloud/thread/__init__.py b/src/zep_cloud/thread/__init__.py index 9f80a4e..047bbca 100644 --- a/src/zep_cloud/thread/__init__.py +++ b/src/zep_cloud/thread/__init__.py @@ -3,5 +3,6 @@ # isort: skip_file from .types import ThreadGetUserContextRequestMode +from . import message -__all__ = ["ThreadGetUserContextRequestMode"] +__all__ = ["ThreadGetUserContextRequestMode", "message"] diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index 84402a7..eaf964d 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -5,7 +5,6 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions from ..types.add_thread_messages_response import AddThreadMessagesResponse -from ..types.apidata_message import ApidataMessage from ..types.message import Message from ..types.message_list_response import MessageListResponse from ..types.role_type import RoleType @@ -13,6 +12,7 @@ from ..types.thread import Thread from ..types.thread_context_response import ThreadContextResponse from ..types.thread_list_response import ThreadListResponse +from .message.client import AsyncMessageClient, MessageClient from .raw_client import AsyncRawThreadClient, RawThreadClient from .types.thread_get_user_context_request_mode import ThreadGetUserContextRequestMode @@ -23,6 +23,7 @@ class ThreadClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._raw_client = RawThreadClient(client_wrapper=client_wrapper) + self.message = MessageClient(client_wrapper=client_wrapper) @property def with_raw_response(self) -> RawThreadClient: @@ -35,48 +36,6 @@ def with_raw_response(self) -> RawThreadClient: """ return self._raw_client - def update_message_metadata( - self, - message_uuid: str, - *, - metadata: typing.Dict[str, typing.Optional[typing.Any]], - request_options: typing.Optional[RequestOptions] = None, - ) -> ApidataMessage: - """ - Updates the metadata of a message. - - Parameters - ---------- - message_uuid : str - The UUID of the message. - - metadata : typing.Dict[str, typing.Optional[typing.Any]] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ApidataMessage - The updated message. - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.thread.update_message_metadata( - message_uuid="messageUUID", - metadata={"key": "value"}, - ) - """ - _response = self._raw_client.update_message_metadata( - message_uuid, metadata=metadata, request_options=request_options - ) - return _response.data - def list_all( self, *, @@ -417,6 +376,7 @@ def add_messages_batch( class AsyncThreadClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._raw_client = AsyncRawThreadClient(client_wrapper=client_wrapper) + self.message = AsyncMessageClient(client_wrapper=client_wrapper) @property def with_raw_response(self) -> AsyncRawThreadClient: @@ -429,56 +389,6 @@ def with_raw_response(self) -> AsyncRawThreadClient: """ return self._raw_client - async def update_message_metadata( - self, - message_uuid: str, - *, - metadata: typing.Dict[str, typing.Optional[typing.Any]], - request_options: typing.Optional[RequestOptions] = None, - ) -> ApidataMessage: - """ - Updates the metadata of a message. - - Parameters - ---------- - message_uuid : str - The UUID of the message. - - metadata : typing.Dict[str, typing.Optional[typing.Any]] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ApidataMessage - The updated message. - - Examples - -------- - import asyncio - - from zep_cloud import AsyncZep - - client = AsyncZep( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.thread.update_message_metadata( - message_uuid="messageUUID", - metadata={"key": "value"}, - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.update_message_metadata( - message_uuid, metadata=metadata, request_options=request_options - ) - return _response.data - async def list_all( self, *, diff --git a/src/zep_cloud/thread/message/__init__.py b/src/zep_cloud/thread/message/__init__.py new file mode 100644 index 0000000..5cde020 --- /dev/null +++ b/src/zep_cloud/thread/message/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/src/zep_cloud/thread/message/client.py b/src/zep_cloud/thread/message/client.py new file mode 100644 index 0000000..8c6a187 --- /dev/null +++ b/src/zep_cloud/thread/message/client.py @@ -0,0 +1,131 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ...core.request_options import RequestOptions +from ...types.apidata_message import ApidataMessage +from .raw_client import AsyncRawMessageClient, RawMessageClient + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class MessageClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawMessageClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawMessageClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawMessageClient + """ + return self._raw_client + + def update( + self, + message_uuid: str, + *, + metadata: typing.Dict[str, typing.Optional[typing.Any]], + request_options: typing.Optional[RequestOptions] = None, + ) -> ApidataMessage: + """ + Updates a message. + + Parameters + ---------- + message_uuid : str + The UUID of the message. + + metadata : typing.Dict[str, typing.Optional[typing.Any]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataMessage + The updated message. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.thread.message.update( + message_uuid="messageUUID", + metadata={"key": "value"}, + ) + """ + _response = self._raw_client.update(message_uuid, metadata=metadata, request_options=request_options) + return _response.data + + +class AsyncMessageClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawMessageClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawMessageClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawMessageClient + """ + return self._raw_client + + async def update( + self, + message_uuid: str, + *, + metadata: typing.Dict[str, typing.Optional[typing.Any]], + request_options: typing.Optional[RequestOptions] = None, + ) -> ApidataMessage: + """ + Updates a message. + + Parameters + ---------- + message_uuid : str + The UUID of the message. + + metadata : typing.Dict[str, typing.Optional[typing.Any]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataMessage + The updated message. + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.thread.message.update( + message_uuid="messageUUID", + metadata={"key": "value"}, + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update(message_uuid, metadata=metadata, request_options=request_options) + return _response.data diff --git a/src/zep_cloud/thread/message/raw_client.py b/src/zep_cloud/thread/message/raw_client.py new file mode 100644 index 0000000..d5e8be4 --- /dev/null +++ b/src/zep_cloud/thread/message/raw_client.py @@ -0,0 +1,184 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ...core.api_error import ApiError as core_api_error_ApiError +from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ...core.http_response import AsyncHttpResponse, HttpResponse +from ...core.jsonable_encoder import jsonable_encoder +from ...core.pydantic_utilities import parse_obj_as +from ...core.request_options import RequestOptions +from ...errors.internal_server_error import InternalServerError +from ...errors.not_found_error import NotFoundError +from ...types.api_error import ApiError as types_api_error_ApiError +from ...types.apidata_message import ApidataMessage + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class RawMessageClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def update( + self, + message_uuid: str, + *, + metadata: typing.Dict[str, typing.Optional[typing.Any]], + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ApidataMessage]: + """ + Updates a message. + + Parameters + ---------- + message_uuid : str + The UUID of the message. + + metadata : typing.Dict[str, typing.Optional[typing.Any]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ApidataMessage] + The updated message. + """ + _response = self._client_wrapper.httpx_client.request( + f"messages/{jsonable_encoder(message_uuid)}", + method="PATCH", + json={ + "metadata": metadata, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataMessage, + parse_obj_as( + type_=ApidataMessage, # 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 AsyncRawMessageClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def update( + self, + message_uuid: str, + *, + metadata: typing.Dict[str, typing.Optional[typing.Any]], + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ApidataMessage]: + """ + Updates a message. + + Parameters + ---------- + message_uuid : str + The UUID of the message. + + metadata : typing.Dict[str, typing.Optional[typing.Any]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ApidataMessage] + The updated message. + """ + _response = await self._client_wrapper.httpx_client.request( + f"messages/{jsonable_encoder(message_uuid)}", + method="PATCH", + json={ + "metadata": metadata, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataMessage, + parse_obj_as( + type_=ApidataMessage, # 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 + ) diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index 3d0a23b..14390e8 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -15,7 +15,6 @@ from ..errors.not_found_error import NotFoundError from ..types.add_thread_messages_response import AddThreadMessagesResponse from ..types.api_error import ApiError as types_api_error_ApiError -from ..types.apidata_message import ApidataMessage from ..types.message import Message from ..types.message_list_response import MessageListResponse from ..types.role_type import RoleType @@ -33,84 +32,6 @@ class RawThreadClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def update_message_metadata( - self, - message_uuid: str, - *, - metadata: typing.Dict[str, typing.Optional[typing.Any]], - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[ApidataMessage]: - """ - Updates the metadata of a message. - - Parameters - ---------- - message_uuid : str - The UUID of the message. - - metadata : typing.Dict[str, typing.Optional[typing.Any]] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[ApidataMessage] - The updated message. - """ - _response = self._client_wrapper.httpx_client.request( - f"messages/{jsonable_encoder(message_uuid)}/metadata", - method="PATCH", - json={ - "metadata": metadata, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - ApidataMessage, - parse_obj_as( - type_=ApidataMessage, # 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 - ) - def list_all( self, *, @@ -672,84 +593,6 @@ class AsyncRawThreadClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def update_message_metadata( - self, - message_uuid: str, - *, - metadata: typing.Dict[str, typing.Optional[typing.Any]], - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ApidataMessage]: - """ - Updates the metadata of a message. - - Parameters - ---------- - message_uuid : str - The UUID of the message. - - metadata : typing.Dict[str, typing.Optional[typing.Any]] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[ApidataMessage] - The updated message. - """ - _response = await self._client_wrapper.httpx_client.request( - f"messages/{jsonable_encoder(message_uuid)}/metadata", - method="PATCH", - json={ - "metadata": metadata, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - ApidataMessage, - parse_obj_as( - type_=ApidataMessage, # 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 - ) - async def list_all( self, *, diff --git a/src/zep_cloud/types/message.py b/src/zep_cloud/types/message.py index b3f845a..6fa5181 100644 --- a/src/zep_cloud/types/message.py +++ b/src/zep_cloud/types/message.py @@ -20,6 +20,11 @@ class Message(UniversalBaseModel): The timestamp of when the message was created. """ + metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) + """ + The metadata associated with the message. + """ + name: typing.Optional[str] = pydantic.Field(default=None) """ Customizable name of the sender of the message (e.g., "john", "sales_agent"). From f304d370505b38f671dfbb97a884b7617046e632 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 13:58:27 +0000 Subject: [PATCH 34/74] SDK regeneration --- src/zep_cloud/__init__.py | 2 - src/zep_cloud/thread/message/client.py | 10 ++-- src/zep_cloud/thread/message/raw_client.py | 18 +++--- src/zep_cloud/types/__init__.py | 2 - src/zep_cloud/types/apidata_message.py | 65 ---------------------- 5 files changed, 14 insertions(+), 83 deletions(-) delete mode 100644 src/zep_cloud/types/apidata_message.py diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 4e0354c..7d5460e 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,7 +7,6 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, - ApidataMessage, CloneGraphResponse, ComparisonOperator, DateFilter, @@ -59,7 +58,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataMessage", "AsyncZep", "BadRequestError", "CloneGraphResponse", diff --git a/src/zep_cloud/thread/message/client.py b/src/zep_cloud/thread/message/client.py index 8c6a187..0c8adcb 100644 --- a/src/zep_cloud/thread/message/client.py +++ b/src/zep_cloud/thread/message/client.py @@ -4,7 +4,7 @@ from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ...core.request_options import RequestOptions -from ...types.apidata_message import ApidataMessage +from ...types.message import Message from .raw_client import AsyncRawMessageClient, RawMessageClient # this is used as the default value for optional parameters @@ -32,7 +32,7 @@ def update( *, metadata: typing.Dict[str, typing.Optional[typing.Any]], request_options: typing.Optional[RequestOptions] = None, - ) -> ApidataMessage: + ) -> Message: """ Updates a message. @@ -48,7 +48,7 @@ def update( Returns ------- - ApidataMessage + Message The updated message. Examples @@ -88,7 +88,7 @@ async def update( *, metadata: typing.Dict[str, typing.Optional[typing.Any]], request_options: typing.Optional[RequestOptions] = None, - ) -> ApidataMessage: + ) -> Message: """ Updates a message. @@ -104,7 +104,7 @@ async def update( Returns ------- - ApidataMessage + Message The updated message. Examples diff --git a/src/zep_cloud/thread/message/raw_client.py b/src/zep_cloud/thread/message/raw_client.py index d5e8be4..2002948 100644 --- a/src/zep_cloud/thread/message/raw_client.py +++ b/src/zep_cloud/thread/message/raw_client.py @@ -12,7 +12,7 @@ from ...errors.internal_server_error import InternalServerError from ...errors.not_found_error import NotFoundError from ...types.api_error import ApiError as types_api_error_ApiError -from ...types.apidata_message import ApidataMessage +from ...types.message import Message # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -28,7 +28,7 @@ def update( *, metadata: typing.Dict[str, typing.Optional[typing.Any]], request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[ApidataMessage]: + ) -> HttpResponse[Message]: """ Updates a message. @@ -44,7 +44,7 @@ def update( Returns ------- - HttpResponse[ApidataMessage] + HttpResponse[Message] The updated message. """ _response = self._client_wrapper.httpx_client.request( @@ -62,9 +62,9 @@ def update( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ApidataMessage, + Message, parse_obj_as( - type_=ApidataMessage, # type: ignore + type_=Message, # type: ignore object_=_response.json(), ), ) @@ -111,7 +111,7 @@ async def update( *, metadata: typing.Dict[str, typing.Optional[typing.Any]], request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ApidataMessage]: + ) -> AsyncHttpResponse[Message]: """ Updates a message. @@ -127,7 +127,7 @@ async def update( Returns ------- - AsyncHttpResponse[ApidataMessage] + AsyncHttpResponse[Message] The updated message. """ _response = await self._client_wrapper.httpx_client.request( @@ -145,9 +145,9 @@ async def update( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ApidataMessage, + Message, parse_obj_as( - type_=ApidataMessage, # type: ignore + type_=Message, # type: ignore object_=_response.json(), ), ) diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index aab25e9..5118dc8 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,7 +6,6 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError -from .apidata_message import ApidataMessage from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter @@ -51,7 +50,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataMessage", "CloneGraphResponse", "ComparisonOperator", "DateFilter", diff --git a/src/zep_cloud/types/apidata_message.py b/src/zep_cloud/types/apidata_message.py deleted file mode 100644 index 2b3a7b9..0000000 --- a/src/zep_cloud/types/apidata_message.py +++ /dev/null @@ -1,65 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -import pydantic -import typing_extensions -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from ..core.serialization import FieldMetadata -from .role_type import RoleType - - -class ApidataMessage(UniversalBaseModel): - content: str = pydantic.Field() - """ - The content of the message. - """ - - created_at: typing.Optional[str] = pydantic.Field(default=None) - """ - The timestamp of when the message was created. - """ - - metadata: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = pydantic.Field(default=None) - """ - The metadata associated with the message. - """ - - processed: typing.Optional[bool] = pydantic.Field(default=None) - """ - Whether the message has been processed. - """ - - role: typing.Optional[str] = pydantic.Field(default=None) - """ - Customizable role of the sender of the message (e.g., "john", "sales_agent"). - """ - - role_type: RoleType = pydantic.Field() - """ - The type of the role (e.g., "user", "system"). - """ - - token_count: typing.Optional[int] = pydantic.Field(default=None) - """ - Deprecated - """ - - updated_at: typing.Optional[str] = pydantic.Field(default=None) - """ - Deprecated - """ - - uuid_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="uuid")] = pydantic.Field(default=None) - """ - The unique identifier of the message. - """ - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow From 4a2f6553a39c479a8e4c8708c166b73a4edada00 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 21 Oct 2025 12:04:48 -0400 Subject: [PATCH 35/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7341ee6..30b8a7c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.7.0" +version = "3.8.0" description = "" readme = "README.md" authors = [] From 0c97c25027a8f079167d3913a507823c9e8ea1e1 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 16:06:31 +0000 Subject: [PATCH 36/74] SDK regeneration --- reference.md | 326 +++++++++--------- src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/graph/client.py | 322 +++++++++--------- src/zep_cloud/graph/raw_client.py | 474 +++++++++++---------------- 4 files changed, 507 insertions(+), 619 deletions(-) diff --git a/reference.md b/reference.md index 5d5c083..6bff9ec 100644 --- a/reference.md +++ b/reference.md @@ -1,173 +1,5 @@ # Reference ## Graph -
client.graph.list_entity_types(...) -
-
- -#### 📝 Description - -
-
- -
-
- -Returns all entity types for a project, user, or graph. -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from zep_cloud import Zep - -client = Zep( - api_key="YOUR_API_KEY", -) -client.graph.list_entity_types() - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**user_id:** `typing.Optional[str]` — User ID to get user-specific entity types - -
-
- -
-
- -**graph_id:** `typing.Optional[str]` — Graph ID to get graph-specific entity types - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- - -
-
-
- -
client.graph.set_entity_types_internal(...) -
-
- -#### 📝 Description - -
-
- -
-
- -Sets the entity types for multiple users and graphs, replacing any existing ones. -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from zep_cloud import Zep - -client = Zep( - api_key="YOUR_API_KEY", -) -client.graph.set_entity_types_internal() - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**edge_types:** `typing.Optional[typing.Sequence[EdgeType]]` - -
-
- -
-
- -**entity_types:** `typing.Optional[typing.Sequence[EntityType]]` - -
-
- -
-
- -**graph_ids:** `typing.Optional[typing.Sequence[str]]` - -
-
- -
-
- -**user_ids:** `typing.Optional[typing.Sequence[str]]` - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- - -
-
-
-
client.graph.add(...)
@@ -1204,6 +1036,164 @@ client.graph.update(
+ + +
+ +
client.graph.set_ontology(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Sets custom entity and edge types for your graph. This wrapper method +provides a clean interface for defining your graph schema with custom +entity and edge types. + +See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.set_ontology() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**entities:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — Dictionary mapping entity type names to their definitions + +
+
+ +
+
+ +**edges:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — Dictionary mapping edge type names to their definitions with source/target constraints + +
+
+ +
+
+ +**user_ids:** `typing.Optional[typing.Sequence[str]]` — Optional list of user IDs to apply ontology to + +
+
+ +
+
+ +**graph_ids:** `typing.Optional[typing.Sequence[str]]` — Optional list of graph IDs to apply ontology to + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.graph.list_ontology() +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieves the current entity and edge types configured for your graph. + +See the [full documentation](/customizing-graph-structure) for details. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.list_ontology() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**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 8211606..7c17fe7 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.7.0", + "User-Agent": "zep-cloud/3.8.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.7.0", + "X-Fern-SDK-Version": "3.8.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 47a3c0d..57c5491 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -6,8 +6,6 @@ from ..core.request_options import RequestOptions from ..types.add_triple_response import AddTripleResponse from ..types.clone_graph_response import CloneGraphResponse -from ..types.edge_type import EdgeType -from ..types.entity_type import EntityType from ..types.entity_type_response import EntityTypeResponse from ..types.episode import Episode from ..types.episode_data import EpisodeData @@ -49,94 +47,6 @@ def with_raw_response(self) -> RawGraphClient: """ return self._raw_client - def list_entity_types( - self, - *, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> EntityTypeResponse: - """ - Returns all entity types for a project, user, or graph. - - Parameters - ---------- - user_id : typing.Optional[str] - User ID to get user-specific entity types - - graph_id : typing.Optional[str] - Graph ID to get graph-specific entity types - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - EntityTypeResponse - The list of entity types. - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.graph.list_entity_types() - """ - _response = self._raw_client.list_entity_types( - user_id=user_id, graph_id=graph_id, request_options=request_options - ) - return _response.data - - def set_entity_types_internal( - self, - *, - edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, - entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> SuccessResponse: - """ - Sets the entity types for multiple users and graphs, replacing any existing ones. - - Parameters - ---------- - edge_types : typing.Optional[typing.Sequence[EdgeType]] - - entity_types : typing.Optional[typing.Sequence[EntityType]] - - graph_ids : typing.Optional[typing.Sequence[str]] - - user_ids : typing.Optional[typing.Sequence[str]] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - SuccessResponse - Entity types set successfully - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.graph.set_entity_types_internal() - """ - _response = self._raw_client.set_entity_types_internal( - edge_types=edge_types, - entity_types=entity_types, - graph_ids=graph_ids, - user_ids=user_ids, - request_options=request_options, - ) - return _response.data - def add( self, *, @@ -706,130 +616,106 @@ def update( ) return _response.data - -class AsyncGraphClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._raw_client = AsyncRawGraphClient(client_wrapper=client_wrapper) - self.edge = AsyncEdgeClient(client_wrapper=client_wrapper) - - self.episode = AsyncEpisodeClient(client_wrapper=client_wrapper) - - self.node = AsyncNodeClient(client_wrapper=client_wrapper) - - @property - def with_raw_response(self) -> AsyncRawGraphClient: - """ - Retrieves a raw implementation of this client that returns raw responses. - - Returns - ------- - AsyncRawGraphClient - """ - return self._raw_client - - async def list_entity_types( + def set_ontology( self, *, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, + entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> EntityTypeResponse: + ) -> SuccessResponse: """ - Returns all entity types for a project, user, or graph. + Sets custom entity and edge types for your graph. This wrapper method + provides a clean interface for defining your graph schema with custom + entity and edge types. + + See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. Parameters ---------- - user_id : typing.Optional[str] - User ID to get user-specific entity types + entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping entity type names to their definitions - graph_id : typing.Optional[str] - Graph ID to get graph-specific entity types + edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping edge type names to their definitions with source/target constraints + + user_ids : typing.Optional[typing.Sequence[str]] + Optional list of user IDs to apply ontology to + + graph_ids : typing.Optional[typing.Sequence[str]] + Optional list of graph IDs to apply ontology to request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - EntityTypeResponse - The list of entity types. + SuccessResponse + Ontology set successfully Examples -------- - import asyncio - - from zep_cloud import AsyncZep + from zep_cloud import Zep - client = AsyncZep( + client = Zep( api_key="YOUR_API_KEY", ) - - - async def main() -> None: - await client.graph.list_entity_types() - - - asyncio.run(main()) + client.graph.set_ontology() """ - _response = await self._raw_client.list_entity_types( - user_id=user_id, graph_id=graph_id, request_options=request_options + _response = self._raw_client.set_ontology( + entities=entities, edges=edges, user_ids=user_ids, graph_ids=graph_ids, request_options=request_options ) return _response.data - async def set_entity_types_internal( - self, - *, - edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, - entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> SuccessResponse: + def list_ontology(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: """ - Sets the entity types for multiple users and graphs, replacing any existing ones. + Retrieves the current entity and edge types configured for your graph. + + See the [full documentation](/customizing-graph-structure) for details. Parameters ---------- - edge_types : typing.Optional[typing.Sequence[EdgeType]] - - entity_types : typing.Optional[typing.Sequence[EntityType]] - - graph_ids : typing.Optional[typing.Sequence[str]] - - user_ids : typing.Optional[typing.Sequence[str]] - request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - SuccessResponse - Entity types set successfully + EntityTypeResponse + Current ontology Examples -------- - import asyncio - - from zep_cloud import AsyncZep + from zep_cloud import Zep - client = AsyncZep( + client = Zep( api_key="YOUR_API_KEY", ) + client.graph.list_ontology() + """ + _response = self._raw_client.list_ontology(request_options=request_options) + return _response.data - async def main() -> None: - await client.graph.set_entity_types_internal() +class AsyncGraphClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawGraphClient(client_wrapper=client_wrapper) + self.edge = AsyncEdgeClient(client_wrapper=client_wrapper) + self.episode = AsyncEpisodeClient(client_wrapper=client_wrapper) - asyncio.run(main()) + self.node = AsyncNodeClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawGraphClient: """ - _response = await self._raw_client.set_entity_types_internal( - edge_types=edge_types, - entity_types=entity_types, - graph_ids=graph_ids, - user_ids=user_ids, - request_options=request_options, - ) - return _response.data + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawGraphClient + """ + return self._raw_client async def add( self, @@ -1481,3 +1367,99 @@ async def main() -> None: request_options=request_options, ) return _response.data + + async def set_ontology( + self, + *, + entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Sets custom entity and edge types for your graph. This wrapper method + provides a clean interface for defining your graph schema with custom + entity and edge types. + + See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. + + Parameters + ---------- + entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping entity type names to their definitions + + edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping edge type names to their definitions with source/target constraints + + user_ids : typing.Optional[typing.Sequence[str]] + Optional list of user IDs to apply ontology to + + graph_ids : typing.Optional[typing.Sequence[str]] + Optional list of graph IDs to apply ontology to + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Ontology set successfully + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.set_ontology() + + + asyncio.run(main()) + """ + _response = await self._raw_client.set_ontology( + entities=entities, edges=edges, user_ids=user_ids, graph_ids=graph_ids, request_options=request_options + ) + return _response.data + + async def list_ontology(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: + """ + Retrieves the current entity and edge types configured for your graph. + + See the [full documentation](/customizing-graph-structure) for details. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + EntityTypeResponse + Current ontology + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.list_ontology() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_ontology(request_options=request_options) + return _response.data diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index f34a0fd..515857a 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -16,8 +16,6 @@ from ..types.add_triple_response import AddTripleResponse from ..types.api_error import ApiError as types_api_error_ApiError from ..types.clone_graph_response import CloneGraphResponse -from ..types.edge_type import EdgeType -from ..types.entity_type import EntityType from ..types.entity_type_response import EntityTypeResponse from ..types.episode import Episode from ..types.episode_data import EpisodeData @@ -39,183 +37,6 @@ class RawGraphClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def list_entity_types( - self, - *, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[EntityTypeResponse]: - """ - Returns all entity types for a project, user, or graph. - - Parameters - ---------- - user_id : typing.Optional[str] - User ID to get user-specific entity types - - graph_id : typing.Optional[str] - Graph ID to get graph-specific entity types - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[EntityTypeResponse] - The list of entity types. - """ - _response = self._client_wrapper.httpx_client.request( - "entity-types", - method="GET", - params={ - "user_id": user_id, - "graph_id": graph_id, - }, - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - EntityTypeResponse, - parse_obj_as( - type_=EntityTypeResponse, # type: ignore - object_=_response.json(), - ), - ) - return HttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - 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 == 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 - ) - - def set_entity_types_internal( - self, - *, - edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, - entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[SuccessResponse]: - """ - Sets the entity types for multiple users and graphs, replacing any existing ones. - - Parameters - ---------- - edge_types : typing.Optional[typing.Sequence[EdgeType]] - - entity_types : typing.Optional[typing.Sequence[EntityType]] - - graph_ids : typing.Optional[typing.Sequence[str]] - - user_ids : typing.Optional[typing.Sequence[str]] - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[SuccessResponse] - Entity types set successfully - """ - _response = self._client_wrapper.httpx_client.request( - "entity-types", - method="PUT", - json={ - "edge_types": convert_and_respect_annotation_metadata( - object_=edge_types, annotation=typing.Sequence[EdgeType], direction="write" - ), - "entity_types": convert_and_respect_annotation_metadata( - object_=entity_types, annotation=typing.Sequence[EntityType], direction="write" - ), - "graph_ids": graph_ids, - "user_ids": user_ids, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - 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 == 400: - raise BadRequestError( - 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 - ) - def add( self, *, @@ -1165,89 +986,69 @@ def update( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - -class AsyncRawGraphClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._client_wrapper = client_wrapper - - async def list_entity_types( + def set_ontology( self, *, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, + entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[EntityTypeResponse]: + ) -> HttpResponse[SuccessResponse]: """ - Returns all entity types for a project, user, or graph. + Sets custom entity and edge types for your graph. This wrapper method + provides a clean interface for defining your graph schema with custom + entity and edge types. + + See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. Parameters ---------- - user_id : typing.Optional[str] - User ID to get user-specific entity types + entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping entity type names to their definitions - graph_id : typing.Optional[str] - Graph ID to get graph-specific entity types + edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping edge type names to their definitions with source/target constraints + + user_ids : typing.Optional[typing.Sequence[str]] + Optional list of user IDs to apply ontology to + + graph_ids : typing.Optional[typing.Sequence[str]] + Optional list of graph IDs to apply ontology to request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[EntityTypeResponse] - The list of entity types. + HttpResponse[SuccessResponse] + Ontology set successfully """ - _response = await self._client_wrapper.httpx_client.request( - "entity-types", - method="GET", - params={ - "user_id": user_id, - "graph_id": graph_id, + _response = self._client_wrapper.httpx_client.request( + "graph/set-ontology", + method="PUT", + json={ + "entities": entities, + "edges": edges, + "user_ids": user_ids, + "graph_ids": graph_ids, + }, + headers={ + "content-type": "application/json", }, request_options=request_options, + omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - EntityTypeResponse, + SuccessResponse, parse_obj_as( - type_=EntityTypeResponse, # type: ignore + type_=SuccessResponse, # type: ignore object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( - 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 == 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(), - ), - ), - ) + return HttpResponse(response=_response, data=_data) _response_json = _response.json() except JSONDecodeError: raise core_api_error_ApiError( @@ -1257,67 +1058,41 @@ async def list_entity_types( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def set_entity_types_internal( - self, - *, - edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, - entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[SuccessResponse]: + def list_ontology( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[EntityTypeResponse]: """ - Sets the entity types for multiple users and graphs, replacing any existing ones. + Retrieves the current entity and edge types configured for your graph. + + See the [full documentation](/customizing-graph-structure) for details. Parameters ---------- - edge_types : typing.Optional[typing.Sequence[EdgeType]] - - entity_types : typing.Optional[typing.Sequence[EntityType]] - - graph_ids : typing.Optional[typing.Sequence[str]] - - user_ids : typing.Optional[typing.Sequence[str]] - request_options : typing.Optional[RequestOptions] Request-specific configuration. Returns ------- - AsyncHttpResponse[SuccessResponse] - Entity types set successfully + HttpResponse[EntityTypeResponse] + Current ontology """ - _response = await self._client_wrapper.httpx_client.request( - "entity-types", - method="PUT", - json={ - "edge_types": convert_and_respect_annotation_metadata( - object_=edge_types, annotation=typing.Sequence[EdgeType], direction="write" - ), - "entity_types": convert_and_respect_annotation_metadata( - object_=entity_types, annotation=typing.Sequence[EntityType], direction="write" - ), - "graph_ids": graph_ids, - "user_ids": user_ids, - }, - headers={ - "content-type": "application/json", - }, + _response = self._client_wrapper.httpx_client.request( + "graph/list-ontology", + method="GET", request_options=request_options, - omit=OMIT, ) try: if 200 <= _response.status_code < 300: _data = typing.cast( - SuccessResponse, + EntityTypeResponse, parse_obj_as( - type_=SuccessResponse, # type: ignore + type_=EntityTypeResponse, # type: ignore object_=_response.json(), ), ) - return AsyncHttpResponse(response=_response, data=_data) - if _response.status_code == 400: - raise BadRequestError( + return HttpResponse(response=_response, data=_data) + if _response.status_code == 404: + raise NotFoundError( headers=dict(_response.headers), body=typing.cast( types_api_error_ApiError, @@ -1347,6 +1122,11 @@ async def set_entity_types_internal( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + +class AsyncRawGraphClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + async def add( self, *, @@ -2297,3 +2077,139 @@ async def update( raise core_api_error_ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + + async def set_ontology( + self, + *, + entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Sets custom entity and edge types for your graph. This wrapper method + provides a clean interface for defining your graph schema with custom + entity and edge types. + + See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. + + Parameters + ---------- + entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping entity type names to their definitions + + edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping edge type names to their definitions with source/target constraints + + user_ids : typing.Optional[typing.Sequence[str]] + Optional list of user IDs to apply ontology to + + graph_ids : typing.Optional[typing.Sequence[str]] + Optional list of graph IDs to apply ontology to + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Ontology set successfully + """ + _response = await self._client_wrapper.httpx_client.request( + "graph/set-ontology", + method="PUT", + json={ + "entities": entities, + "edges": edges, + "user_ids": user_ids, + "graph_ids": graph_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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) + _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 + ) + + async def list_ontology( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[EntityTypeResponse]: + """ + Retrieves the current entity and edge types configured for your graph. + + See the [full documentation](/customizing-graph-structure) for details. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[EntityTypeResponse] + Current ontology + """ + _response = await self._client_wrapper.httpx_client.request( + "graph/list-ontology", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + EntityTypeResponse, + parse_obj_as( + type_=EntityTypeResponse, # 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 + ) From 7d3634b499e12f6fd779c8cff83c99693e45c73c Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 16:47:36 +0000 Subject: [PATCH 37/74] SDK regeneration --- reference.md | 61 +++++++ src/zep_cloud/__init__.py | 7 +- src/zep_cloud/base_client.py | 3 + src/zep_cloud/project/__init__.py | 4 + src/zep_cloud/project/client.py | 100 ++++++++++ src/zep_cloud/project/raw_client.py | 171 ++++++++++++++++++ src/zep_cloud/types/__init__.py | 4 + src/zep_cloud/types/apidata_project_info.py | 24 +++ .../types/apidata_project_info_response.py | 20 ++ 9 files changed, 393 insertions(+), 1 deletion(-) create mode 100644 src/zep_cloud/project/__init__.py create mode 100644 src/zep_cloud/project/client.py create mode 100644 src/zep_cloud/project/raw_client.py create mode 100644 src/zep_cloud/types/apidata_project_info.py create mode 100644 src/zep_cloud/types/apidata_project_info_response.py diff --git a/reference.md b/reference.md index 6bff9ec..51dda19 100644 --- a/reference.md +++ b/reference.md @@ -1194,6 +1194,67 @@ client.graph.list_ontology() + + +
+ +## Project +
client.project.get() +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieve project info based on the provided api key. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.project.get() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 7d5460e..5479525 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,6 +7,8 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, + ApidataProjectInfo, + ApidataProjectInfoResponse, CloneGraphResponse, ComparisonOperator, DateFilter, @@ -47,7 +49,7 @@ UserNodeResponse, ) from .errors import BadRequestError, InternalServerError, NotFoundError -from . import graph, thread, user +from . import graph, project, thread, user from .client import AsyncZep, Zep from .environment import ZepEnvironment from .thread import ThreadGetUserContextRequestMode @@ -58,6 +60,8 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataProjectInfo", + "ApidataProjectInfoResponse", "AsyncZep", "BadRequestError", "CloneGraphResponse", @@ -105,6 +109,7 @@ "ZepEnvironment", "__version__", "graph", + "project", "thread", "user", ] diff --git a/src/zep_cloud/base_client.py b/src/zep_cloud/base_client.py index 1e9f513..83ca50e 100644 --- a/src/zep_cloud/base_client.py +++ b/src/zep_cloud/base_client.py @@ -8,6 +8,7 @@ from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .environment import ZepEnvironment from .graph.client import AsyncGraphClient, GraphClient +from .project.client import AsyncProjectClient, ProjectClient from .thread.client import AsyncThreadClient, ThreadClient from .user.client import AsyncUserClient, UserClient @@ -80,6 +81,7 @@ def __init__( timeout=_defaulted_timeout, ) self.graph = GraphClient(client_wrapper=self._client_wrapper) + self.project = ProjectClient(client_wrapper=self._client_wrapper) self.thread = ThreadClient(client_wrapper=self._client_wrapper) self.user = UserClient(client_wrapper=self._client_wrapper) @@ -152,6 +154,7 @@ def __init__( timeout=_defaulted_timeout, ) self.graph = AsyncGraphClient(client_wrapper=self._client_wrapper) + self.project = AsyncProjectClient(client_wrapper=self._client_wrapper) self.thread = AsyncThreadClient(client_wrapper=self._client_wrapper) self.user = AsyncUserClient(client_wrapper=self._client_wrapper) diff --git a/src/zep_cloud/project/__init__.py b/src/zep_cloud/project/__init__.py new file mode 100644 index 0000000..5cde020 --- /dev/null +++ b/src/zep_cloud/project/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/src/zep_cloud/project/client.py b/src/zep_cloud/project/client.py new file mode 100644 index 0000000..888d65f --- /dev/null +++ b/src/zep_cloud/project/client.py @@ -0,0 +1,100 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.request_options import RequestOptions +from ..types.apidata_project_info_response import ApidataProjectInfoResponse +from .raw_client import AsyncRawProjectClient, RawProjectClient + + +class ProjectClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawProjectClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawProjectClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawProjectClient + """ + return self._raw_client + + def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ApidataProjectInfoResponse: + """ + Retrieve project info based on the provided api key. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataProjectInfoResponse + Retrieved + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.project.get() + """ + _response = self._raw_client.get(request_options=request_options) + return _response.data + + +class AsyncProjectClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawProjectClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawProjectClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawProjectClient + """ + return self._raw_client + + async def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ApidataProjectInfoResponse: + """ + Retrieve project info based on the provided api key. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataProjectInfoResponse + Retrieved + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.project.get() + + + asyncio.run(main()) + """ + _response = await self._raw_client.get(request_options=request_options) + return _response.data diff --git a/src/zep_cloud/project/raw_client.py b/src/zep_cloud/project/raw_client.py new file mode 100644 index 0000000..b5a650b --- /dev/null +++ b/src/zep_cloud/project/raw_client.py @@ -0,0 +1,171 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ..core.api_error import ApiError as core_api_error_ApiError +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.http_response import AsyncHttpResponse, HttpResponse +from ..core.pydantic_utilities import parse_obj_as +from ..core.request_options import RequestOptions +from ..errors.bad_request_error import BadRequestError +from ..errors.internal_server_error import InternalServerError +from ..errors.not_found_error import NotFoundError +from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.apidata_project_info_response import ApidataProjectInfoResponse + + +class RawProjectClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def get( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ApidataProjectInfoResponse]: + """ + Retrieve project info based on the provided api key. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ApidataProjectInfoResponse] + Retrieved + """ + _response = self._client_wrapper.httpx_client.request( + "projects/info", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataProjectInfoResponse, + parse_obj_as( + type_=ApidataProjectInfoResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 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 AsyncRawProjectClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def get( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[ApidataProjectInfoResponse]: + """ + Retrieve project info based on the provided api key. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ApidataProjectInfoResponse] + Retrieved + """ + _response = await self._client_wrapper.httpx_client.request( + "projects/info", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataProjectInfoResponse, + parse_obj_as( + type_=ApidataProjectInfoResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 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 + ) diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 5118dc8..26e7ff8 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,6 +6,8 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError +from .apidata_project_info import ApidataProjectInfo +from .apidata_project_info_response import ApidataProjectInfoResponse from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter @@ -50,6 +52,8 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataProjectInfo", + "ApidataProjectInfoResponse", "CloneGraphResponse", "ComparisonOperator", "DateFilter", diff --git a/src/zep_cloud/types/apidata_project_info.py b/src/zep_cloud/types/apidata_project_info.py new file mode 100644 index 0000000..3dd98d0 --- /dev/null +++ b/src/zep_cloud/types/apidata_project_info.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ..core.serialization import FieldMetadata + + +class ApidataProjectInfo(UniversalBaseModel): + created_at: typing.Optional[str] = None + description: typing.Optional[str] = None + name: typing.Optional[str] = None + uuid_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="uuid")] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/apidata_project_info_response.py b/src/zep_cloud/types/apidata_project_info_response.py new file mode 100644 index 0000000..4bcf66e --- /dev/null +++ b/src/zep_cloud/types/apidata_project_info_response.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .apidata_project_info import ApidataProjectInfo + + +class ApidataProjectInfoResponse(UniversalBaseModel): + project: typing.Optional[ApidataProjectInfo] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow From 2ad98f5b7a334c37271d0d9b655c71bc4e84226a Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 16:53:24 +0000 Subject: [PATCH 38/74] SDK regeneration --- src/zep_cloud/__init__.py | 4 ++-- src/zep_cloud/types/__init__.py | 4 ++-- src/zep_cloud/types/apidata_project_info_response.py | 4 ++-- .../types/{apidata_project_info.py => project_info.py} | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) rename src/zep_cloud/types/{apidata_project_info.py => project_info.py} (94%) diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 5479525..cd2d03d 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,7 +7,6 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, - ApidataProjectInfo, ApidataProjectInfoResponse, CloneGraphResponse, ComparisonOperator, @@ -37,6 +36,7 @@ MessageListResponse, ModelsFactRatingExamples, ModelsFactRatingInstruction, + ProjectInfo, Reranker, RoleType, SearchFilters, @@ -60,7 +60,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataProjectInfo", "ApidataProjectInfoResponse", "AsyncZep", "BadRequestError", @@ -94,6 +93,7 @@ "ModelsFactRatingExamples", "ModelsFactRatingInstruction", "NotFoundError", + "ProjectInfo", "Reranker", "RoleType", "SearchFilters", diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 26e7ff8..536473f 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,7 +6,6 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError -from .apidata_project_info import ApidataProjectInfo from .apidata_project_info_response import ApidataProjectInfoResponse from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator @@ -36,6 +35,7 @@ from .message_list_response import MessageListResponse from .models_fact_rating_examples import ModelsFactRatingExamples from .models_fact_rating_instruction import ModelsFactRatingInstruction +from .project_info import ProjectInfo from .reranker import Reranker from .role_type import RoleType from .search_filters import SearchFilters @@ -52,7 +52,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataProjectInfo", "ApidataProjectInfoResponse", "CloneGraphResponse", "ComparisonOperator", @@ -82,6 +81,7 @@ "MessageListResponse", "ModelsFactRatingExamples", "ModelsFactRatingInstruction", + "ProjectInfo", "Reranker", "RoleType", "SearchFilters", diff --git a/src/zep_cloud/types/apidata_project_info_response.py b/src/zep_cloud/types/apidata_project_info_response.py index 4bcf66e..1cfe73e 100644 --- a/src/zep_cloud/types/apidata_project_info_response.py +++ b/src/zep_cloud/types/apidata_project_info_response.py @@ -4,11 +4,11 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .apidata_project_info import ApidataProjectInfo +from .project_info import ProjectInfo class ApidataProjectInfoResponse(UniversalBaseModel): - project: typing.Optional[ApidataProjectInfo] = None + project: typing.Optional[ProjectInfo] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/zep_cloud/types/apidata_project_info.py b/src/zep_cloud/types/project_info.py similarity index 94% rename from src/zep_cloud/types/apidata_project_info.py rename to src/zep_cloud/types/project_info.py index 3dd98d0..252adf1 100644 --- a/src/zep_cloud/types/apidata_project_info.py +++ b/src/zep_cloud/types/project_info.py @@ -8,7 +8,7 @@ from ..core.serialization import FieldMetadata -class ApidataProjectInfo(UniversalBaseModel): +class ProjectInfo(UniversalBaseModel): created_at: typing.Optional[str] = None description: typing.Optional[str] = None name: typing.Optional[str] = None From fec0e27f1d91b539be74358bba4d71028b1e848f Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 17:52:27 +0000 Subject: [PATCH 39/74] SDK regeneration --- reference.md | 158 ---------- src/zep_cloud/__init__.py | 12 - src/zep_cloud/graph/client.py | 177 ------------ src/zep_cloud/graph/raw_client.py | 273 ------------------ src/zep_cloud/types/__init__.py | 12 - src/zep_cloud/types/edge_type.py | 24 -- .../types/entity_edge_source_target.py | 27 -- src/zep_cloud/types/entity_property.py | 22 -- src/zep_cloud/types/entity_property_type.py | 5 - src/zep_cloud/types/entity_type.py | 22 -- src/zep_cloud/types/entity_type_response.py | 22 -- 11 files changed, 754 deletions(-) delete mode 100644 src/zep_cloud/types/edge_type.py delete mode 100644 src/zep_cloud/types/entity_edge_source_target.py delete mode 100644 src/zep_cloud/types/entity_property.py delete mode 100644 src/zep_cloud/types/entity_property_type.py delete mode 100644 src/zep_cloud/types/entity_type.py delete mode 100644 src/zep_cloud/types/entity_type_response.py diff --git a/reference.md b/reference.md index 51dda19..bece4e8 100644 --- a/reference.md +++ b/reference.md @@ -1036,164 +1036,6 @@ client.graph.update( - - -
- -
client.graph.set_ontology(...) -
-
- -#### 📝 Description - -
-
- -
-
- -Sets custom entity and edge types for your graph. This wrapper method -provides a clean interface for defining your graph schema with custom -entity and edge types. - -See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from zep_cloud import Zep - -client = Zep( - api_key="YOUR_API_KEY", -) -client.graph.set_ontology() - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**entities:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — Dictionary mapping entity type names to their definitions - -
-
- -
-
- -**edges:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — Dictionary mapping edge type names to their definitions with source/target constraints - -
-
- -
-
- -**user_ids:** `typing.Optional[typing.Sequence[str]]` — Optional list of user IDs to apply ontology to - -
-
- -
-
- -**graph_ids:** `typing.Optional[typing.Sequence[str]]` — Optional list of graph IDs to apply ontology to - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- - -
-
-
- -
client.graph.list_ontology() -
-
- -#### 📝 Description - -
-
- -
-
- -Retrieves the current entity and edge types configured for your graph. - -See the [full documentation](/customizing-graph-structure) for details. -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from zep_cloud import Zep - -client = Zep( - api_key="YOUR_API_KEY", -) -client.graph.list_ontology() - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- -
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index cd2d03d..7fb2360 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -11,14 +11,8 @@ CloneGraphResponse, ComparisonOperator, DateFilter, - EdgeType, EntityEdge, - EntityEdgeSourceTarget, EntityNode, - EntityProperty, - EntityPropertyType, - EntityType, - EntityTypeResponse, Episode, EpisodeData, EpisodeMentions, @@ -66,14 +60,8 @@ "CloneGraphResponse", "ComparisonOperator", "DateFilter", - "EdgeType", "EntityEdge", - "EntityEdgeSourceTarget", "EntityNode", - "EntityProperty", - "EntityPropertyType", - "EntityType", - "EntityTypeResponse", "Episode", "EpisodeData", "EpisodeMentions", diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 57c5491..bd4033d 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -6,7 +6,6 @@ from ..core.request_options import RequestOptions from ..types.add_triple_response import AddTripleResponse from ..types.clone_graph_response import CloneGraphResponse -from ..types.entity_type_response import EntityTypeResponse from ..types.episode import Episode from ..types.episode_data import EpisodeData from ..types.fact_rating_instruction import FactRatingInstruction @@ -616,86 +615,6 @@ def update( ) return _response.data - def set_ontology( - self, - *, - entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> SuccessResponse: - """ - Sets custom entity and edge types for your graph. This wrapper method - provides a clean interface for defining your graph schema with custom - entity and edge types. - - See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. - - Parameters - ---------- - entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping entity type names to their definitions - - edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping edge type names to their definitions with source/target constraints - - user_ids : typing.Optional[typing.Sequence[str]] - Optional list of user IDs to apply ontology to - - graph_ids : typing.Optional[typing.Sequence[str]] - Optional list of graph IDs to apply ontology to - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - SuccessResponse - Ontology set successfully - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.graph.set_ontology() - """ - _response = self._raw_client.set_ontology( - entities=entities, edges=edges, user_ids=user_ids, graph_ids=graph_ids, request_options=request_options - ) - return _response.data - - def list_ontology(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: - """ - Retrieves the current entity and edge types configured for your graph. - - See the [full documentation](/customizing-graph-structure) for details. - - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - EntityTypeResponse - Current ontology - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.graph.list_ontology() - """ - _response = self._raw_client.list_ontology(request_options=request_options) - return _response.data - class AsyncGraphClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -1367,99 +1286,3 @@ async def main() -> None: request_options=request_options, ) return _response.data - - async def set_ontology( - self, - *, - entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> SuccessResponse: - """ - Sets custom entity and edge types for your graph. This wrapper method - provides a clean interface for defining your graph schema with custom - entity and edge types. - - See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. - - Parameters - ---------- - entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping entity type names to their definitions - - edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping edge type names to their definitions with source/target constraints - - user_ids : typing.Optional[typing.Sequence[str]] - Optional list of user IDs to apply ontology to - - graph_ids : typing.Optional[typing.Sequence[str]] - Optional list of graph IDs to apply ontology to - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - SuccessResponse - Ontology set successfully - - Examples - -------- - import asyncio - - from zep_cloud import AsyncZep - - client = AsyncZep( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.graph.set_ontology() - - - asyncio.run(main()) - """ - _response = await self._raw_client.set_ontology( - entities=entities, edges=edges, user_ids=user_ids, graph_ids=graph_ids, request_options=request_options - ) - return _response.data - - async def list_ontology(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: - """ - Retrieves the current entity and edge types configured for your graph. - - See the [full documentation](/customizing-graph-structure) for details. - - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - EntityTypeResponse - Current ontology - - Examples - -------- - import asyncio - - from zep_cloud import AsyncZep - - client = AsyncZep( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.graph.list_ontology() - - - asyncio.run(main()) - """ - _response = await self._raw_client.list_ontology(request_options=request_options) - return _response.data diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index 515857a..de6fd66 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -16,7 +16,6 @@ from ..types.add_triple_response import AddTripleResponse from ..types.api_error import ApiError as types_api_error_ApiError from ..types.clone_graph_response import CloneGraphResponse -from ..types.entity_type_response import EntityTypeResponse from ..types.episode import Episode from ..types.episode_data import EpisodeData from ..types.fact_rating_instruction import FactRatingInstruction @@ -986,142 +985,6 @@ def update( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def set_ontology( - self, - *, - entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[SuccessResponse]: - """ - Sets custom entity and edge types for your graph. This wrapper method - provides a clean interface for defining your graph schema with custom - entity and edge types. - - See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. - - Parameters - ---------- - entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping entity type names to their definitions - - edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping edge type names to their definitions with source/target constraints - - user_ids : typing.Optional[typing.Sequence[str]] - Optional list of user IDs to apply ontology to - - graph_ids : typing.Optional[typing.Sequence[str]] - Optional list of graph IDs to apply ontology to - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[SuccessResponse] - Ontology set successfully - """ - _response = self._client_wrapper.httpx_client.request( - "graph/set-ontology", - method="PUT", - json={ - "entities": entities, - "edges": edges, - "user_ids": user_ids, - "graph_ids": graph_ids, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - 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) - _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 - ) - - def list_ontology( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[EntityTypeResponse]: - """ - Retrieves the current entity and edge types configured for your graph. - - See the [full documentation](/customizing-graph-structure) for details. - - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[EntityTypeResponse] - Current ontology - """ - _response = self._client_wrapper.httpx_client.request( - "graph/list-ontology", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - EntityTypeResponse, - parse_obj_as( - type_=EntityTypeResponse, # 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 AsyncRawGraphClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -2077,139 +1940,3 @@ async def update( raise core_api_error_ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - - async def set_ontology( - self, - *, - entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[SuccessResponse]: - """ - Sets custom entity and edge types for your graph. This wrapper method - provides a clean interface for defining your graph schema with custom - entity and edge types. - - See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. - - Parameters - ---------- - entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping entity type names to their definitions - - edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping edge type names to their definitions with source/target constraints - - user_ids : typing.Optional[typing.Sequence[str]] - Optional list of user IDs to apply ontology to - - graph_ids : typing.Optional[typing.Sequence[str]] - Optional list of graph IDs to apply ontology to - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[SuccessResponse] - Ontology set successfully - """ - _response = await self._client_wrapper.httpx_client.request( - "graph/set-ontology", - method="PUT", - json={ - "entities": entities, - "edges": edges, - "user_ids": user_ids, - "graph_ids": graph_ids, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - 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) - _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 - ) - - async def list_ontology( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[EntityTypeResponse]: - """ - Retrieves the current entity and edge types configured for your graph. - - See the [full documentation](/customizing-graph-structure) for details. - - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[EntityTypeResponse] - Current ontology - """ - _response = await self._client_wrapper.httpx_client.request( - "graph/list-ontology", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - EntityTypeResponse, - parse_obj_as( - type_=EntityTypeResponse, # 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 - ) diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 536473f..18c0f3e 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -10,14 +10,8 @@ from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter -from .edge_type import EdgeType from .entity_edge import EntityEdge -from .entity_edge_source_target import EntityEdgeSourceTarget from .entity_node import EntityNode -from .entity_property import EntityProperty -from .entity_property_type import EntityPropertyType -from .entity_type import EntityType -from .entity_type_response import EntityTypeResponse from .episode import Episode from .episode_data import EpisodeData from .episode_mentions import EpisodeMentions @@ -56,14 +50,8 @@ "CloneGraphResponse", "ComparisonOperator", "DateFilter", - "EdgeType", "EntityEdge", - "EntityEdgeSourceTarget", "EntityNode", - "EntityProperty", - "EntityPropertyType", - "EntityType", - "EntityTypeResponse", "Episode", "EpisodeData", "EpisodeMentions", diff --git a/src/zep_cloud/types/edge_type.py b/src/zep_cloud/types/edge_type.py deleted file mode 100644 index 4edbe9d..0000000 --- a/src/zep_cloud/types/edge_type.py +++ /dev/null @@ -1,24 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .entity_edge_source_target import EntityEdgeSourceTarget -from .entity_property import EntityProperty - - -class EdgeType(UniversalBaseModel): - description: str - name: str - properties: typing.Optional[typing.List[EntityProperty]] = None - source_targets: typing.Optional[typing.List[EntityEdgeSourceTarget]] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/entity_edge_source_target.py b/src/zep_cloud/types/entity_edge_source_target.py deleted file mode 100644 index 496ed39..0000000 --- a/src/zep_cloud/types/entity_edge_source_target.py +++ /dev/null @@ -1,27 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel - - -class EntityEdgeSourceTarget(UniversalBaseModel): - source: typing.Optional[str] = pydantic.Field(default=None) - """ - Source represents the originating node identifier in the edge type relationship. (optional) - """ - - target: typing.Optional[str] = pydantic.Field(default=None) - """ - Target represents the target node identifier in the edge type relationship. (optional) - """ - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/entity_property.py b/src/zep_cloud/types/entity_property.py deleted file mode 100644 index bbc8d56..0000000 --- a/src/zep_cloud/types/entity_property.py +++ /dev/null @@ -1,22 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .entity_property_type import EntityPropertyType - - -class EntityProperty(UniversalBaseModel): - description: str - name: str - type: EntityPropertyType - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/entity_property_type.py b/src/zep_cloud/types/entity_property_type.py deleted file mode 100644 index 596fa18..0000000 --- a/src/zep_cloud/types/entity_property_type.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -EntityPropertyType = typing.Union[typing.Literal["Text", "Int", "Float", "Boolean"], typing.Any] diff --git a/src/zep_cloud/types/entity_type.py b/src/zep_cloud/types/entity_type.py deleted file mode 100644 index 0c1566a..0000000 --- a/src/zep_cloud/types/entity_type.py +++ /dev/null @@ -1,22 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .entity_property import EntityProperty - - -class EntityType(UniversalBaseModel): - description: str - name: str - properties: typing.Optional[typing.List[EntityProperty]] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/entity_type_response.py b/src/zep_cloud/types/entity_type_response.py deleted file mode 100644 index 43c3032..0000000 --- a/src/zep_cloud/types/entity_type_response.py +++ /dev/null @@ -1,22 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .edge_type import EdgeType -from .entity_type import EntityType - - -class EntityTypeResponse(UniversalBaseModel): - edge_types: typing.Optional[typing.List[EdgeType]] = None - entity_types: typing.Optional[typing.List[EntityType]] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow From c98a9d77371301d7b32316ec8e0fca7ce8ff9218 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 18:01:34 +0000 Subject: [PATCH 40/74] SDK regeneration --- reference.md | 168 +++++++++ src/zep_cloud/__init__.py | 12 + src/zep_cloud/graph/client.py | 195 ++++++++++ src/zep_cloud/graph/raw_client.py | 357 ++++++++++++++++++ src/zep_cloud/types/__init__.py | 12 + src/zep_cloud/types/edge_type.py | 24 ++ .../types/entity_edge_source_target.py | 27 ++ src/zep_cloud/types/entity_property.py | 22 ++ src/zep_cloud/types/entity_property_type.py | 5 + src/zep_cloud/types/entity_type.py | 22 ++ src/zep_cloud/types/entity_type_response.py | 22 ++ 11 files changed, 866 insertions(+) create mode 100644 src/zep_cloud/types/edge_type.py create mode 100644 src/zep_cloud/types/entity_edge_source_target.py create mode 100644 src/zep_cloud/types/entity_property.py create mode 100644 src/zep_cloud/types/entity_property_type.py create mode 100644 src/zep_cloud/types/entity_type.py create mode 100644 src/zep_cloud/types/entity_type_response.py diff --git a/reference.md b/reference.md index bece4e8..3daca40 100644 --- a/reference.md +++ b/reference.md @@ -1,5 +1,173 @@ # Reference ## Graph +
client.graph.list_entity_types(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Returns all entity types for a project, user, or graph. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.list_entity_types() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**user_id:** `typing.Optional[str]` — User ID to get user-specific entity types + +
+
+ +
+
+ +**graph_id:** `typing.Optional[str]` — Graph ID to get graph-specific entity types + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.graph.set_entity_types_internal(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Sets the entity types for multiple users and graphs, replacing any existing ones. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.set_entity_types_internal() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**edge_types:** `typing.Optional[typing.Sequence[EdgeType]]` + +
+
+ +
+
+ +**entity_types:** `typing.Optional[typing.Sequence[EntityType]]` + +
+
+ +
+
+ +**graph_ids:** `typing.Optional[typing.Sequence[str]]` + +
+
+ +
+
+ +**user_ids:** `typing.Optional[typing.Sequence[str]]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+
client.graph.add(...)
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 7fb2360..cd2d03d 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -11,8 +11,14 @@ CloneGraphResponse, ComparisonOperator, DateFilter, + EdgeType, EntityEdge, + EntityEdgeSourceTarget, EntityNode, + EntityProperty, + EntityPropertyType, + EntityType, + EntityTypeResponse, Episode, EpisodeData, EpisodeMentions, @@ -60,8 +66,14 @@ "CloneGraphResponse", "ComparisonOperator", "DateFilter", + "EdgeType", "EntityEdge", + "EntityEdgeSourceTarget", "EntityNode", + "EntityProperty", + "EntityPropertyType", + "EntityType", + "EntityTypeResponse", "Episode", "EpisodeData", "EpisodeMentions", diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index bd4033d..47a3c0d 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -6,6 +6,9 @@ from ..core.request_options import RequestOptions from ..types.add_triple_response import AddTripleResponse from ..types.clone_graph_response import CloneGraphResponse +from ..types.edge_type import EdgeType +from ..types.entity_type import EntityType +from ..types.entity_type_response import EntityTypeResponse from ..types.episode import Episode from ..types.episode_data import EpisodeData from ..types.fact_rating_instruction import FactRatingInstruction @@ -46,6 +49,94 @@ def with_raw_response(self) -> RawGraphClient: """ return self._raw_client + def list_entity_types( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> EntityTypeResponse: + """ + Returns all entity types for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific entity types + + graph_id : typing.Optional[str] + Graph ID to get graph-specific entity types + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + EntityTypeResponse + The list of entity types. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.list_entity_types() + """ + _response = self._raw_client.list_entity_types( + user_id=user_id, graph_id=graph_id, request_options=request_options + ) + return _response.data + + def set_entity_types_internal( + self, + *, + edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, + entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Sets the entity types for multiple users and graphs, replacing any existing ones. + + Parameters + ---------- + edge_types : typing.Optional[typing.Sequence[EdgeType]] + + entity_types : typing.Optional[typing.Sequence[EntityType]] + + graph_ids : typing.Optional[typing.Sequence[str]] + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Entity types set successfully + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.set_entity_types_internal() + """ + _response = self._raw_client.set_entity_types_internal( + edge_types=edge_types, + entity_types=entity_types, + graph_ids=graph_ids, + user_ids=user_ids, + request_options=request_options, + ) + return _response.data + def add( self, *, @@ -636,6 +727,110 @@ def with_raw_response(self) -> AsyncRawGraphClient: """ return self._raw_client + async def list_entity_types( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> EntityTypeResponse: + """ + Returns all entity types for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific entity types + + graph_id : typing.Optional[str] + Graph ID to get graph-specific entity types + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + EntityTypeResponse + The list of entity types. + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.list_entity_types() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_entity_types( + user_id=user_id, graph_id=graph_id, request_options=request_options + ) + return _response.data + + async def set_entity_types_internal( + self, + *, + edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, + entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Sets the entity types for multiple users and graphs, replacing any existing ones. + + Parameters + ---------- + edge_types : typing.Optional[typing.Sequence[EdgeType]] + + entity_types : typing.Optional[typing.Sequence[EntityType]] + + graph_ids : typing.Optional[typing.Sequence[str]] + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Entity types set successfully + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.set_entity_types_internal() + + + asyncio.run(main()) + """ + _response = await self._raw_client.set_entity_types_internal( + edge_types=edge_types, + entity_types=entity_types, + graph_ids=graph_ids, + user_ids=user_ids, + request_options=request_options, + ) + return _response.data + async def add( self, *, diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index de6fd66..f34a0fd 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -16,6 +16,9 @@ from ..types.add_triple_response import AddTripleResponse from ..types.api_error import ApiError as types_api_error_ApiError from ..types.clone_graph_response import CloneGraphResponse +from ..types.edge_type import EdgeType +from ..types.entity_type import EntityType +from ..types.entity_type_response import EntityTypeResponse from ..types.episode import Episode from ..types.episode_data import EpisodeData from ..types.fact_rating_instruction import FactRatingInstruction @@ -36,6 +39,183 @@ class RawGraphClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper + def list_entity_types( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[EntityTypeResponse]: + """ + Returns all entity types for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific entity types + + graph_id : typing.Optional[str] + Graph ID to get graph-specific entity types + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[EntityTypeResponse] + The list of entity types. + """ + _response = self._client_wrapper.httpx_client.request( + "entity-types", + method="GET", + params={ + "user_id": user_id, + "graph_id": graph_id, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + EntityTypeResponse, + parse_obj_as( + type_=EntityTypeResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 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 + ) + + def set_entity_types_internal( + self, + *, + edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, + entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[SuccessResponse]: + """ + Sets the entity types for multiple users and graphs, replacing any existing ones. + + Parameters + ---------- + edge_types : typing.Optional[typing.Sequence[EdgeType]] + + entity_types : typing.Optional[typing.Sequence[EntityType]] + + graph_ids : typing.Optional[typing.Sequence[str]] + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Entity types set successfully + """ + _response = self._client_wrapper.httpx_client.request( + "entity-types", + method="PUT", + json={ + "edge_types": convert_and_respect_annotation_metadata( + object_=edge_types, annotation=typing.Sequence[EdgeType], direction="write" + ), + "entity_types": convert_and_respect_annotation_metadata( + object_=entity_types, annotation=typing.Sequence[EntityType], direction="write" + ), + "graph_ids": graph_ids, + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + def add( self, *, @@ -990,6 +1170,183 @@ class AsyncRawGraphClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper + async def list_entity_types( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[EntityTypeResponse]: + """ + Returns all entity types for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific entity types + + graph_id : typing.Optional[str] + Graph ID to get graph-specific entity types + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[EntityTypeResponse] + The list of entity types. + """ + _response = await self._client_wrapper.httpx_client.request( + "entity-types", + method="GET", + params={ + "user_id": user_id, + "graph_id": graph_id, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + EntityTypeResponse, + parse_obj_as( + type_=EntityTypeResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 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 + ) + + async def set_entity_types_internal( + self, + *, + edge_types: typing.Optional[typing.Sequence[EdgeType]] = OMIT, + entity_types: typing.Optional[typing.Sequence[EntityType]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Sets the entity types for multiple users and graphs, replacing any existing ones. + + Parameters + ---------- + edge_types : typing.Optional[typing.Sequence[EdgeType]] + + entity_types : typing.Optional[typing.Sequence[EntityType]] + + graph_ids : typing.Optional[typing.Sequence[str]] + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Entity types set successfully + """ + _response = await self._client_wrapper.httpx_client.request( + "entity-types", + method="PUT", + json={ + "edge_types": convert_and_respect_annotation_metadata( + object_=edge_types, annotation=typing.Sequence[EdgeType], direction="write" + ), + "entity_types": convert_and_respect_annotation_metadata( + object_=entity_types, annotation=typing.Sequence[EntityType], direction="write" + ), + "graph_ids": graph_ids, + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + async def add( self, *, diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 18c0f3e..536473f 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -10,8 +10,14 @@ from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter +from .edge_type import EdgeType from .entity_edge import EntityEdge +from .entity_edge_source_target import EntityEdgeSourceTarget from .entity_node import EntityNode +from .entity_property import EntityProperty +from .entity_property_type import EntityPropertyType +from .entity_type import EntityType +from .entity_type_response import EntityTypeResponse from .episode import Episode from .episode_data import EpisodeData from .episode_mentions import EpisodeMentions @@ -50,8 +56,14 @@ "CloneGraphResponse", "ComparisonOperator", "DateFilter", + "EdgeType", "EntityEdge", + "EntityEdgeSourceTarget", "EntityNode", + "EntityProperty", + "EntityPropertyType", + "EntityType", + "EntityTypeResponse", "Episode", "EpisodeData", "EpisodeMentions", diff --git a/src/zep_cloud/types/edge_type.py b/src/zep_cloud/types/edge_type.py new file mode 100644 index 0000000..4edbe9d --- /dev/null +++ b/src/zep_cloud/types/edge_type.py @@ -0,0 +1,24 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .entity_edge_source_target import EntityEdgeSourceTarget +from .entity_property import EntityProperty + + +class EdgeType(UniversalBaseModel): + description: str + name: str + properties: typing.Optional[typing.List[EntityProperty]] = None + source_targets: typing.Optional[typing.List[EntityEdgeSourceTarget]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/entity_edge_source_target.py b/src/zep_cloud/types/entity_edge_source_target.py new file mode 100644 index 0000000..496ed39 --- /dev/null +++ b/src/zep_cloud/types/entity_edge_source_target.py @@ -0,0 +1,27 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class EntityEdgeSourceTarget(UniversalBaseModel): + source: typing.Optional[str] = pydantic.Field(default=None) + """ + Source represents the originating node identifier in the edge type relationship. (optional) + """ + + target: typing.Optional[str] = pydantic.Field(default=None) + """ + Target represents the target node identifier in the edge type relationship. (optional) + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/entity_property.py b/src/zep_cloud/types/entity_property.py new file mode 100644 index 0000000..bbc8d56 --- /dev/null +++ b/src/zep_cloud/types/entity_property.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .entity_property_type import EntityPropertyType + + +class EntityProperty(UniversalBaseModel): + description: str + name: str + type: EntityPropertyType + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/entity_property_type.py b/src/zep_cloud/types/entity_property_type.py new file mode 100644 index 0000000..596fa18 --- /dev/null +++ b/src/zep_cloud/types/entity_property_type.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +EntityPropertyType = typing.Union[typing.Literal["Text", "Int", "Float", "Boolean"], typing.Any] diff --git a/src/zep_cloud/types/entity_type.py b/src/zep_cloud/types/entity_type.py new file mode 100644 index 0000000..0c1566a --- /dev/null +++ b/src/zep_cloud/types/entity_type.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .entity_property import EntityProperty + + +class EntityType(UniversalBaseModel): + description: str + name: str + properties: typing.Optional[typing.List[EntityProperty]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/entity_type_response.py b/src/zep_cloud/types/entity_type_response.py new file mode 100644 index 0000000..43c3032 --- /dev/null +++ b/src/zep_cloud/types/entity_type_response.py @@ -0,0 +1,22 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .edge_type import EdgeType +from .entity_type import EntityType + + +class EntityTypeResponse(UniversalBaseModel): + edge_types: typing.Optional[typing.List[EdgeType]] = None + entity_types: typing.Optional[typing.List[EntityType]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow From 56bc835c191e422e76fcdc5f35d896c49298b2a2 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 18:07:07 +0000 Subject: [PATCH 41/74] SDK regeneration From 3bcf751b48dc685d6e9190f1b1eb9c0acd5f5ce1 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 18:11:12 +0000 Subject: [PATCH 42/74] SDK regeneration --- reference.md | 158 +++++++++++++++++ src/zep_cloud/graph/client.py | 176 +++++++++++++++++++ src/zep_cloud/graph/raw_client.py | 272 ++++++++++++++++++++++++++++++ 3 files changed, 606 insertions(+) diff --git a/reference.md b/reference.md index 3daca40..3fac115 100644 --- a/reference.md +++ b/reference.md @@ -1204,6 +1204,164 @@ client.graph.update(
+ + +
+ +
client.graph.set_ontology(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Sets custom entity and edge types for your graph. This wrapper method +provides a clean interface for defining your graph schema with custom +entity and edge types. + +See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.set_ontology() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**entities:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — Dictionary mapping entity type names to their definitions + +
+
+ +
+
+ +**edges:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — Dictionary mapping edge type names to their definitions with source/target constraints + +
+
+ +
+
+ +**user_ids:** `typing.Optional[typing.Sequence[str]]` — Optional list of user IDs to apply ontology to + +
+
+ +
+
+ +**graph_ids:** `typing.Optional[typing.Sequence[str]]` — Optional list of graph IDs to apply ontology to + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.graph.list_ontology() +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieves the current entity and edge types configured for your graph. + +See the [full documentation](/customizing-graph-structure) for details. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.list_ontology() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 47a3c0d..948b51a 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -706,6 +706,86 @@ def update( ) return _response.data + def set_ontology( + self, + *, + entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Sets custom entity and edge types for your graph. This wrapper method + provides a clean interface for defining your graph schema with custom + entity and edge types. + + See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. + + Parameters + ---------- + entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping entity type names to their definitions + + edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping edge type names to their definitions with source/target constraints + + user_ids : typing.Optional[typing.Sequence[str]] + Optional list of user IDs to apply ontology to + + graph_ids : typing.Optional[typing.Sequence[str]] + Optional list of graph IDs to apply ontology to + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Ontology set successfully + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.set_ontology() + """ + _response = self._raw_client.set_ontology( + entities=entities, edges=edges, user_ids=user_ids, graph_ids=graph_ids, request_options=request_options + ) + return _response.data + + def list_ontology(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: + """ + Retrieves the current entity and edge types configured for your graph. + + See the [full documentation](/customizing-graph-structure) for details. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + EntityTypeResponse + Current ontology + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.list_ontology() + """ + _response = self._raw_client.list_ontology(request_options=request_options) + return _response.data + class AsyncGraphClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -1481,3 +1561,99 @@ async def main() -> None: request_options=request_options, ) return _response.data + + async def set_ontology( + self, + *, + entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Sets custom entity and edge types for your graph. This wrapper method + provides a clean interface for defining your graph schema with custom + entity and edge types. + + See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. + + Parameters + ---------- + entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping entity type names to their definitions + + edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping edge type names to their definitions with source/target constraints + + user_ids : typing.Optional[typing.Sequence[str]] + Optional list of user IDs to apply ontology to + + graph_ids : typing.Optional[typing.Sequence[str]] + Optional list of graph IDs to apply ontology to + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Ontology set successfully + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.set_ontology() + + + asyncio.run(main()) + """ + _response = await self._raw_client.set_ontology( + entities=entities, edges=edges, user_ids=user_ids, graph_ids=graph_ids, request_options=request_options + ) + return _response.data + + async def list_ontology(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: + """ + Retrieves the current entity and edge types configured for your graph. + + See the [full documentation](/customizing-graph-structure) for details. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + EntityTypeResponse + Current ontology + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.list_ontology() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_ontology(request_options=request_options) + return _response.data diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index f34a0fd..7826d48 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -1165,6 +1165,142 @@ def update( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def set_ontology( + self, + *, + entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[SuccessResponse]: + """ + Sets custom entity and edge types for your graph. This wrapper method + provides a clean interface for defining your graph schema with custom + entity and edge types. + + See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. + + Parameters + ---------- + entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping entity type names to their definitions + + edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping edge type names to their definitions with source/target constraints + + user_ids : typing.Optional[typing.Sequence[str]] + Optional list of user IDs to apply ontology to + + graph_ids : typing.Optional[typing.Sequence[str]] + Optional list of graph IDs to apply ontology to + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Ontology set successfully + """ + _response = self._client_wrapper.httpx_client.request( + "graph/set-ontology", + method="PUT", + json={ + "entities": entities, + "edges": edges, + "user_ids": user_ids, + "graph_ids": graph_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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) + _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 + ) + + def list_ontology( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[EntityTypeResponse]: + """ + Retrieves the current entity and edge types configured for your graph. + + See the [full documentation](/customizing-graph-structure) for details. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[EntityTypeResponse] + Current ontology + """ + _response = self._client_wrapper.httpx_client.request( + "graph/list-ontology", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + EntityTypeResponse, + parse_obj_as( + type_=EntityTypeResponse, # 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 AsyncRawGraphClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -2297,3 +2433,139 @@ async def update( raise core_api_error_ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + + async def set_ontology( + self, + *, + entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Sets custom entity and edge types for your graph. This wrapper method + provides a clean interface for defining your graph schema with custom + entity and edge types. + + See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. + + Parameters + ---------- + entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping entity type names to their definitions + + edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Dictionary mapping edge type names to their definitions with source/target constraints + + user_ids : typing.Optional[typing.Sequence[str]] + Optional list of user IDs to apply ontology to + + graph_ids : typing.Optional[typing.Sequence[str]] + Optional list of graph IDs to apply ontology to + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Ontology set successfully + """ + _response = await self._client_wrapper.httpx_client.request( + "graph/set-ontology", + method="PUT", + json={ + "entities": entities, + "edges": edges, + "user_ids": user_ids, + "graph_ids": graph_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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) + _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 + ) + + async def list_ontology( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[EntityTypeResponse]: + """ + Retrieves the current entity and edge types configured for your graph. + + See the [full documentation](/customizing-graph-structure) for details. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[EntityTypeResponse] + Current ontology + """ + _response = await self._client_wrapper.httpx_client.request( + "graph/list-ontology", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + EntityTypeResponse, + parse_obj_as( + type_=EntityTypeResponse, # 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 + ) From 3076b351d441ea90825a9056c19980c735ea0490 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 18:14:17 +0000 Subject: [PATCH 43/74] SDK regeneration --- reference.md | 158 ----------------- src/zep_cloud/graph/client.py | 176 ------------------- src/zep_cloud/graph/raw_client.py | 272 ------------------------------ 3 files changed, 606 deletions(-) diff --git a/reference.md b/reference.md index 3fac115..3daca40 100644 --- a/reference.md +++ b/reference.md @@ -1204,164 +1204,6 @@ client.graph.update( - - -
- -
client.graph.set_ontology(...) -
-
- -#### 📝 Description - -
-
- -
-
- -Sets custom entity and edge types for your graph. This wrapper method -provides a clean interface for defining your graph schema with custom -entity and edge types. - -See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from zep_cloud import Zep - -client = Zep( - api_key="YOUR_API_KEY", -) -client.graph.set_ontology() - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**entities:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — Dictionary mapping entity type names to their definitions - -
-
- -
-
- -**edges:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` — Dictionary mapping edge type names to their definitions with source/target constraints - -
-
- -
-
- -**user_ids:** `typing.Optional[typing.Sequence[str]]` — Optional list of user IDs to apply ontology to - -
-
- -
-
- -**graph_ids:** `typing.Optional[typing.Sequence[str]]` — Optional list of graph IDs to apply ontology to - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- - -
-
-
- -
client.graph.list_ontology() -
-
- -#### 📝 Description - -
-
- -
-
- -Retrieves the current entity and edge types configured for your graph. - -See the [full documentation](/customizing-graph-structure) for details. -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from zep_cloud import Zep - -client = Zep( - api_key="YOUR_API_KEY", -) -client.graph.list_ontology() - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- -
diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 948b51a..47a3c0d 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -706,86 +706,6 @@ def update( ) return _response.data - def set_ontology( - self, - *, - entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> SuccessResponse: - """ - Sets custom entity and edge types for your graph. This wrapper method - provides a clean interface for defining your graph schema with custom - entity and edge types. - - See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. - - Parameters - ---------- - entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping entity type names to their definitions - - edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping edge type names to their definitions with source/target constraints - - user_ids : typing.Optional[typing.Sequence[str]] - Optional list of user IDs to apply ontology to - - graph_ids : typing.Optional[typing.Sequence[str]] - Optional list of graph IDs to apply ontology to - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - SuccessResponse - Ontology set successfully - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.graph.set_ontology() - """ - _response = self._raw_client.set_ontology( - entities=entities, edges=edges, user_ids=user_ids, graph_ids=graph_ids, request_options=request_options - ) - return _response.data - - def list_ontology(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: - """ - Retrieves the current entity and edge types configured for your graph. - - See the [full documentation](/customizing-graph-structure) for details. - - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - EntityTypeResponse - Current ontology - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.graph.list_ontology() - """ - _response = self._raw_client.list_ontology(request_options=request_options) - return _response.data - class AsyncGraphClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -1561,99 +1481,3 @@ async def main() -> None: request_options=request_options, ) return _response.data - - async def set_ontology( - self, - *, - entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> SuccessResponse: - """ - Sets custom entity and edge types for your graph. This wrapper method - provides a clean interface for defining your graph schema with custom - entity and edge types. - - See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. - - Parameters - ---------- - entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping entity type names to their definitions - - edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping edge type names to their definitions with source/target constraints - - user_ids : typing.Optional[typing.Sequence[str]] - Optional list of user IDs to apply ontology to - - graph_ids : typing.Optional[typing.Sequence[str]] - Optional list of graph IDs to apply ontology to - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - SuccessResponse - Ontology set successfully - - Examples - -------- - import asyncio - - from zep_cloud import AsyncZep - - client = AsyncZep( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.graph.set_ontology() - - - asyncio.run(main()) - """ - _response = await self._raw_client.set_ontology( - entities=entities, edges=edges, user_ids=user_ids, graph_ids=graph_ids, request_options=request_options - ) - return _response.data - - async def list_ontology(self, *, request_options: typing.Optional[RequestOptions] = None) -> EntityTypeResponse: - """ - Retrieves the current entity and edge types configured for your graph. - - See the [full documentation](/customizing-graph-structure) for details. - - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - EntityTypeResponse - Current ontology - - Examples - -------- - import asyncio - - from zep_cloud import AsyncZep - - client = AsyncZep( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.graph.list_ontology() - - - asyncio.run(main()) - """ - _response = await self._raw_client.list_ontology(request_options=request_options) - return _response.data diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index 7826d48..f34a0fd 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -1165,142 +1165,6 @@ def update( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def set_ontology( - self, - *, - entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[SuccessResponse]: - """ - Sets custom entity and edge types for your graph. This wrapper method - provides a clean interface for defining your graph schema with custom - entity and edge types. - - See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. - - Parameters - ---------- - entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping entity type names to their definitions - - edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping edge type names to their definitions with source/target constraints - - user_ids : typing.Optional[typing.Sequence[str]] - Optional list of user IDs to apply ontology to - - graph_ids : typing.Optional[typing.Sequence[str]] - Optional list of graph IDs to apply ontology to - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[SuccessResponse] - Ontology set successfully - """ - _response = self._client_wrapper.httpx_client.request( - "graph/set-ontology", - method="PUT", - json={ - "entities": entities, - "edges": edges, - "user_ids": user_ids, - "graph_ids": graph_ids, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - 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) - _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 - ) - - def list_ontology( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[EntityTypeResponse]: - """ - Retrieves the current entity and edge types configured for your graph. - - See the [full documentation](/customizing-graph-structure) for details. - - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[EntityTypeResponse] - Current ontology - """ - _response = self._client_wrapper.httpx_client.request( - "graph/list-ontology", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - EntityTypeResponse, - parse_obj_as( - type_=EntityTypeResponse, # 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 AsyncRawGraphClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -2433,139 +2297,3 @@ async def update( raise core_api_error_ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - - async def set_ontology( - self, - *, - entities: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - edges: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, - user_ids: typing.Optional[typing.Sequence[str]] = OMIT, - graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, - request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[SuccessResponse]: - """ - Sets custom entity and edge types for your graph. This wrapper method - provides a clean interface for defining your graph schema with custom - entity and edge types. - - See the [full documentation](/customizing-graph-structure#setting-entity-and-edge-types) for details. - - Parameters - ---------- - entities : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping entity type names to their definitions - - edges : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] - Dictionary mapping edge type names to their definitions with source/target constraints - - user_ids : typing.Optional[typing.Sequence[str]] - Optional list of user IDs to apply ontology to - - graph_ids : typing.Optional[typing.Sequence[str]] - Optional list of graph IDs to apply ontology to - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[SuccessResponse] - Ontology set successfully - """ - _response = await self._client_wrapper.httpx_client.request( - "graph/set-ontology", - method="PUT", - json={ - "entities": entities, - "edges": edges, - "user_ids": user_ids, - "graph_ids": graph_ids, - }, - headers={ - "content-type": "application/json", - }, - request_options=request_options, - omit=OMIT, - ) - 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) - _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 - ) - - async def list_ontology( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[EntityTypeResponse]: - """ - Retrieves the current entity and edge types configured for your graph. - - See the [full documentation](/customizing-graph-structure) for details. - - Parameters - ---------- - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[EntityTypeResponse] - Current ontology - """ - _response = await self._client_wrapper.httpx_client.request( - "graph/list-ontology", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - EntityTypeResponse, - parse_obj_as( - type_=EntityTypeResponse, # 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 - ) From 7bfff0cab6888ab45d49f29a9f62ecbbdd1055e7 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 21 Oct 2025 18:20:07 +0000 Subject: [PATCH 44/74] SDK regeneration --- src/zep_cloud/__init__.py | 4 ++-- src/zep_cloud/project/client.py | 10 +++++----- src/zep_cloud/project/raw_client.py | 20 +++++++++---------- src/zep_cloud/types/__init__.py | 4 ++-- ...o_response.py => project_info_response.py} | 2 +- 5 files changed, 19 insertions(+), 21 deletions(-) rename src/zep_cloud/types/{apidata_project_info_response.py => project_info_response.py} (91%) diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index cd2d03d..fbe9de9 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,7 +7,6 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, - ApidataProjectInfoResponse, CloneGraphResponse, ComparisonOperator, DateFilter, @@ -37,6 +36,7 @@ ModelsFactRatingExamples, ModelsFactRatingInstruction, ProjectInfo, + ProjectInfoResponse, Reranker, RoleType, SearchFilters, @@ -60,7 +60,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataProjectInfoResponse", "AsyncZep", "BadRequestError", "CloneGraphResponse", @@ -94,6 +93,7 @@ "ModelsFactRatingInstruction", "NotFoundError", "ProjectInfo", + "ProjectInfoResponse", "Reranker", "RoleType", "SearchFilters", diff --git a/src/zep_cloud/project/client.py b/src/zep_cloud/project/client.py index 888d65f..8db3379 100644 --- a/src/zep_cloud/project/client.py +++ b/src/zep_cloud/project/client.py @@ -4,7 +4,7 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions -from ..types.apidata_project_info_response import ApidataProjectInfoResponse +from ..types.project_info_response import ProjectInfoResponse from .raw_client import AsyncRawProjectClient, RawProjectClient @@ -23,7 +23,7 @@ def with_raw_response(self) -> RawProjectClient: """ return self._raw_client - def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ApidataProjectInfoResponse: + def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: """ Retrieve project info based on the provided api key. @@ -34,7 +34,7 @@ def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> Api Returns ------- - ApidataProjectInfoResponse + ProjectInfoResponse Retrieved Examples @@ -65,7 +65,7 @@ def with_raw_response(self) -> AsyncRawProjectClient: """ return self._raw_client - async def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ApidataProjectInfoResponse: + async def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: """ Retrieve project info based on the provided api key. @@ -76,7 +76,7 @@ async def get(self, *, request_options: typing.Optional[RequestOptions] = None) Returns ------- - ApidataProjectInfoResponse + ProjectInfoResponse Retrieved Examples diff --git a/src/zep_cloud/project/raw_client.py b/src/zep_cloud/project/raw_client.py index b5a650b..4b74c71 100644 --- a/src/zep_cloud/project/raw_client.py +++ b/src/zep_cloud/project/raw_client.py @@ -12,16 +12,14 @@ from ..errors.internal_server_error import InternalServerError from ..errors.not_found_error import NotFoundError from ..types.api_error import ApiError as types_api_error_ApiError -from ..types.apidata_project_info_response import ApidataProjectInfoResponse +from ..types.project_info_response import ProjectInfoResponse class RawProjectClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get( - self, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[ApidataProjectInfoResponse]: + def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[ProjectInfoResponse]: """ Retrieve project info based on the provided api key. @@ -32,7 +30,7 @@ def get( Returns ------- - HttpResponse[ApidataProjectInfoResponse] + HttpResponse[ProjectInfoResponse] Retrieved """ _response = self._client_wrapper.httpx_client.request( @@ -43,9 +41,9 @@ def get( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ApidataProjectInfoResponse, + ProjectInfoResponse, parse_obj_as( - type_=ApidataProjectInfoResponse, # type: ignore + type_=ProjectInfoResponse, # type: ignore object_=_response.json(), ), ) @@ -99,7 +97,7 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def get( self, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[ApidataProjectInfoResponse]: + ) -> AsyncHttpResponse[ProjectInfoResponse]: """ Retrieve project info based on the provided api key. @@ -110,7 +108,7 @@ async def get( Returns ------- - AsyncHttpResponse[ApidataProjectInfoResponse] + AsyncHttpResponse[ProjectInfoResponse] Retrieved """ _response = await self._client_wrapper.httpx_client.request( @@ -121,9 +119,9 @@ async def get( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ApidataProjectInfoResponse, + ProjectInfoResponse, parse_obj_as( - type_=ApidataProjectInfoResponse, # type: ignore + type_=ProjectInfoResponse, # type: ignore object_=_response.json(), ), ) diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 536473f..6f0873a 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,7 +6,6 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError -from .apidata_project_info_response import ApidataProjectInfoResponse from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter @@ -36,6 +35,7 @@ from .models_fact_rating_examples import ModelsFactRatingExamples from .models_fact_rating_instruction import ModelsFactRatingInstruction from .project_info import ProjectInfo +from .project_info_response import ProjectInfoResponse from .reranker import Reranker from .role_type import RoleType from .search_filters import SearchFilters @@ -52,7 +52,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataProjectInfoResponse", "CloneGraphResponse", "ComparisonOperator", "DateFilter", @@ -82,6 +81,7 @@ "ModelsFactRatingExamples", "ModelsFactRatingInstruction", "ProjectInfo", + "ProjectInfoResponse", "Reranker", "RoleType", "SearchFilters", diff --git a/src/zep_cloud/types/apidata_project_info_response.py b/src/zep_cloud/types/project_info_response.py similarity index 91% rename from src/zep_cloud/types/apidata_project_info_response.py rename to src/zep_cloud/types/project_info_response.py index 1cfe73e..fff68af 100644 --- a/src/zep_cloud/types/apidata_project_info_response.py +++ b/src/zep_cloud/types/project_info_response.py @@ -7,7 +7,7 @@ from .project_info import ProjectInfo -class ApidataProjectInfoResponse(UniversalBaseModel): +class ProjectInfoResponse(UniversalBaseModel): project: typing.Optional[ProjectInfo] = None if IS_PYDANTIC_V2: From 284de23208f41f56d27bbae687e072a3453c74f5 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Thu, 30 Oct 2025 12:06:59 -0400 Subject: [PATCH 45/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 30b8a7c..2607ee5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.8.0" +version = "3.9.0" description = "" readme = "README.md" authors = [] From e06adad0670ce0e28a9626ef5ee3fb2b87f98eab Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 16:08:40 +0000 Subject: [PATCH 46/74] SDK regeneration --- reference.md | 93 +++++++++++++------ src/zep_cloud/__init__.py | 4 +- src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/graph/client.py | 20 +++- src/zep_cloud/graph/edge/client.py | 24 ++--- src/zep_cloud/graph/edge/raw_client.py | 8 +- src/zep_cloud/graph/episode/client.py | 42 +++++---- src/zep_cloud/graph/episode/raw_client.py | 12 +-- src/zep_cloud/graph/node/client.py | 36 +++---- src/zep_cloud/graph/node/raw_client.py | 12 +-- src/zep_cloud/project/client.py | 12 +-- src/zep_cloud/project/raw_client.py | 4 +- src/zep_cloud/thread/__init__.py | 4 +- src/zep_cloud/thread/client.py | 66 ++++++++----- src/zep_cloud/thread/raw_client.py | 22 ++--- src/zep_cloud/thread/types/__init__.py | 4 +- .../types/thread_get_context_request_mode.py | 5 + .../thread_get_user_context_request_mode.py | 5 - src/zep_cloud/types/search_filters.py | 10 ++ src/zep_cloud/types/user.py | 1 + src/zep_cloud/user/client.py | 30 +++++- src/zep_cloud/user/raw_client.py | 20 ++++ 22 files changed, 283 insertions(+), 155 deletions(-) create mode 100644 src/zep_cloud/thread/types/thread_get_context_request_mode.py delete mode 100644 src/zep_cloud/thread/types/thread_get_user_context_request_mode.py diff --git a/reference.md b/reference.md index 3daca40..4029cf5 100644 --- a/reference.md +++ b/reference.md @@ -32,7 +32,10 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.list_entity_types() +client.graph.list_entity_types( + user_id="user_id", + graph_id="graph_id", +) ``` @@ -772,7 +775,10 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.list_all() +client.graph.list_all( + page_number=1, + page_size=1, +) ``` @@ -1209,7 +1215,7 @@ client.graph.update( ## Project -
client.project.get() +
client.project.get_info()
@@ -1241,7 +1247,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.project.get() +client.project.get_info() ```
@@ -1270,7 +1276,7 @@ client.project.get()
## Thread -
client.thread.list_all(...) +
client.thread.list(...)
@@ -1302,7 +1308,12 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.thread.list_all() +client.thread.list( + page_number=1, + page_size=1, + order_by="order_by", + asc=True, +) ```
@@ -1511,7 +1522,7 @@ client.thread.delete(
-
client.thread.get_user_context(...) +
client.thread.get_context(...)
@@ -1543,8 +1554,10 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.thread.get_user_context( +client.thread.get_context( thread_id="threadId", + min_rating=1.1, + mode="basic", ) ``` @@ -1577,7 +1590,7 @@ client.thread.get_user_context(
-**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Defaults to summary mode. Use basic for lower latency +**mode:** `typing.Optional[ThreadGetContextRequestMode]` — Defaults to summary mode. Use basic for lower latency
@@ -1597,7 +1610,7 @@ client.thread.get_user_context(
-
client.thread.get(...) +
client.thread.get_messages(...)
@@ -1629,8 +1642,11 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.thread.get( +client.thread.get_messages( thread_id="threadId", + limit=1, + cursor=1, + lastn=1, ) ``` @@ -1958,6 +1974,14 @@ client.user.add(
+**disable_default_ontology:** `typing.Optional[bool]` — When true, disables the use of default/fallback ontology for the user's graph. + +
+
+ +
+
+ **email:** `typing.Optional[str]` — The email address of the user.
@@ -2042,7 +2066,10 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.user.list_ordered() +client.user.list_ordered( + page_number=1, + page_size=1, +) ```
@@ -2284,6 +2311,14 @@ client.user.update(
+**disable_default_ontology:** `typing.Optional[bool]` — When true, disables the use of default/fallback ontology for the user's graph. + +
+
+ +
+
+ **email:** `typing.Optional[str]` — The email address of the user.
@@ -2547,7 +2582,7 @@ client.user.warm(
## Graph Edge -
client.graph.edge.get_by_graph_id(...) +
client.graph.edge.get_graph_edges(...)
@@ -2579,7 +2614,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.edge.get_by_graph_id( +client.graph.edge.get_graph_edges( graph_id="graph_id", ) @@ -2633,7 +2668,7 @@ client.graph.edge.get_by_graph_id(
-
client.graph.edge.get_by_user_id(...) +
client.graph.edge.get_user_edges(...)
@@ -2665,7 +2700,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.edge.get_by_user_id( +client.graph.edge.get_user_edges( user_id="user_id", ) @@ -2860,7 +2895,7 @@ client.graph.edge.delete(
## Graph Episode -
client.graph.episode.get_by_graph_id(...) +
client.graph.episode.get_graph_episodes(...)
@@ -2892,8 +2927,9 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.episode.get_by_graph_id( +client.graph.episode.get_graph_episodes( graph_id="graph_id", + lastn=1, ) ``` @@ -2938,7 +2974,7 @@ client.graph.episode.get_by_graph_id(
-
client.graph.episode.get_by_user_id(...) +
client.graph.episode.get_user_episodes(...)
@@ -2970,8 +3006,9 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.episode.get_by_user_id( +client.graph.episode.get_user_episodes( user_id="user_id", + lastn=1, ) ``` @@ -3156,7 +3193,7 @@ client.graph.episode.delete(
-
client.graph.episode.get_nodes_and_edges(...) +
client.graph.episode.get_mentions(...)
@@ -3188,7 +3225,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.episode.get_nodes_and_edges( +client.graph.episode.get_mentions( uuid_="uuid", ) @@ -3227,7 +3264,7 @@ client.graph.episode.get_nodes_and_edges(
## Graph Node -
client.graph.node.get_by_graph_id(...) +
client.graph.node.get_graph_nodes(...)
@@ -3259,7 +3296,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.node.get_by_graph_id( +client.graph.node.get_graph_nodes( graph_id="graph_id", ) @@ -3313,7 +3350,7 @@ client.graph.node.get_by_graph_id(
-
client.graph.node.get_by_user_id(...) +
client.graph.node.get_user_nodes(...)
@@ -3345,7 +3382,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.node.get_by_user_id( +client.graph.node.get_user_nodes( user_id="user_id", ) @@ -3399,7 +3436,7 @@ client.graph.node.get_by_user_id(
-
client.graph.node.get_edges(...) +
client.graph.node.get_entity_edges(...)
@@ -3431,7 +3468,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.node.get_edges( +client.graph.node.get_entity_edges( node_uuid="node_uuid", ) diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index fbe9de9..d17c4f6 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -52,7 +52,7 @@ from . import graph, project, thread, user from .client import AsyncZep, Zep from .environment import ZepEnvironment -from .thread import ThreadGetUserContextRequestMode +from .thread import ThreadGetContextRequestMode from .version import __version__ __all__ = [ @@ -100,7 +100,7 @@ "SuccessResponse", "Thread", "ThreadContextResponse", - "ThreadGetUserContextRequestMode", + "ThreadGetContextRequestMode", "ThreadListResponse", "User", "UserListResponse", diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 7c17fe7..b874b13 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.8.0", + "User-Agent": "zep-cloud/3.9.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.8.0", + "X-Fern-SDK-Version": "3.9.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 47a3c0d..84c1e6a 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -82,7 +82,10 @@ def list_entity_types( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.list_entity_types() + client.graph.list_entity_types( + user_id="user_id", + graph_id="graph_id", + ) """ _response = self._raw_client.list_entity_types( user_id=user_id, graph_id=graph_id, request_options=request_options @@ -492,7 +495,10 @@ def list_all( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.list_all() + client.graph.list_all( + page_number=1, + page_size=1, + ) """ _response = self._raw_client.list_all( page_number=page_number, page_size=page_size, request_options=request_options @@ -765,7 +771,10 @@ async def list_entity_types( async def main() -> None: - await client.graph.list_entity_types() + await client.graph.list_entity_types( + user_id="user_id", + graph_id="graph_id", + ) asyncio.run(main()) @@ -1231,7 +1240,10 @@ async def list_all( async def main() -> None: - await client.graph.list_all() + await client.graph.list_all( + page_number=1, + page_size=1, + ) asyncio.run(main()) diff --git a/src/zep_cloud/graph/edge/client.py b/src/zep_cloud/graph/edge/client.py index 944c262..70ca024 100644 --- a/src/zep_cloud/graph/edge/client.py +++ b/src/zep_cloud/graph/edge/client.py @@ -27,7 +27,7 @@ def with_raw_response(self) -> RawEdgeClient: """ return self._raw_client - def get_by_graph_id( + def get_graph_edges( self, graph_id: str, *, @@ -64,16 +64,16 @@ def get_by_graph_id( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.edge.get_by_graph_id( + client.graph.edge.get_graph_edges( graph_id="graph_id", ) """ - _response = self._raw_client.get_by_graph_id( + _response = self._raw_client.get_graph_edges( graph_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - def get_by_user_id( + def get_user_edges( self, user_id: str, *, @@ -110,11 +110,11 @@ def get_by_user_id( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.edge.get_by_user_id( + client.graph.edge.get_user_edges( user_id="user_id", ) """ - _response = self._raw_client.get_by_user_id( + _response = self._raw_client.get_user_edges( user_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data @@ -197,7 +197,7 @@ def with_raw_response(self) -> AsyncRawEdgeClient: """ return self._raw_client - async def get_by_graph_id( + async def get_graph_edges( self, graph_id: str, *, @@ -239,19 +239,19 @@ async def get_by_graph_id( async def main() -> None: - await client.graph.edge.get_by_graph_id( + await client.graph.edge.get_graph_edges( graph_id="graph_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_by_graph_id( + _response = await self._raw_client.get_graph_edges( graph_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - async def get_by_user_id( + async def get_user_edges( self, user_id: str, *, @@ -293,14 +293,14 @@ async def get_by_user_id( async def main() -> None: - await client.graph.edge.get_by_user_id( + await client.graph.edge.get_user_edges( user_id="user_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_by_user_id( + _response = await self._raw_client.get_user_edges( user_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data diff --git a/src/zep_cloud/graph/edge/raw_client.py b/src/zep_cloud/graph/edge/raw_client.py index 1c91b11..4603250 100644 --- a/src/zep_cloud/graph/edge/raw_client.py +++ b/src/zep_cloud/graph/edge/raw_client.py @@ -24,7 +24,7 @@ class RawEdgeClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get_by_graph_id( + def get_graph_edges( self, graph_id: str, *, @@ -108,7 +108,7 @@ def get_by_graph_id( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_by_user_id( + def get_user_edges( self, user_id: str, *, @@ -336,7 +336,7 @@ class AsyncRawEdgeClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def get_by_graph_id( + async def get_graph_edges( self, graph_id: str, *, @@ -420,7 +420,7 @@ async def get_by_graph_id( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_by_user_id( + async def get_user_edges( self, user_id: str, *, diff --git a/src/zep_cloud/graph/episode/client.py b/src/zep_cloud/graph/episode/client.py index 650aeba..00e5640 100644 --- a/src/zep_cloud/graph/episode/client.py +++ b/src/zep_cloud/graph/episode/client.py @@ -26,7 +26,7 @@ def with_raw_response(self) -> RawEpisodeClient: """ return self._raw_client - def get_by_graph_id( + def get_graph_episodes( self, graph_id: str, *, @@ -59,14 +59,15 @@ def get_by_graph_id( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.episode.get_by_graph_id( + client.graph.episode.get_graph_episodes( graph_id="graph_id", + lastn=1, ) """ - _response = self._raw_client.get_by_graph_id(graph_id, lastn=lastn, request_options=request_options) + _response = self._raw_client.get_graph_episodes(graph_id, lastn=lastn, request_options=request_options) return _response.data - def get_by_user_id( + def get_user_episodes( self, user_id: str, *, @@ -99,11 +100,12 @@ def get_by_user_id( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.episode.get_by_user_id( + client.graph.episode.get_user_episodes( user_id="user_id", + lastn=1, ) """ - _response = self._raw_client.get_by_user_id(user_id, lastn=lastn, request_options=request_options) + _response = self._raw_client.get_user_episodes(user_id, lastn=lastn, request_options=request_options) return _response.data def get(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None) -> Episode: @@ -168,9 +170,7 @@ def delete(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] _response = self._raw_client.delete(uuid_, request_options=request_options) return _response.data - def get_nodes_and_edges( - self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> EpisodeMentions: + def get_mentions(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None) -> EpisodeMentions: """ Returns nodes and edges mentioned in an episode @@ -194,11 +194,11 @@ def get_nodes_and_edges( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.episode.get_nodes_and_edges( + client.graph.episode.get_mentions( uuid_="uuid", ) """ - _response = self._raw_client.get_nodes_and_edges(uuid_, request_options=request_options) + _response = self._raw_client.get_mentions(uuid_, request_options=request_options) return _response.data @@ -217,7 +217,7 @@ def with_raw_response(self) -> AsyncRawEpisodeClient: """ return self._raw_client - async def get_by_graph_id( + async def get_graph_episodes( self, graph_id: str, *, @@ -255,17 +255,18 @@ async def get_by_graph_id( async def main() -> None: - await client.graph.episode.get_by_graph_id( + await client.graph.episode.get_graph_episodes( graph_id="graph_id", + lastn=1, ) asyncio.run(main()) """ - _response = await self._raw_client.get_by_graph_id(graph_id, lastn=lastn, request_options=request_options) + _response = await self._raw_client.get_graph_episodes(graph_id, lastn=lastn, request_options=request_options) return _response.data - async def get_by_user_id( + async def get_user_episodes( self, user_id: str, *, @@ -303,14 +304,15 @@ async def get_by_user_id( async def main() -> None: - await client.graph.episode.get_by_user_id( + await client.graph.episode.get_user_episodes( user_id="user_id", + lastn=1, ) asyncio.run(main()) """ - _response = await self._raw_client.get_by_user_id(user_id, lastn=lastn, request_options=request_options) + _response = await self._raw_client.get_user_episodes(user_id, lastn=lastn, request_options=request_options) return _response.data async def get(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None) -> Episode: @@ -391,7 +393,7 @@ async def main() -> None: _response = await self._raw_client.delete(uuid_, request_options=request_options) return _response.data - async def get_nodes_and_edges( + async def get_mentions( self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None ) -> EpisodeMentions: """ @@ -422,12 +424,12 @@ async def get_nodes_and_edges( async def main() -> None: - await client.graph.episode.get_nodes_and_edges( + await client.graph.episode.get_mentions( uuid_="uuid", ) asyncio.run(main()) """ - _response = await self._raw_client.get_nodes_and_edges(uuid_, request_options=request_options) + _response = await self._raw_client.get_mentions(uuid_, request_options=request_options) return _response.data diff --git a/src/zep_cloud/graph/episode/raw_client.py b/src/zep_cloud/graph/episode/raw_client.py index c551f3d..f031ddc 100644 --- a/src/zep_cloud/graph/episode/raw_client.py +++ b/src/zep_cloud/graph/episode/raw_client.py @@ -23,7 +23,7 @@ class RawEpisodeClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get_by_graph_id( + def get_graph_episodes( self, graph_id: str, *, @@ -98,7 +98,7 @@ def get_by_graph_id( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_by_user_id( + def get_user_episodes( self, user_id: str, *, @@ -312,7 +312,7 @@ def delete( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_nodes_and_edges( + def get_mentions( self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[EpisodeMentions]: """ @@ -382,7 +382,7 @@ class AsyncRawEpisodeClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def get_by_graph_id( + async def get_graph_episodes( self, graph_id: str, *, @@ -457,7 +457,7 @@ async def get_by_graph_id( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_by_user_id( + async def get_user_episodes( self, user_id: str, *, @@ -673,7 +673,7 @@ async def delete( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_nodes_and_edges( + async def get_mentions( self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[EpisodeMentions]: """ diff --git a/src/zep_cloud/graph/node/client.py b/src/zep_cloud/graph/node/client.py index 20b476f..21a2d03 100644 --- a/src/zep_cloud/graph/node/client.py +++ b/src/zep_cloud/graph/node/client.py @@ -28,7 +28,7 @@ def with_raw_response(self) -> RawNodeClient: """ return self._raw_client - def get_by_graph_id( + def get_graph_nodes( self, graph_id: str, *, @@ -65,16 +65,16 @@ def get_by_graph_id( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.node.get_by_graph_id( + client.graph.node.get_graph_nodes( graph_id="graph_id", ) """ - _response = self._raw_client.get_by_graph_id( + _response = self._raw_client.get_graph_nodes( graph_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - def get_by_user_id( + def get_user_nodes( self, user_id: str, *, @@ -111,16 +111,16 @@ def get_by_user_id( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.node.get_by_user_id( + client.graph.node.get_user_nodes( user_id="user_id", ) """ - _response = self._raw_client.get_by_user_id( + _response = self._raw_client.get_user_nodes( user_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - def get_edges( + def get_entity_edges( self, node_uuid: str, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[EntityEdge]: """ @@ -146,11 +146,11 @@ def get_edges( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.node.get_edges( + client.graph.node.get_entity_edges( node_uuid="node_uuid", ) """ - _response = self._raw_client.get_edges(node_uuid, request_options=request_options) + _response = self._raw_client.get_entity_edges(node_uuid, request_options=request_options) return _response.data def get_episodes( @@ -233,7 +233,7 @@ def with_raw_response(self) -> AsyncRawNodeClient: """ return self._raw_client - async def get_by_graph_id( + async def get_graph_nodes( self, graph_id: str, *, @@ -275,19 +275,19 @@ async def get_by_graph_id( async def main() -> None: - await client.graph.node.get_by_graph_id( + await client.graph.node.get_graph_nodes( graph_id="graph_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_by_graph_id( + _response = await self._raw_client.get_graph_nodes( graph_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - async def get_by_user_id( + async def get_user_nodes( self, user_id: str, *, @@ -329,19 +329,19 @@ async def get_by_user_id( async def main() -> None: - await client.graph.node.get_by_user_id( + await client.graph.node.get_user_nodes( user_id="user_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_by_user_id( + _response = await self._raw_client.get_user_nodes( user_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - async def get_edges( + async def get_entity_edges( self, node_uuid: str, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[EntityEdge]: """ @@ -372,14 +372,14 @@ async def get_edges( async def main() -> None: - await client.graph.node.get_edges( + await client.graph.node.get_entity_edges( node_uuid="node_uuid", ) asyncio.run(main()) """ - _response = await self._raw_client.get_edges(node_uuid, request_options=request_options) + _response = await self._raw_client.get_entity_edges(node_uuid, request_options=request_options) return _response.data async def get_episodes( diff --git a/src/zep_cloud/graph/node/raw_client.py b/src/zep_cloud/graph/node/raw_client.py index da6abb7..2f8d2c1 100644 --- a/src/zep_cloud/graph/node/raw_client.py +++ b/src/zep_cloud/graph/node/raw_client.py @@ -25,7 +25,7 @@ class RawNodeClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get_by_graph_id( + def get_graph_nodes( self, graph_id: str, *, @@ -109,7 +109,7 @@ def get_by_graph_id( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_by_user_id( + def get_user_nodes( self, user_id: str, *, @@ -193,7 +193,7 @@ def get_by_user_id( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_edges( + def get_entity_edges( self, node_uuid: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[typing.List[EntityEdge]]: """ @@ -402,7 +402,7 @@ class AsyncRawNodeClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def get_by_graph_id( + async def get_graph_nodes( self, graph_id: str, *, @@ -486,7 +486,7 @@ async def get_by_graph_id( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_by_user_id( + async def get_user_nodes( self, user_id: str, *, @@ -570,7 +570,7 @@ async def get_by_user_id( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_edges( + async def get_entity_edges( self, node_uuid: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[typing.List[EntityEdge]]: """ diff --git a/src/zep_cloud/project/client.py b/src/zep_cloud/project/client.py index 8db3379..0a7bba0 100644 --- a/src/zep_cloud/project/client.py +++ b/src/zep_cloud/project/client.py @@ -23,7 +23,7 @@ def with_raw_response(self) -> RawProjectClient: """ return self._raw_client - def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: + def get_info(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: """ Retrieve project info based on the provided api key. @@ -44,9 +44,9 @@ def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> Pro client = Zep( api_key="YOUR_API_KEY", ) - client.project.get() + client.project.get_info() """ - _response = self._raw_client.get(request_options=request_options) + _response = self._raw_client.get_info(request_options=request_options) return _response.data @@ -65,7 +65,7 @@ def with_raw_response(self) -> AsyncRawProjectClient: """ return self._raw_client - async def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: + async def get_info(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: """ Retrieve project info based on the provided api key. @@ -91,10 +91,10 @@ async def get(self, *, request_options: typing.Optional[RequestOptions] = None) async def main() -> None: - await client.project.get() + await client.project.get_info() asyncio.run(main()) """ - _response = await self._raw_client.get(request_options=request_options) + _response = await self._raw_client.get_info(request_options=request_options) return _response.data diff --git a/src/zep_cloud/project/raw_client.py b/src/zep_cloud/project/raw_client.py index 4b74c71..e067f76 100644 --- a/src/zep_cloud/project/raw_client.py +++ b/src/zep_cloud/project/raw_client.py @@ -19,7 +19,7 @@ class RawProjectClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[ProjectInfoResponse]: + def get_info(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[ProjectInfoResponse]: """ Retrieve project info based on the provided api key. @@ -95,7 +95,7 @@ class AsyncRawProjectClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def get( + async def get_info( self, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[ProjectInfoResponse]: """ diff --git a/src/zep_cloud/thread/__init__.py b/src/zep_cloud/thread/__init__.py index 047bbca..996b516 100644 --- a/src/zep_cloud/thread/__init__.py +++ b/src/zep_cloud/thread/__init__.py @@ -2,7 +2,7 @@ # isort: skip_file -from .types import ThreadGetUserContextRequestMode +from .types import ThreadGetContextRequestMode from . import message -__all__ = ["ThreadGetUserContextRequestMode", "message"] +__all__ = ["ThreadGetContextRequestMode", "message"] diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index eaf964d..0d6d3f0 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -14,7 +14,7 @@ from ..types.thread_list_response import ThreadListResponse from .message.client import AsyncMessageClient, MessageClient from .raw_client import AsyncRawThreadClient, RawThreadClient -from .types.thread_get_user_context_request_mode import ThreadGetUserContextRequestMode +from .types.thread_get_context_request_mode import ThreadGetContextRequestMode # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -36,7 +36,7 @@ def with_raw_response(self) -> RawThreadClient: """ return self._raw_client - def list_all( + def list( self, *, page_number: typing.Optional[int] = None, @@ -77,9 +77,14 @@ def list_all( client = Zep( api_key="YOUR_API_KEY", ) - client.thread.list_all() + client.thread.list( + page_number=1, + page_size=1, + order_by="order_by", + asc=True, + ) """ - _response = self._raw_client.list_all( + _response = self._raw_client.list( page_number=page_number, page_size=page_size, order_by=order_by, asc=asc, request_options=request_options ) return _response.data @@ -152,12 +157,12 @@ def delete(self, thread_id: str, *, request_options: typing.Optional[RequestOpti _response = self._raw_client.delete(thread_id, request_options=request_options) return _response.data - def get_user_context( + def get_context( self, thread_id: str, *, min_rating: typing.Optional[float] = None, - mode: typing.Optional[ThreadGetUserContextRequestMode] = None, + mode: typing.Optional[ThreadGetContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> ThreadContextResponse: """ @@ -171,7 +176,7 @@ def get_user_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. - mode : typing.Optional[ThreadGetUserContextRequestMode] + mode : typing.Optional[ThreadGetContextRequestMode] Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] @@ -189,16 +194,18 @@ def get_user_context( client = Zep( api_key="YOUR_API_KEY", ) - client.thread.get_user_context( + client.thread.get_context( thread_id="threadId", + min_rating=1.1, + mode="basic", ) """ - _response = self._raw_client.get_user_context( + _response = self._raw_client.get_context( thread_id, min_rating=min_rating, mode=mode, request_options=request_options ) return _response.data - def get( + def get_messages( self, thread_id: str, *, @@ -239,11 +246,14 @@ def get( client = Zep( api_key="YOUR_API_KEY", ) - client.thread.get( + client.thread.get_messages( thread_id="threadId", + limit=1, + cursor=1, + lastn=1, ) """ - _response = self._raw_client.get( + _response = self._raw_client.get_messages( thread_id, limit=limit, cursor=cursor, lastn=lastn, request_options=request_options ) return _response.data @@ -389,7 +399,7 @@ def with_raw_response(self) -> AsyncRawThreadClient: """ return self._raw_client - async def list_all( + async def list( self, *, page_number: typing.Optional[int] = None, @@ -435,12 +445,17 @@ async def list_all( async def main() -> None: - await client.thread.list_all() + await client.thread.list( + page_number=1, + page_size=1, + order_by="order_by", + asc=True, + ) asyncio.run(main()) """ - _response = await self._raw_client.list_all( + _response = await self._raw_client.list( page_number=page_number, page_size=page_size, order_by=order_by, asc=asc, request_options=request_options ) return _response.data @@ -531,12 +546,12 @@ async def main() -> None: _response = await self._raw_client.delete(thread_id, request_options=request_options) return _response.data - async def get_user_context( + async def get_context( self, thread_id: str, *, min_rating: typing.Optional[float] = None, - mode: typing.Optional[ThreadGetUserContextRequestMode] = None, + mode: typing.Optional[ThreadGetContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> ThreadContextResponse: """ @@ -550,7 +565,7 @@ async def get_user_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. - mode : typing.Optional[ThreadGetUserContextRequestMode] + mode : typing.Optional[ThreadGetContextRequestMode] Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] @@ -573,19 +588,21 @@ async def get_user_context( async def main() -> None: - await client.thread.get_user_context( + await client.thread.get_context( thread_id="threadId", + min_rating=1.1, + mode="basic", ) asyncio.run(main()) """ - _response = await self._raw_client.get_user_context( + _response = await self._raw_client.get_context( thread_id, min_rating=min_rating, mode=mode, request_options=request_options ) return _response.data - async def get( + async def get_messages( self, thread_id: str, *, @@ -631,14 +648,17 @@ async def get( async def main() -> None: - await client.thread.get( + await client.thread.get_messages( thread_id="threadId", + limit=1, + cursor=1, + lastn=1, ) asyncio.run(main()) """ - _response = await self._raw_client.get( + _response = await self._raw_client.get_messages( thread_id, limit=limit, cursor=cursor, lastn=lastn, request_options=request_options ) return _response.data diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index 14390e8..888d3ea 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -22,7 +22,7 @@ from ..types.thread import Thread from ..types.thread_context_response import ThreadContextResponse from ..types.thread_list_response import ThreadListResponse -from .types.thread_get_user_context_request_mode import ThreadGetUserContextRequestMode +from .types.thread_get_context_request_mode import ThreadGetContextRequestMode # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -32,7 +32,7 @@ class RawThreadClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def list_all( + def list( self, *, page_number: typing.Optional[int] = None, @@ -259,12 +259,12 @@ def delete( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_user_context( + def get_context( self, thread_id: str, *, min_rating: typing.Optional[float] = None, - mode: typing.Optional[ThreadGetUserContextRequestMode] = None, + mode: typing.Optional[ThreadGetContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[ThreadContextResponse]: """ @@ -278,7 +278,7 @@ def get_user_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. - mode : typing.Optional[ThreadGetUserContextRequestMode] + mode : typing.Optional[ThreadGetContextRequestMode] Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] @@ -339,7 +339,7 @@ def get_user_context( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get( + def get_messages( self, thread_id: str, *, @@ -593,7 +593,7 @@ class AsyncRawThreadClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def list_all( + async def list( self, *, page_number: typing.Optional[int] = None, @@ -820,12 +820,12 @@ async def delete( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_user_context( + async def get_context( self, thread_id: str, *, min_rating: typing.Optional[float] = None, - mode: typing.Optional[ThreadGetUserContextRequestMode] = None, + mode: typing.Optional[ThreadGetContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[ThreadContextResponse]: """ @@ -839,7 +839,7 @@ async def get_user_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. - mode : typing.Optional[ThreadGetUserContextRequestMode] + mode : typing.Optional[ThreadGetContextRequestMode] Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] @@ -900,7 +900,7 @@ async def get_user_context( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get( + async def get_messages( self, thread_id: str, *, diff --git a/src/zep_cloud/thread/types/__init__.py b/src/zep_cloud/thread/types/__init__.py index 95d1e56..8ae885c 100644 --- a/src/zep_cloud/thread/types/__init__.py +++ b/src/zep_cloud/thread/types/__init__.py @@ -2,6 +2,6 @@ # isort: skip_file -from .thread_get_user_context_request_mode import ThreadGetUserContextRequestMode +from .thread_get_context_request_mode import ThreadGetContextRequestMode -__all__ = ["ThreadGetUserContextRequestMode"] +__all__ = ["ThreadGetContextRequestMode"] diff --git a/src/zep_cloud/thread/types/thread_get_context_request_mode.py b/src/zep_cloud/thread/types/thread_get_context_request_mode.py new file mode 100644 index 0000000..fecd367 --- /dev/null +++ b/src/zep_cloud/thread/types/thread_get_context_request_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ThreadGetContextRequestMode = typing.Union[typing.Literal["basic", "summary"], typing.Any] diff --git a/src/zep_cloud/thread/types/thread_get_user_context_request_mode.py b/src/zep_cloud/thread/types/thread_get_user_context_request_mode.py deleted file mode 100644 index e0e796b..0000000 --- a/src/zep_cloud/thread/types/thread_get_user_context_request_mode.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -ThreadGetUserContextRequestMode = typing.Union[typing.Literal["basic", "summary"], typing.Any] diff --git a/src/zep_cloud/types/search_filters.py b/src/zep_cloud/types/search_filters.py index 08bf0d3..51caa1a 100644 --- a/src/zep_cloud/types/search_filters.py +++ b/src/zep_cloud/types/search_filters.py @@ -22,6 +22,16 @@ class SearchFilters(UniversalBaseModel): List of edge types to filter on """ + exclude_edge_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + List of edge types to exclude from results + """ + + exclude_node_labels: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + List of node labels to exclude from results + """ + expired_at: typing.Optional[typing.List[typing.List[DateFilter]]] = pydantic.Field(default=None) """ 2D array of date filters for the expired_at field. diff --git a/src/zep_cloud/types/user.py b/src/zep_cloud/types/user.py index eba4f00..6d47f41 100644 --- a/src/zep_cloud/types/user.py +++ b/src/zep_cloud/types/user.py @@ -12,6 +12,7 @@ class User(UniversalBaseModel): created_at: typing.Optional[str] = None deleted_at: typing.Optional[str] = None + disable_default_ontology: typing.Optional[bool] = None email: typing.Optional[str] = None fact_rating_instruction: typing.Optional[ModelsFactRatingInstruction] = None first_name: typing.Optional[str] = None diff --git a/src/zep_cloud/user/client.py b/src/zep_cloud/user/client.py index fccf15c..8ef20ef 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -35,6 +35,7 @@ def add( self, *, user_id: str, + disable_default_ontology: typing.Optional[bool] = OMIT, email: typing.Optional[str] = OMIT, fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, first_name: typing.Optional[str] = OMIT, @@ -50,6 +51,9 @@ def add( user_id : str The unique identifier of the user. + disable_default_ontology : typing.Optional[bool] + When true, disables the use of default/fallback ontology for the user's graph. + email : typing.Optional[str] The email address of the user. @@ -86,6 +90,7 @@ def add( """ _response = self._raw_client.add( user_id=user_id, + disable_default_ontology=disable_default_ontology, email=email, fact_rating_instruction=fact_rating_instruction, first_name=first_name, @@ -128,7 +133,10 @@ def list_ordered( client = Zep( api_key="YOUR_API_KEY", ) - client.user.list_ordered() + client.user.list_ordered( + page_number=1, + page_size=1, + ) """ _response = self._raw_client.list_ordered( page_number=page_number, page_size=page_size, request_options=request_options @@ -201,6 +209,7 @@ def update( self, user_id: str, *, + disable_default_ontology: typing.Optional[bool] = OMIT, email: typing.Optional[str] = OMIT, fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, first_name: typing.Optional[str] = OMIT, @@ -216,6 +225,9 @@ def update( user_id : str User ID + disable_default_ontology : typing.Optional[bool] + When true, disables the use of default/fallback ontology for the user's graph. + email : typing.Optional[str] The email address of the user. @@ -252,6 +264,7 @@ def update( """ _response = self._raw_client.update( user_id, + disable_default_ontology=disable_default_ontology, email=email, fact_rating_instruction=fact_rating_instruction, first_name=first_name, @@ -376,6 +389,7 @@ async def add( self, *, user_id: str, + disable_default_ontology: typing.Optional[bool] = OMIT, email: typing.Optional[str] = OMIT, fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, first_name: typing.Optional[str] = OMIT, @@ -391,6 +405,9 @@ async def add( user_id : str The unique identifier of the user. + disable_default_ontology : typing.Optional[bool] + When true, disables the use of default/fallback ontology for the user's graph. + email : typing.Optional[str] The email address of the user. @@ -435,6 +452,7 @@ async def main() -> None: """ _response = await self._raw_client.add( user_id=user_id, + disable_default_ontology=disable_default_ontology, email=email, fact_rating_instruction=fact_rating_instruction, first_name=first_name, @@ -482,7 +500,10 @@ async def list_ordered( async def main() -> None: - await client.user.list_ordered() + await client.user.list_ordered( + page_number=1, + page_size=1, + ) asyncio.run(main()) @@ -574,6 +595,7 @@ async def update( self, user_id: str, *, + disable_default_ontology: typing.Optional[bool] = OMIT, email: typing.Optional[str] = OMIT, fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, first_name: typing.Optional[str] = OMIT, @@ -589,6 +611,9 @@ async def update( user_id : str User ID + disable_default_ontology : typing.Optional[bool] + When true, disables the use of default/fallback ontology for the user's graph. + email : typing.Optional[str] The email address of the user. @@ -633,6 +658,7 @@ async def main() -> None: """ _response = await self._raw_client.update( user_id, + disable_default_ontology=disable_default_ontology, email=email, fact_rating_instruction=fact_rating_instruction, first_name=first_name, diff --git a/src/zep_cloud/user/raw_client.py b/src/zep_cloud/user/raw_client.py index 5d93f8c..3d633a9 100644 --- a/src/zep_cloud/user/raw_client.py +++ b/src/zep_cloud/user/raw_client.py @@ -33,6 +33,7 @@ def add( self, *, user_id: str, + disable_default_ontology: typing.Optional[bool] = OMIT, email: typing.Optional[str] = OMIT, fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, first_name: typing.Optional[str] = OMIT, @@ -48,6 +49,9 @@ def add( user_id : str The unique identifier of the user. + disable_default_ontology : typing.Optional[bool] + When true, disables the use of default/fallback ontology for the user's graph. + email : typing.Optional[str] The email address of the user. @@ -75,6 +79,7 @@ def add( "users", method="POST", json={ + "disable_default_ontology": disable_default_ontology, "email": email, "fact_rating_instruction": convert_and_respect_annotation_metadata( object_=fact_rating_instruction, annotation=FactRatingInstruction, direction="write" @@ -339,6 +344,7 @@ def update( self, user_id: str, *, + disable_default_ontology: typing.Optional[bool] = OMIT, email: typing.Optional[str] = OMIT, fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, first_name: typing.Optional[str] = OMIT, @@ -354,6 +360,9 @@ def update( user_id : str User ID + disable_default_ontology : typing.Optional[bool] + When true, disables the use of default/fallback ontology for the user's graph. + email : typing.Optional[str] The email address of the user. @@ -381,6 +390,7 @@ def update( f"users/{jsonable_encoder(user_id)}", method="PATCH", json={ + "disable_default_ontology": disable_default_ontology, "email": email, "fact_rating_instruction": convert_and_respect_annotation_metadata( object_=fact_rating_instruction, annotation=FactRatingInstruction, direction="write" @@ -640,6 +650,7 @@ async def add( self, *, user_id: str, + disable_default_ontology: typing.Optional[bool] = OMIT, email: typing.Optional[str] = OMIT, fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, first_name: typing.Optional[str] = OMIT, @@ -655,6 +666,9 @@ async def add( user_id : str The unique identifier of the user. + disable_default_ontology : typing.Optional[bool] + When true, disables the use of default/fallback ontology for the user's graph. + email : typing.Optional[str] The email address of the user. @@ -682,6 +696,7 @@ async def add( "users", method="POST", json={ + "disable_default_ontology": disable_default_ontology, "email": email, "fact_rating_instruction": convert_and_respect_annotation_metadata( object_=fact_rating_instruction, annotation=FactRatingInstruction, direction="write" @@ -948,6 +963,7 @@ async def update( self, user_id: str, *, + disable_default_ontology: typing.Optional[bool] = OMIT, email: typing.Optional[str] = OMIT, fact_rating_instruction: typing.Optional[FactRatingInstruction] = OMIT, first_name: typing.Optional[str] = OMIT, @@ -963,6 +979,9 @@ async def update( user_id : str User ID + disable_default_ontology : typing.Optional[bool] + When true, disables the use of default/fallback ontology for the user's graph. + email : typing.Optional[str] The email address of the user. @@ -990,6 +1009,7 @@ async def update( f"users/{jsonable_encoder(user_id)}", method="PATCH", json={ + "disable_default_ontology": disable_default_ontology, "email": email, "fact_rating_instruction": convert_and_respect_annotation_metadata( object_=fact_rating_instruction, annotation=FactRatingInstruction, direction="write" From 93cab5440f9a45bf2b862af15a8765e1f5c61349 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 16:23:02 +0000 Subject: [PATCH 47/74] SDK regeneration --- reference.md | 50 +++++++++---------- src/zep_cloud/__init__.py | 4 +- src/zep_cloud/graph/edge/client.py | 24 ++++----- src/zep_cloud/graph/edge/raw_client.py | 8 +-- src/zep_cloud/graph/episode/client.py | 38 +++++++------- src/zep_cloud/graph/episode/raw_client.py | 12 ++--- src/zep_cloud/graph/node/client.py | 36 ++++++------- src/zep_cloud/graph/node/raw_client.py | 12 ++--- src/zep_cloud/project/client.py | 12 ++--- src/zep_cloud/project/raw_client.py | 4 +- src/zep_cloud/thread/__init__.py | 4 +- src/zep_cloud/thread/client.py | 46 ++++++++--------- src/zep_cloud/thread/raw_client.py | 22 ++++---- src/zep_cloud/thread/types/__init__.py | 4 +- .../types/thread_get_context_request_mode.py | 5 -- .../thread_get_user_context_request_mode.py | 5 ++ 16 files changed, 144 insertions(+), 142 deletions(-) delete mode 100644 src/zep_cloud/thread/types/thread_get_context_request_mode.py create mode 100644 src/zep_cloud/thread/types/thread_get_user_context_request_mode.py diff --git a/reference.md b/reference.md index 4029cf5..09f6ce4 100644 --- a/reference.md +++ b/reference.md @@ -1215,7 +1215,7 @@ client.graph.update(
## Project -
client.project.get_info() +
client.project.get()
@@ -1247,7 +1247,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.project.get_info() +client.project.get() ```
@@ -1276,7 +1276,7 @@ client.project.get_info()
## Thread -
client.thread.list(...) +
client.thread.list_all(...)
@@ -1308,7 +1308,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.thread.list( +client.thread.list_all( page_number=1, page_size=1, order_by="order_by", @@ -1522,7 +1522,7 @@ client.thread.delete(
-
client.thread.get_context(...) +
client.thread.get_user_context(...)
@@ -1554,7 +1554,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.thread.get_context( +client.thread.get_user_context( thread_id="threadId", min_rating=1.1, mode="basic", @@ -1590,7 +1590,7 @@ client.thread.get_context(
-**mode:** `typing.Optional[ThreadGetContextRequestMode]` — Defaults to summary mode. Use basic for lower latency +**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Defaults to summary mode. Use basic for lower latency
@@ -1610,7 +1610,7 @@ client.thread.get_context(
-
client.thread.get_messages(...) +
client.thread.get(...)
@@ -1642,7 +1642,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.thread.get_messages( +client.thread.get( thread_id="threadId", limit=1, cursor=1, @@ -2582,7 +2582,7 @@ client.user.warm(
## Graph Edge -
client.graph.edge.get_graph_edges(...) +
client.graph.edge.get_by_graph_id(...)
@@ -2614,7 +2614,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.edge.get_graph_edges( +client.graph.edge.get_by_graph_id( graph_id="graph_id", ) @@ -2668,7 +2668,7 @@ client.graph.edge.get_graph_edges(
-
client.graph.edge.get_user_edges(...) +
client.graph.edge.get_by_user_id(...)
@@ -2700,7 +2700,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.edge.get_user_edges( +client.graph.edge.get_by_user_id( user_id="user_id", ) @@ -2895,7 +2895,7 @@ client.graph.edge.delete(
## Graph Episode -
client.graph.episode.get_graph_episodes(...) +
client.graph.episode.get_by_graph_id(...)
@@ -2927,7 +2927,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.episode.get_graph_episodes( +client.graph.episode.get_by_graph_id( graph_id="graph_id", lastn=1, ) @@ -2974,7 +2974,7 @@ client.graph.episode.get_graph_episodes(
-
client.graph.episode.get_user_episodes(...) +
client.graph.episode.get_by_user_id(...)
@@ -3006,7 +3006,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.episode.get_user_episodes( +client.graph.episode.get_by_user_id( user_id="user_id", lastn=1, ) @@ -3193,7 +3193,7 @@ client.graph.episode.delete(
-
client.graph.episode.get_mentions(...) +
client.graph.episode.get_nodes_and_edges(...)
@@ -3225,7 +3225,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.episode.get_mentions( +client.graph.episode.get_nodes_and_edges( uuid_="uuid", ) @@ -3264,7 +3264,7 @@ client.graph.episode.get_mentions(
## Graph Node -
client.graph.node.get_graph_nodes(...) +
client.graph.node.get_by_graph_id(...)
@@ -3296,7 +3296,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.node.get_graph_nodes( +client.graph.node.get_by_graph_id( graph_id="graph_id", ) @@ -3350,7 +3350,7 @@ client.graph.node.get_graph_nodes(
-
client.graph.node.get_user_nodes(...) +
client.graph.node.get_by_user_id(...)
@@ -3382,7 +3382,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.node.get_user_nodes( +client.graph.node.get_by_user_id( user_id="user_id", ) @@ -3436,7 +3436,7 @@ client.graph.node.get_user_nodes(
-
client.graph.node.get_entity_edges(...) +
client.graph.node.get_edges(...)
@@ -3468,7 +3468,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.node.get_entity_edges( +client.graph.node.get_edges( node_uuid="node_uuid", ) diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index d17c4f6..fbe9de9 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -52,7 +52,7 @@ from . import graph, project, thread, user from .client import AsyncZep, Zep from .environment import ZepEnvironment -from .thread import ThreadGetContextRequestMode +from .thread import ThreadGetUserContextRequestMode from .version import __version__ __all__ = [ @@ -100,7 +100,7 @@ "SuccessResponse", "Thread", "ThreadContextResponse", - "ThreadGetContextRequestMode", + "ThreadGetUserContextRequestMode", "ThreadListResponse", "User", "UserListResponse", diff --git a/src/zep_cloud/graph/edge/client.py b/src/zep_cloud/graph/edge/client.py index 70ca024..944c262 100644 --- a/src/zep_cloud/graph/edge/client.py +++ b/src/zep_cloud/graph/edge/client.py @@ -27,7 +27,7 @@ def with_raw_response(self) -> RawEdgeClient: """ return self._raw_client - def get_graph_edges( + def get_by_graph_id( self, graph_id: str, *, @@ -64,16 +64,16 @@ def get_graph_edges( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.edge.get_graph_edges( + client.graph.edge.get_by_graph_id( graph_id="graph_id", ) """ - _response = self._raw_client.get_graph_edges( + _response = self._raw_client.get_by_graph_id( graph_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - def get_user_edges( + def get_by_user_id( self, user_id: str, *, @@ -110,11 +110,11 @@ def get_user_edges( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.edge.get_user_edges( + client.graph.edge.get_by_user_id( user_id="user_id", ) """ - _response = self._raw_client.get_user_edges( + _response = self._raw_client.get_by_user_id( user_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data @@ -197,7 +197,7 @@ def with_raw_response(self) -> AsyncRawEdgeClient: """ return self._raw_client - async def get_graph_edges( + async def get_by_graph_id( self, graph_id: str, *, @@ -239,19 +239,19 @@ async def get_graph_edges( async def main() -> None: - await client.graph.edge.get_graph_edges( + await client.graph.edge.get_by_graph_id( graph_id="graph_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_graph_edges( + _response = await self._raw_client.get_by_graph_id( graph_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - async def get_user_edges( + async def get_by_user_id( self, user_id: str, *, @@ -293,14 +293,14 @@ async def get_user_edges( async def main() -> None: - await client.graph.edge.get_user_edges( + await client.graph.edge.get_by_user_id( user_id="user_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_user_edges( + _response = await self._raw_client.get_by_user_id( user_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data diff --git a/src/zep_cloud/graph/edge/raw_client.py b/src/zep_cloud/graph/edge/raw_client.py index 4603250..1c91b11 100644 --- a/src/zep_cloud/graph/edge/raw_client.py +++ b/src/zep_cloud/graph/edge/raw_client.py @@ -24,7 +24,7 @@ class RawEdgeClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get_graph_edges( + def get_by_graph_id( self, graph_id: str, *, @@ -108,7 +108,7 @@ def get_graph_edges( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_user_edges( + def get_by_user_id( self, user_id: str, *, @@ -336,7 +336,7 @@ class AsyncRawEdgeClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def get_graph_edges( + async def get_by_graph_id( self, graph_id: str, *, @@ -420,7 +420,7 @@ async def get_graph_edges( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_user_edges( + async def get_by_user_id( self, user_id: str, *, diff --git a/src/zep_cloud/graph/episode/client.py b/src/zep_cloud/graph/episode/client.py index 00e5640..81649a0 100644 --- a/src/zep_cloud/graph/episode/client.py +++ b/src/zep_cloud/graph/episode/client.py @@ -26,7 +26,7 @@ def with_raw_response(self) -> RawEpisodeClient: """ return self._raw_client - def get_graph_episodes( + def get_by_graph_id( self, graph_id: str, *, @@ -59,15 +59,15 @@ def get_graph_episodes( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.episode.get_graph_episodes( + client.graph.episode.get_by_graph_id( graph_id="graph_id", lastn=1, ) """ - _response = self._raw_client.get_graph_episodes(graph_id, lastn=lastn, request_options=request_options) + _response = self._raw_client.get_by_graph_id(graph_id, lastn=lastn, request_options=request_options) return _response.data - def get_user_episodes( + def get_by_user_id( self, user_id: str, *, @@ -100,12 +100,12 @@ def get_user_episodes( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.episode.get_user_episodes( + client.graph.episode.get_by_user_id( user_id="user_id", lastn=1, ) """ - _response = self._raw_client.get_user_episodes(user_id, lastn=lastn, request_options=request_options) + _response = self._raw_client.get_by_user_id(user_id, lastn=lastn, request_options=request_options) return _response.data def get(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None) -> Episode: @@ -170,7 +170,9 @@ def delete(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] _response = self._raw_client.delete(uuid_, request_options=request_options) return _response.data - def get_mentions(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None) -> EpisodeMentions: + def get_nodes_and_edges( + self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> EpisodeMentions: """ Returns nodes and edges mentioned in an episode @@ -194,11 +196,11 @@ def get_mentions(self, uuid_: str, *, request_options: typing.Optional[RequestOp client = Zep( api_key="YOUR_API_KEY", ) - client.graph.episode.get_mentions( + client.graph.episode.get_nodes_and_edges( uuid_="uuid", ) """ - _response = self._raw_client.get_mentions(uuid_, request_options=request_options) + _response = self._raw_client.get_nodes_and_edges(uuid_, request_options=request_options) return _response.data @@ -217,7 +219,7 @@ def with_raw_response(self) -> AsyncRawEpisodeClient: """ return self._raw_client - async def get_graph_episodes( + async def get_by_graph_id( self, graph_id: str, *, @@ -255,7 +257,7 @@ async def get_graph_episodes( async def main() -> None: - await client.graph.episode.get_graph_episodes( + await client.graph.episode.get_by_graph_id( graph_id="graph_id", lastn=1, ) @@ -263,10 +265,10 @@ async def main() -> None: asyncio.run(main()) """ - _response = await self._raw_client.get_graph_episodes(graph_id, lastn=lastn, request_options=request_options) + _response = await self._raw_client.get_by_graph_id(graph_id, lastn=lastn, request_options=request_options) return _response.data - async def get_user_episodes( + async def get_by_user_id( self, user_id: str, *, @@ -304,7 +306,7 @@ async def get_user_episodes( async def main() -> None: - await client.graph.episode.get_user_episodes( + await client.graph.episode.get_by_user_id( user_id="user_id", lastn=1, ) @@ -312,7 +314,7 @@ async def main() -> None: asyncio.run(main()) """ - _response = await self._raw_client.get_user_episodes(user_id, lastn=lastn, request_options=request_options) + _response = await self._raw_client.get_by_user_id(user_id, lastn=lastn, request_options=request_options) return _response.data async def get(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None) -> Episode: @@ -393,7 +395,7 @@ async def main() -> None: _response = await self._raw_client.delete(uuid_, request_options=request_options) return _response.data - async def get_mentions( + async def get_nodes_and_edges( self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None ) -> EpisodeMentions: """ @@ -424,12 +426,12 @@ async def get_mentions( async def main() -> None: - await client.graph.episode.get_mentions( + await client.graph.episode.get_nodes_and_edges( uuid_="uuid", ) asyncio.run(main()) """ - _response = await self._raw_client.get_mentions(uuid_, request_options=request_options) + _response = await self._raw_client.get_nodes_and_edges(uuid_, request_options=request_options) return _response.data diff --git a/src/zep_cloud/graph/episode/raw_client.py b/src/zep_cloud/graph/episode/raw_client.py index f031ddc..c551f3d 100644 --- a/src/zep_cloud/graph/episode/raw_client.py +++ b/src/zep_cloud/graph/episode/raw_client.py @@ -23,7 +23,7 @@ class RawEpisodeClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get_graph_episodes( + def get_by_graph_id( self, graph_id: str, *, @@ -98,7 +98,7 @@ def get_graph_episodes( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_user_episodes( + def get_by_user_id( self, user_id: str, *, @@ -312,7 +312,7 @@ def delete( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_mentions( + def get_nodes_and_edges( self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[EpisodeMentions]: """ @@ -382,7 +382,7 @@ class AsyncRawEpisodeClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def get_graph_episodes( + async def get_by_graph_id( self, graph_id: str, *, @@ -457,7 +457,7 @@ async def get_graph_episodes( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_user_episodes( + async def get_by_user_id( self, user_id: str, *, @@ -673,7 +673,7 @@ async def delete( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_mentions( + async def get_nodes_and_edges( self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[EpisodeMentions]: """ diff --git a/src/zep_cloud/graph/node/client.py b/src/zep_cloud/graph/node/client.py index 21a2d03..20b476f 100644 --- a/src/zep_cloud/graph/node/client.py +++ b/src/zep_cloud/graph/node/client.py @@ -28,7 +28,7 @@ def with_raw_response(self) -> RawNodeClient: """ return self._raw_client - def get_graph_nodes( + def get_by_graph_id( self, graph_id: str, *, @@ -65,16 +65,16 @@ def get_graph_nodes( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.node.get_graph_nodes( + client.graph.node.get_by_graph_id( graph_id="graph_id", ) """ - _response = self._raw_client.get_graph_nodes( + _response = self._raw_client.get_by_graph_id( graph_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - def get_user_nodes( + def get_by_user_id( self, user_id: str, *, @@ -111,16 +111,16 @@ def get_user_nodes( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.node.get_user_nodes( + client.graph.node.get_by_user_id( user_id="user_id", ) """ - _response = self._raw_client.get_user_nodes( + _response = self._raw_client.get_by_user_id( user_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - def get_entity_edges( + def get_edges( self, node_uuid: str, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[EntityEdge]: """ @@ -146,11 +146,11 @@ def get_entity_edges( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.node.get_entity_edges( + client.graph.node.get_edges( node_uuid="node_uuid", ) """ - _response = self._raw_client.get_entity_edges(node_uuid, request_options=request_options) + _response = self._raw_client.get_edges(node_uuid, request_options=request_options) return _response.data def get_episodes( @@ -233,7 +233,7 @@ def with_raw_response(self) -> AsyncRawNodeClient: """ return self._raw_client - async def get_graph_nodes( + async def get_by_graph_id( self, graph_id: str, *, @@ -275,19 +275,19 @@ async def get_graph_nodes( async def main() -> None: - await client.graph.node.get_graph_nodes( + await client.graph.node.get_by_graph_id( graph_id="graph_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_graph_nodes( + _response = await self._raw_client.get_by_graph_id( graph_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - async def get_user_nodes( + async def get_by_user_id( self, user_id: str, *, @@ -329,19 +329,19 @@ async def get_user_nodes( async def main() -> None: - await client.graph.node.get_user_nodes( + await client.graph.node.get_by_user_id( user_id="user_id", ) asyncio.run(main()) """ - _response = await self._raw_client.get_user_nodes( + _response = await self._raw_client.get_by_user_id( user_id, limit=limit, uuid_cursor=uuid_cursor, request_options=request_options ) return _response.data - async def get_entity_edges( + async def get_edges( self, node_uuid: str, *, request_options: typing.Optional[RequestOptions] = None ) -> typing.List[EntityEdge]: """ @@ -372,14 +372,14 @@ async def get_entity_edges( async def main() -> None: - await client.graph.node.get_entity_edges( + await client.graph.node.get_edges( node_uuid="node_uuid", ) asyncio.run(main()) """ - _response = await self._raw_client.get_entity_edges(node_uuid, request_options=request_options) + _response = await self._raw_client.get_edges(node_uuid, request_options=request_options) return _response.data async def get_episodes( diff --git a/src/zep_cloud/graph/node/raw_client.py b/src/zep_cloud/graph/node/raw_client.py index 2f8d2c1..da6abb7 100644 --- a/src/zep_cloud/graph/node/raw_client.py +++ b/src/zep_cloud/graph/node/raw_client.py @@ -25,7 +25,7 @@ class RawNodeClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get_graph_nodes( + def get_by_graph_id( self, graph_id: str, *, @@ -109,7 +109,7 @@ def get_graph_nodes( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_user_nodes( + def get_by_user_id( self, user_id: str, *, @@ -193,7 +193,7 @@ def get_user_nodes( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_entity_edges( + def get_edges( self, node_uuid: str, *, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[typing.List[EntityEdge]]: """ @@ -402,7 +402,7 @@ class AsyncRawNodeClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def get_graph_nodes( + async def get_by_graph_id( self, graph_id: str, *, @@ -486,7 +486,7 @@ async def get_graph_nodes( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_user_nodes( + async def get_by_user_id( self, user_id: str, *, @@ -570,7 +570,7 @@ async def get_user_nodes( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_entity_edges( + async def get_edges( self, node_uuid: str, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[typing.List[EntityEdge]]: """ diff --git a/src/zep_cloud/project/client.py b/src/zep_cloud/project/client.py index 0a7bba0..8db3379 100644 --- a/src/zep_cloud/project/client.py +++ b/src/zep_cloud/project/client.py @@ -23,7 +23,7 @@ def with_raw_response(self) -> RawProjectClient: """ return self._raw_client - def get_info(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: + def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: """ Retrieve project info based on the provided api key. @@ -44,9 +44,9 @@ def get_info(self, *, request_options: typing.Optional[RequestOptions] = None) - client = Zep( api_key="YOUR_API_KEY", ) - client.project.get_info() + client.project.get() """ - _response = self._raw_client.get_info(request_options=request_options) + _response = self._raw_client.get(request_options=request_options) return _response.data @@ -65,7 +65,7 @@ def with_raw_response(self) -> AsyncRawProjectClient: """ return self._raw_client - async def get_info(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: + async def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> ProjectInfoResponse: """ Retrieve project info based on the provided api key. @@ -91,10 +91,10 @@ async def get_info(self, *, request_options: typing.Optional[RequestOptions] = N async def main() -> None: - await client.project.get_info() + await client.project.get() asyncio.run(main()) """ - _response = await self._raw_client.get_info(request_options=request_options) + _response = await self._raw_client.get(request_options=request_options) return _response.data diff --git a/src/zep_cloud/project/raw_client.py b/src/zep_cloud/project/raw_client.py index e067f76..4b74c71 100644 --- a/src/zep_cloud/project/raw_client.py +++ b/src/zep_cloud/project/raw_client.py @@ -19,7 +19,7 @@ class RawProjectClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def get_info(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[ProjectInfoResponse]: + def get(self, *, request_options: typing.Optional[RequestOptions] = None) -> HttpResponse[ProjectInfoResponse]: """ Retrieve project info based on the provided api key. @@ -95,7 +95,7 @@ class AsyncRawProjectClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def get_info( + async def get( self, *, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[ProjectInfoResponse]: """ diff --git a/src/zep_cloud/thread/__init__.py b/src/zep_cloud/thread/__init__.py index 996b516..047bbca 100644 --- a/src/zep_cloud/thread/__init__.py +++ b/src/zep_cloud/thread/__init__.py @@ -2,7 +2,7 @@ # isort: skip_file -from .types import ThreadGetContextRequestMode +from .types import ThreadGetUserContextRequestMode from . import message -__all__ = ["ThreadGetContextRequestMode", "message"] +__all__ = ["ThreadGetUserContextRequestMode", "message"] diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index 0d6d3f0..afcd1b4 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -14,7 +14,7 @@ from ..types.thread_list_response import ThreadListResponse from .message.client import AsyncMessageClient, MessageClient from .raw_client import AsyncRawThreadClient, RawThreadClient -from .types.thread_get_context_request_mode import ThreadGetContextRequestMode +from .types.thread_get_user_context_request_mode import ThreadGetUserContextRequestMode # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -36,7 +36,7 @@ def with_raw_response(self) -> RawThreadClient: """ return self._raw_client - def list( + def list_all( self, *, page_number: typing.Optional[int] = None, @@ -77,14 +77,14 @@ def list( client = Zep( api_key="YOUR_API_KEY", ) - client.thread.list( + client.thread.list_all( page_number=1, page_size=1, order_by="order_by", asc=True, ) """ - _response = self._raw_client.list( + _response = self._raw_client.list_all( page_number=page_number, page_size=page_size, order_by=order_by, asc=asc, request_options=request_options ) return _response.data @@ -157,12 +157,12 @@ def delete(self, thread_id: str, *, request_options: typing.Optional[RequestOpti _response = self._raw_client.delete(thread_id, request_options=request_options) return _response.data - def get_context( + def get_user_context( self, thread_id: str, *, min_rating: typing.Optional[float] = None, - mode: typing.Optional[ThreadGetContextRequestMode] = None, + mode: typing.Optional[ThreadGetUserContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> ThreadContextResponse: """ @@ -176,7 +176,7 @@ def get_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. - mode : typing.Optional[ThreadGetContextRequestMode] + mode : typing.Optional[ThreadGetUserContextRequestMode] Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] @@ -194,18 +194,18 @@ def get_context( client = Zep( api_key="YOUR_API_KEY", ) - client.thread.get_context( + client.thread.get_user_context( thread_id="threadId", min_rating=1.1, mode="basic", ) """ - _response = self._raw_client.get_context( + _response = self._raw_client.get_user_context( thread_id, min_rating=min_rating, mode=mode, request_options=request_options ) return _response.data - def get_messages( + def get( self, thread_id: str, *, @@ -246,14 +246,14 @@ def get_messages( client = Zep( api_key="YOUR_API_KEY", ) - client.thread.get_messages( + client.thread.get( thread_id="threadId", limit=1, cursor=1, lastn=1, ) """ - _response = self._raw_client.get_messages( + _response = self._raw_client.get( thread_id, limit=limit, cursor=cursor, lastn=lastn, request_options=request_options ) return _response.data @@ -399,7 +399,7 @@ def with_raw_response(self) -> AsyncRawThreadClient: """ return self._raw_client - async def list( + async def list_all( self, *, page_number: typing.Optional[int] = None, @@ -445,7 +445,7 @@ async def list( async def main() -> None: - await client.thread.list( + await client.thread.list_all( page_number=1, page_size=1, order_by="order_by", @@ -455,7 +455,7 @@ async def main() -> None: asyncio.run(main()) """ - _response = await self._raw_client.list( + _response = await self._raw_client.list_all( page_number=page_number, page_size=page_size, order_by=order_by, asc=asc, request_options=request_options ) return _response.data @@ -546,12 +546,12 @@ async def main() -> None: _response = await self._raw_client.delete(thread_id, request_options=request_options) return _response.data - async def get_context( + async def get_user_context( self, thread_id: str, *, min_rating: typing.Optional[float] = None, - mode: typing.Optional[ThreadGetContextRequestMode] = None, + mode: typing.Optional[ThreadGetUserContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> ThreadContextResponse: """ @@ -565,7 +565,7 @@ async def get_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. - mode : typing.Optional[ThreadGetContextRequestMode] + mode : typing.Optional[ThreadGetUserContextRequestMode] Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] @@ -588,7 +588,7 @@ async def get_context( async def main() -> None: - await client.thread.get_context( + await client.thread.get_user_context( thread_id="threadId", min_rating=1.1, mode="basic", @@ -597,12 +597,12 @@ async def main() -> None: asyncio.run(main()) """ - _response = await self._raw_client.get_context( + _response = await self._raw_client.get_user_context( thread_id, min_rating=min_rating, mode=mode, request_options=request_options ) return _response.data - async def get_messages( + async def get( self, thread_id: str, *, @@ -648,7 +648,7 @@ async def get_messages( async def main() -> None: - await client.thread.get_messages( + await client.thread.get( thread_id="threadId", limit=1, cursor=1, @@ -658,7 +658,7 @@ async def main() -> None: asyncio.run(main()) """ - _response = await self._raw_client.get_messages( + _response = await self._raw_client.get( thread_id, limit=limit, cursor=cursor, lastn=lastn, request_options=request_options ) return _response.data diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index 888d3ea..14390e8 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -22,7 +22,7 @@ from ..types.thread import Thread from ..types.thread_context_response import ThreadContextResponse from ..types.thread_list_response import ThreadListResponse -from .types.thread_get_context_request_mode import ThreadGetContextRequestMode +from .types.thread_get_user_context_request_mode import ThreadGetUserContextRequestMode # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -32,7 +32,7 @@ class RawThreadClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper - def list( + def list_all( self, *, page_number: typing.Optional[int] = None, @@ -259,12 +259,12 @@ def delete( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_context( + def get_user_context( self, thread_id: str, *, min_rating: typing.Optional[float] = None, - mode: typing.Optional[ThreadGetContextRequestMode] = None, + mode: typing.Optional[ThreadGetUserContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[ThreadContextResponse]: """ @@ -278,7 +278,7 @@ def get_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. - mode : typing.Optional[ThreadGetContextRequestMode] + mode : typing.Optional[ThreadGetUserContextRequestMode] Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] @@ -339,7 +339,7 @@ def get_context( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - def get_messages( + def get( self, thread_id: str, *, @@ -593,7 +593,7 @@ class AsyncRawThreadClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper - async def list( + async def list_all( self, *, page_number: typing.Optional[int] = None, @@ -820,12 +820,12 @@ async def delete( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_context( + async def get_user_context( self, thread_id: str, *, min_rating: typing.Optional[float] = None, - mode: typing.Optional[ThreadGetContextRequestMode] = None, + mode: typing.Optional[ThreadGetUserContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[ThreadContextResponse]: """ @@ -839,7 +839,7 @@ async def get_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. - mode : typing.Optional[ThreadGetContextRequestMode] + mode : typing.Optional[ThreadGetUserContextRequestMode] Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] @@ -900,7 +900,7 @@ async def get_context( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) - async def get_messages( + async def get( self, thread_id: str, *, diff --git a/src/zep_cloud/thread/types/__init__.py b/src/zep_cloud/thread/types/__init__.py index 8ae885c..95d1e56 100644 --- a/src/zep_cloud/thread/types/__init__.py +++ b/src/zep_cloud/thread/types/__init__.py @@ -2,6 +2,6 @@ # isort: skip_file -from .thread_get_context_request_mode import ThreadGetContextRequestMode +from .thread_get_user_context_request_mode import ThreadGetUserContextRequestMode -__all__ = ["ThreadGetContextRequestMode"] +__all__ = ["ThreadGetUserContextRequestMode"] diff --git a/src/zep_cloud/thread/types/thread_get_context_request_mode.py b/src/zep_cloud/thread/types/thread_get_context_request_mode.py deleted file mode 100644 index fecd367..0000000 --- a/src/zep_cloud/thread/types/thread_get_context_request_mode.py +++ /dev/null @@ -1,5 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -ThreadGetContextRequestMode = typing.Union[typing.Literal["basic", "summary"], typing.Any] diff --git a/src/zep_cloud/thread/types/thread_get_user_context_request_mode.py b/src/zep_cloud/thread/types/thread_get_user_context_request_mode.py new file mode 100644 index 0000000..e0e796b --- /dev/null +++ b/src/zep_cloud/thread/types/thread_get_user_context_request_mode.py @@ -0,0 +1,5 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +ThreadGetUserContextRequestMode = typing.Union[typing.Literal["basic", "summary"], typing.Any] From bc2c3907d36802dc61efd2208f2a938f3cfd3c21 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 19:03:38 +0000 Subject: [PATCH 48/74] SDK regeneration --- reference.md | 29 ++++----------------------- src/zep_cloud/graph/client.py | 20 ++++-------------- src/zep_cloud/graph/episode/client.py | 4 ---- src/zep_cloud/thread/client.py | 24 ++-------------------- src/zep_cloud/user/client.py | 10 ++------- 5 files changed, 12 insertions(+), 75 deletions(-) diff --git a/reference.md b/reference.md index 09f6ce4..af41150 100644 --- a/reference.md +++ b/reference.md @@ -32,10 +32,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.list_entity_types( - user_id="user_id", - graph_id="graph_id", -) +client.graph.list_entity_types() ```
@@ -775,10 +772,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.list_all( - page_number=1, - page_size=1, -) +client.graph.list_all() ``` @@ -1308,12 +1302,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.thread.list_all( - page_number=1, - page_size=1, - order_by="order_by", - asc=True, -) +client.thread.list_all() ``` @@ -1556,8 +1545,6 @@ client = Zep( ) client.thread.get_user_context( thread_id="threadId", - min_rating=1.1, - mode="basic", ) ``` @@ -1644,9 +1631,6 @@ client = Zep( ) client.thread.get( thread_id="threadId", - limit=1, - cursor=1, - lastn=1, ) ``` @@ -2066,10 +2050,7 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.user.list_ordered( - page_number=1, - page_size=1, -) +client.user.list_ordered() ``` @@ -2929,7 +2910,6 @@ client = Zep( ) client.graph.episode.get_by_graph_id( graph_id="graph_id", - lastn=1, ) ``` @@ -3008,7 +2988,6 @@ client = Zep( ) client.graph.episode.get_by_user_id( user_id="user_id", - lastn=1, ) ``` diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 84c1e6a..47a3c0d 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -82,10 +82,7 @@ def list_entity_types( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.list_entity_types( - user_id="user_id", - graph_id="graph_id", - ) + client.graph.list_entity_types() """ _response = self._raw_client.list_entity_types( user_id=user_id, graph_id=graph_id, request_options=request_options @@ -495,10 +492,7 @@ def list_all( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.list_all( - page_number=1, - page_size=1, - ) + client.graph.list_all() """ _response = self._raw_client.list_all( page_number=page_number, page_size=page_size, request_options=request_options @@ -771,10 +765,7 @@ async def list_entity_types( async def main() -> None: - await client.graph.list_entity_types( - user_id="user_id", - graph_id="graph_id", - ) + await client.graph.list_entity_types() asyncio.run(main()) @@ -1240,10 +1231,7 @@ async def list_all( async def main() -> None: - await client.graph.list_all( - page_number=1, - page_size=1, - ) + await client.graph.list_all() asyncio.run(main()) diff --git a/src/zep_cloud/graph/episode/client.py b/src/zep_cloud/graph/episode/client.py index 81649a0..650aeba 100644 --- a/src/zep_cloud/graph/episode/client.py +++ b/src/zep_cloud/graph/episode/client.py @@ -61,7 +61,6 @@ def get_by_graph_id( ) client.graph.episode.get_by_graph_id( graph_id="graph_id", - lastn=1, ) """ _response = self._raw_client.get_by_graph_id(graph_id, lastn=lastn, request_options=request_options) @@ -102,7 +101,6 @@ def get_by_user_id( ) client.graph.episode.get_by_user_id( user_id="user_id", - lastn=1, ) """ _response = self._raw_client.get_by_user_id(user_id, lastn=lastn, request_options=request_options) @@ -259,7 +257,6 @@ async def get_by_graph_id( async def main() -> None: await client.graph.episode.get_by_graph_id( graph_id="graph_id", - lastn=1, ) @@ -308,7 +305,6 @@ async def get_by_user_id( async def main() -> None: await client.graph.episode.get_by_user_id( user_id="user_id", - lastn=1, ) diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index afcd1b4..eaf964d 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -77,12 +77,7 @@ def list_all( client = Zep( api_key="YOUR_API_KEY", ) - client.thread.list_all( - page_number=1, - page_size=1, - order_by="order_by", - asc=True, - ) + client.thread.list_all() """ _response = self._raw_client.list_all( page_number=page_number, page_size=page_size, order_by=order_by, asc=asc, request_options=request_options @@ -196,8 +191,6 @@ def get_user_context( ) client.thread.get_user_context( thread_id="threadId", - min_rating=1.1, - mode="basic", ) """ _response = self._raw_client.get_user_context( @@ -248,9 +241,6 @@ def get( ) client.thread.get( thread_id="threadId", - limit=1, - cursor=1, - lastn=1, ) """ _response = self._raw_client.get( @@ -445,12 +435,7 @@ async def list_all( async def main() -> None: - await client.thread.list_all( - page_number=1, - page_size=1, - order_by="order_by", - asc=True, - ) + await client.thread.list_all() asyncio.run(main()) @@ -590,8 +575,6 @@ async def get_user_context( async def main() -> None: await client.thread.get_user_context( thread_id="threadId", - min_rating=1.1, - mode="basic", ) @@ -650,9 +633,6 @@ async def get( async def main() -> None: await client.thread.get( thread_id="threadId", - limit=1, - cursor=1, - lastn=1, ) diff --git a/src/zep_cloud/user/client.py b/src/zep_cloud/user/client.py index 8ef20ef..ce5026e 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -133,10 +133,7 @@ def list_ordered( client = Zep( api_key="YOUR_API_KEY", ) - client.user.list_ordered( - page_number=1, - page_size=1, - ) + client.user.list_ordered() """ _response = self._raw_client.list_ordered( page_number=page_number, page_size=page_size, request_options=request_options @@ -500,10 +497,7 @@ async def list_ordered( async def main() -> None: - await client.user.list_ordered( - page_number=1, - page_size=1, - ) + await client.user.list_ordered() asyncio.run(main()) From 31ce3771f53efdefbfa13d6e3e89ecc71a755f6f Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 4 Nov 2025 11:42:24 -0500 Subject: [PATCH 49/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 2607ee5..9ac75c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.9.0" +version = "3.10.0" description = "" readme = "README.md" authors = [] From ddccfaa6d8a2195136a811f5eb65e0e26cac789b Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 16:44:56 +0000 Subject: [PATCH 50/74] SDK regeneration --- reference.md | 235 +++++++++ src/zep_cloud/__init__.py | 4 + src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/types/__init__.py | 4 + ...apidata_list_user_instructions_response.py | 20 + .../types/apidata_user_instruction.py | 20 + src/zep_cloud/types/comparison_operator.py | 2 +- src/zep_cloud/user/client.py | 274 ++++++++++ src/zep_cloud/user/raw_client.py | 472 ++++++++++++++++++ 9 files changed, 1032 insertions(+), 3 deletions(-) create mode 100644 src/zep_cloud/types/apidata_list_user_instructions_response.py create mode 100644 src/zep_cloud/types/apidata_user_instruction.py diff --git a/reference.md b/reference.md index af41150..1f1ee06 100644 --- a/reference.md +++ b/reference.md @@ -1900,6 +1900,241 @@ that are added to a user's graph.
## User +
client.user.list_user_summary_instructions(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Lists all user summary/instructions for a project, user, or graph. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.user.list_user_summary_instructions() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**user_id:** `typing.Optional[str]` — User ID to get user-specific instructions + +
+
+ +
+
+ +**graph_id:** `typing.Optional[str]` — Graph ID to get graph-specific instructions + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.user.add_user_summary_instructions(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Adds new summary/instructions for users and/or graphs without removing existing ones. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import ApidataUserInstruction, Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.user.add_user_summary_instructions( + instructions=[ + ApidataUserInstruction( + name="name", + text="text", + ) + ], +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**instructions:** `typing.Sequence[ApidataUserInstruction]` + +
+
+ +
+
+ +**user_ids:** `typing.Optional[typing.Sequence[str]]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.user.delete_user_summary_instructions(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Deletes user summary/instructions for users and/or graphs. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.user.delete_user_summary_instructions() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**instruction_names:** `typing.Optional[typing.Sequence[str]]` — If empty, deletes all + +
+
+ +
+
+ +**user_ids:** `typing.Optional[typing.Sequence[str]]` + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+
client.user.add(...)
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index fbe9de9..eb3ec12 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,6 +7,8 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, + ApidataListUserInstructionsResponse, + ApidataUserInstruction, CloneGraphResponse, ComparisonOperator, DateFilter, @@ -60,6 +62,8 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataListUserInstructionsResponse", + "ApidataUserInstruction", "AsyncZep", "BadRequestError", "CloneGraphResponse", diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index b874b13..4086561 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.9.0", + "User-Agent": "zep-cloud/3.10.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.9.0", + "X-Fern-SDK-Version": "3.10.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 6f0873a..887460d 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,6 +6,8 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError +from .apidata_list_user_instructions_response import ApidataListUserInstructionsResponse +from .apidata_user_instruction import ApidataUserInstruction from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter @@ -52,6 +54,8 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataListUserInstructionsResponse", + "ApidataUserInstruction", "CloneGraphResponse", "ComparisonOperator", "DateFilter", diff --git a/src/zep_cloud/types/apidata_list_user_instructions_response.py b/src/zep_cloud/types/apidata_list_user_instructions_response.py new file mode 100644 index 0000000..4089135 --- /dev/null +++ b/src/zep_cloud/types/apidata_list_user_instructions_response.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .apidata_user_instruction import ApidataUserInstruction + + +class ApidataListUserInstructionsResponse(UniversalBaseModel): + instructions: typing.Optional[typing.List[ApidataUserInstruction]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/apidata_user_instruction.py b/src/zep_cloud/types/apidata_user_instruction.py new file mode 100644 index 0000000..0098db9 --- /dev/null +++ b/src/zep_cloud/types/apidata_user_instruction.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ApidataUserInstruction(UniversalBaseModel): + name: str + text: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/comparison_operator.py b/src/zep_cloud/types/comparison_operator.py index c8f42a8..36b7674 100644 --- a/src/zep_cloud/types/comparison_operator.py +++ b/src/zep_cloud/types/comparison_operator.py @@ -2,4 +2,4 @@ import typing -ComparisonOperator = typing.Union[typing.Literal["=", "<>", ">", "<", ">=", "<="], typing.Any] +ComparisonOperator = typing.Union[typing.Literal["=", "<>", ">", "<", ">=", "<=", "IS NULL", "IS NOT NULL"], typing.Any] diff --git a/src/zep_cloud/user/client.py b/src/zep_cloud/user/client.py index ce5026e..c62293d 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -4,6 +4,8 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions +from ..types.apidata_list_user_instructions_response import ApidataListUserInstructionsResponse +from ..types.apidata_user_instruction import ApidataUserInstruction from ..types.fact_rating_instruction import FactRatingInstruction from ..types.success_response import SuccessResponse from ..types.thread import Thread @@ -31,6 +33,130 @@ def with_raw_response(self) -> RawUserClient: """ return self._raw_client + def list_user_summary_instructions( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ApidataListUserInstructionsResponse: + """ + Lists all user summary/instructions for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific instructions + + graph_id : typing.Optional[str] + Graph ID to get graph-specific instructions + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataListUserInstructionsResponse + The list of instructions. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.user.list_user_summary_instructions() + """ + _response = self._raw_client.list_user_summary_instructions( + user_id=user_id, graph_id=graph_id, request_options=request_options + ) + return _response.data + + def add_user_summary_instructions( + self, + *, + instructions: typing.Sequence[ApidataUserInstruction], + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Adds new summary/instructions for users and/or graphs without removing existing ones. + + Parameters + ---------- + instructions : typing.Sequence[ApidataUserInstruction] + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Instructions added successfully + + Examples + -------- + from zep_cloud import ApidataUserInstruction, Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.user.add_user_summary_instructions( + instructions=[ + ApidataUserInstruction( + name="name", + text="text", + ) + ], + ) + """ + _response = self._raw_client.add_user_summary_instructions( + instructions=instructions, user_ids=user_ids, request_options=request_options + ) + return _response.data + + def delete_user_summary_instructions( + self, + *, + instruction_names: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Deletes user summary/instructions for users and/or graphs. + + Parameters + ---------- + instruction_names : typing.Optional[typing.Sequence[str]] + If empty, deletes all + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Instructions deleted successfully + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.user.delete_user_summary_instructions() + """ + _response = self._raw_client.delete_user_summary_instructions( + instruction_names=instruction_names, user_ids=user_ids, request_options=request_options + ) + return _response.data + def add( self, *, @@ -382,6 +508,154 @@ def with_raw_response(self) -> AsyncRawUserClient: """ return self._raw_client + async def list_user_summary_instructions( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ApidataListUserInstructionsResponse: + """ + Lists all user summary/instructions for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific instructions + + graph_id : typing.Optional[str] + Graph ID to get graph-specific instructions + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataListUserInstructionsResponse + The list of instructions. + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.user.list_user_summary_instructions() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_user_summary_instructions( + user_id=user_id, graph_id=graph_id, request_options=request_options + ) + return _response.data + + async def add_user_summary_instructions( + self, + *, + instructions: typing.Sequence[ApidataUserInstruction], + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Adds new summary/instructions for users and/or graphs without removing existing ones. + + Parameters + ---------- + instructions : typing.Sequence[ApidataUserInstruction] + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Instructions added successfully + + Examples + -------- + import asyncio + + from zep_cloud import ApidataUserInstruction, AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.user.add_user_summary_instructions( + instructions=[ + ApidataUserInstruction( + name="name", + text="text", + ) + ], + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.add_user_summary_instructions( + instructions=instructions, user_ids=user_ids, request_options=request_options + ) + return _response.data + + async def delete_user_summary_instructions( + self, + *, + instruction_names: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Deletes user summary/instructions for users and/or graphs. + + Parameters + ---------- + instruction_names : typing.Optional[typing.Sequence[str]] + If empty, deletes all + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Instructions deleted successfully + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.user.delete_user_summary_instructions() + + + asyncio.run(main()) + """ + _response = await self._raw_client.delete_user_summary_instructions( + instruction_names=instruction_names, user_ids=user_ids, request_options=request_options + ) + return _response.data + async def add( self, *, diff --git a/src/zep_cloud/user/raw_client.py b/src/zep_cloud/user/raw_client.py index 3d633a9..7ab9b6f 100644 --- a/src/zep_cloud/user/raw_client.py +++ b/src/zep_cloud/user/raw_client.py @@ -14,6 +14,8 @@ from ..errors.internal_server_error import InternalServerError from ..errors.not_found_error import NotFoundError from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.apidata_list_user_instructions_response import ApidataListUserInstructionsResponse +from ..types.apidata_user_instruction import ApidataUserInstruction from ..types.fact_rating_instruction import FactRatingInstruction from ..types.success_response import SuccessResponse from ..types.thread import Thread @@ -29,6 +31,241 @@ class RawUserClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper + def list_user_summary_instructions( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ApidataListUserInstructionsResponse]: + """ + Lists all user summary/instructions for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific instructions + + graph_id : typing.Optional[str] + Graph ID to get graph-specific instructions + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ApidataListUserInstructionsResponse] + The list of instructions. + """ + _response = self._client_wrapper.httpx_client.request( + "user-summary-instructions", + method="GET", + params={ + "user_id": user_id, + "graph_id": graph_id, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataListUserInstructionsResponse, + parse_obj_as( + type_=ApidataListUserInstructionsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 + ) + + def add_user_summary_instructions( + self, + *, + instructions: typing.Sequence[ApidataUserInstruction], + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[SuccessResponse]: + """ + Adds new summary/instructions for users and/or graphs without removing existing ones. + + Parameters + ---------- + instructions : typing.Sequence[ApidataUserInstruction] + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Instructions added successfully + """ + _response = self._client_wrapper.httpx_client.request( + "user-summary-instructions", + method="POST", + json={ + "instructions": convert_and_respect_annotation_metadata( + object_=instructions, annotation=typing.Sequence[ApidataUserInstruction], direction="write" + ), + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + + def delete_user_summary_instructions( + self, + *, + instruction_names: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[SuccessResponse]: + """ + Deletes user summary/instructions for users and/or graphs. + + Parameters + ---------- + instruction_names : typing.Optional[typing.Sequence[str]] + If empty, deletes all + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Instructions deleted successfully + """ + _response = self._client_wrapper.httpx_client.request( + "user-summary-instructions", + method="DELETE", + json={ + "instruction_names": instruction_names, + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + def add( self, *, @@ -646,6 +883,241 @@ class AsyncRawUserClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper + async def list_user_summary_instructions( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ApidataListUserInstructionsResponse]: + """ + Lists all user summary/instructions for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific instructions + + graph_id : typing.Optional[str] + Graph ID to get graph-specific instructions + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ApidataListUserInstructionsResponse] + The list of instructions. + """ + _response = await self._client_wrapper.httpx_client.request( + "user-summary-instructions", + method="GET", + params={ + "user_id": user_id, + "graph_id": graph_id, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataListUserInstructionsResponse, + parse_obj_as( + type_=ApidataListUserInstructionsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 + ) + + async def add_user_summary_instructions( + self, + *, + instructions: typing.Sequence[ApidataUserInstruction], + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Adds new summary/instructions for users and/or graphs without removing existing ones. + + Parameters + ---------- + instructions : typing.Sequence[ApidataUserInstruction] + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Instructions added successfully + """ + _response = await self._client_wrapper.httpx_client.request( + "user-summary-instructions", + method="POST", + json={ + "instructions": convert_and_respect_annotation_metadata( + object_=instructions, annotation=typing.Sequence[ApidataUserInstruction], direction="write" + ), + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + + async def delete_user_summary_instructions( + self, + *, + instruction_names: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Deletes user summary/instructions for users and/or graphs. + + Parameters + ---------- + instruction_names : typing.Optional[typing.Sequence[str]] + If empty, deletes all + + user_ids : typing.Optional[typing.Sequence[str]] + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Instructions deleted successfully + """ + _response = await self._client_wrapper.httpx_client.request( + "user-summary-instructions", + method="DELETE", + json={ + "instruction_names": instruction_names, + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + async def add( self, *, From 1343eae21c392d49e2989b5bd3cba5db1c979b9b Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 17:27:24 +0000 Subject: [PATCH 51/74] SDK regeneration --- reference.md | 6 ++-- src/zep_cloud/__init__.py | 8 ++--- src/zep_cloud/types/__init__.py | 8 ++--- ....py => list_user_instructions_response.py} | 6 ++-- ...ser_instruction.py => user_instruction.py} | 2 +- src/zep_cloud/user/client.py | 28 ++++++++-------- src/zep_cloud/user/raw_client.py | 32 +++++++++---------- 7 files changed, 45 insertions(+), 45 deletions(-) rename src/zep_cloud/types/{apidata_list_user_instructions_response.py => list_user_instructions_response.py} (69%) rename src/zep_cloud/types/{apidata_user_instruction.py => user_instruction.py} (90%) diff --git a/reference.md b/reference.md index 1f1ee06..ff913b4 100644 --- a/reference.md +++ b/reference.md @@ -2003,14 +2003,14 @@ Adds new summary/instructions for users and/or graphs without removing existing
```python -from zep_cloud import ApidataUserInstruction, Zep +from zep_cloud import UserInstruction, Zep client = Zep( api_key="YOUR_API_KEY", ) client.user.add_user_summary_instructions( instructions=[ - ApidataUserInstruction( + UserInstruction( name="name", text="text", ) @@ -2031,7 +2031,7 @@ client.user.add_user_summary_instructions(
-**instructions:** `typing.Sequence[ApidataUserInstruction]` +**instructions:** `typing.Sequence[UserInstruction]`
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index eb3ec12..68cb1b7 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,8 +7,6 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, - ApidataListUserInstructionsResponse, - ApidataUserInstruction, CloneGraphResponse, ComparisonOperator, DateFilter, @@ -33,6 +31,7 @@ GraphNodesRequest, GraphSearchResults, GraphSearchScope, + ListUserInstructionsResponse, Message, MessageListResponse, ModelsFactRatingExamples, @@ -47,6 +46,7 @@ ThreadContextResponse, ThreadListResponse, User, + UserInstruction, UserListResponse, UserNodeResponse, ) @@ -62,8 +62,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataListUserInstructionsResponse", - "ApidataUserInstruction", "AsyncZep", "BadRequestError", "CloneGraphResponse", @@ -91,6 +89,7 @@ "GraphSearchResults", "GraphSearchScope", "InternalServerError", + "ListUserInstructionsResponse", "Message", "MessageListResponse", "ModelsFactRatingExamples", @@ -107,6 +106,7 @@ "ThreadGetUserContextRequestMode", "ThreadListResponse", "User", + "UserInstruction", "UserListResponse", "UserNodeResponse", "Zep", diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 887460d..80b2a82 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,8 +6,6 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError -from .apidata_list_user_instructions_response import ApidataListUserInstructionsResponse -from .apidata_user_instruction import ApidataUserInstruction from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter @@ -32,6 +30,7 @@ from .graph_nodes_request import GraphNodesRequest from .graph_search_results import GraphSearchResults from .graph_search_scope import GraphSearchScope +from .list_user_instructions_response import ListUserInstructionsResponse from .message import Message from .message_list_response import MessageListResponse from .models_fact_rating_examples import ModelsFactRatingExamples @@ -46,6 +45,7 @@ from .thread_context_response import ThreadContextResponse from .thread_list_response import ThreadListResponse from .user import User +from .user_instruction import UserInstruction from .user_list_response import UserListResponse from .user_node_response import UserNodeResponse @@ -54,8 +54,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataListUserInstructionsResponse", - "ApidataUserInstruction", "CloneGraphResponse", "ComparisonOperator", "DateFilter", @@ -80,6 +78,7 @@ "GraphNodesRequest", "GraphSearchResults", "GraphSearchScope", + "ListUserInstructionsResponse", "Message", "MessageListResponse", "ModelsFactRatingExamples", @@ -94,6 +93,7 @@ "ThreadContextResponse", "ThreadListResponse", "User", + "UserInstruction", "UserListResponse", "UserNodeResponse", ] diff --git a/src/zep_cloud/types/apidata_list_user_instructions_response.py b/src/zep_cloud/types/list_user_instructions_response.py similarity index 69% rename from src/zep_cloud/types/apidata_list_user_instructions_response.py rename to src/zep_cloud/types/list_user_instructions_response.py index 4089135..b8b27f2 100644 --- a/src/zep_cloud/types/apidata_list_user_instructions_response.py +++ b/src/zep_cloud/types/list_user_instructions_response.py @@ -4,11 +4,11 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .apidata_user_instruction import ApidataUserInstruction +from .user_instruction import UserInstruction -class ApidataListUserInstructionsResponse(UniversalBaseModel): - instructions: typing.Optional[typing.List[ApidataUserInstruction]] = None +class ListUserInstructionsResponse(UniversalBaseModel): + instructions: typing.Optional[typing.List[UserInstruction]] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/zep_cloud/types/apidata_user_instruction.py b/src/zep_cloud/types/user_instruction.py similarity index 90% rename from src/zep_cloud/types/apidata_user_instruction.py rename to src/zep_cloud/types/user_instruction.py index 0098db9..fd32263 100644 --- a/src/zep_cloud/types/apidata_user_instruction.py +++ b/src/zep_cloud/types/user_instruction.py @@ -6,7 +6,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -class ApidataUserInstruction(UniversalBaseModel): +class UserInstruction(UniversalBaseModel): name: str text: str diff --git a/src/zep_cloud/user/client.py b/src/zep_cloud/user/client.py index c62293d..ed3bcb7 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -4,12 +4,12 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions -from ..types.apidata_list_user_instructions_response import ApidataListUserInstructionsResponse -from ..types.apidata_user_instruction import ApidataUserInstruction from ..types.fact_rating_instruction import FactRatingInstruction +from ..types.list_user_instructions_response import ListUserInstructionsResponse from ..types.success_response import SuccessResponse from ..types.thread import Thread from ..types.user import User +from ..types.user_instruction import UserInstruction from ..types.user_list_response import UserListResponse from ..types.user_node_response import UserNodeResponse from .raw_client import AsyncRawUserClient, RawUserClient @@ -39,7 +39,7 @@ def list_user_summary_instructions( user_id: typing.Optional[str] = None, graph_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> ApidataListUserInstructionsResponse: + ) -> ListUserInstructionsResponse: """ Lists all user summary/instructions for a project, user, or graph. @@ -56,7 +56,7 @@ def list_user_summary_instructions( Returns ------- - ApidataListUserInstructionsResponse + ListUserInstructionsResponse The list of instructions. Examples @@ -76,7 +76,7 @@ def list_user_summary_instructions( def add_user_summary_instructions( self, *, - instructions: typing.Sequence[ApidataUserInstruction], + instructions: typing.Sequence[UserInstruction], user_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: @@ -85,7 +85,7 @@ def add_user_summary_instructions( Parameters ---------- - instructions : typing.Sequence[ApidataUserInstruction] + instructions : typing.Sequence[UserInstruction] user_ids : typing.Optional[typing.Sequence[str]] @@ -99,14 +99,14 @@ def add_user_summary_instructions( Examples -------- - from zep_cloud import ApidataUserInstruction, Zep + from zep_cloud import UserInstruction, Zep client = Zep( api_key="YOUR_API_KEY", ) client.user.add_user_summary_instructions( instructions=[ - ApidataUserInstruction( + UserInstruction( name="name", text="text", ) @@ -514,7 +514,7 @@ async def list_user_summary_instructions( user_id: typing.Optional[str] = None, graph_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> ApidataListUserInstructionsResponse: + ) -> ListUserInstructionsResponse: """ Lists all user summary/instructions for a project, user, or graph. @@ -531,7 +531,7 @@ async def list_user_summary_instructions( Returns ------- - ApidataListUserInstructionsResponse + ListUserInstructionsResponse The list of instructions. Examples @@ -559,7 +559,7 @@ async def main() -> None: async def add_user_summary_instructions( self, *, - instructions: typing.Sequence[ApidataUserInstruction], + instructions: typing.Sequence[UserInstruction], user_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: @@ -568,7 +568,7 @@ async def add_user_summary_instructions( Parameters ---------- - instructions : typing.Sequence[ApidataUserInstruction] + instructions : typing.Sequence[UserInstruction] user_ids : typing.Optional[typing.Sequence[str]] @@ -584,7 +584,7 @@ async def add_user_summary_instructions( -------- import asyncio - from zep_cloud import ApidataUserInstruction, AsyncZep + from zep_cloud import AsyncZep, UserInstruction client = AsyncZep( api_key="YOUR_API_KEY", @@ -594,7 +594,7 @@ async def add_user_summary_instructions( async def main() -> None: await client.user.add_user_summary_instructions( instructions=[ - ApidataUserInstruction( + UserInstruction( name="name", text="text", ) diff --git a/src/zep_cloud/user/raw_client.py b/src/zep_cloud/user/raw_client.py index 7ab9b6f..09ee344 100644 --- a/src/zep_cloud/user/raw_client.py +++ b/src/zep_cloud/user/raw_client.py @@ -14,12 +14,12 @@ from ..errors.internal_server_error import InternalServerError from ..errors.not_found_error import NotFoundError from ..types.api_error import ApiError as types_api_error_ApiError -from ..types.apidata_list_user_instructions_response import ApidataListUserInstructionsResponse -from ..types.apidata_user_instruction import ApidataUserInstruction from ..types.fact_rating_instruction import FactRatingInstruction +from ..types.list_user_instructions_response import ListUserInstructionsResponse from ..types.success_response import SuccessResponse from ..types.thread import Thread from ..types.user import User +from ..types.user_instruction import UserInstruction from ..types.user_list_response import UserListResponse from ..types.user_node_response import UserNodeResponse @@ -37,7 +37,7 @@ def list_user_summary_instructions( user_id: typing.Optional[str] = None, graph_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> HttpResponse[ApidataListUserInstructionsResponse]: + ) -> HttpResponse[ListUserInstructionsResponse]: """ Lists all user summary/instructions for a project, user, or graph. @@ -54,7 +54,7 @@ def list_user_summary_instructions( Returns ------- - HttpResponse[ApidataListUserInstructionsResponse] + HttpResponse[ListUserInstructionsResponse] The list of instructions. """ _response = self._client_wrapper.httpx_client.request( @@ -69,9 +69,9 @@ def list_user_summary_instructions( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ApidataListUserInstructionsResponse, + ListUserInstructionsResponse, parse_obj_as( - type_=ApidataListUserInstructionsResponse, # type: ignore + type_=ListUserInstructionsResponse, # type: ignore object_=_response.json(), ), ) @@ -110,7 +110,7 @@ def list_user_summary_instructions( def add_user_summary_instructions( self, *, - instructions: typing.Sequence[ApidataUserInstruction], + instructions: typing.Sequence[UserInstruction], user_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[SuccessResponse]: @@ -119,7 +119,7 @@ def add_user_summary_instructions( Parameters ---------- - instructions : typing.Sequence[ApidataUserInstruction] + instructions : typing.Sequence[UserInstruction] user_ids : typing.Optional[typing.Sequence[str]] @@ -136,7 +136,7 @@ def add_user_summary_instructions( method="POST", json={ "instructions": convert_and_respect_annotation_metadata( - object_=instructions, annotation=typing.Sequence[ApidataUserInstruction], direction="write" + object_=instructions, annotation=typing.Sequence[UserInstruction], direction="write" ), "user_ids": user_ids, }, @@ -889,7 +889,7 @@ async def list_user_summary_instructions( user_id: typing.Optional[str] = None, graph_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None, - ) -> AsyncHttpResponse[ApidataListUserInstructionsResponse]: + ) -> AsyncHttpResponse[ListUserInstructionsResponse]: """ Lists all user summary/instructions for a project, user, or graph. @@ -906,7 +906,7 @@ async def list_user_summary_instructions( Returns ------- - AsyncHttpResponse[ApidataListUserInstructionsResponse] + AsyncHttpResponse[ListUserInstructionsResponse] The list of instructions. """ _response = await self._client_wrapper.httpx_client.request( @@ -921,9 +921,9 @@ async def list_user_summary_instructions( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ApidataListUserInstructionsResponse, + ListUserInstructionsResponse, parse_obj_as( - type_=ApidataListUserInstructionsResponse, # type: ignore + type_=ListUserInstructionsResponse, # type: ignore object_=_response.json(), ), ) @@ -962,7 +962,7 @@ async def list_user_summary_instructions( async def add_user_summary_instructions( self, *, - instructions: typing.Sequence[ApidataUserInstruction], + instructions: typing.Sequence[UserInstruction], user_ids: typing.Optional[typing.Sequence[str]] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[SuccessResponse]: @@ -971,7 +971,7 @@ async def add_user_summary_instructions( Parameters ---------- - instructions : typing.Sequence[ApidataUserInstruction] + instructions : typing.Sequence[UserInstruction] user_ids : typing.Optional[typing.Sequence[str]] @@ -988,7 +988,7 @@ async def add_user_summary_instructions( method="POST", json={ "instructions": convert_and_respect_annotation_metadata( - object_=instructions, annotation=typing.Sequence[ApidataUserInstruction], direction="write" + object_=instructions, annotation=typing.Sequence[UserInstruction], direction="write" ), "user_ids": user_ids, }, From 673d70e1dbc9efa1621e95836e94fe490af387de Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 21:41:18 +0000 Subject: [PATCH 52/74] SDK regeneration --- reference.md | 22 +++++---------- src/zep_cloud/user/client.py | 46 +++++++++++++------------------- src/zep_cloud/user/raw_client.py | 42 +++++++++++------------------ 3 files changed, 41 insertions(+), 69 deletions(-) diff --git a/reference.md b/reference.md index ff913b4..95be1f5 100644 --- a/reference.md +++ b/reference.md @@ -1912,7 +1912,7 @@ that are added to a user's graph.
-Lists all user summary/instructions for a project, user, or graph. +Lists all user summary instructions for a project, user.
@@ -1956,14 +1956,6 @@ client.user.list_user_summary_instructions()
-**graph_id:** `typing.Optional[str]` — Graph ID to get graph-specific instructions - -
-
- -
-
- **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -1988,7 +1980,7 @@ client.user.list_user_summary_instructions()
-Adds new summary/instructions for users and/or graphs without removing existing ones. +Adds new summary instructions for users graphs without removing existing ones. If user_ids is empty, adds to project-wide default instructions.
@@ -2031,7 +2023,7 @@ client.user.add_user_summary_instructions(
-**instructions:** `typing.Sequence[UserInstruction]` +**instructions:** `typing.Sequence[UserInstruction]` — Instructions to add to the user summary generation.
@@ -2039,7 +2031,7 @@ client.user.add_user_summary_instructions(
-**user_ids:** `typing.Optional[typing.Sequence[str]]` +**user_ids:** `typing.Optional[typing.Sequence[str]]` — User IDs to add the instructions to. If empty, the instructions are added to the project-wide default.
@@ -2071,7 +2063,7 @@ client.user.add_user_summary_instructions(
-Deletes user summary/instructions for users and/or graphs. +Deletes user summary/instructions for users or project wide defaults.
@@ -2107,7 +2099,7 @@ client.user.delete_user_summary_instructions()
-**instruction_names:** `typing.Optional[typing.Sequence[str]]` — If empty, deletes all +**instruction_names:** `typing.Optional[typing.Sequence[str]]` — Unique identifier for the instructions to be deleted. If empty deletes all instructions.
@@ -2115,7 +2107,7 @@ client.user.delete_user_summary_instructions()
-**user_ids:** `typing.Optional[typing.Sequence[str]]` +**user_ids:** `typing.Optional[typing.Sequence[str]]` — Determines which users will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be effected.
diff --git a/src/zep_cloud/user/client.py b/src/zep_cloud/user/client.py index ed3bcb7..add7486 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -34,23 +34,16 @@ def with_raw_response(self) -> RawUserClient: return self._raw_client def list_user_summary_instructions( - self, - *, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, + self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> ListUserInstructionsResponse: """ - Lists all user summary/instructions for a project, user, or graph. + Lists all user summary instructions for a project, user. Parameters ---------- user_id : typing.Optional[str] User ID to get user-specific instructions - graph_id : typing.Optional[str] - Graph ID to get graph-specific instructions - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -68,9 +61,7 @@ def list_user_summary_instructions( ) client.user.list_user_summary_instructions() """ - _response = self._raw_client.list_user_summary_instructions( - user_id=user_id, graph_id=graph_id, request_options=request_options - ) + _response = self._raw_client.list_user_summary_instructions(user_id=user_id, request_options=request_options) return _response.data def add_user_summary_instructions( @@ -81,13 +72,15 @@ def add_user_summary_instructions( request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ - Adds new summary/instructions for users and/or graphs without removing existing ones. + Adds new summary instructions for users graphs without removing existing ones. If user_ids is empty, adds to project-wide default instructions. Parameters ---------- instructions : typing.Sequence[UserInstruction] + Instructions to add to the user summary generation. user_ids : typing.Optional[typing.Sequence[str]] + User IDs to add the instructions to. If empty, the instructions are added to the project-wide default. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -126,14 +119,15 @@ def delete_user_summary_instructions( request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ - Deletes user summary/instructions for users and/or graphs. + Deletes user summary/instructions for users or project wide defaults. Parameters ---------- instruction_names : typing.Optional[typing.Sequence[str]] - If empty, deletes all + Unique identifier for the instructions to be deleted. If empty deletes all instructions. user_ids : typing.Optional[typing.Sequence[str]] + Determines which users will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be effected. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -509,23 +503,16 @@ def with_raw_response(self) -> AsyncRawUserClient: return self._raw_client async def list_user_summary_instructions( - self, - *, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, + self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> ListUserInstructionsResponse: """ - Lists all user summary/instructions for a project, user, or graph. + Lists all user summary instructions for a project, user. Parameters ---------- user_id : typing.Optional[str] User ID to get user-specific instructions - graph_id : typing.Optional[str] - Graph ID to get graph-specific instructions - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -552,7 +539,7 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._raw_client.list_user_summary_instructions( - user_id=user_id, graph_id=graph_id, request_options=request_options + user_id=user_id, request_options=request_options ) return _response.data @@ -564,13 +551,15 @@ async def add_user_summary_instructions( request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ - Adds new summary/instructions for users and/or graphs without removing existing ones. + Adds new summary instructions for users graphs without removing existing ones. If user_ids is empty, adds to project-wide default instructions. Parameters ---------- instructions : typing.Sequence[UserInstruction] + Instructions to add to the user summary generation. user_ids : typing.Optional[typing.Sequence[str]] + User IDs to add the instructions to. If empty, the instructions are added to the project-wide default. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -617,14 +606,15 @@ async def delete_user_summary_instructions( request_options: typing.Optional[RequestOptions] = None, ) -> SuccessResponse: """ - Deletes user summary/instructions for users and/or graphs. + Deletes user summary/instructions for users or project wide defaults. Parameters ---------- instruction_names : typing.Optional[typing.Sequence[str]] - If empty, deletes all + Unique identifier for the instructions to be deleted. If empty deletes all instructions. user_ids : typing.Optional[typing.Sequence[str]] + Determines which users will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be effected. request_options : typing.Optional[RequestOptions] Request-specific configuration. diff --git a/src/zep_cloud/user/raw_client.py b/src/zep_cloud/user/raw_client.py index 09ee344..e0fe216 100644 --- a/src/zep_cloud/user/raw_client.py +++ b/src/zep_cloud/user/raw_client.py @@ -32,23 +32,16 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper def list_user_summary_instructions( - self, - *, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, + self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> HttpResponse[ListUserInstructionsResponse]: """ - Lists all user summary/instructions for a project, user, or graph. + Lists all user summary instructions for a project, user. Parameters ---------- user_id : typing.Optional[str] User ID to get user-specific instructions - graph_id : typing.Optional[str] - Graph ID to get graph-specific instructions - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -62,7 +55,6 @@ def list_user_summary_instructions( method="GET", params={ "user_id": user_id, - "graph_id": graph_id, }, request_options=request_options, ) @@ -115,13 +107,15 @@ def add_user_summary_instructions( request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[SuccessResponse]: """ - Adds new summary/instructions for users and/or graphs without removing existing ones. + Adds new summary instructions for users graphs without removing existing ones. If user_ids is empty, adds to project-wide default instructions. Parameters ---------- instructions : typing.Sequence[UserInstruction] + Instructions to add to the user summary generation. user_ids : typing.Optional[typing.Sequence[str]] + User IDs to add the instructions to. If empty, the instructions are added to the project-wide default. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -195,14 +189,15 @@ def delete_user_summary_instructions( request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[SuccessResponse]: """ - Deletes user summary/instructions for users and/or graphs. + Deletes user summary/instructions for users or project wide defaults. Parameters ---------- instruction_names : typing.Optional[typing.Sequence[str]] - If empty, deletes all + Unique identifier for the instructions to be deleted. If empty deletes all instructions. user_ids : typing.Optional[typing.Sequence[str]] + Determines which users will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be effected. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -884,23 +879,16 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper async def list_user_summary_instructions( - self, - *, - user_id: typing.Optional[str] = None, - graph_id: typing.Optional[str] = None, - request_options: typing.Optional[RequestOptions] = None, + self, *, user_id: typing.Optional[str] = None, request_options: typing.Optional[RequestOptions] = None ) -> AsyncHttpResponse[ListUserInstructionsResponse]: """ - Lists all user summary/instructions for a project, user, or graph. + Lists all user summary instructions for a project, user. Parameters ---------- user_id : typing.Optional[str] User ID to get user-specific instructions - graph_id : typing.Optional[str] - Graph ID to get graph-specific instructions - request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -914,7 +902,6 @@ async def list_user_summary_instructions( method="GET", params={ "user_id": user_id, - "graph_id": graph_id, }, request_options=request_options, ) @@ -967,13 +954,15 @@ async def add_user_summary_instructions( request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[SuccessResponse]: """ - Adds new summary/instructions for users and/or graphs without removing existing ones. + Adds new summary instructions for users graphs without removing existing ones. If user_ids is empty, adds to project-wide default instructions. Parameters ---------- instructions : typing.Sequence[UserInstruction] + Instructions to add to the user summary generation. user_ids : typing.Optional[typing.Sequence[str]] + User IDs to add the instructions to. If empty, the instructions are added to the project-wide default. request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1047,14 +1036,15 @@ async def delete_user_summary_instructions( request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[SuccessResponse]: """ - Deletes user summary/instructions for users and/or graphs. + Deletes user summary/instructions for users or project wide defaults. Parameters ---------- instruction_names : typing.Optional[typing.Sequence[str]] - If empty, deletes all + Unique identifier for the instructions to be deleted. If empty deletes all instructions. user_ids : typing.Optional[typing.Sequence[str]] + Determines which users will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be effected. request_options : typing.Optional[RequestOptions] Request-specific configuration. From a4ae580e2b232e1384ac12f9a8804d5de787eb4d Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 19:31:56 +0000 Subject: [PATCH 53/74] SDK regeneration From 2277c0fdb7ece827cb78e6f3497df5336c3f5935 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 19:38:01 +0000 Subject: [PATCH 54/74] SDK regeneration From ad3c04f3b5c7b434b9c674124b895db9ca2d3150 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Fri, 14 Nov 2025 11:17:40 -0500 Subject: [PATCH 55/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9ac75c4..c95015e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.10.0" +version = "3.11.0" description = "" readme = "README.md" authors = [] From ac83723e6632e4edc22a963769fb0b9a8ae9c666 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 14 Nov 2025 16:19:24 +0000 Subject: [PATCH 56/74] SDK regeneration --- reference.md | 73 ++++++++- src/zep_cloud/__init__.py | 9 +- src/zep_cloud/base_client.py | 3 + src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/task/__init__.py | 4 + src/zep_cloud/task/client.py | 112 +++++++++++++ src/zep_cloud/task/raw_client.py | 155 ++++++++++++++++++ src/zep_cloud/thread/client.py | 4 +- src/zep_cloud/thread/raw_client.py | 4 +- src/zep_cloud/types/__init__.py | 6 + .../types/add_thread_messages_response.py | 1 + src/zep_cloud/types/add_triple_response.py | 4 + .../types/apidata_get_task_response.py | 29 ++++ .../types/apidata_task_error_response.py | 21 +++ src/zep_cloud/types/apidata_task_progress.py | 21 +++ src/zep_cloud/types/clone_graph_response.py | 5 + src/zep_cloud/types/episode.py | 5 + 17 files changed, 452 insertions(+), 8 deletions(-) create mode 100644 src/zep_cloud/task/__init__.py create mode 100644 src/zep_cloud/task/client.py create mode 100644 src/zep_cloud/task/raw_client.py create mode 100644 src/zep_cloud/types/apidata_get_task_response.py create mode 100644 src/zep_cloud/types/apidata_task_error_response.py create mode 100644 src/zep_cloud/types/apidata_task_progress.py diff --git a/reference.md b/reference.md index 95be1f5..d3241fe 100644 --- a/reference.md +++ b/reference.md @@ -1265,6 +1265,77 @@ client.project.get()
+ +
+
+ +## Task +
client.task.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Gets a task by its ID +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.task.get( + task_id="task_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**task_id:** `str` — Task ID + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
@@ -1577,7 +1648,7 @@ client.thread.get_user_context(
-**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Defaults to summary mode. Use basic for lower latency +**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 68cb1b7..e779471 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,6 +7,9 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, + ApidataGetTaskResponse, + ApidataTaskErrorResponse, + ApidataTaskProgress, CloneGraphResponse, ComparisonOperator, DateFilter, @@ -51,7 +54,7 @@ UserNodeResponse, ) from .errors import BadRequestError, InternalServerError, NotFoundError -from . import graph, project, thread, user +from . import graph, project, task, thread, user from .client import AsyncZep, Zep from .environment import ZepEnvironment from .thread import ThreadGetUserContextRequestMode @@ -62,6 +65,9 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataGetTaskResponse", + "ApidataTaskErrorResponse", + "ApidataTaskProgress", "AsyncZep", "BadRequestError", "CloneGraphResponse", @@ -114,6 +120,7 @@ "__version__", "graph", "project", + "task", "thread", "user", ] diff --git a/src/zep_cloud/base_client.py b/src/zep_cloud/base_client.py index 83ca50e..d47f131 100644 --- a/src/zep_cloud/base_client.py +++ b/src/zep_cloud/base_client.py @@ -9,6 +9,7 @@ from .environment import ZepEnvironment from .graph.client import AsyncGraphClient, GraphClient from .project.client import AsyncProjectClient, ProjectClient +from .task.client import AsyncTaskClient, TaskClient from .thread.client import AsyncThreadClient, ThreadClient from .user.client import AsyncUserClient, UserClient @@ -82,6 +83,7 @@ def __init__( ) self.graph = GraphClient(client_wrapper=self._client_wrapper) self.project = ProjectClient(client_wrapper=self._client_wrapper) + self.task = TaskClient(client_wrapper=self._client_wrapper) self.thread = ThreadClient(client_wrapper=self._client_wrapper) self.user = UserClient(client_wrapper=self._client_wrapper) @@ -155,6 +157,7 @@ def __init__( ) self.graph = AsyncGraphClient(client_wrapper=self._client_wrapper) self.project = AsyncProjectClient(client_wrapper=self._client_wrapper) + self.task = AsyncTaskClient(client_wrapper=self._client_wrapper) self.thread = AsyncThreadClient(client_wrapper=self._client_wrapper) self.user = AsyncUserClient(client_wrapper=self._client_wrapper) diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 4086561..cac90a6 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.10.0", + "User-Agent": "zep-cloud/3.11.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.10.0", + "X-Fern-SDK-Version": "3.11.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/task/__init__.py b/src/zep_cloud/task/__init__.py new file mode 100644 index 0000000..5cde020 --- /dev/null +++ b/src/zep_cloud/task/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/src/zep_cloud/task/client.py b/src/zep_cloud/task/client.py new file mode 100644 index 0000000..4e22ceb --- /dev/null +++ b/src/zep_cloud/task/client.py @@ -0,0 +1,112 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.request_options import RequestOptions +from ..types.apidata_get_task_response import ApidataGetTaskResponse +from .raw_client import AsyncRawTaskClient, RawTaskClient + + +class TaskClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawTaskClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawTaskClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawTaskClient + """ + return self._raw_client + + def get(self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> ApidataGetTaskResponse: + """ + Gets a task by its ID + + Parameters + ---------- + task_id : str + Task ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataGetTaskResponse + Task + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.task.get( + task_id="task_id", + ) + """ + _response = self._raw_client.get(task_id, request_options=request_options) + return _response.data + + +class AsyncTaskClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawTaskClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawTaskClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawTaskClient + """ + return self._raw_client + + async def get( + self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> ApidataGetTaskResponse: + """ + Gets a task by its ID + + Parameters + ---------- + task_id : str + Task ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataGetTaskResponse + Task + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.task.get( + task_id="task_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get(task_id, request_options=request_options) + return _response.data diff --git a/src/zep_cloud/task/raw_client.py b/src/zep_cloud/task/raw_client.py new file mode 100644 index 0000000..cd39c7e --- /dev/null +++ b/src/zep_cloud/task/raw_client.py @@ -0,0 +1,155 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ..core.api_error import ApiError as core_api_error_ApiError +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.http_response import AsyncHttpResponse, HttpResponse +from ..core.jsonable_encoder import jsonable_encoder +from ..core.pydantic_utilities import parse_obj_as +from ..core.request_options import RequestOptions +from ..errors.internal_server_error import InternalServerError +from ..errors.not_found_error import NotFoundError +from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.apidata_get_task_response import ApidataGetTaskResponse + + +class RawTaskClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def get( + self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ApidataGetTaskResponse]: + """ + Gets a task by its ID + + Parameters + ---------- + task_id : str + Task ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ApidataGetTaskResponse] + Task + """ + _response = self._client_wrapper.httpx_client.request( + f"tasks/{jsonable_encoder(task_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataGetTaskResponse, + parse_obj_as( + type_=ApidataGetTaskResponse, # 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 AsyncRawTaskClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def get( + self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[ApidataGetTaskResponse]: + """ + Gets a task by its ID + + Parameters + ---------- + task_id : str + Task ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ApidataGetTaskResponse] + Task + """ + _response = await self._client_wrapper.httpx_client.request( + f"tasks/{jsonable_encoder(task_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataGetTaskResponse, + parse_obj_as( + type_=ApidataGetTaskResponse, # 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 + ) diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index eaf964d..af3a399 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -172,7 +172,7 @@ def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -551,7 +551,7 @@ async def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index 14390e8..aeefffe 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -279,7 +279,7 @@ def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -840,7 +840,7 @@ async def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 80b2a82..3f7ac14 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,6 +6,9 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError +from .apidata_get_task_response import ApidataGetTaskResponse +from .apidata_task_error_response import ApidataTaskErrorResponse +from .apidata_task_progress import ApidataTaskProgress from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter @@ -54,6 +57,9 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataGetTaskResponse", + "ApidataTaskErrorResponse", + "ApidataTaskProgress", "CloneGraphResponse", "ComparisonOperator", "DateFilter", diff --git a/src/zep_cloud/types/add_thread_messages_response.py b/src/zep_cloud/types/add_thread_messages_response.py index 0bef2a8..b5d320e 100644 --- a/src/zep_cloud/types/add_thread_messages_response.py +++ b/src/zep_cloud/types/add_thread_messages_response.py @@ -9,6 +9,7 @@ class AddThreadMessagesResponse(UniversalBaseModel): context: typing.Optional[str] = None message_uuids: typing.Optional[typing.List[str]] = None + task_id: typing.Optional[str] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/zep_cloud/types/add_triple_response.py b/src/zep_cloud/types/add_triple_response.py index 2ae8641..9ad9a99 100644 --- a/src/zep_cloud/types/add_triple_response.py +++ b/src/zep_cloud/types/add_triple_response.py @@ -12,6 +12,10 @@ class AddTripleResponse(UniversalBaseModel): edge: typing.Optional[EntityEdge] = None source_node: typing.Optional[EntityNode] = None target_node: typing.Optional[EntityNode] = None + task_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Task ID of the add triple task + """ if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/zep_cloud/types/apidata_get_task_response.py b/src/zep_cloud/types/apidata_get_task_response.py new file mode 100644 index 0000000..7b9c289 --- /dev/null +++ b/src/zep_cloud/types/apidata_get_task_response.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .apidata_task_error_response import ApidataTaskErrorResponse +from .apidata_task_progress import ApidataTaskProgress + + +class ApidataGetTaskResponse(UniversalBaseModel): + completed_at: typing.Optional[str] = None + created_at: typing.Optional[str] = None + error: typing.Optional[ApidataTaskErrorResponse] = None + progress: typing.Optional[ApidataTaskProgress] = None + started_at: typing.Optional[str] = None + status: typing.Optional[str] = None + task_id: typing.Optional[str] = None + type: typing.Optional[str] = None + updated_at: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/apidata_task_error_response.py b/src/zep_cloud/types/apidata_task_error_response.py new file mode 100644 index 0000000..688d9b5 --- /dev/null +++ b/src/zep_cloud/types/apidata_task_error_response.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ApidataTaskErrorResponse(UniversalBaseModel): + code: typing.Optional[str] = None + details: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + message: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/apidata_task_progress.py b/src/zep_cloud/types/apidata_task_progress.py new file mode 100644 index 0000000..4723026 --- /dev/null +++ b/src/zep_cloud/types/apidata_task_progress.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ApidataTaskProgress(UniversalBaseModel): + message: typing.Optional[str] = None + percent: typing.Optional[int] = None + stage: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/clone_graph_response.py b/src/zep_cloud/types/clone_graph_response.py index 8ded91a..dec3de2 100644 --- a/src/zep_cloud/types/clone_graph_response.py +++ b/src/zep_cloud/types/clone_graph_response.py @@ -12,6 +12,11 @@ class CloneGraphResponse(UniversalBaseModel): graph_id is the ID of the cloned graph """ + task_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Task ID of the clone graph task + """ + user_id: typing.Optional[str] = None if IS_PYDANTIC_V2: diff --git a/src/zep_cloud/types/episode.py b/src/zep_cloud/types/episode.py index dfd8825..c31326d 100644 --- a/src/zep_cloud/types/episode.py +++ b/src/zep_cloud/types/episode.py @@ -38,6 +38,11 @@ class Episode(UniversalBaseModel): source: typing.Optional[GraphDataType] = None source_description: typing.Optional[str] = None + task_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional task ID to poll episode processing status. Currently only available for batch ingestion. + """ + thread_id: typing.Optional[str] = pydantic.Field(default=None) """ Optional thread ID, will be present if the episode is part of a thread From 60a98588c4cff39da53e3d2842469e620a32a446 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Sat, 15 Nov 2025 01:50:14 +0000 Subject: [PATCH 57/74] SDK regeneration --- reference.md | 73 +-------- src/zep_cloud/__init__.py | 9 +- src/zep_cloud/base_client.py | 3 - src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/task/__init__.py | 4 - src/zep_cloud/task/client.py | 112 ------------- src/zep_cloud/task/raw_client.py | 155 ------------------ src/zep_cloud/thread/client.py | 4 +- src/zep_cloud/thread/raw_client.py | 4 +- src/zep_cloud/types/__init__.py | 6 - .../types/add_thread_messages_response.py | 1 - src/zep_cloud/types/add_triple_response.py | 4 - .../types/apidata_get_task_response.py | 29 ---- .../types/apidata_task_error_response.py | 21 --- src/zep_cloud/types/apidata_task_progress.py | 21 --- src/zep_cloud/types/clone_graph_response.py | 5 - src/zep_cloud/types/episode.py | 5 - 17 files changed, 8 insertions(+), 452 deletions(-) delete mode 100644 src/zep_cloud/task/__init__.py delete mode 100644 src/zep_cloud/task/client.py delete mode 100644 src/zep_cloud/task/raw_client.py delete mode 100644 src/zep_cloud/types/apidata_get_task_response.py delete mode 100644 src/zep_cloud/types/apidata_task_error_response.py delete mode 100644 src/zep_cloud/types/apidata_task_progress.py diff --git a/reference.md b/reference.md index d3241fe..95be1f5 100644 --- a/reference.md +++ b/reference.md @@ -1265,77 +1265,6 @@ client.project.get() - - -
- -## Task -
client.task.get(...) -
-
- -#### 📝 Description - -
-
- -
-
- -Gets a task by its ID -
-
-
-
- -#### 🔌 Usage - -
-
- -
-
- -```python -from zep_cloud import Zep - -client = Zep( - api_key="YOUR_API_KEY", -) -client.task.get( - task_id="task_id", -) - -``` -
-
-
-
- -#### ⚙️ Parameters - -
-
- -
-
- -**task_id:** `str` — Task ID - -
-
- -
-
- -**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. - -
-
-
-
- -
@@ -1648,7 +1577,7 @@ client.thread.get_user_context(
-**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency +**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Defaults to summary mode. Use basic for lower latency
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index e779471..68cb1b7 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,9 +7,6 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, - ApidataGetTaskResponse, - ApidataTaskErrorResponse, - ApidataTaskProgress, CloneGraphResponse, ComparisonOperator, DateFilter, @@ -54,7 +51,7 @@ UserNodeResponse, ) from .errors import BadRequestError, InternalServerError, NotFoundError -from . import graph, project, task, thread, user +from . import graph, project, thread, user from .client import AsyncZep, Zep from .environment import ZepEnvironment from .thread import ThreadGetUserContextRequestMode @@ -65,9 +62,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataGetTaskResponse", - "ApidataTaskErrorResponse", - "ApidataTaskProgress", "AsyncZep", "BadRequestError", "CloneGraphResponse", @@ -120,7 +114,6 @@ "__version__", "graph", "project", - "task", "thread", "user", ] diff --git a/src/zep_cloud/base_client.py b/src/zep_cloud/base_client.py index d47f131..83ca50e 100644 --- a/src/zep_cloud/base_client.py +++ b/src/zep_cloud/base_client.py @@ -9,7 +9,6 @@ from .environment import ZepEnvironment from .graph.client import AsyncGraphClient, GraphClient from .project.client import AsyncProjectClient, ProjectClient -from .task.client import AsyncTaskClient, TaskClient from .thread.client import AsyncThreadClient, ThreadClient from .user.client import AsyncUserClient, UserClient @@ -83,7 +82,6 @@ def __init__( ) self.graph = GraphClient(client_wrapper=self._client_wrapper) self.project = ProjectClient(client_wrapper=self._client_wrapper) - self.task = TaskClient(client_wrapper=self._client_wrapper) self.thread = ThreadClient(client_wrapper=self._client_wrapper) self.user = UserClient(client_wrapper=self._client_wrapper) @@ -157,7 +155,6 @@ def __init__( ) self.graph = AsyncGraphClient(client_wrapper=self._client_wrapper) self.project = AsyncProjectClient(client_wrapper=self._client_wrapper) - self.task = AsyncTaskClient(client_wrapper=self._client_wrapper) self.thread = AsyncThreadClient(client_wrapper=self._client_wrapper) self.user = AsyncUserClient(client_wrapper=self._client_wrapper) diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index cac90a6..949da70 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.11.0", + "User-Agent": "zep-cloud/3.10.1", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.11.0", + "X-Fern-SDK-Version": "3.10.1", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/task/__init__.py b/src/zep_cloud/task/__init__.py deleted file mode 100644 index 5cde020..0000000 --- a/src/zep_cloud/task/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -# isort: skip_file - diff --git a/src/zep_cloud/task/client.py b/src/zep_cloud/task/client.py deleted file mode 100644 index 4e22ceb..0000000 --- a/src/zep_cloud/task/client.py +++ /dev/null @@ -1,112 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper -from ..core.request_options import RequestOptions -from ..types.apidata_get_task_response import ApidataGetTaskResponse -from .raw_client import AsyncRawTaskClient, RawTaskClient - - -class TaskClient: - def __init__(self, *, client_wrapper: SyncClientWrapper): - self._raw_client = RawTaskClient(client_wrapper=client_wrapper) - - @property - def with_raw_response(self) -> RawTaskClient: - """ - Retrieves a raw implementation of this client that returns raw responses. - - Returns - ------- - RawTaskClient - """ - return self._raw_client - - def get(self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> ApidataGetTaskResponse: - """ - Gets a task by its ID - - Parameters - ---------- - task_id : str - Task ID - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ApidataGetTaskResponse - Task - - Examples - -------- - from zep_cloud import Zep - - client = Zep( - api_key="YOUR_API_KEY", - ) - client.task.get( - task_id="task_id", - ) - """ - _response = self._raw_client.get(task_id, request_options=request_options) - return _response.data - - -class AsyncTaskClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._raw_client = AsyncRawTaskClient(client_wrapper=client_wrapper) - - @property - def with_raw_response(self) -> AsyncRawTaskClient: - """ - Retrieves a raw implementation of this client that returns raw responses. - - Returns - ------- - AsyncRawTaskClient - """ - return self._raw_client - - async def get( - self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> ApidataGetTaskResponse: - """ - Gets a task by its ID - - Parameters - ---------- - task_id : str - Task ID - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - ApidataGetTaskResponse - Task - - Examples - -------- - import asyncio - - from zep_cloud import AsyncZep - - client = AsyncZep( - api_key="YOUR_API_KEY", - ) - - - async def main() -> None: - await client.task.get( - task_id="task_id", - ) - - - asyncio.run(main()) - """ - _response = await self._raw_client.get(task_id, request_options=request_options) - return _response.data diff --git a/src/zep_cloud/task/raw_client.py b/src/zep_cloud/task/raw_client.py deleted file mode 100644 index cd39c7e..0000000 --- a/src/zep_cloud/task/raw_client.py +++ /dev/null @@ -1,155 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing -from json.decoder import JSONDecodeError - -from ..core.api_error import ApiError as core_api_error_ApiError -from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper -from ..core.http_response import AsyncHttpResponse, HttpResponse -from ..core.jsonable_encoder import jsonable_encoder -from ..core.pydantic_utilities import parse_obj_as -from ..core.request_options import RequestOptions -from ..errors.internal_server_error import InternalServerError -from ..errors.not_found_error import NotFoundError -from ..types.api_error import ApiError as types_api_error_ApiError -from ..types.apidata_get_task_response import ApidataGetTaskResponse - - -class RawTaskClient: - def __init__(self, *, client_wrapper: SyncClientWrapper): - self._client_wrapper = client_wrapper - - def get( - self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[ApidataGetTaskResponse]: - """ - Gets a task by its ID - - Parameters - ---------- - task_id : str - Task ID - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - HttpResponse[ApidataGetTaskResponse] - Task - """ - _response = self._client_wrapper.httpx_client.request( - f"tasks/{jsonable_encoder(task_id)}", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - ApidataGetTaskResponse, - parse_obj_as( - type_=ApidataGetTaskResponse, # 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 AsyncRawTaskClient: - def __init__(self, *, client_wrapper: AsyncClientWrapper): - self._client_wrapper = client_wrapper - - async def get( - self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[ApidataGetTaskResponse]: - """ - Gets a task by its ID - - Parameters - ---------- - task_id : str - Task ID - - request_options : typing.Optional[RequestOptions] - Request-specific configuration. - - Returns - ------- - AsyncHttpResponse[ApidataGetTaskResponse] - Task - """ - _response = await self._client_wrapper.httpx_client.request( - f"tasks/{jsonable_encoder(task_id)}", - method="GET", - request_options=request_options, - ) - try: - if 200 <= _response.status_code < 300: - _data = typing.cast( - ApidataGetTaskResponse, - parse_obj_as( - type_=ApidataGetTaskResponse, # 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 - ) diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index af3a399..eaf964d 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -172,7 +172,7 @@ def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency + Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -551,7 +551,7 @@ async def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency + Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index aeefffe..14390e8 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -279,7 +279,7 @@ def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency + Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -840,7 +840,7 @@ async def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency + Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 3f7ac14..80b2a82 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,9 +6,6 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError -from .apidata_get_task_response import ApidataGetTaskResponse -from .apidata_task_error_response import ApidataTaskErrorResponse -from .apidata_task_progress import ApidataTaskProgress from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .date_filter import DateFilter @@ -57,9 +54,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataGetTaskResponse", - "ApidataTaskErrorResponse", - "ApidataTaskProgress", "CloneGraphResponse", "ComparisonOperator", "DateFilter", diff --git a/src/zep_cloud/types/add_thread_messages_response.py b/src/zep_cloud/types/add_thread_messages_response.py index b5d320e..0bef2a8 100644 --- a/src/zep_cloud/types/add_thread_messages_response.py +++ b/src/zep_cloud/types/add_thread_messages_response.py @@ -9,7 +9,6 @@ class AddThreadMessagesResponse(UniversalBaseModel): context: typing.Optional[str] = None message_uuids: typing.Optional[typing.List[str]] = None - task_id: typing.Optional[str] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/zep_cloud/types/add_triple_response.py b/src/zep_cloud/types/add_triple_response.py index 9ad9a99..2ae8641 100644 --- a/src/zep_cloud/types/add_triple_response.py +++ b/src/zep_cloud/types/add_triple_response.py @@ -12,10 +12,6 @@ class AddTripleResponse(UniversalBaseModel): edge: typing.Optional[EntityEdge] = None source_node: typing.Optional[EntityNode] = None target_node: typing.Optional[EntityNode] = None - task_id: typing.Optional[str] = pydantic.Field(default=None) - """ - Task ID of the add triple task - """ if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/zep_cloud/types/apidata_get_task_response.py b/src/zep_cloud/types/apidata_get_task_response.py deleted file mode 100644 index 7b9c289..0000000 --- a/src/zep_cloud/types/apidata_get_task_response.py +++ /dev/null @@ -1,29 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .apidata_task_error_response import ApidataTaskErrorResponse -from .apidata_task_progress import ApidataTaskProgress - - -class ApidataGetTaskResponse(UniversalBaseModel): - completed_at: typing.Optional[str] = None - created_at: typing.Optional[str] = None - error: typing.Optional[ApidataTaskErrorResponse] = None - progress: typing.Optional[ApidataTaskProgress] = None - started_at: typing.Optional[str] = None - status: typing.Optional[str] = None - task_id: typing.Optional[str] = None - type: typing.Optional[str] = None - updated_at: typing.Optional[str] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/apidata_task_error_response.py b/src/zep_cloud/types/apidata_task_error_response.py deleted file mode 100644 index 688d9b5..0000000 --- a/src/zep_cloud/types/apidata_task_error_response.py +++ /dev/null @@ -1,21 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel - - -class ApidataTaskErrorResponse(UniversalBaseModel): - code: typing.Optional[str] = None - details: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None - message: typing.Optional[str] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/apidata_task_progress.py b/src/zep_cloud/types/apidata_task_progress.py deleted file mode 100644 index 4723026..0000000 --- a/src/zep_cloud/types/apidata_task_progress.py +++ /dev/null @@ -1,21 +0,0 @@ -# This file was auto-generated by Fern from our API Definition. - -import typing - -import pydantic -from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel - - -class ApidataTaskProgress(UniversalBaseModel): - message: typing.Optional[str] = None - percent: typing.Optional[int] = None - stage: typing.Optional[str] = None - - if IS_PYDANTIC_V2: - model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 - else: - - class Config: - frozen = True - smart_union = True - extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/clone_graph_response.py b/src/zep_cloud/types/clone_graph_response.py index dec3de2..8ded91a 100644 --- a/src/zep_cloud/types/clone_graph_response.py +++ b/src/zep_cloud/types/clone_graph_response.py @@ -12,11 +12,6 @@ class CloneGraphResponse(UniversalBaseModel): graph_id is the ID of the cloned graph """ - task_id: typing.Optional[str] = pydantic.Field(default=None) - """ - Task ID of the clone graph task - """ - user_id: typing.Optional[str] = None if IS_PYDANTIC_V2: diff --git a/src/zep_cloud/types/episode.py b/src/zep_cloud/types/episode.py index c31326d..dfd8825 100644 --- a/src/zep_cloud/types/episode.py +++ b/src/zep_cloud/types/episode.py @@ -38,11 +38,6 @@ class Episode(UniversalBaseModel): source: typing.Optional[GraphDataType] = None source_description: typing.Optional[str] = None - task_id: typing.Optional[str] = pydantic.Field(default=None) - """ - Optional task ID to poll episode processing status. Currently only available for batch ingestion. - """ - thread_id: typing.Optional[str] = pydantic.Field(default=None) """ Optional thread ID, will be present if the episode is part of a thread From a60ac4d17f38fd901cd93596876e5bddace0c87b Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Sat, 15 Nov 2025 01:52:27 +0000 Subject: [PATCH 58/74] SDK regeneration --- reference.md | 35 ++++++++++++++++++++++----- src/zep_cloud/graph/client.py | 20 ++++++++++++--- src/zep_cloud/graph/episode/client.py | 4 +++ src/zep_cloud/thread/client.py | 28 ++++++++++++++++++--- src/zep_cloud/thread/raw_client.py | 4 +-- src/zep_cloud/user/client.py | 18 +++++++++++--- 6 files changed, 89 insertions(+), 20 deletions(-) diff --git a/reference.md b/reference.md index 95be1f5..23479f1 100644 --- a/reference.md +++ b/reference.md @@ -32,7 +32,10 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.list_entity_types() +client.graph.list_entity_types( + user_id="user_id", + graph_id="graph_id", +) ``` @@ -772,7 +775,10 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.graph.list_all() +client.graph.list_all( + page_number=1, + page_size=1, +) ``` @@ -1302,7 +1308,12 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.thread.list_all() +client.thread.list_all( + page_number=1, + page_size=1, + order_by="order_by", + asc=True, +) ``` @@ -1545,6 +1556,8 @@ client = Zep( ) client.thread.get_user_context( thread_id="threadId", + min_rating=1.1, + mode="basic", ) ``` @@ -1577,7 +1590,7 @@ client.thread.get_user_context(
-**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Defaults to summary mode. Use basic for lower latency +**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency
@@ -1631,6 +1644,9 @@ client = Zep( ) client.thread.get( thread_id="threadId", + limit=1, + cursor=1000000, + lastn=1, ) ``` @@ -1932,7 +1948,9 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.user.list_user_summary_instructions() +client.user.list_user_summary_instructions( + user_id="user_id", +) ``` @@ -2277,7 +2295,10 @@ from zep_cloud import Zep client = Zep( api_key="YOUR_API_KEY", ) -client.user.list_ordered() +client.user.list_ordered( + page_number=1, + page_size=1, +) ``` @@ -3137,6 +3158,7 @@ client = Zep( ) client.graph.episode.get_by_graph_id( graph_id="graph_id", + lastn=1, ) ``` @@ -3215,6 +3237,7 @@ client = Zep( ) client.graph.episode.get_by_user_id( user_id="user_id", + lastn=1, ) ``` diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 47a3c0d..84c1e6a 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -82,7 +82,10 @@ def list_entity_types( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.list_entity_types() + client.graph.list_entity_types( + user_id="user_id", + graph_id="graph_id", + ) """ _response = self._raw_client.list_entity_types( user_id=user_id, graph_id=graph_id, request_options=request_options @@ -492,7 +495,10 @@ def list_all( client = Zep( api_key="YOUR_API_KEY", ) - client.graph.list_all() + client.graph.list_all( + page_number=1, + page_size=1, + ) """ _response = self._raw_client.list_all( page_number=page_number, page_size=page_size, request_options=request_options @@ -765,7 +771,10 @@ async def list_entity_types( async def main() -> None: - await client.graph.list_entity_types() + await client.graph.list_entity_types( + user_id="user_id", + graph_id="graph_id", + ) asyncio.run(main()) @@ -1231,7 +1240,10 @@ async def list_all( async def main() -> None: - await client.graph.list_all() + await client.graph.list_all( + page_number=1, + page_size=1, + ) asyncio.run(main()) diff --git a/src/zep_cloud/graph/episode/client.py b/src/zep_cloud/graph/episode/client.py index 650aeba..81649a0 100644 --- a/src/zep_cloud/graph/episode/client.py +++ b/src/zep_cloud/graph/episode/client.py @@ -61,6 +61,7 @@ def get_by_graph_id( ) client.graph.episode.get_by_graph_id( graph_id="graph_id", + lastn=1, ) """ _response = self._raw_client.get_by_graph_id(graph_id, lastn=lastn, request_options=request_options) @@ -101,6 +102,7 @@ def get_by_user_id( ) client.graph.episode.get_by_user_id( user_id="user_id", + lastn=1, ) """ _response = self._raw_client.get_by_user_id(user_id, lastn=lastn, request_options=request_options) @@ -257,6 +259,7 @@ async def get_by_graph_id( async def main() -> None: await client.graph.episode.get_by_graph_id( graph_id="graph_id", + lastn=1, ) @@ -305,6 +308,7 @@ async def get_by_user_id( async def main() -> None: await client.graph.episode.get_by_user_id( user_id="user_id", + lastn=1, ) diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index eaf964d..5a2a34c 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -77,7 +77,12 @@ def list_all( client = Zep( api_key="YOUR_API_KEY", ) - client.thread.list_all() + client.thread.list_all( + page_number=1, + page_size=1, + order_by="order_by", + asc=True, + ) """ _response = self._raw_client.list_all( page_number=page_number, page_size=page_size, order_by=order_by, asc=asc, request_options=request_options @@ -172,7 +177,7 @@ def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -191,6 +196,8 @@ def get_user_context( ) client.thread.get_user_context( thread_id="threadId", + min_rating=1.1, + mode="basic", ) """ _response = self._raw_client.get_user_context( @@ -241,6 +248,9 @@ def get( ) client.thread.get( thread_id="threadId", + limit=1, + cursor=1000000, + lastn=1, ) """ _response = self._raw_client.get( @@ -435,7 +445,12 @@ async def list_all( async def main() -> None: - await client.thread.list_all() + await client.thread.list_all( + page_number=1, + page_size=1, + order_by="order_by", + asc=True, + ) asyncio.run(main()) @@ -551,7 +566,7 @@ async def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -575,6 +590,8 @@ async def get_user_context( async def main() -> None: await client.thread.get_user_context( thread_id="threadId", + min_rating=1.1, + mode="basic", ) @@ -633,6 +650,9 @@ async def get( async def main() -> None: await client.thread.get( thread_id="threadId", + limit=1, + cursor=1000000, + lastn=1, ) diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index 14390e8..aeefffe 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -279,7 +279,7 @@ def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -840,7 +840,7 @@ async def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. diff --git a/src/zep_cloud/user/client.py b/src/zep_cloud/user/client.py index add7486..b603f7d 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -59,7 +59,9 @@ def list_user_summary_instructions( client = Zep( api_key="YOUR_API_KEY", ) - client.user.list_user_summary_instructions() + client.user.list_user_summary_instructions( + user_id="user_id", + ) """ _response = self._raw_client.list_user_summary_instructions(user_id=user_id, request_options=request_options) return _response.data @@ -253,7 +255,10 @@ def list_ordered( client = Zep( api_key="YOUR_API_KEY", ) - client.user.list_ordered() + client.user.list_ordered( + page_number=1, + page_size=1, + ) """ _response = self._raw_client.list_ordered( page_number=page_number, page_size=page_size, request_options=request_options @@ -533,7 +538,9 @@ async def list_user_summary_instructions( async def main() -> None: - await client.user.list_user_summary_instructions() + await client.user.list_user_summary_instructions( + user_id="user_id", + ) asyncio.run(main()) @@ -761,7 +768,10 @@ async def list_ordered( async def main() -> None: - await client.user.list_ordered() + await client.user.list_ordered( + page_number=1, + page_size=1, + ) asyncio.run(main()) From 609f6e85701bc66c5fbcd6569954cf34ed5614fe Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 17:42:38 +0000 Subject: [PATCH 59/74] SDK regeneration --- reference.md | 4 ++-- src/zep_cloud/core/client_wrapper.py | 4 ++-- src/zep_cloud/thread/client.py | 8 ++++---- src/zep_cloud/thread/raw_client.py | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/reference.md b/reference.md index 23479f1..4f1927e 100644 --- a/reference.md +++ b/reference.md @@ -1590,7 +1590,7 @@ client.thread.get_user_context(
-**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency +**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Defaults to summary mode. Use basic for lower latency
@@ -1645,7 +1645,7 @@ client = Zep( client.thread.get( thread_id="threadId", limit=1, - cursor=1000000, + cursor=1, lastn=1, ) diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 949da70..cac90a6 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.10.1", + "User-Agent": "zep-cloud/3.11.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.10.1", + "X-Fern-SDK-Version": "3.11.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index 5a2a34c..afcd1b4 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -177,7 +177,7 @@ def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency + Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -249,7 +249,7 @@ def get( client.thread.get( thread_id="threadId", limit=1, - cursor=1000000, + cursor=1, lastn=1, ) """ @@ -566,7 +566,7 @@ async def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency + Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -651,7 +651,7 @@ async def main() -> None: await client.thread.get( thread_id="threadId", limit=1, - cursor=1000000, + cursor=1, lastn=1, ) diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index aeefffe..14390e8 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -279,7 +279,7 @@ def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency + Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -840,7 +840,7 @@ async def get_user_context( The minimum rating by which to filter relevant facts. mode : typing.Optional[ThreadGetUserContextRequestMode] - Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency + Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. From bb167fd18934f7c529518c5f2144b26f30e75a9b Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 19:49:04 +0000 Subject: [PATCH 60/74] SDK regeneration --- reference.md | 370 ++++++++- src/zep_cloud/__init__.py | 7 +- src/zep_cloud/base_client.py | 3 + src/zep_cloud/context/__init__.py | 4 + src/zep_cloud/context/client.py | 429 ++++++++++ src/zep_cloud/context/raw_client.py | 783 ++++++++++++++++++ src/zep_cloud/thread/client.py | 18 +- src/zep_cloud/thread/raw_client.py | 14 +- src/zep_cloud/types/__init__.py | 4 + .../types/context_template_response.py | 34 + .../types/list_context_templates_response.py | 20 + 11 files changed, 1678 insertions(+), 8 deletions(-) create mode 100644 src/zep_cloud/context/__init__.py create mode 100644 src/zep_cloud/context/client.py create mode 100644 src/zep_cloud/context/raw_client.py create mode 100644 src/zep_cloud/types/context_template_response.py create mode 100644 src/zep_cloud/types/list_context_templates_response.py diff --git a/reference.md b/reference.md index 4f1927e..2b45185 100644 --- a/reference.md +++ b/reference.md @@ -1,4 +1,363 @@ # Reference +## Context +
client.context.list_context_templates() +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Lists all context templates. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.context.list_context_templates() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.context.create_context_template(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Creates a new context template. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.context.create_context_template( + template="template", + template_id="template_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**template:** `str` — The template content (max 1200 characters). + +
+
+ +
+
+ +**template_id:** `str` — Unique identifier for the template (max 100 characters). + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.context.get_context_template(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Retrieves a context template by template_id. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.context.get_context_template( + template_id="template_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**template_id:** `str` — Template ID + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.context.update_context_template(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Updates an existing context template by template_id. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.context.update_context_template( + template_id="template_id", + template="template", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**template_id:** `str` — Template ID + +
+
+ +
+
+ +**template:** `str` — The template content (max 1200 characters). + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.context.delete_context_template(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Deletes a context template by template_id. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.context.delete_context_template( + template_id="template_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**template_id:** `str` — Template ID + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ ## Graph
client.graph.list_entity_types(...)
@@ -1557,6 +1916,7 @@ client = Zep( client.thread.get_user_context( thread_id="threadId", min_rating=1.1, + template_id="template_id", mode="basic", ) @@ -1590,7 +1950,15 @@ client.thread.get_user_context(
-**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Defaults to summary mode. Use basic for lower latency +**template_id:** `typing.Optional[str]` — Optional template ID to use for custom context rendering. + +
+
+ +
+
+ +**mode:** `typing.Optional[ThreadGetUserContextRequestMode]` — Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 68cb1b7..270bbcc 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -9,6 +9,7 @@ ApiError, CloneGraphResponse, ComparisonOperator, + ContextTemplateResponse, DateFilter, EdgeType, EntityEdge, @@ -31,6 +32,7 @@ GraphNodesRequest, GraphSearchResults, GraphSearchScope, + ListContextTemplatesResponse, ListUserInstructionsResponse, Message, MessageListResponse, @@ -51,7 +53,7 @@ UserNodeResponse, ) from .errors import BadRequestError, InternalServerError, NotFoundError -from . import graph, project, thread, user +from . import context, graph, project, thread, user from .client import AsyncZep, Zep from .environment import ZepEnvironment from .thread import ThreadGetUserContextRequestMode @@ -66,6 +68,7 @@ "BadRequestError", "CloneGraphResponse", "ComparisonOperator", + "ContextTemplateResponse", "DateFilter", "EdgeType", "EntityEdge", @@ -89,6 +92,7 @@ "GraphSearchResults", "GraphSearchScope", "InternalServerError", + "ListContextTemplatesResponse", "ListUserInstructionsResponse", "Message", "MessageListResponse", @@ -112,6 +116,7 @@ "Zep", "ZepEnvironment", "__version__", + "context", "graph", "project", "thread", diff --git a/src/zep_cloud/base_client.py b/src/zep_cloud/base_client.py index 83ca50e..7b5cd36 100644 --- a/src/zep_cloud/base_client.py +++ b/src/zep_cloud/base_client.py @@ -4,6 +4,7 @@ import typing import httpx +from .context.client import AsyncContextClient, ContextClient from .core.api_error import ApiError from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from .environment import ZepEnvironment @@ -80,6 +81,7 @@ def __init__( else httpx.Client(timeout=_defaulted_timeout), timeout=_defaulted_timeout, ) + self.context = ContextClient(client_wrapper=self._client_wrapper) self.graph = GraphClient(client_wrapper=self._client_wrapper) self.project = ProjectClient(client_wrapper=self._client_wrapper) self.thread = ThreadClient(client_wrapper=self._client_wrapper) @@ -153,6 +155,7 @@ def __init__( else httpx.AsyncClient(timeout=_defaulted_timeout), timeout=_defaulted_timeout, ) + self.context = AsyncContextClient(client_wrapper=self._client_wrapper) self.graph = AsyncGraphClient(client_wrapper=self._client_wrapper) self.project = AsyncProjectClient(client_wrapper=self._client_wrapper) self.thread = AsyncThreadClient(client_wrapper=self._client_wrapper) diff --git a/src/zep_cloud/context/__init__.py b/src/zep_cloud/context/__init__.py new file mode 100644 index 0000000..5cde020 --- /dev/null +++ b/src/zep_cloud/context/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/src/zep_cloud/context/client.py b/src/zep_cloud/context/client.py new file mode 100644 index 0000000..583c9ed --- /dev/null +++ b/src/zep_cloud/context/client.py @@ -0,0 +1,429 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.request_options import RequestOptions +from ..types.context_template_response import ContextTemplateResponse +from ..types.list_context_templates_response import ListContextTemplatesResponse +from ..types.success_response import SuccessResponse +from .raw_client import AsyncRawContextClient, RawContextClient + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class ContextClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawContextClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawContextClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawContextClient + """ + return self._raw_client + + def list_context_templates( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> ListContextTemplatesResponse: + """ + Lists all context templates. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListContextTemplatesResponse + The list of context templates. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.context.list_context_templates() + """ + _response = self._raw_client.list_context_templates(request_options=request_options) + return _response.data + + def create_context_template( + self, *, template: str, template_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> ContextTemplateResponse: + """ + Creates a new context template. + + Parameters + ---------- + template : str + The template content (max 1200 characters). + + template_id : str + Unique identifier for the template (max 100 characters). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ContextTemplateResponse + The created context template. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.context.create_context_template( + template="template", + template_id="template_id", + ) + """ + _response = self._raw_client.create_context_template( + template=template, template_id=template_id, request_options=request_options + ) + return _response.data + + def get_context_template( + self, template_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> ContextTemplateResponse: + """ + Retrieves a context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ContextTemplateResponse + The context template. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.context.get_context_template( + template_id="template_id", + ) + """ + _response = self._raw_client.get_context_template(template_id, request_options=request_options) + return _response.data + + def update_context_template( + self, template_id: str, *, template: str, request_options: typing.Optional[RequestOptions] = None + ) -> ContextTemplateResponse: + """ + Updates an existing context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + template : str + The template content (max 1200 characters). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ContextTemplateResponse + The updated context template. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.context.update_context_template( + template_id="template_id", + template="template", + ) + """ + _response = self._raw_client.update_context_template( + template_id, template=template, request_options=request_options + ) + return _response.data + + def delete_context_template( + self, template_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> SuccessResponse: + """ + Deletes a context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Template deleted successfully + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.context.delete_context_template( + template_id="template_id", + ) + """ + _response = self._raw_client.delete_context_template(template_id, request_options=request_options) + return _response.data + + +class AsyncContextClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawContextClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawContextClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawContextClient + """ + return self._raw_client + + async def list_context_templates( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> ListContextTemplatesResponse: + """ + Lists all context templates. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListContextTemplatesResponse + The list of context templates. + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.context.list_context_templates() + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_context_templates(request_options=request_options) + return _response.data + + async def create_context_template( + self, *, template: str, template_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> ContextTemplateResponse: + """ + Creates a new context template. + + Parameters + ---------- + template : str + The template content (max 1200 characters). + + template_id : str + Unique identifier for the template (max 100 characters). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ContextTemplateResponse + The created context template. + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.context.create_context_template( + template="template", + template_id="template_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.create_context_template( + template=template, template_id=template_id, request_options=request_options + ) + return _response.data + + async def get_context_template( + self, template_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> ContextTemplateResponse: + """ + Retrieves a context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ContextTemplateResponse + The context template. + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.context.get_context_template( + template_id="template_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get_context_template(template_id, request_options=request_options) + return _response.data + + async def update_context_template( + self, template_id: str, *, template: str, request_options: typing.Optional[RequestOptions] = None + ) -> ContextTemplateResponse: + """ + Updates an existing context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + template : str + The template content (max 1200 characters). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ContextTemplateResponse + The updated context template. + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.context.update_context_template( + template_id="template_id", + template="template", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.update_context_template( + template_id, template=template, request_options=request_options + ) + return _response.data + + async def delete_context_template( + self, template_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> SuccessResponse: + """ + Deletes a context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Template deleted successfully + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.context.delete_context_template( + template_id="template_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.delete_context_template(template_id, request_options=request_options) + return _response.data diff --git a/src/zep_cloud/context/raw_client.py b/src/zep_cloud/context/raw_client.py new file mode 100644 index 0000000..800f0ac --- /dev/null +++ b/src/zep_cloud/context/raw_client.py @@ -0,0 +1,783 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ..core.api_error import ApiError as core_api_error_ApiError +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.http_response import AsyncHttpResponse, HttpResponse +from ..core.jsonable_encoder import jsonable_encoder +from ..core.pydantic_utilities import parse_obj_as +from ..core.request_options import RequestOptions +from ..errors.bad_request_error import BadRequestError +from ..errors.internal_server_error import InternalServerError +from ..errors.not_found_error import NotFoundError +from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.context_template_response import ContextTemplateResponse +from ..types.list_context_templates_response import ListContextTemplatesResponse +from ..types.success_response import SuccessResponse + +# this is used as the default value for optional parameters +OMIT = typing.cast(typing.Any, ...) + + +class RawContextClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def list_context_templates( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ListContextTemplatesResponse]: + """ + Lists all context templates. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListContextTemplatesResponse] + The list of context templates. + """ + _response = self._client_wrapper.httpx_client.request( + "context-templates", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListContextTemplatesResponse, + parse_obj_as( + type_=ListContextTemplatesResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 + ) + + def create_context_template( + self, *, template: str, template_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ContextTemplateResponse]: + """ + Creates a new context template. + + Parameters + ---------- + template : str + The template content (max 1200 characters). + + template_id : str + Unique identifier for the template (max 100 characters). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ContextTemplateResponse] + The created context template. + """ + _response = self._client_wrapper.httpx_client.request( + "context-templates", + method="POST", + json={ + "template": template, + "template_id": template_id, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ContextTemplateResponse, + parse_obj_as( + type_=ContextTemplateResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 + ) + + def get_context_template( + self, template_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ContextTemplateResponse]: + """ + Retrieves a context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ContextTemplateResponse] + The context template. + """ + _response = self._client_wrapper.httpx_client.request( + f"context-templates/{jsonable_encoder(template_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ContextTemplateResponse, + parse_obj_as( + type_=ContextTemplateResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 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 + ) + + def update_context_template( + self, template_id: str, *, template: str, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ContextTemplateResponse]: + """ + Updates an existing context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + template : str + The template content (max 1200 characters). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ContextTemplateResponse] + The updated context template. + """ + _response = self._client_wrapper.httpx_client.request( + f"context-templates/{jsonable_encoder(template_id)}", + method="PUT", + json={ + "template": template, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ContextTemplateResponse, + parse_obj_as( + type_=ContextTemplateResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 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 + ) + + def delete_context_template( + self, template_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[SuccessResponse]: + """ + Deletes a context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Template deleted successfully + """ + _response = self._client_wrapper.httpx_client.request( + f"context-templates/{jsonable_encoder(template_id)}", + method="DELETE", + 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 == 400: + raise BadRequestError( + 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 == 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 AsyncRawContextClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def list_context_templates( + self, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[ListContextTemplatesResponse]: + """ + Lists all context templates. + + Parameters + ---------- + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListContextTemplatesResponse] + The list of context templates. + """ + _response = await self._client_wrapper.httpx_client.request( + "context-templates", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListContextTemplatesResponse, + parse_obj_as( + type_=ListContextTemplatesResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 + ) + + async def create_context_template( + self, *, template: str, template_id: str, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[ContextTemplateResponse]: + """ + Creates a new context template. + + Parameters + ---------- + template : str + The template content (max 1200 characters). + + template_id : str + Unique identifier for the template (max 100 characters). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ContextTemplateResponse] + The created context template. + """ + _response = await self._client_wrapper.httpx_client.request( + "context-templates", + method="POST", + json={ + "template": template, + "template_id": template_id, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ContextTemplateResponse, + parse_obj_as( + type_=ContextTemplateResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 + ) + + async def get_context_template( + self, template_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[ContextTemplateResponse]: + """ + Retrieves a context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ContextTemplateResponse] + The context template. + """ + _response = await self._client_wrapper.httpx_client.request( + f"context-templates/{jsonable_encoder(template_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ContextTemplateResponse, + parse_obj_as( + type_=ContextTemplateResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 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 + ) + + async def update_context_template( + self, template_id: str, *, template: str, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[ContextTemplateResponse]: + """ + Updates an existing context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + template : str + The template content (max 1200 characters). + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ContextTemplateResponse] + The updated context template. + """ + _response = await self._client_wrapper.httpx_client.request( + f"context-templates/{jsonable_encoder(template_id)}", + method="PUT", + json={ + "template": template, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ContextTemplateResponse, + parse_obj_as( + type_=ContextTemplateResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 == 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 + ) + + async def delete_context_template( + self, template_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Deletes a context template by template_id. + + Parameters + ---------- + template_id : str + Template ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Template deleted successfully + """ + _response = await self._client_wrapper.httpx_client.request( + f"context-templates/{jsonable_encoder(template_id)}", + method="DELETE", + 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 == 400: + raise BadRequestError( + 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 == 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 + ) diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index afcd1b4..5f613b2 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -162,6 +162,7 @@ def get_user_context( thread_id: str, *, min_rating: typing.Optional[float] = None, + template_id: typing.Optional[str] = None, mode: typing.Optional[ThreadGetUserContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> ThreadContextResponse: @@ -176,8 +177,11 @@ def get_user_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. + template_id : typing.Optional[str] + Optional template ID to use for custom context rendering. + mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -197,11 +201,12 @@ def get_user_context( client.thread.get_user_context( thread_id="threadId", min_rating=1.1, + template_id="template_id", mode="basic", ) """ _response = self._raw_client.get_user_context( - thread_id, min_rating=min_rating, mode=mode, request_options=request_options + thread_id, min_rating=min_rating, template_id=template_id, mode=mode, request_options=request_options ) return _response.data @@ -551,6 +556,7 @@ async def get_user_context( thread_id: str, *, min_rating: typing.Optional[float] = None, + template_id: typing.Optional[str] = None, mode: typing.Optional[ThreadGetUserContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> ThreadContextResponse: @@ -565,8 +571,11 @@ async def get_user_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. + template_id : typing.Optional[str] + Optional template ID to use for custom context rendering. + mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -591,6 +600,7 @@ async def main() -> None: await client.thread.get_user_context( thread_id="threadId", min_rating=1.1, + template_id="template_id", mode="basic", ) @@ -598,7 +608,7 @@ async def main() -> None: asyncio.run(main()) """ _response = await self._raw_client.get_user_context( - thread_id, min_rating=min_rating, mode=mode, request_options=request_options + thread_id, min_rating=min_rating, template_id=template_id, mode=mode, request_options=request_options ) return _response.data diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index 14390e8..a4226ed 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -264,6 +264,7 @@ def get_user_context( thread_id: str, *, min_rating: typing.Optional[float] = None, + template_id: typing.Optional[str] = None, mode: typing.Optional[ThreadGetUserContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[ThreadContextResponse]: @@ -278,8 +279,11 @@ def get_user_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. + template_id : typing.Optional[str] + Optional template ID to use for custom context rendering. + mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -294,6 +298,7 @@ def get_user_context( method="GET", params={ "minRating": min_rating, + "template_id": template_id, "mode": mode, }, request_options=request_options, @@ -825,6 +830,7 @@ async def get_user_context( thread_id: str, *, min_rating: typing.Optional[float] = None, + template_id: typing.Optional[str] = None, mode: typing.Optional[ThreadGetUserContextRequestMode] = None, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[ThreadContextResponse]: @@ -839,8 +845,11 @@ async def get_user_context( min_rating : typing.Optional[float] The minimum rating by which to filter relevant facts. + template_id : typing.Optional[str] + Optional template ID to use for custom context rendering. + mode : typing.Optional[ThreadGetUserContextRequestMode] - Defaults to summary mode. Use basic for lower latency + Deprecated, this field will be removed in a future release. Defaults to summary mode. Use basic for lower latency request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -855,6 +864,7 @@ async def get_user_context( method="GET", params={ "minRating": min_rating, + "template_id": template_id, "mode": mode, }, request_options=request_options, diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 80b2a82..edb7d17 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -8,6 +8,7 @@ from .api_error import ApiError from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator +from .context_template_response import ContextTemplateResponse from .date_filter import DateFilter from .edge_type import EdgeType from .entity_edge import EntityEdge @@ -30,6 +31,7 @@ from .graph_nodes_request import GraphNodesRequest from .graph_search_results import GraphSearchResults from .graph_search_scope import GraphSearchScope +from .list_context_templates_response import ListContextTemplatesResponse from .list_user_instructions_response import ListUserInstructionsResponse from .message import Message from .message_list_response import MessageListResponse @@ -56,6 +58,7 @@ "ApiError", "CloneGraphResponse", "ComparisonOperator", + "ContextTemplateResponse", "DateFilter", "EdgeType", "EntityEdge", @@ -78,6 +81,7 @@ "GraphNodesRequest", "GraphSearchResults", "GraphSearchScope", + "ListContextTemplatesResponse", "ListUserInstructionsResponse", "Message", "MessageListResponse", diff --git a/src/zep_cloud/types/context_template_response.py b/src/zep_cloud/types/context_template_response.py new file mode 100644 index 0000000..766a07e --- /dev/null +++ b/src/zep_cloud/types/context_template_response.py @@ -0,0 +1,34 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +import typing_extensions +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from ..core.serialization import FieldMetadata + + +class ContextTemplateResponse(UniversalBaseModel): + template: typing.Optional[str] = pydantic.Field(default=None) + """ + The template content. + """ + + template_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Unique identifier for the template (max 100 characters). + """ + + uuid_: typing_extensions.Annotated[typing.Optional[str], FieldMetadata(alias="uuid")] = pydantic.Field(default=None) + """ + Unique identifier for the template. + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/list_context_templates_response.py b/src/zep_cloud/types/list_context_templates_response.py new file mode 100644 index 0000000..8b18545 --- /dev/null +++ b/src/zep_cloud/types/list_context_templates_response.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .context_template_response import ContextTemplateResponse + + +class ListContextTemplatesResponse(UniversalBaseModel): + templates: typing.Optional[typing.List[ContextTemplateResponse]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow From 24dfb9d26e005532882c28f129ea13125366c4cc Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 18 Nov 2025 12:34:26 -0500 Subject: [PATCH 61/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 580139d..222ec7a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.11.0" +version = "3.12.0" description = "" readme = "README.md" authors = [] From c430a9307de381209a4fdd9c2420909a637b22d3 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 17:36:51 +0000 Subject: [PATCH 62/74] SDK regeneration --- requirements.txt | 4 ++++ src/zep_cloud/core/client_wrapper.py | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e80f640 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +httpx>=0.21.2 +pydantic>= 1.9.2 +pydantic-core>=2.18.2 +typing_extensions>= 4.0.0 diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index cac90a6..f141b0b 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.11.0", + "User-Agent": "zep-cloud/3.12.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.11.0", + "X-Fern-SDK-Version": "3.12.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" From 6de11a779a6e564426f73351344868930a30c7d3 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Tue, 18 Nov 2025 13:19:32 -0500 Subject: [PATCH 63/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 222ec7a..bb4f085 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.12.0" +version = "3.13.0" description = "" readme = "README.md" authors = [] From 1677e3863670fef93f3d7143d8b75b394e141eca Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 18:21:32 +0000 Subject: [PATCH 64/74] SDK regeneration --- reference.md | 71 ++++++++ src/zep_cloud/__init__.py | 9 +- src/zep_cloud/base_client.py | 3 + src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/task/__init__.py | 4 + src/zep_cloud/task/client.py | 112 +++++++++++++ src/zep_cloud/task/raw_client.py | 155 ++++++++++++++++++ src/zep_cloud/types/__init__.py | 6 + .../types/add_thread_messages_response.py | 1 + src/zep_cloud/types/add_triple_response.py | 4 + .../types/apidata_get_task_response.py | 29 ++++ .../types/apidata_task_error_response.py | 21 +++ src/zep_cloud/types/apidata_task_progress.py | 20 +++ src/zep_cloud/types/clone_graph_response.py | 5 + src/zep_cloud/types/episode.py | 5 + 15 files changed, 446 insertions(+), 3 deletions(-) create mode 100644 src/zep_cloud/task/__init__.py create mode 100644 src/zep_cloud/task/client.py create mode 100644 src/zep_cloud/task/raw_client.py create mode 100644 src/zep_cloud/types/apidata_get_task_response.py create mode 100644 src/zep_cloud/types/apidata_task_error_response.py create mode 100644 src/zep_cloud/types/apidata_task_progress.py diff --git a/reference.md b/reference.md index 2b45185..a9a0e99 100644 --- a/reference.md +++ b/reference.md @@ -1630,6 +1630,77 @@ client.project.get()
+ + +
+ +## Task +
client.task.get(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Gets a task by its ID +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.task.get( + task_id="task_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**task_id:** `str` — Task ID + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 270bbcc..850e624 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,6 +7,9 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, + ApidataGetTaskResponse, + ApidataTaskErrorResponse, + ApidataTaskProgress, CloneGraphResponse, ComparisonOperator, ContextTemplateResponse, @@ -53,7 +56,7 @@ UserNodeResponse, ) from .errors import BadRequestError, InternalServerError, NotFoundError -from . import context, graph, project, thread, user +from . import context, graph, project, task, thread, user from .client import AsyncZep, Zep from .environment import ZepEnvironment from .thread import ThreadGetUserContextRequestMode @@ -64,6 +67,9 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataGetTaskResponse", + "ApidataTaskErrorResponse", + "ApidataTaskProgress", "AsyncZep", "BadRequestError", "CloneGraphResponse", @@ -119,6 +125,7 @@ "context", "graph", "project", + "task", "thread", "user", ] diff --git a/src/zep_cloud/base_client.py b/src/zep_cloud/base_client.py index 7b5cd36..ae0b8c9 100644 --- a/src/zep_cloud/base_client.py +++ b/src/zep_cloud/base_client.py @@ -10,6 +10,7 @@ from .environment import ZepEnvironment from .graph.client import AsyncGraphClient, GraphClient from .project.client import AsyncProjectClient, ProjectClient +from .task.client import AsyncTaskClient, TaskClient from .thread.client import AsyncThreadClient, ThreadClient from .user.client import AsyncUserClient, UserClient @@ -84,6 +85,7 @@ def __init__( self.context = ContextClient(client_wrapper=self._client_wrapper) self.graph = GraphClient(client_wrapper=self._client_wrapper) self.project = ProjectClient(client_wrapper=self._client_wrapper) + self.task = TaskClient(client_wrapper=self._client_wrapper) self.thread = ThreadClient(client_wrapper=self._client_wrapper) self.user = UserClient(client_wrapper=self._client_wrapper) @@ -158,6 +160,7 @@ def __init__( self.context = AsyncContextClient(client_wrapper=self._client_wrapper) self.graph = AsyncGraphClient(client_wrapper=self._client_wrapper) self.project = AsyncProjectClient(client_wrapper=self._client_wrapper) + self.task = AsyncTaskClient(client_wrapper=self._client_wrapper) self.thread = AsyncThreadClient(client_wrapper=self._client_wrapper) self.user = AsyncUserClient(client_wrapper=self._client_wrapper) diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index f141b0b..db6fce9 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.12.0", + "User-Agent": "zep-cloud/3.13.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.12.0", + "X-Fern-SDK-Version": "3.13.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/task/__init__.py b/src/zep_cloud/task/__init__.py new file mode 100644 index 0000000..5cde020 --- /dev/null +++ b/src/zep_cloud/task/__init__.py @@ -0,0 +1,4 @@ +# This file was auto-generated by Fern from our API Definition. + +# isort: skip_file + diff --git a/src/zep_cloud/task/client.py b/src/zep_cloud/task/client.py new file mode 100644 index 0000000..4e22ceb --- /dev/null +++ b/src/zep_cloud/task/client.py @@ -0,0 +1,112 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.request_options import RequestOptions +from ..types.apidata_get_task_response import ApidataGetTaskResponse +from .raw_client import AsyncRawTaskClient, RawTaskClient + + +class TaskClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._raw_client = RawTaskClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> RawTaskClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + RawTaskClient + """ + return self._raw_client + + def get(self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> ApidataGetTaskResponse: + """ + Gets a task by its ID + + Parameters + ---------- + task_id : str + Task ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataGetTaskResponse + Task + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.task.get( + task_id="task_id", + ) + """ + _response = self._raw_client.get(task_id, request_options=request_options) + return _response.data + + +class AsyncTaskClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._raw_client = AsyncRawTaskClient(client_wrapper=client_wrapper) + + @property + def with_raw_response(self) -> AsyncRawTaskClient: + """ + Retrieves a raw implementation of this client that returns raw responses. + + Returns + ------- + AsyncRawTaskClient + """ + return self._raw_client + + async def get( + self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> ApidataGetTaskResponse: + """ + Gets a task by its ID + + Parameters + ---------- + task_id : str + Task ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ApidataGetTaskResponse + Task + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.task.get( + task_id="task_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.get(task_id, request_options=request_options) + return _response.data diff --git a/src/zep_cloud/task/raw_client.py b/src/zep_cloud/task/raw_client.py new file mode 100644 index 0000000..cd39c7e --- /dev/null +++ b/src/zep_cloud/task/raw_client.py @@ -0,0 +1,155 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing +from json.decoder import JSONDecodeError + +from ..core.api_error import ApiError as core_api_error_ApiError +from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper +from ..core.http_response import AsyncHttpResponse, HttpResponse +from ..core.jsonable_encoder import jsonable_encoder +from ..core.pydantic_utilities import parse_obj_as +from ..core.request_options import RequestOptions +from ..errors.internal_server_error import InternalServerError +from ..errors.not_found_error import NotFoundError +from ..types.api_error import ApiError as types_api_error_ApiError +from ..types.apidata_get_task_response import ApidataGetTaskResponse + + +class RawTaskClient: + def __init__(self, *, client_wrapper: SyncClientWrapper): + self._client_wrapper = client_wrapper + + def get( + self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[ApidataGetTaskResponse]: + """ + Gets a task by its ID + + Parameters + ---------- + task_id : str + Task ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ApidataGetTaskResponse] + Task + """ + _response = self._client_wrapper.httpx_client.request( + f"tasks/{jsonable_encoder(task_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataGetTaskResponse, + parse_obj_as( + type_=ApidataGetTaskResponse, # 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 AsyncRawTaskClient: + def __init__(self, *, client_wrapper: AsyncClientWrapper): + self._client_wrapper = client_wrapper + + async def get( + self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[ApidataGetTaskResponse]: + """ + Gets a task by its ID + + Parameters + ---------- + task_id : str + Task ID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ApidataGetTaskResponse] + Task + """ + _response = await self._client_wrapper.httpx_client.request( + f"tasks/{jsonable_encoder(task_id)}", + method="GET", + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ApidataGetTaskResponse, + parse_obj_as( + type_=ApidataGetTaskResponse, # 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 + ) diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index edb7d17..ab2fe73 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,6 +6,9 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError +from .apidata_get_task_response import ApidataGetTaskResponse +from .apidata_task_error_response import ApidataTaskErrorResponse +from .apidata_task_progress import ApidataTaskProgress from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .context_template_response import ContextTemplateResponse @@ -56,6 +59,9 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", + "ApidataGetTaskResponse", + "ApidataTaskErrorResponse", + "ApidataTaskProgress", "CloneGraphResponse", "ComparisonOperator", "ContextTemplateResponse", diff --git a/src/zep_cloud/types/add_thread_messages_response.py b/src/zep_cloud/types/add_thread_messages_response.py index 0bef2a8..b5d320e 100644 --- a/src/zep_cloud/types/add_thread_messages_response.py +++ b/src/zep_cloud/types/add_thread_messages_response.py @@ -9,6 +9,7 @@ class AddThreadMessagesResponse(UniversalBaseModel): context: typing.Optional[str] = None message_uuids: typing.Optional[typing.List[str]] = None + task_id: typing.Optional[str] = None if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/zep_cloud/types/add_triple_response.py b/src/zep_cloud/types/add_triple_response.py index 2ae8641..9ad9a99 100644 --- a/src/zep_cloud/types/add_triple_response.py +++ b/src/zep_cloud/types/add_triple_response.py @@ -12,6 +12,10 @@ class AddTripleResponse(UniversalBaseModel): edge: typing.Optional[EntityEdge] = None source_node: typing.Optional[EntityNode] = None target_node: typing.Optional[EntityNode] = None + task_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Task ID of the add triple task + """ if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 diff --git a/src/zep_cloud/types/apidata_get_task_response.py b/src/zep_cloud/types/apidata_get_task_response.py new file mode 100644 index 0000000..7b9c289 --- /dev/null +++ b/src/zep_cloud/types/apidata_get_task_response.py @@ -0,0 +1,29 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .apidata_task_error_response import ApidataTaskErrorResponse +from .apidata_task_progress import ApidataTaskProgress + + +class ApidataGetTaskResponse(UniversalBaseModel): + completed_at: typing.Optional[str] = None + created_at: typing.Optional[str] = None + error: typing.Optional[ApidataTaskErrorResponse] = None + progress: typing.Optional[ApidataTaskProgress] = None + started_at: typing.Optional[str] = None + status: typing.Optional[str] = None + task_id: typing.Optional[str] = None + type: typing.Optional[str] = None + updated_at: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/apidata_task_error_response.py b/src/zep_cloud/types/apidata_task_error_response.py new file mode 100644 index 0000000..688d9b5 --- /dev/null +++ b/src/zep_cloud/types/apidata_task_error_response.py @@ -0,0 +1,21 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ApidataTaskErrorResponse(UniversalBaseModel): + code: typing.Optional[str] = None + details: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None + message: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/apidata_task_progress.py b/src/zep_cloud/types/apidata_task_progress.py new file mode 100644 index 0000000..58283b3 --- /dev/null +++ b/src/zep_cloud/types/apidata_task_progress.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class ApidataTaskProgress(UniversalBaseModel): + message: typing.Optional[str] = None + stage: typing.Optional[str] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/clone_graph_response.py b/src/zep_cloud/types/clone_graph_response.py index 8ded91a..dec3de2 100644 --- a/src/zep_cloud/types/clone_graph_response.py +++ b/src/zep_cloud/types/clone_graph_response.py @@ -12,6 +12,11 @@ class CloneGraphResponse(UniversalBaseModel): graph_id is the ID of the cloned graph """ + task_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Task ID of the clone graph task + """ + user_id: typing.Optional[str] = None if IS_PYDANTIC_V2: diff --git a/src/zep_cloud/types/episode.py b/src/zep_cloud/types/episode.py index dfd8825..c31326d 100644 --- a/src/zep_cloud/types/episode.py +++ b/src/zep_cloud/types/episode.py @@ -38,6 +38,11 @@ class Episode(UniversalBaseModel): source: typing.Optional[GraphDataType] = None source_description: typing.Optional[str] = None + task_id: typing.Optional[str] = pydantic.Field(default=None) + """ + Optional task ID to poll episode processing status. Currently only available for batch ingestion. + """ + thread_id: typing.Optional[str] = pydantic.Field(default=None) """ Optional thread ID, will be present if the episode is part of a thread From 0b04e7bd96fcbf5be71d92c9b6c82b3f8dfc0040 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 14:57:40 +0000 Subject: [PATCH 65/74] SDK regeneration --- reference.md | 15 ++++++++------- src/zep_cloud/graph/client.py | 22 ++++++++++++---------- src/zep_cloud/graph/raw_client.py | 16 ++++++++-------- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/reference.md b/reference.md index a9a0e99..00ffc2f 100644 --- a/reference.md +++ b/reference.md @@ -767,6 +767,7 @@ client = Zep( client.graph.add_fact_triple( fact="fact", fact_name="fact_name", + source_node_name="source_node_name", target_node_name="target_node_name", ) @@ -800,7 +801,7 @@ client.graph.add_fact_triple(
-**target_node_name:** `str` — The name of the target node to add +**source_node_name:** `str` — The name of the source node to add
@@ -808,7 +809,7 @@ client.graph.add_fact_triple(
-**created_at:** `typing.Optional[str]` — The timestamp of the message +**target_node_name:** `str` — The name of the target node to add
@@ -816,7 +817,7 @@ client.graph.add_fact_triple(
-**expired_at:** `typing.Optional[str]` — The time (if any) at which the edge expires +**created_at:** `typing.Optional[str]` — The timestamp of the message
@@ -824,7 +825,7 @@ client.graph.add_fact_triple(
-**fact_uuid:** `typing.Optional[str]` — The uuid of the edge to add +**expired_at:** `typing.Optional[str]` — The time (if any) at which the edge expires
@@ -832,7 +833,7 @@ client.graph.add_fact_triple(
-**graph_id:** `typing.Optional[str]` +**fact_uuid:** `typing.Optional[str]` — The uuid of the edge to add
@@ -840,7 +841,7 @@ client.graph.add_fact_triple(
-**invalid_at:** `typing.Optional[str]` — The time (if any) at which the fact stops being true +**graph_id:** `typing.Optional[str]`
@@ -848,7 +849,7 @@ client.graph.add_fact_triple(
-**source_node_name:** `typing.Optional[str]` — The name of the source node to add +**invalid_at:** `typing.Optional[str]` — The time (if any) at which the fact stops being true
diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 84c1e6a..429e96b 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -256,13 +256,13 @@ def add_fact_triple( *, fact: str, fact_name: str, + source_node_name: str, target_node_name: str, created_at: typing.Optional[str] = OMIT, expired_at: typing.Optional[str] = OMIT, fact_uuid: typing.Optional[str] = OMIT, graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, - source_node_name: typing.Optional[str] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, target_node_summary: typing.Optional[str] = OMIT, @@ -282,6 +282,9 @@ def add_fact_triple( fact_name : str The name of the edge to add. Should be all caps using snake case (eg RELATES_TO) + source_node_name : str + The name of the source node to add + target_node_name : str The name of the target node to add @@ -299,9 +302,6 @@ def add_fact_triple( invalid_at : typing.Optional[str] The time (if any) at which the fact stops being true - source_node_name : typing.Optional[str] - The name of the source node to add - source_node_summary : typing.Optional[str] The summary of the source node to add @@ -337,19 +337,20 @@ def add_fact_triple( client.graph.add_fact_triple( fact="fact", fact_name="fact_name", + source_node_name="source_node_name", target_node_name="target_node_name", ) """ _response = self._raw_client.add_fact_triple( fact=fact, fact_name=fact_name, + source_node_name=source_node_name, target_node_name=target_node_name, created_at=created_at, expired_at=expired_at, fact_uuid=fact_uuid, graph_id=graph_id, invalid_at=invalid_at, - source_node_name=source_node_name, source_node_summary=source_node_summary, source_node_uuid=source_node_uuid, target_node_summary=target_node_summary, @@ -972,13 +973,13 @@ async def add_fact_triple( *, fact: str, fact_name: str, + source_node_name: str, target_node_name: str, created_at: typing.Optional[str] = OMIT, expired_at: typing.Optional[str] = OMIT, fact_uuid: typing.Optional[str] = OMIT, graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, - source_node_name: typing.Optional[str] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, target_node_summary: typing.Optional[str] = OMIT, @@ -998,6 +999,9 @@ async def add_fact_triple( fact_name : str The name of the edge to add. Should be all caps using snake case (eg RELATES_TO) + source_node_name : str + The name of the source node to add + target_node_name : str The name of the target node to add @@ -1015,9 +1019,6 @@ async def add_fact_triple( invalid_at : typing.Optional[str] The time (if any) at which the fact stops being true - source_node_name : typing.Optional[str] - The name of the source node to add - source_node_summary : typing.Optional[str] The summary of the source node to add @@ -1058,6 +1059,7 @@ async def main() -> None: await client.graph.add_fact_triple( fact="fact", fact_name="fact_name", + source_node_name="source_node_name", target_node_name="target_node_name", ) @@ -1067,13 +1069,13 @@ async def main() -> None: _response = await self._raw_client.add_fact_triple( fact=fact, fact_name=fact_name, + source_node_name=source_node_name, target_node_name=target_node_name, created_at=created_at, expired_at=expired_at, fact_uuid=fact_uuid, graph_id=graph_id, invalid_at=invalid_at, - source_node_name=source_node_name, source_node_summary=source_node_summary, source_node_uuid=source_node_uuid, target_node_summary=target_node_summary, diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index f34a0fd..96e4eea 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -403,13 +403,13 @@ def add_fact_triple( *, fact: str, fact_name: str, + source_node_name: str, target_node_name: str, created_at: typing.Optional[str] = OMIT, expired_at: typing.Optional[str] = OMIT, fact_uuid: typing.Optional[str] = OMIT, graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, - source_node_name: typing.Optional[str] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, target_node_summary: typing.Optional[str] = OMIT, @@ -429,6 +429,9 @@ def add_fact_triple( fact_name : str The name of the edge to add. Should be all caps using snake case (eg RELATES_TO) + source_node_name : str + The name of the source node to add + target_node_name : str The name of the target node to add @@ -446,9 +449,6 @@ def add_fact_triple( invalid_at : typing.Optional[str] The time (if any) at which the fact stops being true - source_node_name : typing.Optional[str] - The name of the source node to add - source_node_summary : typing.Optional[str] The summary of the source node to add @@ -1534,13 +1534,13 @@ async def add_fact_triple( *, fact: str, fact_name: str, + source_node_name: str, target_node_name: str, created_at: typing.Optional[str] = OMIT, expired_at: typing.Optional[str] = OMIT, fact_uuid: typing.Optional[str] = OMIT, graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, - source_node_name: typing.Optional[str] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, target_node_summary: typing.Optional[str] = OMIT, @@ -1560,6 +1560,9 @@ async def add_fact_triple( fact_name : str The name of the edge to add. Should be all caps using snake case (eg RELATES_TO) + source_node_name : str + The name of the source node to add + target_node_name : str The name of the target node to add @@ -1577,9 +1580,6 @@ async def add_fact_triple( invalid_at : typing.Optional[str] The time (if any) at which the fact stops being true - source_node_name : typing.Optional[str] - The name of the source node to add - source_node_summary : typing.Optional[str] The summary of the source node to add From a102f68b3c6d47a3045b62e206e7ba2d8528e323 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:03:48 +0000 Subject: [PATCH 66/74] SDK regeneration --- src/zep_cloud/__init__.py | 12 ++++++------ src/zep_cloud/task/client.py | 12 +++++------- src/zep_cloud/task/raw_client.py | 18 +++++++++--------- src/zep_cloud/types/__init__.py | 12 ++++++------ ...t_task_response.py => get_task_response.py} | 10 +++++----- ...rror_response.py => task_error_response.py} | 2 +- ...idata_task_progress.py => task_progress.py} | 2 +- 7 files changed, 33 insertions(+), 35 deletions(-) rename src/zep_cloud/types/{apidata_get_task_response.py => get_task_response.py} (72%) rename src/zep_cloud/types/{apidata_task_error_response.py => task_error_response.py} (92%) rename src/zep_cloud/types/{apidata_task_progress.py => task_progress.py} (92%) diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 850e624..8ea45ce 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -7,9 +7,6 @@ AddThreadMessagesResponse, AddTripleResponse, ApiError, - ApidataGetTaskResponse, - ApidataTaskErrorResponse, - ApidataTaskProgress, CloneGraphResponse, ComparisonOperator, ContextTemplateResponse, @@ -28,6 +25,7 @@ EpisodeResponse, FactRatingExamples, FactRatingInstruction, + GetTaskResponse, Graph, GraphDataType, GraphEdgesRequest, @@ -47,6 +45,8 @@ RoleType, SearchFilters, SuccessResponse, + TaskErrorResponse, + TaskProgress, Thread, ThreadContextResponse, ThreadListResponse, @@ -67,9 +67,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataGetTaskResponse", - "ApidataTaskErrorResponse", - "ApidataTaskProgress", "AsyncZep", "BadRequestError", "CloneGraphResponse", @@ -90,6 +87,7 @@ "EpisodeResponse", "FactRatingExamples", "FactRatingInstruction", + "GetTaskResponse", "Graph", "GraphDataType", "GraphEdgesRequest", @@ -111,6 +109,8 @@ "RoleType", "SearchFilters", "SuccessResponse", + "TaskErrorResponse", + "TaskProgress", "Thread", "ThreadContextResponse", "ThreadGetUserContextRequestMode", diff --git a/src/zep_cloud/task/client.py b/src/zep_cloud/task/client.py index 4e22ceb..bd54616 100644 --- a/src/zep_cloud/task/client.py +++ b/src/zep_cloud/task/client.py @@ -4,7 +4,7 @@ from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper from ..core.request_options import RequestOptions -from ..types.apidata_get_task_response import ApidataGetTaskResponse +from ..types.get_task_response import GetTaskResponse from .raw_client import AsyncRawTaskClient, RawTaskClient @@ -23,7 +23,7 @@ def with_raw_response(self) -> RawTaskClient: """ return self._raw_client - def get(self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> ApidataGetTaskResponse: + def get(self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetTaskResponse: """ Gets a task by its ID @@ -37,7 +37,7 @@ def get(self, task_id: str, *, request_options: typing.Optional[RequestOptions] Returns ------- - ApidataGetTaskResponse + GetTaskResponse Task Examples @@ -70,9 +70,7 @@ def with_raw_response(self) -> AsyncRawTaskClient: """ return self._raw_client - async def get( - self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> ApidataGetTaskResponse: + async def get(self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None) -> GetTaskResponse: """ Gets a task by its ID @@ -86,7 +84,7 @@ async def get( Returns ------- - ApidataGetTaskResponse + GetTaskResponse Task Examples diff --git a/src/zep_cloud/task/raw_client.py b/src/zep_cloud/task/raw_client.py index cd39c7e..1089a3e 100644 --- a/src/zep_cloud/task/raw_client.py +++ b/src/zep_cloud/task/raw_client.py @@ -12,7 +12,7 @@ from ..errors.internal_server_error import InternalServerError from ..errors.not_found_error import NotFoundError from ..types.api_error import ApiError as types_api_error_ApiError -from ..types.apidata_get_task_response import ApidataGetTaskResponse +from ..types.get_task_response import GetTaskResponse class RawTaskClient: @@ -21,7 +21,7 @@ def __init__(self, *, client_wrapper: SyncClientWrapper): def get( self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> HttpResponse[ApidataGetTaskResponse]: + ) -> HttpResponse[GetTaskResponse]: """ Gets a task by its ID @@ -35,7 +35,7 @@ def get( Returns ------- - HttpResponse[ApidataGetTaskResponse] + HttpResponse[GetTaskResponse] Task """ _response = self._client_wrapper.httpx_client.request( @@ -46,9 +46,9 @@ def get( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ApidataGetTaskResponse, + GetTaskResponse, parse_obj_as( - type_=ApidataGetTaskResponse, # type: ignore + type_=GetTaskResponse, # type: ignore object_=_response.json(), ), ) @@ -91,7 +91,7 @@ def __init__(self, *, client_wrapper: AsyncClientWrapper): async def get( self, task_id: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> AsyncHttpResponse[ApidataGetTaskResponse]: + ) -> AsyncHttpResponse[GetTaskResponse]: """ Gets a task by its ID @@ -105,7 +105,7 @@ async def get( Returns ------- - AsyncHttpResponse[ApidataGetTaskResponse] + AsyncHttpResponse[GetTaskResponse] Task """ _response = await self._client_wrapper.httpx_client.request( @@ -116,9 +116,9 @@ async def get( try: if 200 <= _response.status_code < 300: _data = typing.cast( - ApidataGetTaskResponse, + GetTaskResponse, parse_obj_as( - type_=ApidataGetTaskResponse, # type: ignore + type_=GetTaskResponse, # type: ignore object_=_response.json(), ), ) diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index ab2fe73..c6a4267 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -6,9 +6,6 @@ from .add_thread_messages_response import AddThreadMessagesResponse from .add_triple_response import AddTripleResponse from .api_error import ApiError -from .apidata_get_task_response import ApidataGetTaskResponse -from .apidata_task_error_response import ApidataTaskErrorResponse -from .apidata_task_progress import ApidataTaskProgress from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .context_template_response import ContextTemplateResponse @@ -27,6 +24,7 @@ from .episode_response import EpisodeResponse from .fact_rating_examples import FactRatingExamples from .fact_rating_instruction import FactRatingInstruction +from .get_task_response import GetTaskResponse from .graph import Graph from .graph_data_type import GraphDataType from .graph_edges_request import GraphEdgesRequest @@ -46,6 +44,8 @@ from .role_type import RoleType from .search_filters import SearchFilters from .success_response import SuccessResponse +from .task_error_response import TaskErrorResponse +from .task_progress import TaskProgress from .thread import Thread from .thread_context_response import ThreadContextResponse from .thread_list_response import ThreadListResponse @@ -59,9 +59,6 @@ "AddThreadMessagesResponse", "AddTripleResponse", "ApiError", - "ApidataGetTaskResponse", - "ApidataTaskErrorResponse", - "ApidataTaskProgress", "CloneGraphResponse", "ComparisonOperator", "ContextTemplateResponse", @@ -80,6 +77,7 @@ "EpisodeResponse", "FactRatingExamples", "FactRatingInstruction", + "GetTaskResponse", "Graph", "GraphDataType", "GraphEdgesRequest", @@ -99,6 +97,8 @@ "RoleType", "SearchFilters", "SuccessResponse", + "TaskErrorResponse", + "TaskProgress", "Thread", "ThreadContextResponse", "ThreadListResponse", diff --git a/src/zep_cloud/types/apidata_get_task_response.py b/src/zep_cloud/types/get_task_response.py similarity index 72% rename from src/zep_cloud/types/apidata_get_task_response.py rename to src/zep_cloud/types/get_task_response.py index 7b9c289..5e1c1ad 100644 --- a/src/zep_cloud/types/apidata_get_task_response.py +++ b/src/zep_cloud/types/get_task_response.py @@ -4,15 +4,15 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -from .apidata_task_error_response import ApidataTaskErrorResponse -from .apidata_task_progress import ApidataTaskProgress +from .task_error_response import TaskErrorResponse +from .task_progress import TaskProgress -class ApidataGetTaskResponse(UniversalBaseModel): +class GetTaskResponse(UniversalBaseModel): completed_at: typing.Optional[str] = None created_at: typing.Optional[str] = None - error: typing.Optional[ApidataTaskErrorResponse] = None - progress: typing.Optional[ApidataTaskProgress] = None + error: typing.Optional[TaskErrorResponse] = None + progress: typing.Optional[TaskProgress] = None started_at: typing.Optional[str] = None status: typing.Optional[str] = None task_id: typing.Optional[str] = None diff --git a/src/zep_cloud/types/apidata_task_error_response.py b/src/zep_cloud/types/task_error_response.py similarity index 92% rename from src/zep_cloud/types/apidata_task_error_response.py rename to src/zep_cloud/types/task_error_response.py index 688d9b5..d138f3f 100644 --- a/src/zep_cloud/types/apidata_task_error_response.py +++ b/src/zep_cloud/types/task_error_response.py @@ -6,7 +6,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -class ApidataTaskErrorResponse(UniversalBaseModel): +class TaskErrorResponse(UniversalBaseModel): code: typing.Optional[str] = None details: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None message: typing.Optional[str] = None diff --git a/src/zep_cloud/types/apidata_task_progress.py b/src/zep_cloud/types/task_progress.py similarity index 92% rename from src/zep_cloud/types/apidata_task_progress.py rename to src/zep_cloud/types/task_progress.py index 58283b3..1172079 100644 --- a/src/zep_cloud/types/apidata_task_progress.py +++ b/src/zep_cloud/types/task_progress.py @@ -6,7 +6,7 @@ from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel -class ApidataTaskProgress(UniversalBaseModel): +class TaskProgress(UniversalBaseModel): message: typing.Optional[str] = None stage: typing.Optional[str] = None From 94ea67ae0d4e42af05edfc43783b421ab1c6ae81 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Wed, 17 Dec 2025 16:48:19 -0500 Subject: [PATCH 67/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index bb4f085..48c4f60 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.13.0" +version = "3.14.0" description = "" readme = "README.md" authors = [] From cd6a511c6f7bc82a86b891da2b9b6502f3cbdddb Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Wed, 17 Dec 2025 21:54:34 +0000 Subject: [PATCH 68/74] SDK regeneration --- reference.md | 109 +++++++++++++++++++- src/zep_cloud/__init__.py | 2 + src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/graph/client.py | 36 +++++++ src/zep_cloud/graph/node/client.py | 71 ++++++++++++++ src/zep_cloud/graph/node/raw_client.py | 131 +++++++++++++++++++++++++ src/zep_cloud/graph/raw_client.py | 36 +++++++ src/zep_cloud/thread/client.py | 4 +- src/zep_cloud/thread/raw_client.py | 4 +- src/zep_cloud/types/__init__.py | 2 + src/zep_cloud/types/property_filter.py | 35 +++++++ src/zep_cloud/types/search_filters.py | 11 +++ src/zep_cloud/user/client.py | 8 +- src/zep_cloud/user/raw_client.py | 8 +- 14 files changed, 444 insertions(+), 17 deletions(-) create mode 100644 src/zep_cloud/types/property_filter.py diff --git a/reference.md b/reference.md index 00ffc2f..e7db0aa 100644 --- a/reference.md +++ b/reference.md @@ -825,6 +825,17 @@ client.graph.add_fact_triple(
+**edge_attributes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` + +Additional attributes of the edge. Values must be scalar types (string, number, boolean, or null). +Nested objects and arrays are not allowed. + +
+
+ +
+
+ **expired_at:** `typing.Optional[str]` — The time (if any) at which the edge expires
@@ -857,6 +868,17 @@ client.graph.add_fact_triple(
+**source_node_attributes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` + +Additional attributes of the source node. Values must be scalar types (string, number, boolean, or null). +Nested objects and arrays are not allowed. + +
+
+ +
+
+ **source_node_summary:** `typing.Optional[str]` — The summary of the source node to add
@@ -873,6 +895,17 @@ client.graph.add_fact_triple(
+**target_node_attributes:** `typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]]` + +Additional attributes of the target node. Values must be scalar types (string, number, boolean, or null). +Nested objects and arrays are not allowed. + +
+
+ +
+
+ **target_node_summary:** `typing.Optional[str]` — The summary of the target node to add
@@ -2014,7 +2047,7 @@ client.thread.get_user_context(
-**min_rating:** `typing.Optional[float]` — The minimum rating by which to filter relevant facts. +**min_rating:** `typing.Optional[float]` — Deprecated, this field will be removed in a future release. The minimum rating by which to filter relevant facts.
@@ -2659,7 +2692,7 @@ client.user.add(
-**fact_rating_instruction:** `typing.Optional[FactRatingInstruction]` — Optional instruction to use for fact rating. +**fact_rating_instruction:** `typing.Optional[FactRatingInstruction]` — Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating.
@@ -2996,7 +3029,7 @@ client.user.update(
-**fact_rating_instruction:** `typing.Optional[FactRatingInstruction]` — Optional instruction to use for fact rating. +**fact_rating_instruction:** `typing.Optional[FactRatingInstruction]` — Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating.
@@ -4311,6 +4344,76 @@ client.graph.node.get(
+ +
+
+ +
client.graph.node.delete(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Deletes a node by UUID. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.node.delete( + uuid_="uuid", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**uuid_:** `str` — Node UUID + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ +
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 8ea45ce..9cad36c 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -41,6 +41,7 @@ ModelsFactRatingInstruction, ProjectInfo, ProjectInfoResponse, + PropertyFilter, Reranker, RoleType, SearchFilters, @@ -105,6 +106,7 @@ "NotFoundError", "ProjectInfo", "ProjectInfoResponse", + "PropertyFilter", "Reranker", "RoleType", "SearchFilters", diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index db6fce9..81b1aeb 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.13.0", + "User-Agent": "zep-cloud/3.14.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.13.0", + "X-Fern-SDK-Version": "3.14.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index 429e96b..f25757a 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -259,12 +259,15 @@ def add_fact_triple( source_node_name: str, target_node_name: str, created_at: typing.Optional[str] = OMIT, + edge_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, expired_at: typing.Optional[str] = OMIT, fact_uuid: typing.Optional[str] = OMIT, graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, + source_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, + target_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, target_node_summary: typing.Optional[str] = OMIT, target_node_uuid: typing.Optional[str] = OMIT, user_id: typing.Optional[str] = OMIT, @@ -291,6 +294,10 @@ def add_fact_triple( created_at : typing.Optional[str] The timestamp of the message + edge_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the edge. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + expired_at : typing.Optional[str] The time (if any) at which the edge expires @@ -302,12 +309,20 @@ def add_fact_triple( invalid_at : typing.Optional[str] The time (if any) at which the fact stops being true + source_node_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the source node. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + source_node_summary : typing.Optional[str] The summary of the source node to add source_node_uuid : typing.Optional[str] The source node uuid + target_node_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the target node. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + target_node_summary : typing.Optional[str] The summary of the target node to add @@ -347,12 +362,15 @@ def add_fact_triple( source_node_name=source_node_name, target_node_name=target_node_name, created_at=created_at, + edge_attributes=edge_attributes, expired_at=expired_at, fact_uuid=fact_uuid, graph_id=graph_id, invalid_at=invalid_at, + source_node_attributes=source_node_attributes, source_node_summary=source_node_summary, source_node_uuid=source_node_uuid, + target_node_attributes=target_node_attributes, target_node_summary=target_node_summary, target_node_uuid=target_node_uuid, user_id=user_id, @@ -976,12 +994,15 @@ async def add_fact_triple( source_node_name: str, target_node_name: str, created_at: typing.Optional[str] = OMIT, + edge_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, expired_at: typing.Optional[str] = OMIT, fact_uuid: typing.Optional[str] = OMIT, graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, + source_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, + target_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, target_node_summary: typing.Optional[str] = OMIT, target_node_uuid: typing.Optional[str] = OMIT, user_id: typing.Optional[str] = OMIT, @@ -1008,6 +1029,10 @@ async def add_fact_triple( created_at : typing.Optional[str] The timestamp of the message + edge_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the edge. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + expired_at : typing.Optional[str] The time (if any) at which the edge expires @@ -1019,12 +1044,20 @@ async def add_fact_triple( invalid_at : typing.Optional[str] The time (if any) at which the fact stops being true + source_node_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the source node. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + source_node_summary : typing.Optional[str] The summary of the source node to add source_node_uuid : typing.Optional[str] The source node uuid + target_node_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the target node. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + target_node_summary : typing.Optional[str] The summary of the target node to add @@ -1072,12 +1105,15 @@ async def main() -> None: source_node_name=source_node_name, target_node_name=target_node_name, created_at=created_at, + edge_attributes=edge_attributes, expired_at=expired_at, fact_uuid=fact_uuid, graph_id=graph_id, invalid_at=invalid_at, + source_node_attributes=source_node_attributes, source_node_summary=source_node_summary, source_node_uuid=source_node_uuid, + target_node_attributes=target_node_attributes, target_node_summary=target_node_summary, target_node_uuid=target_node_uuid, user_id=user_id, diff --git a/src/zep_cloud/graph/node/client.py b/src/zep_cloud/graph/node/client.py index 20b476f..f49aee2 100644 --- a/src/zep_cloud/graph/node/client.py +++ b/src/zep_cloud/graph/node/client.py @@ -7,6 +7,7 @@ from ...types.entity_edge import EntityEdge from ...types.entity_node import EntityNode from ...types.episode_response import EpisodeResponse +from ...types.success_response import SuccessResponse from .raw_client import AsyncRawNodeClient, RawNodeClient # this is used as the default value for optional parameters @@ -217,6 +218,37 @@ def get(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = _response = self._raw_client.get(uuid_, request_options=request_options) return _response.data + def delete(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse: + """ + Deletes a node by UUID. + + Parameters + ---------- + uuid_ : str + Node UUID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Node deleted + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.node.delete( + uuid_="uuid", + ) + """ + _response = self._raw_client.delete(uuid_, request_options=request_options) + return _response.data + class AsyncNodeClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -461,3 +493,42 @@ async def main() -> None: """ _response = await self._raw_client.get(uuid_, request_options=request_options) return _response.data + + async def delete(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None) -> SuccessResponse: + """ + Deletes a node by UUID. + + Parameters + ---------- + uuid_ : str + Node UUID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Node deleted + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.node.delete( + uuid_="uuid", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.delete(uuid_, request_options=request_options) + return _response.data diff --git a/src/zep_cloud/graph/node/raw_client.py b/src/zep_cloud/graph/node/raw_client.py index da6abb7..7123549 100644 --- a/src/zep_cloud/graph/node/raw_client.py +++ b/src/zep_cloud/graph/node/raw_client.py @@ -16,6 +16,7 @@ from ...types.entity_edge import EntityEdge from ...types.entity_node import EntityNode from ...types.episode_response import EpisodeResponse +from ...types.success_response import SuccessResponse # this is used as the default value for optional parameters OMIT = typing.cast(typing.Any, ...) @@ -397,6 +398,71 @@ def get(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + def delete( + self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> HttpResponse[SuccessResponse]: + """ + Deletes a node by UUID. + + Parameters + ---------- + uuid_ : str + Node UUID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Node deleted + """ + _response = self._client_wrapper.httpx_client.request( + f"graph/node/{jsonable_encoder(uuid_)}", + method="DELETE", + 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 == 400: + raise BadRequestError( + 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 AsyncRawNodeClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): @@ -775,3 +841,68 @@ async def get( raise core_api_error_ApiError( status_code=_response.status_code, headers=dict(_response.headers), body=_response_json ) + + async def delete( + self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Deletes a node by UUID. + + Parameters + ---------- + uuid_ : str + Node UUID + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Node deleted + """ + _response = await self._client_wrapper.httpx_client.request( + f"graph/node/{jsonable_encoder(uuid_)}", + method="DELETE", + 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 == 400: + raise BadRequestError( + 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 + ) diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index 96e4eea..40a5825 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -406,12 +406,15 @@ def add_fact_triple( source_node_name: str, target_node_name: str, created_at: typing.Optional[str] = OMIT, + edge_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, expired_at: typing.Optional[str] = OMIT, fact_uuid: typing.Optional[str] = OMIT, graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, + source_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, + target_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, target_node_summary: typing.Optional[str] = OMIT, target_node_uuid: typing.Optional[str] = OMIT, user_id: typing.Optional[str] = OMIT, @@ -438,6 +441,10 @@ def add_fact_triple( created_at : typing.Optional[str] The timestamp of the message + edge_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the edge. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + expired_at : typing.Optional[str] The time (if any) at which the edge expires @@ -449,12 +456,20 @@ def add_fact_triple( invalid_at : typing.Optional[str] The time (if any) at which the fact stops being true + source_node_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the source node. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + source_node_summary : typing.Optional[str] The summary of the source node to add source_node_uuid : typing.Optional[str] The source node uuid + target_node_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the target node. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + target_node_summary : typing.Optional[str] The summary of the target node to add @@ -479,15 +494,18 @@ def add_fact_triple( method="POST", json={ "created_at": created_at, + "edge_attributes": edge_attributes, "expired_at": expired_at, "fact": fact, "fact_name": fact_name, "fact_uuid": fact_uuid, "graph_id": graph_id, "invalid_at": invalid_at, + "source_node_attributes": source_node_attributes, "source_node_name": source_node_name, "source_node_summary": source_node_summary, "source_node_uuid": source_node_uuid, + "target_node_attributes": target_node_attributes, "target_node_name": target_node_name, "target_node_summary": target_node_summary, "target_node_uuid": target_node_uuid, @@ -1537,12 +1555,15 @@ async def add_fact_triple( source_node_name: str, target_node_name: str, created_at: typing.Optional[str] = OMIT, + edge_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, expired_at: typing.Optional[str] = OMIT, fact_uuid: typing.Optional[str] = OMIT, graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, + source_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, + target_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, target_node_summary: typing.Optional[str] = OMIT, target_node_uuid: typing.Optional[str] = OMIT, user_id: typing.Optional[str] = OMIT, @@ -1569,6 +1590,10 @@ async def add_fact_triple( created_at : typing.Optional[str] The timestamp of the message + edge_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the edge. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + expired_at : typing.Optional[str] The time (if any) at which the edge expires @@ -1580,12 +1605,20 @@ async def add_fact_triple( invalid_at : typing.Optional[str] The time (if any) at which the fact stops being true + source_node_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the source node. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + source_node_summary : typing.Optional[str] The summary of the source node to add source_node_uuid : typing.Optional[str] The source node uuid + target_node_attributes : typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] + Additional attributes of the target node. Values must be scalar types (string, number, boolean, or null). + Nested objects and arrays are not allowed. + target_node_summary : typing.Optional[str] The summary of the target node to add @@ -1610,15 +1643,18 @@ async def add_fact_triple( method="POST", json={ "created_at": created_at, + "edge_attributes": edge_attributes, "expired_at": expired_at, "fact": fact, "fact_name": fact_name, "fact_uuid": fact_uuid, "graph_id": graph_id, "invalid_at": invalid_at, + "source_node_attributes": source_node_attributes, "source_node_name": source_node_name, "source_node_summary": source_node_summary, "source_node_uuid": source_node_uuid, + "target_node_attributes": target_node_attributes, "target_node_name": target_node_name, "target_node_summary": target_node_summary, "target_node_uuid": target_node_uuid, diff --git a/src/zep_cloud/thread/client.py b/src/zep_cloud/thread/client.py index 5f613b2..3804173 100644 --- a/src/zep_cloud/thread/client.py +++ b/src/zep_cloud/thread/client.py @@ -175,7 +175,7 @@ def get_user_context( The ID of the current thread (for which context is being retrieved). min_rating : typing.Optional[float] - The minimum rating by which to filter relevant facts. + Deprecated, this field will be removed in a future release. The minimum rating by which to filter relevant facts. template_id : typing.Optional[str] Optional template ID to use for custom context rendering. @@ -569,7 +569,7 @@ async def get_user_context( The ID of the current thread (for which context is being retrieved). min_rating : typing.Optional[float] - The minimum rating by which to filter relevant facts. + Deprecated, this field will be removed in a future release. The minimum rating by which to filter relevant facts. template_id : typing.Optional[str] Optional template ID to use for custom context rendering. diff --git a/src/zep_cloud/thread/raw_client.py b/src/zep_cloud/thread/raw_client.py index a4226ed..2512090 100644 --- a/src/zep_cloud/thread/raw_client.py +++ b/src/zep_cloud/thread/raw_client.py @@ -277,7 +277,7 @@ def get_user_context( The ID of the current thread (for which context is being retrieved). min_rating : typing.Optional[float] - The minimum rating by which to filter relevant facts. + Deprecated, this field will be removed in a future release. The minimum rating by which to filter relevant facts. template_id : typing.Optional[str] Optional template ID to use for custom context rendering. @@ -843,7 +843,7 @@ async def get_user_context( The ID of the current thread (for which context is being retrieved). min_rating : typing.Optional[float] - The minimum rating by which to filter relevant facts. + Deprecated, this field will be removed in a future release. The minimum rating by which to filter relevant facts. template_id : typing.Optional[str] Optional template ID to use for custom context rendering. diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index c6a4267..39ec436 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -40,6 +40,7 @@ from .models_fact_rating_instruction import ModelsFactRatingInstruction from .project_info import ProjectInfo from .project_info_response import ProjectInfoResponse +from .property_filter import PropertyFilter from .reranker import Reranker from .role_type import RoleType from .search_filters import SearchFilters @@ -93,6 +94,7 @@ "ModelsFactRatingInstruction", "ProjectInfo", "ProjectInfoResponse", + "PropertyFilter", "Reranker", "RoleType", "SearchFilters", diff --git a/src/zep_cloud/types/property_filter.py b/src/zep_cloud/types/property_filter.py new file mode 100644 index 0000000..85bbc52 --- /dev/null +++ b/src/zep_cloud/types/property_filter.py @@ -0,0 +1,35 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .comparison_operator import ComparisonOperator + + +class PropertyFilter(UniversalBaseModel): + comparison_operator: ComparisonOperator = pydantic.Field() + """ + Comparison operator for property filter + """ + + property_name: str = pydantic.Field() + """ + Property name to filter on + """ + + property_value: typing.Optional[typing.Optional[typing.Any]] = pydantic.Field(default=None) + """ + Property value to match on. Accepted types: string, int, float64, bool, or nil. + Invalid types (e.g., arrays, objects) will be rejected by validation. + Must be non-nil for non-null operators (=, <>, >, <, >=, <=). + """ + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/search_filters.py b/src/zep_cloud/types/search_filters.py index 51caa1a..a2ee892 100644 --- a/src/zep_cloud/types/search_filters.py +++ b/src/zep_cloud/types/search_filters.py @@ -5,6 +5,7 @@ import pydantic from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel from .date_filter import DateFilter +from .property_filter import PropertyFilter class SearchFilters(UniversalBaseModel): @@ -22,6 +23,11 @@ class SearchFilters(UniversalBaseModel): List of edge types to filter on """ + edge_uuids: typing.Optional[typing.List[str]] = pydantic.Field(default=None) + """ + List of edge UUIDs to filter on + """ + exclude_edge_types: typing.Optional[typing.List[str]] = pydantic.Field(default=None) """ List of edge types to exclude from results @@ -55,6 +61,11 @@ class SearchFilters(UniversalBaseModel): List of node labels to filter on """ + property_filters: typing.Optional[typing.List[PropertyFilter]] = pydantic.Field(default=None) + """ + List of property filters to apply to nodes and edges + """ + valid_at: typing.Optional[typing.List[typing.List[DateFilter]]] = pydantic.Field(default=None) """ 2D array of date filters for the valid_at field. diff --git a/src/zep_cloud/user/client.py b/src/zep_cloud/user/client.py index b603f7d..ac2be95 100644 --- a/src/zep_cloud/user/client.py +++ b/src/zep_cloud/user/client.py @@ -180,7 +180,7 @@ def add( The email address of the user. fact_rating_instruction : typing.Optional[FactRatingInstruction] - Optional instruction to use for fact rating. + Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating. first_name : typing.Optional[str] The first name of the user. @@ -354,7 +354,7 @@ def update( The email address of the user. fact_rating_instruction : typing.Optional[FactRatingInstruction] - Optional instruction to use for fact rating. + Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating. first_name : typing.Optional[str] The first name of the user. @@ -680,7 +680,7 @@ async def add( The email address of the user. fact_rating_instruction : typing.Optional[FactRatingInstruction] - Optional instruction to use for fact rating. + Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating. first_name : typing.Optional[str] The first name of the user. @@ -886,7 +886,7 @@ async def update( The email address of the user. fact_rating_instruction : typing.Optional[FactRatingInstruction] - Optional instruction to use for fact rating. + Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating. first_name : typing.Optional[str] The first name of the user. diff --git a/src/zep_cloud/user/raw_client.py b/src/zep_cloud/user/raw_client.py index e0fe216..417fd40 100644 --- a/src/zep_cloud/user/raw_client.py +++ b/src/zep_cloud/user/raw_client.py @@ -288,7 +288,7 @@ def add( The email address of the user. fact_rating_instruction : typing.Optional[FactRatingInstruction] - Optional instruction to use for fact rating. + Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating. first_name : typing.Optional[str] The first name of the user. @@ -599,7 +599,7 @@ def update( The email address of the user. fact_rating_instruction : typing.Optional[FactRatingInstruction] - Optional instruction to use for fact rating. + Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating. first_name : typing.Optional[str] The first name of the user. @@ -1135,7 +1135,7 @@ async def add( The email address of the user. fact_rating_instruction : typing.Optional[FactRatingInstruction] - Optional instruction to use for fact rating. + Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating. first_name : typing.Optional[str] The first name of the user. @@ -1448,7 +1448,7 @@ async def update( The email address of the user. fact_rating_instruction : typing.Optional[FactRatingInstruction] - Optional instruction to use for fact rating. + Deprecated: this field will be removed in a future release. Optional instruction to use for fact rating. first_name : typing.Optional[str] The first name of the user. From 22d12164143140a1a3cdc23ce572e068ef09cbba Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Wed, 7 Jan 2026 00:34:13 +0000 Subject: [PATCH 69/74] SDK regeneration --- src/zep_cloud/types/date_filter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zep_cloud/types/date_filter.py b/src/zep_cloud/types/date_filter.py index 9dc8e8d..bdb0f20 100644 --- a/src/zep_cloud/types/date_filter.py +++ b/src/zep_cloud/types/date_filter.py @@ -13,7 +13,7 @@ class DateFilter(UniversalBaseModel): Comparison operator for date filter """ - date: str = pydantic.Field() + date: typing.Optional[str] = pydantic.Field(default=None) """ Date to filter on """ From 44fe311578f154b022ac4ef0cbc6ceb11c644828 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Wed, 7 Jan 2026 01:16:14 +0000 Subject: [PATCH 70/74] SDK regeneration --- reference.md | 34 +++++++++++------------ src/zep_cloud/graph/client.py | 44 ++++++++++++++---------------- src/zep_cloud/graph/raw_client.py | 32 +++++++++++----------- src/zep_cloud/types/date_filter.py | 3 +- 4 files changed, 54 insertions(+), 59 deletions(-) diff --git a/reference.md b/reference.md index e7db0aa..566d51b 100644 --- a/reference.md +++ b/reference.md @@ -767,8 +767,6 @@ client = Zep( client.graph.add_fact_triple( fact="fact", fact_name="fact_name", - source_node_name="source_node_name", - target_node_name="target_node_name", ) ``` @@ -801,22 +799,6 @@ client.graph.add_fact_triple(
-**source_node_name:** `str` — The name of the source node to add - -
-
- -
-
- -**target_node_name:** `str` — The name of the target node to add - -
-
- -
-
- **created_at:** `typing.Optional[str]` — The timestamp of the message
@@ -879,6 +861,14 @@ Nested objects and arrays are not allowed.
+**source_node_name:** `typing.Optional[str]` — The name of the source node to add + +
+
+ +
+
+ **source_node_summary:** `typing.Optional[str]` — The summary of the source node to add
@@ -906,6 +896,14 @@ Nested objects and arrays are not allowed.
+**target_node_name:** `typing.Optional[str]` — The name of the target node to add + +
+
+ +
+
+ **target_node_summary:** `typing.Optional[str]` — The summary of the target node to add
diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index f25757a..f386a6b 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -256,8 +256,6 @@ def add_fact_triple( *, fact: str, fact_name: str, - source_node_name: str, - target_node_name: str, created_at: typing.Optional[str] = OMIT, edge_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, expired_at: typing.Optional[str] = OMIT, @@ -265,9 +263,11 @@ def add_fact_triple( graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, source_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + source_node_name: typing.Optional[str] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, target_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + target_node_name: typing.Optional[str] = OMIT, target_node_summary: typing.Optional[str] = OMIT, target_node_uuid: typing.Optional[str] = OMIT, user_id: typing.Optional[str] = OMIT, @@ -285,12 +285,6 @@ def add_fact_triple( fact_name : str The name of the edge to add. Should be all caps using snake case (eg RELATES_TO) - source_node_name : str - The name of the source node to add - - target_node_name : str - The name of the target node to add - created_at : typing.Optional[str] The timestamp of the message @@ -313,6 +307,9 @@ def add_fact_triple( Additional attributes of the source node. Values must be scalar types (string, number, boolean, or null). Nested objects and arrays are not allowed. + source_node_name : typing.Optional[str] + The name of the source node to add + source_node_summary : typing.Optional[str] The summary of the source node to add @@ -323,6 +320,9 @@ def add_fact_triple( Additional attributes of the target node. Values must be scalar types (string, number, boolean, or null). Nested objects and arrays are not allowed. + target_node_name : typing.Optional[str] + The name of the target node to add + target_node_summary : typing.Optional[str] The summary of the target node to add @@ -352,15 +352,11 @@ def add_fact_triple( client.graph.add_fact_triple( fact="fact", fact_name="fact_name", - source_node_name="source_node_name", - target_node_name="target_node_name", ) """ _response = self._raw_client.add_fact_triple( fact=fact, fact_name=fact_name, - source_node_name=source_node_name, - target_node_name=target_node_name, created_at=created_at, edge_attributes=edge_attributes, expired_at=expired_at, @@ -368,9 +364,11 @@ def add_fact_triple( graph_id=graph_id, invalid_at=invalid_at, source_node_attributes=source_node_attributes, + source_node_name=source_node_name, source_node_summary=source_node_summary, source_node_uuid=source_node_uuid, target_node_attributes=target_node_attributes, + target_node_name=target_node_name, target_node_summary=target_node_summary, target_node_uuid=target_node_uuid, user_id=user_id, @@ -991,8 +989,6 @@ async def add_fact_triple( *, fact: str, fact_name: str, - source_node_name: str, - target_node_name: str, created_at: typing.Optional[str] = OMIT, edge_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, expired_at: typing.Optional[str] = OMIT, @@ -1000,9 +996,11 @@ async def add_fact_triple( graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, source_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + source_node_name: typing.Optional[str] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, target_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + target_node_name: typing.Optional[str] = OMIT, target_node_summary: typing.Optional[str] = OMIT, target_node_uuid: typing.Optional[str] = OMIT, user_id: typing.Optional[str] = OMIT, @@ -1020,12 +1018,6 @@ async def add_fact_triple( fact_name : str The name of the edge to add. Should be all caps using snake case (eg RELATES_TO) - source_node_name : str - The name of the source node to add - - target_node_name : str - The name of the target node to add - created_at : typing.Optional[str] The timestamp of the message @@ -1048,6 +1040,9 @@ async def add_fact_triple( Additional attributes of the source node. Values must be scalar types (string, number, boolean, or null). Nested objects and arrays are not allowed. + source_node_name : typing.Optional[str] + The name of the source node to add + source_node_summary : typing.Optional[str] The summary of the source node to add @@ -1058,6 +1053,9 @@ async def add_fact_triple( Additional attributes of the target node. Values must be scalar types (string, number, boolean, or null). Nested objects and arrays are not allowed. + target_node_name : typing.Optional[str] + The name of the target node to add + target_node_summary : typing.Optional[str] The summary of the target node to add @@ -1092,8 +1090,6 @@ async def main() -> None: await client.graph.add_fact_triple( fact="fact", fact_name="fact_name", - source_node_name="source_node_name", - target_node_name="target_node_name", ) @@ -1102,8 +1098,6 @@ async def main() -> None: _response = await self._raw_client.add_fact_triple( fact=fact, fact_name=fact_name, - source_node_name=source_node_name, - target_node_name=target_node_name, created_at=created_at, edge_attributes=edge_attributes, expired_at=expired_at, @@ -1111,9 +1105,11 @@ async def main() -> None: graph_id=graph_id, invalid_at=invalid_at, source_node_attributes=source_node_attributes, + source_node_name=source_node_name, source_node_summary=source_node_summary, source_node_uuid=source_node_uuid, target_node_attributes=target_node_attributes, + target_node_name=target_node_name, target_node_summary=target_node_summary, target_node_uuid=target_node_uuid, user_id=user_id, diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index 40a5825..73291f2 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -403,8 +403,6 @@ def add_fact_triple( *, fact: str, fact_name: str, - source_node_name: str, - target_node_name: str, created_at: typing.Optional[str] = OMIT, edge_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, expired_at: typing.Optional[str] = OMIT, @@ -412,9 +410,11 @@ def add_fact_triple( graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, source_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + source_node_name: typing.Optional[str] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, target_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + target_node_name: typing.Optional[str] = OMIT, target_node_summary: typing.Optional[str] = OMIT, target_node_uuid: typing.Optional[str] = OMIT, user_id: typing.Optional[str] = OMIT, @@ -432,12 +432,6 @@ def add_fact_triple( fact_name : str The name of the edge to add. Should be all caps using snake case (eg RELATES_TO) - source_node_name : str - The name of the source node to add - - target_node_name : str - The name of the target node to add - created_at : typing.Optional[str] The timestamp of the message @@ -460,6 +454,9 @@ def add_fact_triple( Additional attributes of the source node. Values must be scalar types (string, number, boolean, or null). Nested objects and arrays are not allowed. + source_node_name : typing.Optional[str] + The name of the source node to add + source_node_summary : typing.Optional[str] The summary of the source node to add @@ -470,6 +467,9 @@ def add_fact_triple( Additional attributes of the target node. Values must be scalar types (string, number, boolean, or null). Nested objects and arrays are not allowed. + target_node_name : typing.Optional[str] + The name of the target node to add + target_node_summary : typing.Optional[str] The summary of the target node to add @@ -1552,8 +1552,6 @@ async def add_fact_triple( *, fact: str, fact_name: str, - source_node_name: str, - target_node_name: str, created_at: typing.Optional[str] = OMIT, edge_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, expired_at: typing.Optional[str] = OMIT, @@ -1561,9 +1559,11 @@ async def add_fact_triple( graph_id: typing.Optional[str] = OMIT, invalid_at: typing.Optional[str] = OMIT, source_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + source_node_name: typing.Optional[str] = OMIT, source_node_summary: typing.Optional[str] = OMIT, source_node_uuid: typing.Optional[str] = OMIT, target_node_attributes: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = OMIT, + target_node_name: typing.Optional[str] = OMIT, target_node_summary: typing.Optional[str] = OMIT, target_node_uuid: typing.Optional[str] = OMIT, user_id: typing.Optional[str] = OMIT, @@ -1581,12 +1581,6 @@ async def add_fact_triple( fact_name : str The name of the edge to add. Should be all caps using snake case (eg RELATES_TO) - source_node_name : str - The name of the source node to add - - target_node_name : str - The name of the target node to add - created_at : typing.Optional[str] The timestamp of the message @@ -1609,6 +1603,9 @@ async def add_fact_triple( Additional attributes of the source node. Values must be scalar types (string, number, boolean, or null). Nested objects and arrays are not allowed. + source_node_name : typing.Optional[str] + The name of the source node to add + source_node_summary : typing.Optional[str] The summary of the source node to add @@ -1619,6 +1616,9 @@ async def add_fact_triple( Additional attributes of the target node. Values must be scalar types (string, number, boolean, or null). Nested objects and arrays are not allowed. + target_node_name : typing.Optional[str] + The name of the target node to add + target_node_summary : typing.Optional[str] The summary of the target node to add diff --git a/src/zep_cloud/types/date_filter.py b/src/zep_cloud/types/date_filter.py index bdb0f20..e1619ed 100644 --- a/src/zep_cloud/types/date_filter.py +++ b/src/zep_cloud/types/date_filter.py @@ -15,7 +15,8 @@ class DateFilter(UniversalBaseModel): date: typing.Optional[str] = pydantic.Field(default=None) """ - Date to filter on + Date to filter on. Required for non-null operators (=, <>, >, <, >=, <=). + Should be omitted for IS NULL and IS NOT NULL operators. """ if IS_PYDANTIC_V2: From 6c08ec4818f06bc43cc12108d3df02335aba103b Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Fri, 9 Jan 2026 12:16:24 -0500 Subject: [PATCH 71/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 48c4f60..1e9a7f1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.14.0" +version = "3.15.0" description = "" readme = "README.md" authors = [] From 0da9323b31b9957dd2604bb8759f3ee2608c37ca Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Fri, 9 Jan 2026 17:23:37 +0000 Subject: [PATCH 72/74] SDK regeneration --- reference.md | 254 +++++++++ src/zep_cloud/__init__.py | 4 + src/zep_cloud/core/client_wrapper.py | 4 +- src/zep_cloud/graph/client.py | 302 +++++++++++ src/zep_cloud/graph/raw_client.py | 498 ++++++++++++++++++ src/zep_cloud/types/__init__.py | 4 + src/zep_cloud/types/custom_instruction.py | 20 + .../list_custom_instructions_response.py | 20 + 8 files changed, 1104 insertions(+), 2 deletions(-) create mode 100644 src/zep_cloud/types/custom_instruction.py create mode 100644 src/zep_cloud/types/list_custom_instructions_response.py diff --git a/reference.md b/reference.md index 566d51b..3fcbf5d 100644 --- a/reference.md +++ b/reference.md @@ -359,6 +359,260 @@ client.context.delete_context_template(
## Graph +
client.graph.list_custom_instructions(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Lists all custom instructions for a project, user, or graph. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.list_custom_instructions( + user_id="user_id", + graph_id="graph_id", +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**user_id:** `typing.Optional[str]` — User ID to get user-specific instructions + +
+
+ +
+
+ +**graph_id:** `typing.Optional[str]` — Graph ID to get graph-specific instructions + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.graph.add_custom_instructions(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Adds new custom instructions for graphs without removing existing ones. If user_ids or graph_ids is empty, adds to project-wide default instructions. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import CustomInstruction, Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.add_custom_instructions( + instructions=[ + CustomInstruction( + name="name", + text="text", + ) + ], +) + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**instructions:** `typing.Sequence[CustomInstruction]` — Instructions to add to the graph. + +
+
+ +
+
+ +**graph_ids:** `typing.Optional[typing.Sequence[str]]` — Graph IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + +
+
+ +
+
+ +**user_ids:** `typing.Optional[typing.Sequence[str]]` — User IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+ +
client.graph.delete_custom_instructions(...) +
+
+ +#### 📝 Description + +
+
+ +
+
+ +Deletes custom instructions for graphs or project wide defaults. +
+
+
+
+ +#### 🔌 Usage + +
+
+ +
+
+ +```python +from zep_cloud import Zep + +client = Zep( + api_key="YOUR_API_KEY", +) +client.graph.delete_custom_instructions() + +``` +
+
+
+
+ +#### ⚙️ Parameters + +
+
+ +
+
+ +**graph_ids:** `typing.Optional[typing.Sequence[str]]` — Determines which group graphs will have their custom instructions deleted. If no graphs are provided, the project-wide custom instructions will be affected. + +
+
+ +
+
+ +**instruction_names:** `typing.Optional[typing.Sequence[str]]` — Unique identifier for the instructions to be deleted. If empty deletes all instructions. + +
+
+ +
+
+ +**user_ids:** `typing.Optional[typing.Sequence[str]]` — Determines which user graphs will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be affected. + +
+
+ +
+
+ +**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration. + +
+
+
+
+ + +
+
+
+
client.graph.list_entity_types(...)
diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 9cad36c..ae9a38f 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -10,6 +10,7 @@ CloneGraphResponse, ComparisonOperator, ContextTemplateResponse, + CustomInstruction, DateFilter, EdgeType, EntityEdge, @@ -34,6 +35,7 @@ GraphSearchResults, GraphSearchScope, ListContextTemplatesResponse, + ListCustomInstructionsResponse, ListUserInstructionsResponse, Message, MessageListResponse, @@ -73,6 +75,7 @@ "CloneGraphResponse", "ComparisonOperator", "ContextTemplateResponse", + "CustomInstruction", "DateFilter", "EdgeType", "EntityEdge", @@ -98,6 +101,7 @@ "GraphSearchScope", "InternalServerError", "ListContextTemplatesResponse", + "ListCustomInstructionsResponse", "ListUserInstructionsResponse", "Message", "MessageListResponse", diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 81b1aeb..bc2827a 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.14.0", + "User-Agent": "zep-cloud/3.15.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.14.0", + "X-Fern-SDK-Version": "3.15.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/graph/client.py b/src/zep_cloud/graph/client.py index f386a6b..2e52096 100644 --- a/src/zep_cloud/graph/client.py +++ b/src/zep_cloud/graph/client.py @@ -6,6 +6,7 @@ from ..core.request_options import RequestOptions from ..types.add_triple_response import AddTripleResponse from ..types.clone_graph_response import CloneGraphResponse +from ..types.custom_instruction import CustomInstruction from ..types.edge_type import EdgeType from ..types.entity_type import EntityType from ..types.entity_type_response import EntityTypeResponse @@ -17,6 +18,7 @@ from ..types.graph_list_response import GraphListResponse from ..types.graph_search_results import GraphSearchResults from ..types.graph_search_scope import GraphSearchScope +from ..types.list_custom_instructions_response import ListCustomInstructionsResponse from ..types.reranker import Reranker from ..types.search_filters import SearchFilters from ..types.success_response import SuccessResponse @@ -49,6 +51,144 @@ def with_raw_response(self) -> RawGraphClient: """ return self._raw_client + def list_custom_instructions( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCustomInstructionsResponse: + """ + Lists all custom instructions for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific instructions + + graph_id : typing.Optional[str] + Graph ID to get graph-specific instructions + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCustomInstructionsResponse + The list of instructions. + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.list_custom_instructions( + user_id="user_id", + graph_id="graph_id", + ) + """ + _response = self._raw_client.list_custom_instructions( + user_id=user_id, graph_id=graph_id, request_options=request_options + ) + return _response.data + + def add_custom_instructions( + self, + *, + instructions: typing.Sequence[CustomInstruction], + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Adds new custom instructions for graphs without removing existing ones. If user_ids or graph_ids is empty, adds to project-wide default instructions. + + Parameters + ---------- + instructions : typing.Sequence[CustomInstruction] + Instructions to add to the graph. + + graph_ids : typing.Optional[typing.Sequence[str]] + Graph IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + + user_ids : typing.Optional[typing.Sequence[str]] + User IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Instructions added successfully + + Examples + -------- + from zep_cloud import CustomInstruction, Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.add_custom_instructions( + instructions=[ + CustomInstruction( + name="name", + text="text", + ) + ], + ) + """ + _response = self._raw_client.add_custom_instructions( + instructions=instructions, graph_ids=graph_ids, user_ids=user_ids, request_options=request_options + ) + return _response.data + + def delete_custom_instructions( + self, + *, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + instruction_names: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Deletes custom instructions for graphs or project wide defaults. + + Parameters + ---------- + graph_ids : typing.Optional[typing.Sequence[str]] + Determines which group graphs will have their custom instructions deleted. If no graphs are provided, the project-wide custom instructions will be affected. + + instruction_names : typing.Optional[typing.Sequence[str]] + Unique identifier for the instructions to be deleted. If empty deletes all instructions. + + user_ids : typing.Optional[typing.Sequence[str]] + Determines which user graphs will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be affected. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Instructions deleted successfully + + Examples + -------- + from zep_cloud import Zep + + client = Zep( + api_key="YOUR_API_KEY", + ) + client.graph.delete_custom_instructions() + """ + _response = self._raw_client.delete_custom_instructions( + graph_ids=graph_ids, instruction_names=instruction_names, user_ids=user_ids, request_options=request_options + ) + return _response.data + def list_entity_types( self, *, @@ -750,6 +890,168 @@ def with_raw_response(self) -> AsyncRawGraphClient: """ return self._raw_client + async def list_custom_instructions( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> ListCustomInstructionsResponse: + """ + Lists all custom instructions for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific instructions + + graph_id : typing.Optional[str] + Graph ID to get graph-specific instructions + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + ListCustomInstructionsResponse + The list of instructions. + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.list_custom_instructions( + user_id="user_id", + graph_id="graph_id", + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.list_custom_instructions( + user_id=user_id, graph_id=graph_id, request_options=request_options + ) + return _response.data + + async def add_custom_instructions( + self, + *, + instructions: typing.Sequence[CustomInstruction], + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Adds new custom instructions for graphs without removing existing ones. If user_ids or graph_ids is empty, adds to project-wide default instructions. + + Parameters + ---------- + instructions : typing.Sequence[CustomInstruction] + Instructions to add to the graph. + + graph_ids : typing.Optional[typing.Sequence[str]] + Graph IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + + user_ids : typing.Optional[typing.Sequence[str]] + User IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Instructions added successfully + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep, CustomInstruction + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.add_custom_instructions( + instructions=[ + CustomInstruction( + name="name", + text="text", + ) + ], + ) + + + asyncio.run(main()) + """ + _response = await self._raw_client.add_custom_instructions( + instructions=instructions, graph_ids=graph_ids, user_ids=user_ids, request_options=request_options + ) + return _response.data + + async def delete_custom_instructions( + self, + *, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + instruction_names: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> SuccessResponse: + """ + Deletes custom instructions for graphs or project wide defaults. + + Parameters + ---------- + graph_ids : typing.Optional[typing.Sequence[str]] + Determines which group graphs will have their custom instructions deleted. If no graphs are provided, the project-wide custom instructions will be affected. + + instruction_names : typing.Optional[typing.Sequence[str]] + Unique identifier for the instructions to be deleted. If empty deletes all instructions. + + user_ids : typing.Optional[typing.Sequence[str]] + Determines which user graphs will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be affected. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + SuccessResponse + Instructions deleted successfully + + Examples + -------- + import asyncio + + from zep_cloud import AsyncZep + + client = AsyncZep( + api_key="YOUR_API_KEY", + ) + + + async def main() -> None: + await client.graph.delete_custom_instructions() + + + asyncio.run(main()) + """ + _response = await self._raw_client.delete_custom_instructions( + graph_ids=graph_ids, instruction_names=instruction_names, user_ids=user_ids, request_options=request_options + ) + return _response.data + async def list_entity_types( self, *, diff --git a/src/zep_cloud/graph/raw_client.py b/src/zep_cloud/graph/raw_client.py index 73291f2..934d1a6 100644 --- a/src/zep_cloud/graph/raw_client.py +++ b/src/zep_cloud/graph/raw_client.py @@ -16,6 +16,7 @@ from ..types.add_triple_response import AddTripleResponse from ..types.api_error import ApiError as types_api_error_ApiError from ..types.clone_graph_response import CloneGraphResponse +from ..types.custom_instruction import CustomInstruction from ..types.edge_type import EdgeType from ..types.entity_type import EntityType from ..types.entity_type_response import EntityTypeResponse @@ -27,6 +28,7 @@ from ..types.graph_list_response import GraphListResponse from ..types.graph_search_results import GraphSearchResults from ..types.graph_search_scope import GraphSearchScope +from ..types.list_custom_instructions_response import ListCustomInstructionsResponse from ..types.reranker import Reranker from ..types.search_filters import SearchFilters from ..types.success_response import SuccessResponse @@ -39,6 +41,254 @@ class RawGraphClient: def __init__(self, *, client_wrapper: SyncClientWrapper): self._client_wrapper = client_wrapper + def list_custom_instructions( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[ListCustomInstructionsResponse]: + """ + Lists all custom instructions for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific instructions + + graph_id : typing.Optional[str] + Graph ID to get graph-specific instructions + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[ListCustomInstructionsResponse] + The list of instructions. + """ + _response = self._client_wrapper.httpx_client.request( + "custom-instructions", + method="GET", + params={ + "user_id": user_id, + "graph_id": graph_id, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCustomInstructionsResponse, + parse_obj_as( + type_=ListCustomInstructionsResponse, # type: ignore + object_=_response.json(), + ), + ) + return HttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 + ) + + def add_custom_instructions( + self, + *, + instructions: typing.Sequence[CustomInstruction], + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[SuccessResponse]: + """ + Adds new custom instructions for graphs without removing existing ones. If user_ids or graph_ids is empty, adds to project-wide default instructions. + + Parameters + ---------- + instructions : typing.Sequence[CustomInstruction] + Instructions to add to the graph. + + graph_ids : typing.Optional[typing.Sequence[str]] + Graph IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + + user_ids : typing.Optional[typing.Sequence[str]] + User IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Instructions added successfully + """ + _response = self._client_wrapper.httpx_client.request( + "custom-instructions", + method="POST", + json={ + "graph_ids": graph_ids, + "instructions": convert_and_respect_annotation_metadata( + object_=instructions, annotation=typing.Sequence[CustomInstruction], direction="write" + ), + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + + def delete_custom_instructions( + self, + *, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + instruction_names: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> HttpResponse[SuccessResponse]: + """ + Deletes custom instructions for graphs or project wide defaults. + + Parameters + ---------- + graph_ids : typing.Optional[typing.Sequence[str]] + Determines which group graphs will have their custom instructions deleted. If no graphs are provided, the project-wide custom instructions will be affected. + + instruction_names : typing.Optional[typing.Sequence[str]] + Unique identifier for the instructions to be deleted. If empty deletes all instructions. + + user_ids : typing.Optional[typing.Sequence[str]] + Determines which user graphs will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be affected. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + HttpResponse[SuccessResponse] + Instructions deleted successfully + """ + _response = self._client_wrapper.httpx_client.request( + "custom-instructions", + method="DELETE", + json={ + "graph_ids": graph_ids, + "instruction_names": instruction_names, + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + def list_entity_types( self, *, @@ -1188,6 +1438,254 @@ class AsyncRawGraphClient: def __init__(self, *, client_wrapper: AsyncClientWrapper): self._client_wrapper = client_wrapper + async def list_custom_instructions( + self, + *, + user_id: typing.Optional[str] = None, + graph_id: typing.Optional[str] = None, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[ListCustomInstructionsResponse]: + """ + Lists all custom instructions for a project, user, or graph. + + Parameters + ---------- + user_id : typing.Optional[str] + User ID to get user-specific instructions + + graph_id : typing.Optional[str] + Graph ID to get graph-specific instructions + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[ListCustomInstructionsResponse] + The list of instructions. + """ + _response = await self._client_wrapper.httpx_client.request( + "custom-instructions", + method="GET", + params={ + "user_id": user_id, + "graph_id": graph_id, + }, + request_options=request_options, + ) + try: + if 200 <= _response.status_code < 300: + _data = typing.cast( + ListCustomInstructionsResponse, + parse_obj_as( + type_=ListCustomInstructionsResponse, # type: ignore + object_=_response.json(), + ), + ) + return AsyncHttpResponse(response=_response, data=_data) + if _response.status_code == 400: + raise BadRequestError( + 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 + ) + + async def add_custom_instructions( + self, + *, + instructions: typing.Sequence[CustomInstruction], + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Adds new custom instructions for graphs without removing existing ones. If user_ids or graph_ids is empty, adds to project-wide default instructions. + + Parameters + ---------- + instructions : typing.Sequence[CustomInstruction] + Instructions to add to the graph. + + graph_ids : typing.Optional[typing.Sequence[str]] + Graph IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + + user_ids : typing.Optional[typing.Sequence[str]] + User IDs to add the instructions to. If empty, the instructions are added to the project-wide default. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Instructions added successfully + """ + _response = await self._client_wrapper.httpx_client.request( + "custom-instructions", + method="POST", + json={ + "graph_ids": graph_ids, + "instructions": convert_and_respect_annotation_metadata( + object_=instructions, annotation=typing.Sequence[CustomInstruction], direction="write" + ), + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + + async def delete_custom_instructions( + self, + *, + graph_ids: typing.Optional[typing.Sequence[str]] = OMIT, + instruction_names: typing.Optional[typing.Sequence[str]] = OMIT, + user_ids: typing.Optional[typing.Sequence[str]] = OMIT, + request_options: typing.Optional[RequestOptions] = None, + ) -> AsyncHttpResponse[SuccessResponse]: + """ + Deletes custom instructions for graphs or project wide defaults. + + Parameters + ---------- + graph_ids : typing.Optional[typing.Sequence[str]] + Determines which group graphs will have their custom instructions deleted. If no graphs are provided, the project-wide custom instructions will be affected. + + instruction_names : typing.Optional[typing.Sequence[str]] + Unique identifier for the instructions to be deleted. If empty deletes all instructions. + + user_ids : typing.Optional[typing.Sequence[str]] + Determines which user graphs will have their custom instructions deleted. If no users are provided, the project-wide custom instructions will be affected. + + request_options : typing.Optional[RequestOptions] + Request-specific configuration. + + Returns + ------- + AsyncHttpResponse[SuccessResponse] + Instructions deleted successfully + """ + _response = await self._client_wrapper.httpx_client.request( + "custom-instructions", + method="DELETE", + json={ + "graph_ids": graph_ids, + "instruction_names": instruction_names, + "user_ids": user_ids, + }, + headers={ + "content-type": "application/json", + }, + request_options=request_options, + omit=OMIT, + ) + 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 == 400: + raise BadRequestError( + 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 + ) + async def list_entity_types( self, *, diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 39ec436..5cbf96a 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -9,6 +9,7 @@ from .clone_graph_response import CloneGraphResponse from .comparison_operator import ComparisonOperator from .context_template_response import ContextTemplateResponse +from .custom_instruction import CustomInstruction from .date_filter import DateFilter from .edge_type import EdgeType from .entity_edge import EntityEdge @@ -33,6 +34,7 @@ from .graph_search_results import GraphSearchResults from .graph_search_scope import GraphSearchScope from .list_context_templates_response import ListContextTemplatesResponse +from .list_custom_instructions_response import ListCustomInstructionsResponse from .list_user_instructions_response import ListUserInstructionsResponse from .message import Message from .message_list_response import MessageListResponse @@ -63,6 +65,7 @@ "CloneGraphResponse", "ComparisonOperator", "ContextTemplateResponse", + "CustomInstruction", "DateFilter", "EdgeType", "EntityEdge", @@ -87,6 +90,7 @@ "GraphSearchResults", "GraphSearchScope", "ListContextTemplatesResponse", + "ListCustomInstructionsResponse", "ListUserInstructionsResponse", "Message", "MessageListResponse", diff --git a/src/zep_cloud/types/custom_instruction.py b/src/zep_cloud/types/custom_instruction.py new file mode 100644 index 0000000..38b6d15 --- /dev/null +++ b/src/zep_cloud/types/custom_instruction.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel + + +class CustomInstruction(UniversalBaseModel): + name: str + text: str + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow diff --git a/src/zep_cloud/types/list_custom_instructions_response.py b/src/zep_cloud/types/list_custom_instructions_response.py new file mode 100644 index 0000000..e7ac97a --- /dev/null +++ b/src/zep_cloud/types/list_custom_instructions_response.py @@ -0,0 +1,20 @@ +# This file was auto-generated by Fern from our API Definition. + +import typing + +import pydantic +from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel +from .custom_instruction import CustomInstruction + + +class ListCustomInstructionsResponse(UniversalBaseModel): + instructions: typing.Optional[typing.List[CustomInstruction]] = None + + if IS_PYDANTIC_V2: + model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 + else: + + class Config: + frozen = True + smart_union = True + extra = pydantic.Extra.allow From aa25d1b954d8f48b551a2d3c0782b904d698fdc2 Mon Sep 17 00:00:00 2001 From: paulpaliychuk Date: Fri, 16 Jan 2026 20:16:56 -0500 Subject: [PATCH 73/74] chore: Bump version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 1e9a7f1..fe40db3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "zep-cloud" [tool.poetry] name = "zep-cloud" -version = "3.15.0" +version = "3.16.0" description = "" readme = "README.md" authors = [] From 4ad5242c90fa1e1e0aed6b4bcbe4ae07aabdd8d9 Mon Sep 17 00:00:00 2001 From: "fern-api[bot]" <115122769+fern-api[bot]@users.noreply.github.com> Date: Sat, 17 Jan 2026 01:19:08 +0000 Subject: [PATCH 74/74] SDK regeneration --- src/zep_cloud/core/client_wrapper.py | 4 ++-- src/zep_cloud/types/get_task_response.py | 1 + src/zep_cloud/types/message_list_response.py | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index bc2827a..6760557 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.15.0", + "User-Agent": "zep-cloud/3.16.0", "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "3.15.0", + "X-Fern-SDK-Version": "3.16.0", **(self.get_custom_headers() or {}), } headers["Authorization"] = f"Api-Key {self.api_key}" diff --git a/src/zep_cloud/types/get_task_response.py b/src/zep_cloud/types/get_task_response.py index 5e1c1ad..10e5e31 100644 --- a/src/zep_cloud/types/get_task_response.py +++ b/src/zep_cloud/types/get_task_response.py @@ -12,6 +12,7 @@ class GetTaskResponse(UniversalBaseModel): completed_at: typing.Optional[str] = None created_at: typing.Optional[str] = None error: typing.Optional[TaskErrorResponse] = None + params: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None progress: typing.Optional[TaskProgress] = None started_at: typing.Optional[str] = None status: typing.Optional[str] = None diff --git a/src/zep_cloud/types/message_list_response.py b/src/zep_cloud/types/message_list_response.py index 4554d25..fe28524 100644 --- a/src/zep_cloud/types/message_list_response.py +++ b/src/zep_cloud/types/message_list_response.py @@ -23,6 +23,11 @@ class MessageListResponse(UniversalBaseModel): The total number of messages. """ + user_id: typing.Optional[str] = pydantic.Field(default=None) + """ + The user ID associated with this thread. + """ + if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2 else: