agenticmem 0.1.0__tar.gz → 0.1.2__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,144 @@
1
+ Metadata-Version: 2.3
2
+ Name: agenticmem
3
+ Version: 0.1.2
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
+ Classifier: Programming Language :: Python :: 3.12
13
+ Classifier: Programming Language :: Python :: 3.13
14
+ Requires-Dist: agenticmem-commons (==0.1.2)
15
+ Requires-Dist: griffe (==0.48.0)
16
+ Requires-Dist: mkdocstrings[python] (>=0.18.0)
17
+ Requires-Dist: pydantic (>=2.0.0,<3.0.0)
18
+ Requires-Dist: python-dateutil (>=2.8.0,<3.0.0)
19
+ Requires-Dist: requests (>=2.25.0,<3.0.0)
20
+ Description-Content-Type: text/markdown
21
+
22
+ # AgenticMem Python Client
23
+
24
+ A Python client library for interacting with the AgenticMem API. This client provides easy-to-use interfaces for managing user interactions and profiles.
25
+
26
+ ## Installation
27
+
28
+ ```bash
29
+ pip install agenticmem
30
+ ```
31
+
32
+ ## Quick Start
33
+
34
+ ```python
35
+ from agenticmem import AgenticMemClient
36
+ from agenticmem_commons.api_schema.service_schemas import InteractionRequest
37
+ from agenticmem_commons.api_schema.retriever_schema import (
38
+ SearchInteractionRequest,
39
+ SearchUserProfileRequest,
40
+ GetInteractionsRequest,
41
+ GetUserProfilesRequest
42
+ )
43
+ from datetime import datetime
44
+
45
+ # Initialize the client
46
+ client = AgenticMemClient(api_key="your_api_key")
47
+
48
+ # Optional: Login with email/password
49
+ token = client.login(email="user@example.com", password="password123")
50
+
51
+ # Publish a user interaction
52
+ interaction = InteractionRequest(
53
+ created_at=int(datetime.utcnow().timestamp()),
54
+ content="User clicked on product X",
55
+ user_action="click",
56
+ user_action_description="Clicked on product details button"
57
+ )
58
+
59
+ response = client.publish_interaction(
60
+ user_id="user123",
61
+ request_id="req456",
62
+ interaction_requests=[interaction]
63
+ )
64
+ print(f"Published interaction: {response.success} - {response.message}")
65
+
66
+ # Search user profiles
67
+ profiles_request = SearchUserProfileRequest(
68
+ user_id="user123",
69
+ search_query="recent interactions",
70
+ top_k=5
71
+ )
72
+ profiles = client.search_profiles(profiles_request)
73
+ for profile in profiles.profiles:
74
+ print(f"Profile {profile.profile_id}: {profile.profile_content}")
75
+
76
+ # Get user profiles directly
77
+ profiles_request = GetUserProfilesRequest(
78
+ user_id="user123"
79
+ )
80
+ profiles = client.get_profiles(profiles_request)
81
+ for profile in profiles.profiles:
82
+ print(f"Profile: {profile}")
83
+
84
+ # Search interactions
85
+ interactions_request = SearchInteractionRequest(
86
+ user_id="user123",
87
+ start_time=int(datetime(2024, 1, 1).timestamp()),
88
+ end_time=int(datetime.utcnow().timestamp())
89
+ )
90
+ interactions = client.search_interactions(interactions_request)
91
+ for interaction in interactions.interactions:
92
+ print(f"Interaction {interaction.interaction_id}: {interaction.content}")
93
+
94
+ # Get interactions directly
95
+ interactions_request = GetInteractionsRequest(
96
+ user_id="user123"
97
+ )
98
+ interactions = client.get_interactions(interactions_request)
99
+ for interaction in interactions.interactions:
100
+ print(f"Interaction: {interaction}")
101
+
102
+ # Get profile change log
103
+ change_log = client.get_profile_change_log()
104
+ print(f"Profile changes: {change_log}")
105
+ ```
106
+
107
+ ## Features
108
+
109
+ - Authentication
110
+ - API key authentication
111
+ - Email/password login
112
+ - User interaction management
113
+ - Publish user interactions
114
+ - Delete specific interactions
115
+ - Search interactions with time range and filters
116
+ - Get direct list of interactions
117
+ - User profile management
118
+ - Search user profiles with customizable queries
119
+ - Get direct list of user profiles
120
+ - Delete specific profiles or profiles matching a search query
121
+ - View profile change log history
122
+
123
+ ## API Response Types
124
+
125
+ All API methods return strongly-typed responses:
126
+
127
+ - `login()` returns `Token`
128
+ - `publish_interaction()` returns `PublishUserInteractionResponse`
129
+ - `search_interactions()` returns `SearchInteractionResponse`
130
+ - `get_interactions()` returns `GetInteractionsResponse`
131
+ - `search_profiles()` returns `SearchUserProfileResponse`
132
+ - `get_profiles()` returns `GetUserProfilesResponse`
133
+ - `delete_profile()` returns `DeleteUserProfileResponse`
134
+ - `delete_interaction()` returns `DeleteUserInteractionResponse`
135
+ - `get_profile_change_log()` returns `ProfileChangeLogResponse`
136
+
137
+ ## Documentation
138
+
139
+ For detailed documentation, please visit [docs link].
140
+
141
+ ## License
142
+
143
+ MIT License
144
+
@@ -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
+ created_at=int(datetime.utcnow().timestamp()),
33
+ content="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.content}")
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,278 @@
1
+ import aiohttp
2
+ from urllib.parse import urljoin
3
+ import os
4
+ import requests
5
+ from typing import Optional, Union
6
+ from agenticmem_commons.api_schema.retriever_schema import (
7
+ SearchInteractionRequest,
8
+ SearchInteractionResponse,
9
+ SearchUserProfileRequest,
10
+ SearchUserProfileResponse,
11
+ GetInteractionsRequest,
12
+ GetInteractionsResponse,
13
+ GetUserProfilesRequest,
14
+ GetUserProfilesResponse,
15
+ )
16
+
17
+ if os.environ.get("TEST_ENV", True):
18
+ BACKEND_URL = "http://127.0.0.1:8000" # Local server for testing
19
+ else:
20
+ BACKEND_URL = "http://agenticmem-test.us-west-2.elasticbeanstalk.com:8081" # Elastic Beanstalk server url
21
+
22
+ from agenticmem_commons.api_schema.service_schemas import (
23
+ InteractionRequest,
24
+ ProfileChangeLogResponse,
25
+ PublishUserInteractionRequest,
26
+ PublishUserInteractionResponse,
27
+ DeleteUserProfileRequest,
28
+ DeleteUserProfileResponse,
29
+ DeleteUserInteractionRequest,
30
+ DeleteUserInteractionResponse,
31
+ )
32
+ from agenticmem_commons.api_schema.login_schema import Token
33
+
34
+
35
+ class AgenticMemClient:
36
+ """Client for interacting with the AgenticMem API."""
37
+
38
+ def __init__(self, api_key: str = "", url_endpoint: str = ""):
39
+ """Initialize the AgenticMem client.
40
+
41
+ Args:
42
+ api_key (str): Your API key for authentication
43
+ """
44
+ self.api_key = api_key
45
+ self.base_url = url_endpoint if url_endpoint else BACKEND_URL
46
+ self.session = requests.Session()
47
+
48
+ async def _make_async_request(
49
+ self, method: str, endpoint: str, headers: Optional[dict] = None, **kwargs
50
+ ):
51
+ """Make an async HTTP request to the API."""
52
+ url = urljoin(self.base_url, endpoint)
53
+
54
+ headers = headers or {}
55
+ if self.api_key:
56
+ headers.update(
57
+ {
58
+ "Authorization": f"Bearer {self.api_key}",
59
+ "Content-Type": "application/json",
60
+ }
61
+ )
62
+
63
+ async with aiohttp.ClientSession() as async_session:
64
+ response = await async_session.request(
65
+ method, url, headers=headers, **kwargs
66
+ )
67
+ response.raise_for_status()
68
+ return await response.json()
69
+
70
+ def _make_request(
71
+ self, method: str, endpoint: str, headers: Optional[dict] = None, **kwargs
72
+ ):
73
+ """Make an HTTP request to the API.
74
+
75
+ Args:
76
+ method (str): HTTP method (GET, POST, DELETE)
77
+ endpoint (str): API endpoint
78
+ headers (dict, optional): Additional headers to include in the request
79
+ **kwargs: Additional arguments to pass to requests
80
+
81
+ Returns:
82
+ dict: API response
83
+ """
84
+ url = urljoin(self.base_url, endpoint)
85
+ if self.api_key:
86
+ self.session.headers.update(
87
+ {
88
+ "Authorization": f"Bearer {self.api_key}",
89
+ "Content-Type": "application/json",
90
+ }
91
+ )
92
+ if headers:
93
+ self.session.headers.update(headers)
94
+ response = self.session.request(method, url, **kwargs)
95
+ response.raise_for_status()
96
+ return response.json()
97
+
98
+ async def login(self, email: str, password: str) -> Token:
99
+ """Async login to the AgenticMem API."""
100
+ response = await self._make_async_request(
101
+ "POST",
102
+ "/token",
103
+ data={"username": email, "password": password},
104
+ headers={
105
+ "Content-Type": "application/x-www-form-urlencoded",
106
+ "accept": "application/json",
107
+ },
108
+ )
109
+ return Token(**response)
110
+
111
+ async def publish_interaction(
112
+ self,
113
+ request_id: str,
114
+ user_id: str,
115
+ interaction_requests: list[Union[InteractionRequest, dict]],
116
+ source: str = "",
117
+ agent_version: str = "",
118
+ ) -> PublishUserInteractionResponse:
119
+ """Publish user interactions.
120
+
121
+ Args:
122
+ request_id (str): The request ID
123
+ user_id (str): The user ID
124
+ interaction_requests (List[InteractionRequest]): List of interaction requests
125
+ source (str, optional): The source of the interaction
126
+ Returns:
127
+ PublishUserInteractionResponse: Response containing success status and message
128
+ """
129
+ interaction_requests = [
130
+ (
131
+ InteractionRequest(**interaction_request)
132
+ if isinstance(interaction_request, dict)
133
+ else interaction_request
134
+ )
135
+ for interaction_request in interaction_requests
136
+ ]
137
+ request = PublishUserInteractionRequest(
138
+ request_id=request_id,
139
+ user_id=user_id,
140
+ interaction_requests=interaction_requests,
141
+ source=source,
142
+ agent_version=agent_version,
143
+ )
144
+ response = await self._make_async_request(
145
+ "POST",
146
+ "/api/publish_interaction",
147
+ json=request.model_dump(),
148
+ )
149
+ return PublishUserInteractionResponse(**response)
150
+
151
+ async def search_interactions(
152
+ self,
153
+ request: Union[SearchInteractionRequest, dict],
154
+ ) -> SearchInteractionResponse:
155
+ """Search for user interactions.
156
+
157
+ Args:
158
+ request (SearchInteractionRequest): The search request
159
+
160
+ Returns:
161
+ SearchInteractionResponse: Response containing matching interactions
162
+ """
163
+ if isinstance(request, dict):
164
+ request = SearchInteractionRequest(**request)
165
+ response = await self._make_async_request(
166
+ "POST",
167
+ "/api/search_interactions",
168
+ json=request.model_dump(),
169
+ )
170
+ return SearchInteractionResponse(**response)
171
+
172
+ async def search_profiles(
173
+ self,
174
+ request: Union[SearchUserProfileRequest, dict],
175
+ ) -> SearchUserProfileResponse:
176
+ """Search for user profiles.
177
+
178
+ Args:
179
+ request (SearchUserProfileRequest): The search request
180
+
181
+ Returns:
182
+ SearchUserProfileResponse: Response containing matching profiles
183
+ """
184
+ if isinstance(request, dict):
185
+ request = SearchUserProfileRequest(**request)
186
+ response = await self._make_async_request(
187
+ "POST", "/api/search_profiles", json=request.model_dump()
188
+ )
189
+ return SearchUserProfileResponse(**response)
190
+
191
+ async def delete_profile(
192
+ self, user_id: str, profile_id: str = "", search_query: str = ""
193
+ ) -> DeleteUserProfileResponse:
194
+ """Delete user profiles.
195
+
196
+ Args:
197
+ user_id (str): The user ID
198
+ profile_id (str, optional): Specific profile ID to delete
199
+ search_query (str, optional): Query to match profiles for deletion
200
+
201
+ Returns:
202
+ DeleteUserProfileResponse: Response containing success status and message
203
+ """
204
+ request = DeleteUserProfileRequest(
205
+ user_id=user_id,
206
+ profile_id=profile_id,
207
+ search_query=search_query,
208
+ )
209
+ response = await self._make_async_request(
210
+ "DELETE", "/api/delete_profile", json=request.model_dump()
211
+ )
212
+ return DeleteUserProfileResponse(**response)
213
+
214
+ async def delete_interaction(
215
+ self, user_id: str, interaction_id: str
216
+ ) -> DeleteUserInteractionResponse:
217
+ """Delete a user interaction.
218
+
219
+ Args:
220
+ user_id (str): The user ID
221
+ interaction_id (str): The interaction ID to delete
222
+
223
+ Returns:
224
+ DeleteUserInteractionResponse: Response containing success status and message
225
+ """
226
+ request = DeleteUserInteractionRequest(
227
+ user_id=user_id, interaction_id=interaction_id
228
+ )
229
+ response = await self._make_async_request(
230
+ "DELETE", "/api/delete_interaction", json=request.model_dump()
231
+ )
232
+ return DeleteUserInteractionResponse(**response)
233
+
234
+ async def get_profile_change_log(self) -> ProfileChangeLogResponse:
235
+ response = await self._make_async_request("GET", "/api/profile_change_log")
236
+ return ProfileChangeLogResponse(**response)
237
+
238
+ async def get_interactions(
239
+ self,
240
+ request: Union[GetInteractionsRequest, dict],
241
+ ) -> GetInteractionsResponse:
242
+ """Get user interactions.
243
+
244
+ Args:
245
+ request (GetInteractionsRequest): The list request
246
+
247
+ Returns:
248
+ GetInteractionsResponse: Response containing list of interactions
249
+ """
250
+ if isinstance(request, dict):
251
+ request = GetInteractionsRequest(**request)
252
+ response = await self._make_async_request(
253
+ "POST",
254
+ "/api/get_interactions",
255
+ json=request.model_dump(),
256
+ )
257
+ return GetInteractionsResponse(**response)
258
+
259
+ async def get_profiles(
260
+ self,
261
+ request: Union[GetUserProfilesRequest, dict],
262
+ ) -> GetUserProfilesResponse:
263
+ """Get user profiles.
264
+
265
+ Args:
266
+ request (GetUserProfilesRequest): The list request
267
+
268
+ Returns:
269
+ GetUserProfilesResponse: Response containing list of profiles
270
+ """
271
+ if isinstance(request, dict):
272
+ request = GetUserProfilesRequest(**request)
273
+ response = await self._make_async_request(
274
+ "POST",
275
+ "/api/get_profiles",
276
+ json=request.model_dump(),
277
+ )
278
+ 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.2"
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.2"
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"