intentkit 0.6.8.dev2__py3-none-any.whl → 0.6.9.dev1__py3-none-any.whl

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 intentkit might be problematic. Click here for more details.

intentkit/__init__.py CHANGED
@@ -3,7 +3,7 @@
3
3
  A powerful platform for building AI agents with blockchain and cryptocurrency capabilities.
4
4
  """
5
5
 
6
- __version__ = "0.6.8-dev2"
6
+ __version__ = "0.6.9-dev1"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
intentkit/models/user.py CHANGED
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
  from datetime import datetime, timezone
3
3
  from decimal import Decimal
4
- from typing import Annotated, Optional
4
+ from typing import Annotated, Optional, Type, TypeVar
5
5
 
6
6
  from intentkit.models.base import Base
7
7
  from intentkit.models.credit import CreditAccount
@@ -14,6 +14,47 @@ from sqlalchemy.ext.asyncio import AsyncSession
14
14
  logger = logging.getLogger(__name__)
15
15
 
16
16
 
17
+ # TypeVar for User model constraint
18
+ UserModelType = TypeVar("UserModelType", bound="User")
19
+ UserTableType = TypeVar("UserTableType", bound="UserTable")
20
+
21
+
22
+ class UserRegistry:
23
+ """Registry for extended model classes."""
24
+
25
+ def __init__(self):
26
+ self._user_table_class: Optional[Type[UserTableType]] = None
27
+ self._user_model_class: Optional[Type[UserModelType]] = None
28
+
29
+ def register_user_table(self, user_table_class: Type[UserTableType]) -> None:
30
+ """Register extended UserTable class.
31
+
32
+ Args:
33
+ user_table_class: A class that inherits from UserTable
34
+ """
35
+ self._user_table_class = user_table_class
36
+
37
+ def get_user_table_class(self) -> Type[UserTableType]:
38
+ """Get registered UserTable class or default."""
39
+ return self._user_table_class or UserTable
40
+
41
+ def register_user_model(self, user_model_class: Type[UserModelType]) -> None:
42
+ """Register extended UserModel class.
43
+
44
+ Args:
45
+ user_model_class: A class that inherits from User
46
+ """
47
+ self._user_model_class = user_model_class
48
+
49
+ def get_user_model_class(self) -> Type[UserModelType]:
50
+ """Get registered UserModel class or default."""
51
+ return self._user_model_class or User
52
+
53
+
54
+ # Global registry instance
55
+ user_model_registry = UserRegistry()
56
+
57
+
17
58
  class UserTable(Base):
18
59
  """User database table model."""
19
60
 
@@ -135,13 +176,15 @@ class UserUpdate(BaseModel):
135
176
  Returns:
136
177
  Updated or newly created User model
137
178
  """
179
+ user_model_class = user_model_registry.get_user_model_class()
180
+ user_table_class = user_model_registry.get_user_table_class()
138
181
  async with get_session() as db:
139
- db_user = await db.get(UserTable, id)
182
+ db_user = await db.get(user_table_class, id)
140
183
  old_nft_count = 0 # Default for new users
141
184
 
142
185
  if not db_user:
143
186
  # Create new user if it doesn't exist
144
- db_user = UserTable(id=id)
187
+ db_user = user_table_class(id=id)
145
188
  db.add(db_user)
146
189
  else:
147
190
  old_nft_count = db_user.nft_count
@@ -158,7 +201,7 @@ class UserUpdate(BaseModel):
158
201
  await db.commit()
159
202
  await db.refresh(db_user)
160
203
 
161
- return User.model_validate(db_user)
204
+ return user_model_class.model_validate(db_user)
162
205
 
163
206
  async def put(self, id: str) -> "User":
164
207
  """Replace all fields of a user in the database with the provided values.
@@ -171,13 +214,15 @@ class UserUpdate(BaseModel):
171
214
  Returns:
172
215
  Updated or newly created User model
173
216
  """
217
+ user_model_class = user_model_registry.get_user_model_class()
218
+ user_table_class = user_model_registry.get_user_table_class()
174
219
  async with get_session() as db:
175
- db_user = await db.get(UserTable, id)
220
+ db_user = await db.get(user_table_class, id)
176
221
  old_nft_count = 0 # Default for new users
177
222
 
178
223
  if not db_user:
179
224
  # Create new user if it doesn't exist
180
- db_user = UserTable(id=id)
225
+ db_user = user_table_class(id=id)
181
226
  db.add(db_user)
182
227
  else:
183
228
  old_nft_count = db_user.nft_count
@@ -193,7 +238,7 @@ class UserUpdate(BaseModel):
193
238
  await db.commit()
194
239
  await db.refresh(db_user)
195
240
 
196
- return User.model_validate(db_user)
241
+ return user_model_class.model_validate(db_user)
197
242
 
198
243
 
199
244
  class User(UserUpdate):
@@ -236,7 +281,10 @@ class User(UserUpdate):
236
281
  Returns:
237
282
  User model or None if not found
238
283
  """
239
- result = await session.execute(select(UserTable).where(UserTable.id == user_id))
284
+ user_table_class = user_model_registry.get_user_table_class()
285
+ result = await session.execute(
286
+ select(user_table_class).where(user_table_class.id == user_id)
287
+ )
240
288
  user = result.scalars().first()
241
289
  if user is None:
242
290
  return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.6.8.dev2
3
+ Version: 0.6.9.dev1
4
4
  Summary: Intent-based AI Agent Platform - Core Package
5
5
  Project-URL: Homepage, https://github.com/crestal-network/intentkit
6
6
  Project-URL: Repository, https://github.com/crestal-network/intentkit
@@ -64,8 +64,8 @@ Requires-Dist: langchain-xai>=0.2.1
64
64
  Requires-Dist: langchain<0.4.0,>=0.3.25
65
65
  Requires-Dist: langgraph-checkpoint-postgres<2.0.23,>=2.0.16
66
66
  Requires-Dist: langgraph-checkpoint>=2.0.18
67
- Requires-Dist: langgraph-prebuilt>=0.5.1
68
- Requires-Dist: langgraph>=0.4.3
67
+ Requires-Dist: langgraph-prebuilt<0.6.0,>=0.5.1
68
+ Requires-Dist: langgraph<0.6.0,>=0.5.1
69
69
  Requires-Dist: langmem>=0.0.27
70
70
  Requires-Dist: mypy-boto3-s3<2.0.0,>=1.37.24
71
71
  Requires-Dist: openai>=1.59.6
@@ -1,4 +1,4 @@
1
- intentkit/__init__.py,sha256=VZCUEI9HK5GtcCKtsmbH7h_BJ3cbr0m9LmfqarooGMM,383
1
+ intentkit/__init__.py,sha256=DvWnR7DSV3CNFs0DauTHc22pPwTwOyKkJ_tKCoVp1YE,383
2
2
  intentkit/abstracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  intentkit/abstracts/agent.py,sha256=108gb5W8Q1Sy4G55F2_ZFv2-_CnY76qrBtpIr0Oxxqk,1489
4
4
  intentkit/abstracts/api.py,sha256=ZUc24vaQvQVbbjznx7bV0lbbQxdQPfEV8ZxM2R6wZWo,166
@@ -35,7 +35,7 @@ intentkit/models/generator.py,sha256=lyZu9U9rZUGkqd_QT5SAhay9DY358JJY8EhDSpN8I1M
35
35
  intentkit/models/llm.py,sha256=f_F11cjeXACu5qDB1JaCltWqS_uVb8GqOSmPTq1LYo8,25123
36
36
  intentkit/models/redis.py,sha256=UoN8jqLREO1VO9_w6m-JhldpP19iEHj4TiGVCMutQW4,3702
37
37
  intentkit/models/skill.py,sha256=h_2wtKEbYE29TLsMdaSnjfOv6vXY6GwMU_abw-ONX28,16374
38
- intentkit/models/user.py,sha256=KJLxIuRqZztzG4_QL9eDWhlwWLOGdA8iMGlX5KA7Fyc,7512
38
+ intentkit/models/user.py,sha256=P7l6LOsZmXZ5tDPTczTbqDtDB_MKc_9_ddZkAB2npPk,9288
39
39
  intentkit/skills/__init__.py,sha256=WkjmKB4xvy36zyXMroPMf_DTPgQloNS3L73nVnBmuQI,303
40
40
  intentkit/skills/base.py,sha256=nPHX8kZ-r5ffbCGH6Tnh0KwGWlF1D4zMmnjsFf9iScA,6677
41
41
  intentkit/skills/skills.toml,sha256=iFMn_UmdFFCk4HTHolpSv6Ve6O-iRckJtxVcZ5EjxQM,2634
@@ -395,7 +395,7 @@ intentkit/utils/random.py,sha256=DymMxu9g0kuQLgJUqalvgksnIeLdS-v0aRk5nQU0mLI,452
395
395
  intentkit/utils/s3.py,sha256=9trQNkKQ5VgxWsewVsV8Y0q_pXzGRvsCYP8xauyUYkg,8549
396
396
  intentkit/utils/slack_alert.py,sha256=s7UpRgyzLW7Pbmt8cKzTJgMA9bm4EP-1rQ5KXayHu6E,2264
397
397
  intentkit/utils/tx.py,sha256=2yLLGuhvfBEY5n_GJ8wmIWLCzn0FsYKv5kRNzw_sLUI,1454
398
- intentkit-0.6.8.dev2.dist-info/METADATA,sha256=EK0jvD1SSHNx8CNnaqWrEhS14tNW_cri7WTPpDVdR6U,6328
399
- intentkit-0.6.8.dev2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
400
- intentkit-0.6.8.dev2.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
401
- intentkit-0.6.8.dev2.dist-info/RECORD,,
398
+ intentkit-0.6.9.dev1.dist-info/METADATA,sha256=U8uY2M0KeyU_AwEKh2FLvPkOi92jRiTvnNwjnZGZAFs,6342
399
+ intentkit-0.6.9.dev1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
400
+ intentkit-0.6.9.dev1.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
401
+ intentkit-0.6.9.dev1.dist-info/RECORD,,