agenticmem 0.1.0__tar.gz → 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of agenticmem might be problematic. Click here for more details.

@@ -0,0 +1,142 @@
1
+ Metadata-Version: 2.1
2
+ Name: agenticmem
3
+ Version: 0.1.1
4
+ Summary: A Python client for the AgenticMem API
5
+ License: MIT
6
+ Author: AgenticMem Team
7
+ Requires-Python: >=3.10,<4.0
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Programming Language :: Python :: 3.10
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Requires-Dist: agenticmem-commons (==0.1.1)
13
+ Requires-Dist: griffe (==0.48.0)
14
+ Requires-Dist: mkdocstrings[python] (>=0.18.0)
15
+ Requires-Dist: pydantic (>=2.0.0,<3.0.0)
16
+ Requires-Dist: python-dateutil (>=2.8.0,<3.0.0)
17
+ Requires-Dist: requests (>=2.25.0,<3.0.0)
18
+ Description-Content-Type: text/markdown
19
+
20
+ # AgenticMem Python Client
21
+
22
+ A Python client library for interacting with the AgenticMem API. This client provides easy-to-use interfaces for managing user interactions and profiles.
23
+
24
+ ## Installation
25
+
26
+ ```bash
27
+ pip install agenticmem
28
+ ```
29
+
30
+ ## Quick Start
31
+
32
+ ```python
33
+ from agenticmem import AgenticMemClient
34
+ from agenticmem_commons.api_schema.service_schemas import InteractionRequest
35
+ from agenticmem_commons.api_schema.retriever_schema import (
36
+ SearchInteractionRequest,
37
+ SearchUserProfileRequest,
38
+ GetInteractionsRequest,
39
+ GetUserProfilesRequest
40
+ )
41
+ from datetime import datetime
42
+
43
+ # Initialize the client
44
+ client = AgenticMemClient(api_key="your_api_key")
45
+
46
+ # Optional: Login with email/password
47
+ token = client.login(email="user@example.com", password="password123")
48
+
49
+ # Publish a user interaction
50
+ interaction = InteractionRequest(
51
+ timestamp=int(datetime.utcnow().timestamp()),
52
+ text_interaction="User clicked on product X",
53
+ user_action="click",
54
+ user_action_description="Clicked on product details button"
55
+ )
56
+
57
+ response = client.publish_interaction(
58
+ user_id="user123",
59
+ request_id="req456",
60
+ interaction_requests=[interaction]
61
+ )
62
+ print(f"Published interaction: {response.success} - {response.message}")
63
+
64
+ # Search user profiles
65
+ profiles_request = SearchUserProfileRequest(
66
+ user_id="user123",
67
+ search_query="recent interactions",
68
+ top_k=5
69
+ )
70
+ profiles = client.search_profiles(profiles_request)
71
+ for profile in profiles.profiles:
72
+ print(f"Profile {profile.profile_id}: {profile.profile_content}")
73
+
74
+ # Get user profiles directly
75
+ profiles_request = GetUserProfilesRequest(
76
+ user_id="user123"
77
+ )
78
+ profiles = client.get_profiles(profiles_request)
79
+ for profile in profiles.profiles:
80
+ print(f"Profile: {profile}")
81
+
82
+ # Search interactions
83
+ interactions_request = SearchInteractionRequest(
84
+ user_id="user123",
85
+ start_time=int(datetime(2024, 1, 1).timestamp()),
86
+ end_time=int(datetime.utcnow().timestamp())
87
+ )
88
+ interactions = client.search_interactions(interactions_request)
89
+ for interaction in interactions.interactions:
90
+ print(f"Interaction {interaction.interaction_id}: {interaction.text_interaction}")
91
+
92
+ # Get interactions directly
93
+ interactions_request = GetInteractionsRequest(
94
+ user_id="user123"
95
+ )
96
+ interactions = client.get_interactions(interactions_request)
97
+ for interaction in interactions.interactions:
98
+ print(f"Interaction: {interaction}")
99
+
100
+ # Get profile change log
101
+ change_log = client.get_profile_change_log()
102
+ print(f"Profile changes: {change_log}")
103
+ ```
104
+
105
+ ## Features
106
+
107
+ - Authentication
108
+ - API key authentication
109
+ - Email/password login
110
+ - User interaction management
111
+ - Publish user interactions
112
+ - Delete specific interactions
113
+ - Search interactions with time range and filters
114
+ - Get direct list of interactions
115
+ - User profile management
116
+ - Search user profiles with customizable queries
117
+ - Get direct list of user profiles
118
+ - Delete specific profiles or profiles matching a search query
119
+ - View profile change log history
120
+
121
+ ## API Response Types
122
+
123
+ All API methods return strongly-typed responses:
124
+
125
+ - `login()` returns `Token`
126
+ - `publish_interaction()` returns `PublishUserInteractionResponse`
127
+ - `search_interactions()` returns `SearchInteractionResponse`
128
+ - `get_interactions()` returns `GetInteractionsResponse`
129
+ - `search_profiles()` returns `SearchUserProfileResponse`
130
+ - `get_profiles()` returns `GetUserProfilesResponse`
131
+ - `delete_profile()` returns `DeleteUserProfileResponse`
132
+ - `delete_interaction()` returns `DeleteUserInteractionResponse`
133
+ - `get_profile_change_log()` returns `ProfileChangeLogResponse`
134
+
135
+ ## Documentation
136
+
137
+ For detailed documentation, please visit [docs link].
138
+
139
+ ## License
140
+
141
+ MIT License
142
+
@@ -0,0 +1,122 @@
1
+ # AgenticMem Python Client
2
+
3
+ A Python client library for interacting with the AgenticMem API. This client provides easy-to-use interfaces for managing user interactions and profiles.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pip install agenticmem
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```python
14
+ from agenticmem import AgenticMemClient
15
+ from agenticmem_commons.api_schema.service_schemas import InteractionRequest
16
+ from agenticmem_commons.api_schema.retriever_schema import (
17
+ SearchInteractionRequest,
18
+ SearchUserProfileRequest,
19
+ GetInteractionsRequest,
20
+ GetUserProfilesRequest
21
+ )
22
+ from datetime import datetime
23
+
24
+ # Initialize the client
25
+ client = AgenticMemClient(api_key="your_api_key")
26
+
27
+ # Optional: Login with email/password
28
+ token = client.login(email="user@example.com", password="password123")
29
+
30
+ # Publish a user interaction
31
+ interaction = InteractionRequest(
32
+ timestamp=int(datetime.utcnow().timestamp()),
33
+ text_interaction="User clicked on product X",
34
+ user_action="click",
35
+ user_action_description="Clicked on product details button"
36
+ )
37
+
38
+ response = client.publish_interaction(
39
+ user_id="user123",
40
+ request_id="req456",
41
+ interaction_requests=[interaction]
42
+ )
43
+ print(f"Published interaction: {response.success} - {response.message}")
44
+
45
+ # Search user profiles
46
+ profiles_request = SearchUserProfileRequest(
47
+ user_id="user123",
48
+ search_query="recent interactions",
49
+ top_k=5
50
+ )
51
+ profiles = client.search_profiles(profiles_request)
52
+ for profile in profiles.profiles:
53
+ print(f"Profile {profile.profile_id}: {profile.profile_content}")
54
+
55
+ # Get user profiles directly
56
+ profiles_request = GetUserProfilesRequest(
57
+ user_id="user123"
58
+ )
59
+ profiles = client.get_profiles(profiles_request)
60
+ for profile in profiles.profiles:
61
+ print(f"Profile: {profile}")
62
+
63
+ # Search interactions
64
+ interactions_request = SearchInteractionRequest(
65
+ user_id="user123",
66
+ start_time=int(datetime(2024, 1, 1).timestamp()),
67
+ end_time=int(datetime.utcnow().timestamp())
68
+ )
69
+ interactions = client.search_interactions(interactions_request)
70
+ for interaction in interactions.interactions:
71
+ print(f"Interaction {interaction.interaction_id}: {interaction.text_interaction}")
72
+
73
+ # Get interactions directly
74
+ interactions_request = GetInteractionsRequest(
75
+ user_id="user123"
76
+ )
77
+ interactions = client.get_interactions(interactions_request)
78
+ for interaction in interactions.interactions:
79
+ print(f"Interaction: {interaction}")
80
+
81
+ # Get profile change log
82
+ change_log = client.get_profile_change_log()
83
+ print(f"Profile changes: {change_log}")
84
+ ```
85
+
86
+ ## Features
87
+
88
+ - Authentication
89
+ - API key authentication
90
+ - Email/password login
91
+ - User interaction management
92
+ - Publish user interactions
93
+ - Delete specific interactions
94
+ - Search interactions with time range and filters
95
+ - Get direct list of interactions
96
+ - User profile management
97
+ - Search user profiles with customizable queries
98
+ - Get direct list of user profiles
99
+ - Delete specific profiles or profiles matching a search query
100
+ - View profile change log history
101
+
102
+ ## API Response Types
103
+
104
+ All API methods return strongly-typed responses:
105
+
106
+ - `login()` returns `Token`
107
+ - `publish_interaction()` returns `PublishUserInteractionResponse`
108
+ - `search_interactions()` returns `SearchInteractionResponse`
109
+ - `get_interactions()` returns `GetInteractionsResponse`
110
+ - `search_profiles()` returns `SearchUserProfileResponse`
111
+ - `get_profiles()` returns `GetUserProfilesResponse`
112
+ - `delete_profile()` returns `DeleteUserProfileResponse`
113
+ - `delete_interaction()` returns `DeleteUserInteractionResponse`
114
+ - `get_profile_change_log()` returns `ProfileChangeLogResponse`
115
+
116
+ ## Documentation
117
+
118
+ For detailed documentation, please visit [docs link].
119
+
120
+ ## License
121
+
122
+ MIT License
@@ -0,0 +1,47 @@
1
+ __app_name__ = "agenticmem"
2
+ __version__ = "0.1.1"
3
+
4
+
5
+ from agenticmem.client import AgenticMemClient
6
+ from agenticmem_commons.api_schema.service_schemas import (
7
+ UserActionType,
8
+ ProfileTimeToLive,
9
+ InteractionRequest,
10
+ Interaction,
11
+ UserProfile,
12
+ PublishUserInteractionRequest,
13
+ PublishUserInteractionResponse,
14
+ DeleteUserProfileRequest,
15
+ DeleteUserProfileResponse,
16
+ DeleteUserInteractionRequest,
17
+ DeleteUserInteractionResponse,
18
+ )
19
+ from agenticmem_commons.api_schema.retriever_schema import (
20
+ SearchInteractionRequest,
21
+ SearchUserProfileRequest,
22
+ SearchInteractionResponse,
23
+ SearchUserProfileResponse,
24
+ )
25
+
26
+ debug = False
27
+ log = None # Set to either 'debug' or 'info', controls console logging
28
+
29
+
30
+ __all__ = [
31
+ "AgenticMemClient",
32
+ "UserActionType",
33
+ "ProfileTimeToLive",
34
+ "InteractionRequest",
35
+ "Interaction",
36
+ "UserProfile",
37
+ "PublishUserInteractionRequest",
38
+ "PublishUserInteractionResponse",
39
+ "DeleteUserProfileRequest",
40
+ "DeleteUserProfileResponse",
41
+ "DeleteUserInteractionRequest",
42
+ "DeleteUserInteractionResponse",
43
+ "SearchInteractionRequest",
44
+ "SearchUserProfileRequest",
45
+ "SearchInteractionResponse",
46
+ "SearchUserProfileResponse",
47
+ ]
@@ -0,0 +1,259 @@
1
+ import requests
2
+ from urllib.parse import urljoin
3
+ import os
4
+ from typing import Optional, Union
5
+ from agenticmem_commons.api_schema.retriever_schema import (
6
+ SearchInteractionRequest,
7
+ SearchInteractionResponse,
8
+ SearchUserProfileRequest,
9
+ SearchUserProfileResponse,
10
+ GetInteractionsRequest,
11
+ GetInteractionsResponse,
12
+ GetUserProfilesRequest,
13
+ GetUserProfilesResponse,
14
+ )
15
+
16
+ if os.environ.get("TEST_ENV", "False") == "True":
17
+ BACKEND_URL = "http://127.0.0.1:8000" # Local server for testing
18
+ else:
19
+ BACKEND_URL = "http://agenticmem-test.us-west-2.elasticbeanstalk.com:8081" # Elastic Beanstalk server url
20
+
21
+ from agenticmem_commons.api_schema.service_schemas import (
22
+ InteractionRequest,
23
+ ProfileChangeLogResponse,
24
+ PublishUserInteractionRequest,
25
+ PublishUserInteractionResponse,
26
+ DeleteUserProfileRequest,
27
+ DeleteUserProfileResponse,
28
+ DeleteUserInteractionRequest,
29
+ DeleteUserInteractionResponse,
30
+ )
31
+ from agenticmem_commons.api_schema.login_schema import Token
32
+
33
+
34
+ class AgenticMemClient:
35
+ """Client for interacting with the AgenticMem API."""
36
+
37
+ def __init__(self, api_key: str = ""):
38
+ """Initialize the AgenticMem client.
39
+
40
+ Args:
41
+ api_key (str): Your API key for authentication
42
+ """
43
+ self.api_key = api_key
44
+ self.base_url = BACKEND_URL
45
+ self.session = requests.Session()
46
+
47
+ def _make_request(
48
+ self, method: str, endpoint: str, headers: Optional[dict] = None, **kwargs
49
+ ):
50
+ """Make an HTTP request to the API.
51
+
52
+ Args:
53
+ method (str): HTTP method (GET, POST, DELETE)
54
+ endpoint (str): API endpoint
55
+ headers (dict, optional): Additional headers to include in the request
56
+ **kwargs: Additional arguments to pass to requests
57
+
58
+ Returns:
59
+ dict: API response
60
+ """
61
+ url = urljoin(self.base_url, endpoint)
62
+ if self.api_key:
63
+ self.session.headers.update(
64
+ {
65
+ "Authorization": f"Bearer {self.api_key}",
66
+ "Content-Type": "application/json",
67
+ }
68
+ )
69
+ if headers:
70
+ self.session.headers.update(headers)
71
+ response = self.session.request(method, url, **kwargs)
72
+ response.raise_for_status()
73
+ return response.json()
74
+
75
+ def login(self, email: str, password: str) -> Token:
76
+ """Login to the AgenticMem API.
77
+
78
+ Args:
79
+ email (str): The user's email
80
+ password (str): The user's password
81
+
82
+ Returns:
83
+ Token: Response containing success status and message
84
+ """
85
+ response = self._make_request(
86
+ "POST",
87
+ "/token",
88
+ data={"username": email, "password": password},
89
+ headers={
90
+ "Content-Type": "application/x-www-form-urlencoded",
91
+ "accept": "application/json",
92
+ },
93
+ )
94
+ return Token(**response)
95
+
96
+ def publish_interaction(
97
+ self,
98
+ request_id: str,
99
+ user_id: str,
100
+ interaction_requests: list[Union[InteractionRequest, dict]],
101
+ ) -> PublishUserInteractionResponse:
102
+ """Publish user interactions.
103
+
104
+ Args:
105
+ request_id (str): The request ID
106
+ user_id (str): The user ID
107
+ interaction_requests (List[InteractionRequest]): List of interaction requests
108
+
109
+ Returns:
110
+ PublishUserInteractionResponse: Response containing success status and message
111
+ """
112
+ interaction_requests = [
113
+ (
114
+ InteractionRequest(**interaction_request)
115
+ if isinstance(interaction_request, dict)
116
+ else interaction_request
117
+ )
118
+ for interaction_request in interaction_requests
119
+ ]
120
+ request = PublishUserInteractionRequest(
121
+ request_id=request_id,
122
+ user_id=user_id,
123
+ interaction_requests=interaction_requests,
124
+ )
125
+ response = self._make_request(
126
+ "POST",
127
+ "/api/publish_interaction",
128
+ data=request.model_dump_json(),
129
+ )
130
+ return PublishUserInteractionResponse(**response)
131
+
132
+ def search_interactions(
133
+ self,
134
+ request: Union[SearchInteractionRequest, dict],
135
+ ) -> SearchInteractionResponse:
136
+ """Search for user interactions.
137
+
138
+ Args:
139
+ request (SearchInteractionRequest): The search request
140
+
141
+ Returns:
142
+ SearchInteractionResponse: Response containing matching interactions
143
+ """
144
+ if isinstance(request, dict):
145
+ request = SearchInteractionRequest(**request)
146
+ response = self._make_request(
147
+ "POST",
148
+ "/api/search_interactions",
149
+ data=request.model_dump_json(),
150
+ )
151
+ return SearchInteractionResponse(**response)
152
+
153
+ def search_profiles(
154
+ self,
155
+ request: Union[SearchUserProfileRequest, dict],
156
+ ) -> SearchUserProfileResponse:
157
+ """Search for user profiles.
158
+
159
+ Args:
160
+ request (SearchUserProfileRequest): The search request
161
+
162
+ Returns:
163
+ SearchUserProfileResponse: Response containing matching profiles
164
+ """
165
+ if isinstance(request, dict):
166
+ request = SearchUserProfileRequest(**request)
167
+ response = self._make_request(
168
+ "POST", "/api/search_profiles", data=request.model_dump_json()
169
+ )
170
+ return SearchUserProfileResponse(**response)
171
+
172
+ def delete_profile(
173
+ self, user_id: str, profile_id: str = "", search_query: str = ""
174
+ ) -> DeleteUserProfileResponse:
175
+ """Delete user profiles.
176
+
177
+ Args:
178
+ user_id (str): The user ID
179
+ profile_id (str, optional): Specific profile ID to delete
180
+ search_query (str, optional): Query to match profiles for deletion
181
+
182
+ Returns:
183
+ DeleteUserProfileResponse: Response containing success status and message
184
+ """
185
+ request = DeleteUserProfileRequest(
186
+ user_id=user_id,
187
+ profile_id=profile_id,
188
+ search_query=search_query,
189
+ )
190
+ response = self._make_request(
191
+ "DELETE", "/api/delete_profile", data=request.model_dump_json()
192
+ )
193
+ return DeleteUserProfileResponse(**response)
194
+
195
+ def delete_interaction(
196
+ self, user_id: str, interaction_id: str
197
+ ) -> DeleteUserInteractionResponse:
198
+ """Delete a user interaction.
199
+
200
+ Args:
201
+ user_id (str): The user ID
202
+ interaction_id (str): The interaction ID to delete
203
+
204
+ Returns:
205
+ DeleteUserInteractionResponse: Response containing success status and message
206
+ """
207
+ request = DeleteUserInteractionRequest(
208
+ user_id=user_id, interaction_id=interaction_id
209
+ )
210
+ response = self._make_request(
211
+ "DELETE", "/api/delete_interaction", data=request.model_dump_json()
212
+ )
213
+ return DeleteUserInteractionResponse(**response)
214
+
215
+ def get_profile_change_log(self) -> ProfileChangeLogResponse:
216
+ response = self._make_request("GET", "/api/profile_change_log")
217
+ return ProfileChangeLogResponse(**response)
218
+
219
+ def get_interactions(
220
+ self,
221
+ request: Union[GetInteractionsRequest, dict],
222
+ ) -> GetInteractionsResponse:
223
+ """Get user interactions.
224
+
225
+ Args:
226
+ request (GetInteractionsRequest): The list request
227
+
228
+ Returns:
229
+ GetInteractionsResponse: Response containing list of interactions
230
+ """
231
+ if isinstance(request, dict):
232
+ request = GetInteractionsRequest(**request)
233
+ response = self._make_request(
234
+ "POST",
235
+ "/api/get_interactions",
236
+ data=request.model_dump_json(),
237
+ )
238
+ return GetInteractionsResponse(**response)
239
+
240
+ def get_profiles(
241
+ self,
242
+ request: Union[GetUserProfilesRequest, dict],
243
+ ) -> GetUserProfilesResponse:
244
+ """Get user profiles.
245
+
246
+ Args:
247
+ request (GetUserProfilesRequest): The list request
248
+
249
+ Returns:
250
+ GetUserProfilesResponse: Response containing list of profiles
251
+ """
252
+ if isinstance(request, dict):
253
+ request = GetUserProfilesRequest(**request)
254
+ response = self._make_request(
255
+ "POST",
256
+ "/api/get_profiles",
257
+ data=request.model_dump_json(),
258
+ )
259
+ return GetUserProfilesResponse(**response)
@@ -0,0 +1,12 @@
1
+ import json
2
+ from datetime import datetime
3
+ from enum import Enum
4
+
5
+
6
+ class CustomJSONEncoder(json.JSONEncoder):
7
+ def default(self, o):
8
+ if isinstance(o, datetime):
9
+ return o.isoformat()
10
+ if isinstance(o, Enum):
11
+ return o.value
12
+ return super().default(o)
@@ -0,0 +1,29 @@
1
+ [tool.poetry]
2
+ name = "agenticmem"
3
+ version = "0.1.1"
4
+ description = "A Python client for the AgenticMem API"
5
+ authors = ["AgenticMem Team"]
6
+ readme = "README.md"
7
+ packages = [{include = "agenticmem"}]
8
+ license = "MIT"
9
+
10
+ [tool.poetry.dependencies]
11
+ python = "^3.10"
12
+ requests = "^2.25.0"
13
+ pydantic = "^2.0.0"
14
+ python-dateutil = "^2.8.0"
15
+ agenticmem-commons = "0.1.1"
16
+ mkdocstrings = {version = ">=0.18.0", extras = ["python"]}
17
+ griffe = "0.48.0"
18
+
19
+ [build-system]
20
+ requires = ["poetry-core>=1.0.0"]
21
+ build-backend = "poetry.core.masonry.api"
22
+
23
+ [tool.poetry.group.dev.dependencies]
24
+ mkdocs = "^1.6.1"
25
+ mkdocs-material = "^9.5.50"
26
+ mkdocstrings = {extras = ["python"], version = "^0.27.0"}
27
+
28
+ [tool.poetry.group.local.dependencies]
29
+ agenticmem-commons = {path = "../agenticmem_commons", develop = true}
agenticmem-0.1.0/PKG-INFO DELETED
@@ -1,102 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: agenticmem
3
- Version: 0.1.0
4
- Summary: A Python client for the AgenticMem API
5
- License: MIT
6
- Author: AgenticMem Team
7
- Requires-Python: >=3.7,<4.0
8
- Classifier: License :: OSI Approved :: MIT License
9
- Classifier: Programming Language :: Python :: 3
10
- Classifier: Programming Language :: Python :: 3.7
11
- Classifier: Programming Language :: Python :: 3.8
12
- Classifier: Programming Language :: Python :: 3.9
13
- Classifier: Programming Language :: Python :: 3.10
14
- Classifier: Programming Language :: Python :: 3.11
15
- Requires-Dist: pydantic (>=2.0.0,<3.0.0)
16
- Requires-Dist: python-dateutil (>=2.8.0,<3.0.0)
17
- Requires-Dist: requests (>=2.25.0,<3.0.0)
18
- Description-Content-Type: text/markdown
19
-
20
- # AgenticMem Python Client
21
-
22
- A Python client library for interacting with the AgenticMem API. This client provides easy-to-use interfaces for managing user interactions and profiles.
23
-
24
- ## Installation
25
-
26
- ```bash
27
- pip install agenticmem
28
- ```
29
-
30
- ## Quick Start
31
-
32
- ```python
33
- from agenticmem import AgenticMemClient
34
- from agenticmem import UserActionType, InteractionRequest
35
- from datetime import datetime
36
-
37
- # Initialize the client
38
- client = AgenticMemClient(
39
- api_key="your_api_key",
40
- )
41
-
42
- # Publish a user interaction
43
- interaction = InteractionRequest(
44
- timestamp=datetime.now(),
45
- text_interaction="User clicked on product X",
46
- user_action=UserActionType.CLICK,
47
- user_action_description="Clicked on product details button"
48
- )
49
-
50
- response = client.publish_interaction(
51
- user_id="user123",
52
- request_id="req456",
53
- interaction_requests=[interaction]
54
- )
55
- print(f"Published interaction: {response.success} - {response.message}")
56
-
57
- # Search user profiles
58
- profiles = client.search_profiles(
59
- user_id="user123",
60
- query="recent interactions",
61
- top_k=5
62
- )
63
- for profile in profiles:
64
- print(f"Profile {profile.profile_id}: {profile.profile_content}")
65
-
66
- # Search interactions
67
- interactions = client.search_interactions(
68
- user_id="user123",
69
- start_time=datetime(2024, 1, 1),
70
- end_time=datetime.now()
71
- )
72
- for interaction in interactions:
73
- print(f"Interaction {interaction.interaction_id}: {interaction.text_interaction}")
74
- ```
75
-
76
- ## Features
77
-
78
- - User interaction management
79
- - Publish user interactions
80
- - Delete user interactions
81
- - Search interactions
82
- - User profile management
83
- - Search user profiles
84
- - Delete user profiles
85
-
86
- ## API Response Types
87
-
88
- All API methods return strongly-typed responses:
89
-
90
- - `publish_interaction()` returns `PublishUserInteractionResponse`
91
- - `search_interactions()` returns `List[Interaction]`
92
- - `search_profiles()` returns `List[UserProfile]`
93
- - `delete_profile()` returns `DeleteUserProfileResponse`
94
- - `delete_interaction()` returns `DeleteUserInteractionResponse`
95
-
96
- ## Documentation
97
-
98
- For detailed documentation, please visit [docs link].
99
-
100
- ## License
101
-
102
- MIT License
@@ -1,83 +0,0 @@
1
- # AgenticMem Python Client
2
-
3
- A Python client library for interacting with the AgenticMem API. This client provides easy-to-use interfaces for managing user interactions and profiles.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- pip install agenticmem
9
- ```
10
-
11
- ## Quick Start
12
-
13
- ```python
14
- from agenticmem import AgenticMemClient
15
- from agenticmem import UserActionType, InteractionRequest
16
- from datetime import datetime
17
-
18
- # Initialize the client
19
- client = AgenticMemClient(
20
- api_key="your_api_key",
21
- )
22
-
23
- # Publish a user interaction
24
- interaction = InteractionRequest(
25
- timestamp=datetime.now(),
26
- text_interaction="User clicked on product X",
27
- user_action=UserActionType.CLICK,
28
- user_action_description="Clicked on product details button"
29
- )
30
-
31
- response = client.publish_interaction(
32
- user_id="user123",
33
- request_id="req456",
34
- interaction_requests=[interaction]
35
- )
36
- print(f"Published interaction: {response.success} - {response.message}")
37
-
38
- # Search user profiles
39
- profiles = client.search_profiles(
40
- user_id="user123",
41
- query="recent interactions",
42
- top_k=5
43
- )
44
- for profile in profiles:
45
- print(f"Profile {profile.profile_id}: {profile.profile_content}")
46
-
47
- # Search interactions
48
- interactions = client.search_interactions(
49
- user_id="user123",
50
- start_time=datetime(2024, 1, 1),
51
- end_time=datetime.now()
52
- )
53
- for interaction in interactions:
54
- print(f"Interaction {interaction.interaction_id}: {interaction.text_interaction}")
55
- ```
56
-
57
- ## Features
58
-
59
- - User interaction management
60
- - Publish user interactions
61
- - Delete user interactions
62
- - Search interactions
63
- - User profile management
64
- - Search user profiles
65
- - Delete user profiles
66
-
67
- ## API Response Types
68
-
69
- All API methods return strongly-typed responses:
70
-
71
- - `publish_interaction()` returns `PublishUserInteractionResponse`
72
- - `search_interactions()` returns `List[Interaction]`
73
- - `search_profiles()` returns `List[UserProfile]`
74
- - `delete_profile()` returns `DeleteUserProfileResponse`
75
- - `delete_interaction()` returns `DeleteUserInteractionResponse`
76
-
77
- ## Documentation
78
-
79
- For detailed documentation, please visit [docs link].
80
-
81
- ## License
82
-
83
- MIT License
@@ -1,29 +0,0 @@
1
- from agenticmem.client import AgenticMemClient
2
- from server.api_schema.service_schemas import (
3
- UserActionType,
4
- ProfileTimeToLive,
5
- InteractionRequest,
6
- Interaction,
7
- UserProfile,
8
- PublishUserInteractionRequest,
9
- PublishUserInteractionResponse,
10
- DeleteUserProfileRequest,
11
- DeleteUserProfileResponse,
12
- DeleteUserInteractionRequest,
13
- DeleteUserInteractionResponse,
14
- )
15
-
16
- __all__ = [
17
- 'AgenticMemClient',
18
- 'UserActionType',
19
- 'ProfileTimeToLive',
20
- 'InteractionRequest',
21
- 'Interaction',
22
- 'UserProfile',
23
- 'PublishUserInteractionRequest',
24
- 'PublishUserInteractionResponse',
25
- 'DeleteUserProfileRequest',
26
- 'DeleteUserProfileResponse',
27
- 'DeleteUserInteractionRequest',
28
- 'DeleteUserInteractionResponse',
29
- ]
@@ -1,203 +0,0 @@
1
- from typing import List, Optional
2
- from datetime import datetime
3
- import requests
4
- from urllib.parse import urljoin
5
-
6
- from server.api_schema.service_schemas import (
7
- Interaction,
8
- InteractionRequest,
9
- UserProfile,
10
- PublishUserInteractionRequest,
11
- PublishUserInteractionResponse,
12
- DeleteUserProfileRequest,
13
- DeleteUserProfileResponse,
14
- DeleteUserInteractionRequest,
15
- DeleteUserInteractionResponse,
16
- )
17
- from server.api_schema.login_schema import Token
18
-
19
-
20
- class AgenticMemClient:
21
- """Client for interacting with the AgenticMem API."""
22
-
23
- def __init__(self, api_key: str):
24
- """Initialize the AgenticMem client.
25
-
26
- Args:
27
- api_key (str): Your API key for authentication
28
- """
29
- self.api_key = api_key
30
- self.base_url = "https://api.agenticmem.com"
31
- self.session = requests.Session()
32
- self.session.headers.update({
33
- "Authorization": f"Bearer {api_key}",
34
- "Content-Type": "application/json"
35
- })
36
-
37
- def _make_request(self, method: str, endpoint: str, **kwargs):
38
- """Make an HTTP request to the API.
39
-
40
- Args:
41
- method (str): HTTP method (GET, POST, DELETE)
42
- endpoint (str): API endpoint
43
- **kwargs: Additional arguments to pass to requests
44
-
45
- Returns:
46
- dict: API response
47
- """
48
- url = urljoin(self.base_url, endpoint)
49
- response = self.session.request(method, url, **kwargs)
50
- response.raise_for_status()
51
- return response.json()
52
-
53
- def login(self, email: str, password: str) -> Token:
54
- """Login to the AgenticMem API.
55
-
56
- Args:
57
- email (str): The user's email
58
- password (str): The user's password
59
-
60
- Returns:
61
- Token: Response containing success status and message
62
- """
63
- response = self._make_request("POST", "/api/login", json={"email": email, "password": password})
64
- return Token(**response)
65
-
66
- def publish_interaction(
67
- self,
68
- user_id: str,
69
- request_id: str,
70
- interaction_requests: List[InteractionRequest]
71
- ) -> PublishUserInteractionResponse:
72
- """Publish user interactions.
73
-
74
- Args:
75
- user_id (str): The user ID
76
- request_id (str): The request ID
77
- interaction_requests (List[InteractionRequest]): List of interaction requests
78
-
79
- Returns:
80
- PublishUserInteractionResponse: Response containing success status and message
81
- """
82
- request = PublishUserInteractionRequest(
83
- user_id=user_id,
84
- request_id=request_id,
85
- interaction_requests=interaction_requests
86
- )
87
- response = self._make_request("POST", "/api/interactions", json=request.model_dump())
88
- return PublishUserInteractionResponse(**response)
89
-
90
- def search_interactions(
91
- self,
92
- user_id: str,
93
- request_id: Optional[str] = None,
94
- query: Optional[str] = None,
95
- start_time: Optional[datetime] = None,
96
- end_time: Optional[datetime] = None,
97
- most_recent_k: Optional[int] = None
98
- ) -> List[Interaction]:
99
- """Search for user interactions.
100
-
101
- Args:
102
- user_id (str): The user ID
103
- request_id (Optional[str], optional): Filter by request ID
104
- query (Optional[str], optional): Search query
105
- start_time (Optional[datetime], optional): Start time filter
106
- end_time (Optional[datetime], optional): End time filter
107
- most_recent_k (Optional[int], optional): Limit to most recent K results
108
-
109
- Returns:
110
- List[Interaction]: List of matching interactions
111
- """
112
- params = {
113
- "user_id": user_id,
114
- "request_id": request_id,
115
- "query": query,
116
- "start_time": start_time,
117
- "end_time": end_time,
118
- "most_recent_k": most_recent_k
119
- }
120
- # Remove None values
121
- params = {k: v for k, v in params.items() if v is not None}
122
- response = self._make_request("GET", "/api/interactions/search", params=params)
123
- return [Interaction(**interaction) for interaction in response.get("interactions", [])]
124
-
125
- def search_profiles(
126
- self,
127
- user_id: str,
128
- genered_from_request_id: Optional[str] = None,
129
- query: Optional[str] = None,
130
- start_time: Optional[datetime] = None,
131
- end_time: Optional[datetime] = None,
132
- top_k: Optional[int] = None
133
- ) -> List[UserProfile]:
134
- """Search for user profiles.
135
-
136
- Args:
137
- user_id (str): The user ID
138
- genered_from_request_id (Optional[str], optional): Filter by request ID that generated the profile
139
- query (Optional[str], optional): Search query
140
- start_time (Optional[datetime], optional): Start time filter
141
- end_time (Optional[datetime], optional): End time filter
142
- top_k (Optional[int], optional): Limit to top K results
143
-
144
- Returns:
145
- List[UserProfile]: List of matching profiles
146
- """
147
- params = {
148
- "user_id": user_id,
149
- "genered_from_request_id": genered_from_request_id,
150
- "query": query,
151
- "start_time": start_time,
152
- "end_time": end_time,
153
- "top_k": top_k
154
- }
155
- # Remove None values
156
- params = {k: v for k, v in params.items() if v is not None}
157
- response = self._make_request("GET", "/api/profiles/search", params=params)
158
- return [UserProfile(**profile) for profile in response.get("user_profiles", [])]
159
-
160
- def delete_profile(
161
- self,
162
- user_id: str,
163
- profile_id: str = "",
164
- profile_search_query: str = ""
165
- ) -> DeleteUserProfileResponse:
166
- """Delete user profiles.
167
-
168
- Args:
169
- user_id (str): The user ID
170
- profile_id (str, optional): Specific profile ID to delete
171
- profile_search_query (str, optional): Query to match profiles for deletion
172
-
173
- Returns:
174
- DeleteUserProfileResponse: Response containing success status and message
175
- """
176
- request = DeleteUserProfileRequest(
177
- user_id=user_id,
178
- profile_id=profile_id,
179
- profile_search_query=profile_search_query
180
- )
181
- response = self._make_request("DELETE", "/api/profiles", json=request.model_dump())
182
- return DeleteUserProfileResponse(**response)
183
-
184
- def delete_interaction(
185
- self,
186
- user_id: str,
187
- interaction_id: str
188
- ) -> DeleteUserInteractionResponse:
189
- """Delete a user interaction.
190
-
191
- Args:
192
- user_id (str): The user ID
193
- interaction_id (str): The interaction ID to delete
194
-
195
- Returns:
196
- DeleteUserInteractionResponse: Response containing success status and message
197
- """
198
- request = DeleteUserInteractionRequest(
199
- user_id=user_id,
200
- interaction_id=interaction_id
201
- )
202
- response = self._make_request("DELETE", "/api/interactions", json=request.model_dump())
203
- return DeleteUserInteractionResponse(**response)
@@ -1,18 +0,0 @@
1
- [tool.poetry]
2
- name = "agenticmem"
3
- version = "0.1.0"
4
- description = "A Python client for the AgenticMem API"
5
- authors = ["AgenticMem Team"]
6
- readme = "README.md"
7
- packages = [{include = "agenticmem"}]
8
- license = "MIT"
9
-
10
- [tool.poetry.dependencies]
11
- python = "^3.7"
12
- requests = "^2.25.0"
13
- pydantic = "^2.0.0"
14
- python-dateutil = "^2.8.0"
15
-
16
- [build-system]
17
- requires = ["poetry-core"]
18
- build-backend = "poetry.core.masonry.api"