diff --git a/pyproject.toml b/pyproject.toml index 319dc6df..4c5471e8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "zep-cloud" -version = "2.13.1" +version = "2.14.0" description = "" readme = "README.md" authors = [] diff --git a/src/zep_cloud/__init__.py b/src/zep_cloud/__init__.py index 42d4fec9..81bcfce5 100644 --- a/src/zep_cloud/__init__.py +++ b/src/zep_cloud/__init__.py @@ -22,6 +22,7 @@ EntityTypeResponse, Episode, EpisodeData, + EpisodeMentions, EpisodeResponse, Fact, FactRatingExamples, @@ -88,6 +89,7 @@ "EntityTypeResponse", "Episode", "EpisodeData", + "EpisodeMentions", "EpisodeResponse", "Fact", "FactRatingExamples", diff --git a/src/zep_cloud/core/client_wrapper.py b/src/zep_cloud/core/client_wrapper.py index 5c12aa26..5677da7b 100644 --- a/src/zep_cloud/core/client_wrapper.py +++ b/src/zep_cloud/core/client_wrapper.py @@ -17,7 +17,7 @@ def get_headers(self) -> typing.Dict[str, str]: headers: typing.Dict[str, str] = { "X-Fern-Language": "Python", "X-Fern-SDK-Name": "zep-cloud", - "X-Fern-SDK-Version": "2.13.0", + "X-Fern-SDK-Version": "2.14.0", } headers["Authorization"] = f"Api-Key {self.api_key}" return headers diff --git a/src/zep_cloud/graph/episode/client.py b/src/zep_cloud/graph/episode/client.py index 17676392..cd4ebce5 100644 --- a/src/zep_cloud/graph/episode/client.py +++ b/src/zep_cloud/graph/episode/client.py @@ -13,8 +13,8 @@ from ...errors.not_found_error import NotFoundError from ...types.api_error import ApiError as types_api_error_ApiError from ...types.episode import Episode +from ...types.episode_mentions import EpisodeMentions from ...types.episode_response import EpisodeResponse -from ...types.graph_search_results import GraphSearchResults from ...types.success_response import SuccessResponse @@ -240,7 +240,7 @@ def delete(self, uuid_: str, *, request_options: typing.Optional[RequestOptions] def get_nodes_and_edges( self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> GraphSearchResults: + ) -> EpisodeMentions: """ Returns nodes and edges mentioned in an episode @@ -254,8 +254,8 @@ def get_nodes_and_edges( Returns ------- - GraphSearchResults - Graph search results + EpisodeMentions + Edges and nodes mentioned in an episode Examples -------- @@ -273,7 +273,7 @@ def get_nodes_and_edges( ) try: if 200 <= _response.status_code < 300: - return pydantic_v1.parse_obj_as(GraphSearchResults, _response.json()) # type: ignore + return pydantic_v1.parse_obj_as(EpisodeMentions, _response.json()) # type: ignore if _response.status_code == 400: raise BadRequestError( pydantic_v1.parse_obj_as(types_api_error_ApiError, _response.json()) # type: ignore @@ -542,7 +542,7 @@ async def main() -> None: async def get_nodes_and_edges( self, uuid_: str, *, request_options: typing.Optional[RequestOptions] = None - ) -> GraphSearchResults: + ) -> EpisodeMentions: """ Returns nodes and edges mentioned in an episode @@ -556,8 +556,8 @@ async def get_nodes_and_edges( Returns ------- - GraphSearchResults - Graph search results + EpisodeMentions + Edges and nodes mentioned in an episode Examples -------- @@ -583,7 +583,7 @@ async def main() -> None: ) try: if 200 <= _response.status_code < 300: - return pydantic_v1.parse_obj_as(GraphSearchResults, _response.json()) # type: ignore + return pydantic_v1.parse_obj_as(EpisodeMentions, _response.json()) # type: ignore if _response.status_code == 400: raise BadRequestError( pydantic_v1.parse_obj_as(types_api_error_ApiError, _response.json()) # type: ignore diff --git a/src/zep_cloud/types/__init__.py b/src/zep_cloud/types/__init__.py index 8c8db6bb..8f5d09d6 100644 --- a/src/zep_cloud/types/__init__.py +++ b/src/zep_cloud/types/__init__.py @@ -21,6 +21,7 @@ from .entity_type_response import EntityTypeResponse from .episode import Episode from .episode_data import EpisodeData +from .episode_mentions import EpisodeMentions from .episode_response import EpisodeResponse from .fact import Fact from .fact_rating_examples import FactRatingExamples @@ -80,6 +81,7 @@ "EntityTypeResponse", "Episode", "EpisodeData", + "EpisodeMentions", "EpisodeResponse", "Fact", "FactRatingExamples", diff --git a/src/zep_cloud/types/episode.py b/src/zep_cloud/types/episode.py index ee7314da..bfa2e248 100644 --- a/src/zep_cloud/types/episode.py +++ b/src/zep_cloud/types/episode.py @@ -6,12 +6,23 @@ from ..core.datetime_utils import serialize_datetime from ..core.pydantic_utilities import deep_union_pydantic_dicts, pydantic_v1 from .graph_data_type import GraphDataType +from .role_type import RoleType class Episode(pydantic_v1.BaseModel): content: str created_at: str processed: typing.Optional[bool] = None + role: typing.Optional[str] = pydantic_v1.Field(default=None) + """ + Optional role, will only be present if the episode was created using memory.add API + """ + + role_type: typing.Optional[RoleType] = pydantic_v1.Field(default=None) + """ + Optional role_type, will only be present if the episode was created using memory.add API + """ + session_id: typing.Optional[str] = pydantic_v1.Field(default=None) """ Optional session ID. Will be present only if the episode corresponds to the messages added using memory.add API diff --git a/src/zep_cloud/types/episode_mentions.py b/src/zep_cloud/types/episode_mentions.py new file mode 100644 index 00000000..f981e2b1 --- /dev/null +++ b/src/zep_cloud/types/episode_mentions.py @@ -0,0 +1,32 @@ +# This file was auto-generated by Fern from our API Definition. + +import datetime as dt +import typing + +from ..core.datetime_utils import serialize_datetime +from ..core.pydantic_utilities import deep_union_pydantic_dicts, pydantic_v1 +from .entity_edge import EntityEdge +from .entity_node import EntityNode + + +class EpisodeMentions(pydantic_v1.BaseModel): + edges: typing.Optional[typing.List[EntityEdge]] = None + nodes: typing.Optional[typing.List[EntityNode]] = None + + def json(self, **kwargs: typing.Any) -> str: + kwargs_with_defaults: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs} + return super().json(**kwargs_with_defaults) + + def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]: + kwargs_with_defaults_exclude_unset: typing.Any = {"by_alias": True, "exclude_unset": True, **kwargs} + kwargs_with_defaults_exclude_none: typing.Any = {"by_alias": True, "exclude_none": True, **kwargs} + + return deep_union_pydantic_dicts( + super().dict(**kwargs_with_defaults_exclude_unset), super().dict(**kwargs_with_defaults_exclude_none) + ) + + class Config: + frozen = True + smart_union = True + extra = pydantic_v1.Extra.allow + json_encoders = {dt.datetime: serialize_datetime} diff --git a/src/zep_cloud/types/graph_search_results.py b/src/zep_cloud/types/graph_search_results.py index feed264c..6da40e2b 100644 --- a/src/zep_cloud/types/graph_search_results.py +++ b/src/zep_cloud/types/graph_search_results.py @@ -7,10 +7,12 @@ from ..core.pydantic_utilities import deep_union_pydantic_dicts, pydantic_v1 from .entity_edge import EntityEdge from .entity_node import EntityNode +from .episode import Episode class GraphSearchResults(pydantic_v1.BaseModel): edges: typing.Optional[typing.List[EntityEdge]] = None + episodes: typing.Optional[typing.List[Episode]] = None nodes: typing.Optional[typing.List[EntityNode]] = None def json(self, **kwargs: typing.Any) -> str: diff --git a/src/zep_cloud/types/graph_search_scope.py b/src/zep_cloud/types/graph_search_scope.py index b57a0216..07edf5de 100644 --- a/src/zep_cloud/types/graph_search_scope.py +++ b/src/zep_cloud/types/graph_search_scope.py @@ -2,4 +2,4 @@ import typing -GraphSearchScope = typing.Union[typing.Literal["edges", "nodes"], typing.Any] +GraphSearchScope = typing.Union[typing.Literal["edges", "nodes", "episodes"], typing.Any]