intentkit 0.6.5.dev3__py3-none-any.whl → 0.6.5.dev6__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.5-dev3"
6
+ __version__ = "0.6.5-dev6"
7
7
  __author__ = "hyacinthus"
8
8
  __email__ = "hyacinthus@gmail.com"
9
9
 
@@ -103,8 +103,6 @@ class TwitterClient(TwitterABC):
103
103
  """
104
104
  if not self._agent_data:
105
105
  self._agent_data = await self._skill_store.get_agent_data(self.agent_id)
106
- if not self._agent_data:
107
- raise Exception(f"[{self.agent_id}] Agent data not found")
108
106
  if not self._client:
109
107
  # Check if we have API keys in config
110
108
  if self.use_key:
@@ -351,7 +349,7 @@ class TwitterClient(TwitterABC):
351
349
  """
352
350
  # Get agent data to access the token
353
351
  agent_data = await self._skill_store.get_agent_data(agent_id)
354
- if not agent_data or not agent_data.twitter_access_token:
352
+ if not agent_data.twitter_access_token:
355
353
  raise ValueError("Only linked X account can post media")
356
354
 
357
355
  media_ids = []
intentkit/core/engine.py CHANGED
@@ -126,7 +126,7 @@ async def create_agent(
126
126
  Returns:
127
127
  CompiledStateGraph: Initialized LangChain agent
128
128
  """
129
- agent_data: Optional[AgentData] = await AgentData.get(agent.id)
129
+ agent_data = await AgentData.get(agent.id)
130
130
 
131
131
  # ==== Initialize LLM using the LLM abstraction.
132
132
  from intentkit.models.llm import create_llm_model
intentkit/core/skill.py CHANGED
@@ -31,15 +31,15 @@ class SkillStore(SkillStoreABC):
31
31
  return await Agent.get(agent_id)
32
32
 
33
33
  @staticmethod
34
- async def get_agent_data(agent_id: str) -> Optional[AgentData]:
34
+ async def get_agent_data(agent_id: str) -> AgentData:
35
35
  return await AgentData.get(agent_id)
36
36
 
37
37
  @staticmethod
38
- async def set_agent_data(agent_id: str, data: Dict) -> None:
38
+ async def set_agent_data(agent_id: str, data: Dict) -> AgentData:
39
39
  return await AgentData.patch(agent_id, data)
40
40
 
41
41
  @staticmethod
42
- async def get_agent_quota(agent_id: str) -> Optional[AgentQuota]:
42
+ async def get_agent_quota(agent_id: str) -> AgentQuota:
43
43
  return await AgentQuota.get(agent_id)
44
44
 
45
45
  @staticmethod
intentkit/models/agent.py CHANGED
@@ -1586,7 +1586,9 @@ class AgentResponse(BaseModel):
1586
1586
  if skill_config.get("enabled") is True:
1587
1587
  filtered_config = {"enabled": True}
1588
1588
  # Only keep states with public or private values
1589
- if "states" in skill_config:
1589
+ if "states" in skill_config and isinstance(
1590
+ skill_config["states"], dict
1591
+ ):
1590
1592
  filtered_states = {}
1591
1593
  for state_key, state_value in skill_config[
1592
1594
  "states"
@@ -34,11 +34,6 @@ class AgentDataTable(Base):
34
34
  String, nullable=True, comment="Solana wallet address"
35
35
  )
36
36
  cdp_wallet_data = Column(String, nullable=True, comment="CDP wallet data")
37
- crossmint_wallet_data = Column(
38
- JSON().with_variant(JSONB(), "postgresql"),
39
- nullable=True,
40
- comment="Crossmint wallet information",
41
- )
42
37
  twitter_id = Column(String, nullable=True, comment="Twitter user ID")
43
38
  twitter_username = Column(String, nullable=True, comment="Twitter username")
44
39
  twitter_name = Column(String, nullable=True, comment="Twitter display name")
@@ -104,126 +99,119 @@ class AgentData(BaseModel):
104
99
  default=None,
105
100
  description="EVM wallet address",
106
101
  ),
107
- ]
102
+ ] = None
108
103
  solana_wallet_address: Annotated[
109
104
  Optional[str],
110
105
  PydanticField(
111
106
  default=None,
112
107
  description="Solana wallet address",
113
108
  ),
114
- ]
109
+ ] = None
115
110
  cdp_wallet_data: Annotated[
116
111
  Optional[str],
117
112
  PydanticField(
118
113
  default=None,
119
114
  description="CDP wallet data",
120
115
  ),
121
- ]
122
- crossmint_wallet_data: Annotated[
123
- Optional[dict],
124
- PydanticField(
125
- default=None,
126
- description="Crossmint wallet information",
127
- ),
128
- ]
116
+ ] = None
129
117
  twitter_id: Annotated[
130
118
  Optional[str],
131
119
  PydanticField(
132
120
  default=None,
133
121
  description="Twitter user ID",
134
122
  ),
135
- ]
123
+ ] = None
136
124
  twitter_username: Annotated[
137
125
  Optional[str],
138
126
  PydanticField(
139
127
  default=None,
140
128
  description="Twitter username",
141
129
  ),
142
- ]
130
+ ] = None
143
131
  twitter_name: Annotated[
144
132
  Optional[str],
145
133
  PydanticField(
146
134
  default=None,
147
135
  description="Twitter display name",
148
136
  ),
149
- ]
137
+ ] = None
150
138
  twitter_access_token: Annotated[
151
139
  Optional[str],
152
140
  PydanticField(
153
141
  default=None,
154
142
  description="Twitter access token",
155
143
  ),
156
- ]
144
+ ] = None
157
145
  twitter_access_token_expires_at: Annotated[
158
146
  Optional[datetime],
159
147
  PydanticField(
160
148
  default=None,
161
149
  description="Twitter access token expiration time",
162
150
  ),
163
- ]
151
+ ] = None
164
152
  twitter_refresh_token: Annotated[
165
153
  Optional[str],
166
154
  PydanticField(
167
155
  default=None,
168
156
  description="Twitter refresh token",
169
157
  ),
170
- ]
158
+ ] = None
171
159
  twitter_self_key_refreshed_at: Annotated[
172
160
  Optional[datetime],
173
161
  PydanticField(
174
162
  default=None,
175
163
  description="Twitter self-key userinfo last refresh time",
176
164
  ),
177
- ]
165
+ ] = None
178
166
  twitter_is_verified: Annotated[
179
167
  bool,
180
168
  PydanticField(
181
169
  default=False,
182
170
  description="Whether the Twitter account is verified",
183
171
  ),
184
- ]
172
+ ] = None
185
173
  telegram_id: Annotated[
186
174
  Optional[str],
187
175
  PydanticField(
188
176
  default=None,
189
177
  description="Telegram user ID",
190
178
  ),
191
- ]
179
+ ] = None
192
180
  telegram_username: Annotated[
193
181
  Optional[str],
194
182
  PydanticField(
195
183
  default=None,
196
184
  description="Telegram username",
197
185
  ),
198
- ]
186
+ ] = None
199
187
  telegram_name: Annotated[
200
188
  Optional[str],
201
189
  PydanticField(
202
190
  default=None,
203
191
  description="Telegram display name",
204
192
  ),
205
- ]
193
+ ] = None
206
194
  error_message: Annotated[
207
195
  Optional[str],
208
196
  PydanticField(
209
197
  default=None,
210
198
  description="Last error message",
211
199
  ),
212
- ]
200
+ ] = None
213
201
  api_key: Annotated[
214
202
  Optional[str],
215
203
  PydanticField(
216
204
  default=None,
217
205
  description="API key for the agent",
218
206
  ),
219
- ]
207
+ ] = None
220
208
  api_key_public: Annotated[
221
209
  Optional[str],
222
210
  PydanticField(
223
211
  default=None,
224
212
  description="Public API key for the agent",
225
213
  ),
226
- ]
214
+ ] = None
227
215
  created_at: Annotated[
228
216
  datetime,
229
217
  PydanticField(
@@ -240,7 +228,7 @@ class AgentData(BaseModel):
240
228
  ]
241
229
 
242
230
  @classmethod
243
- async def get(cls, agent_id: str) -> Optional["AgentData"]:
231
+ async def get(cls, agent_id: str) -> "AgentData":
244
232
  """Get agent data by ID.
245
233
 
246
234
  Args:
@@ -56,11 +56,7 @@
56
56
  }
57
57
  ],
58
58
  "required": [
59
- "name",
60
- "model",
61
- "purpose",
62
- "personality",
63
- "principles"
59
+ "name"
64
60
  ],
65
61
  "properties": {
66
62
  "name": {
intentkit/models/chat.py CHANGED
@@ -447,6 +447,32 @@ class ChatMessage(ChatMessageCreate):
447
447
 
448
448
  return resp
449
449
 
450
+ def sanitize_privacy(self) -> "ChatMessage":
451
+ """Remove sensitive information from the chat message.
452
+
453
+ This method clears the message content and removes parameters and response
454
+ from skill calls while preserving the structure and metadata.
455
+
456
+ Returns:
457
+ ChatMessage: A new ChatMessage instance with sensitive data removed
458
+ """
459
+ # Create a copy of the current message
460
+ sanitized_data = self.model_dump()
461
+
462
+ # Clear the message content
463
+ sanitized_data["message"] = ""
464
+
465
+ # Clear sensitive data from skill calls
466
+ if sanitized_data.get("skill_calls"):
467
+ for skill_call in sanitized_data["skill_calls"]:
468
+ # Clear parameters and response while keeping structure
469
+ skill_call["parameters"] = {}
470
+ if "response" in skill_call:
471
+ skill_call["response"] = ""
472
+
473
+ # Return a new ChatMessage instance with sanitized data
474
+ return ChatMessage.model_validate(sanitized_data)
475
+
450
476
  @classmethod
451
477
  async def get(cls, message_id: str) -> Optional["ChatMessage"]:
452
478
  async with get_session() as db:
@@ -45,9 +45,6 @@ class ReadAgentApiKey(SystemBaseTool):
45
45
  # Get agent data from skill store
46
46
  agent_data = await self.skill_store.get_agent_data(agent_id)
47
47
 
48
- if not agent_data:
49
- raise ValueError(f"Agent data not found for agent_id: {agent_id}")
50
-
51
48
  # Get API base URL from system config
52
49
  open_api_base_url = self.skill_store.get_system_config("open_api_base_url")
53
50
  api_endpoint = f"{open_api_base_url}/v1/chat/completions"
@@ -49,9 +49,6 @@ class RegenerateAgentApiKey(SystemBaseTool):
49
49
  # Get agent data from skill store
50
50
  agent_data = await self.skill_store.get_agent_data(agent_id)
51
51
 
52
- if not agent_data:
53
- raise ValueError(f"Agent data not found for agent_id: {agent_id}")
54
-
55
52
  # Get API base URL from system config
56
53
  open_api_base_url = self.skill_store.get_system_config("open_api_base_url")
57
54
  api_endpoint = f"{open_api_base_url}/v1/chat/completions"
@@ -78,27 +78,6 @@ class TextToSpeech(UnrealSpeechBaseTool):
78
78
  context.config.get("api_key", None) if context and context.config else None
79
79
  )
80
80
 
81
- # If no API key in config, try to get it from skill store
82
- if not api_key:
83
- try:
84
- agent_id = context.agent_id
85
- api_key_data = await self.skill_store.get_agent_data(
86
- agent_id, "unrealspeech_api_key"
87
- )
88
- api_key = api_key_data.get("api_key") if api_key_data else None
89
- except Exception as e:
90
- logger.warning(f"Failed to get API key from skill store: {e}")
91
-
92
- # If still no API key, check environment variables (handled by UnrealSpeech client)
93
- if not api_key:
94
- env_key = self.get_env_var("UNREALSPEECH_API_KEY")
95
- if not env_key:
96
- return {
97
- "success": False,
98
- "error": "No UnrealSpeech API key found. Please set the UNREALSPEECH_API_KEY environment variable or provide it in the agent configuration.",
99
- }
100
- api_key = env_key
101
-
102
81
  # Clean up and validate input
103
82
  if not text:
104
83
  return {"success": False, "error": "Text cannot be empty."}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intentkit
3
- Version: 0.6.5.dev3
3
+ Version: 0.6.5.dev6
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
@@ -1,4 +1,4 @@
1
- intentkit/__init__.py,sha256=3BrX5qMtwlJA1bKb8TwzMYCjIDGsUue1JKasbuCNbqE,383
1
+ intentkit/__init__.py,sha256=mrkJ-1UVO5FyDFXp7asMWz7UyRynMw638zfo1hkPNHg,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
@@ -9,7 +9,7 @@ intentkit/abstracts/skill.py,sha256=WS8G_XP0Ukw1eUB-dhbx6FrJUbvV4tqzRnkWa2dt9ck,
9
9
  intentkit/abstracts/twitter.py,sha256=cEtP7ygR_b-pHdc9i8kBuyooz1cPoGUGwsBHDpowJyY,1262
10
10
  intentkit/clients/__init__.py,sha256=sQ_6_bRC2MPWLPH-skQ3qsEe8ce-dUGL7i8VJOautHg,298
11
11
  intentkit/clients/cdp.py,sha256=_CkvnBkzdq7-sFMGct4lz85FpaOoHxOGstWubhClzrA,5921
12
- intentkit/clients/twitter.py,sha256=gT7lXYAeRACZGYrTOPjoGoVNWAC1-qn9gkASVTeDL4M,19106
12
+ intentkit/clients/twitter.py,sha256=Lfa7srHOFnY96SXcElW0jfg7XKS_WliWnXjPZEe6SQc,18976
13
13
  intentkit/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  intentkit/config/config.py,sha256=Gn3KXgFyh4u0zmb-Awpu4AxvDFaGDa_5GrFrKBbOAXk,7509
15
15
  intentkit/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -17,16 +17,16 @@ intentkit/core/agent.py,sha256=PTHsFV_EbsfPUcTI0ErkebWurjxVykP9ISbNUsqV44Q,7764
17
17
  intentkit/core/api.py,sha256=3GIMJpwduLUSbVPNW6mQVxZncYHH3OlLwdiqFtYtEAE,1208
18
18
  intentkit/core/client.py,sha256=rIwtJVVm-7piXtFNDbeykt9vWdNTecgjW0aA3N-lHnM,1495
19
19
  intentkit/core/credit.py,sha256=vLT47NlLrGyvSU1OP8dkVXV5_VHqRNSeAK5t1FqSSYs,61742
20
- intentkit/core/engine.py,sha256=ZoMk8fBUg1fqbELT8Pi8vB667ytFqAT4mQfUNt5g_H0,41192
20
+ intentkit/core/engine.py,sha256=7RpT8KTRuBqQEJNpzrFWyOM6Qc0OUCBR-T1PN76BFGA,41171
21
21
  intentkit/core/node.py,sha256=RqAdcR1Fcpgw4k7q9l1Sry8LgcuZWdNxSjOHDcoavCI,9108
22
22
  intentkit/core/prompt.py,sha256=RfLhlUktkB2kCr3wfldqq6ZP2l8heZIMc8jVp31KIyQ,3631
23
- intentkit/core/skill.py,sha256=fFM_HVc8Qam2zICb_dH3nRcInEXdtfgzFnL0vvMNz2Y,3830
24
- intentkit/models/agent.py,sha256=JnISK4SuS-50xXcoLHqFSBrRVdcn7-qQjaqF4L8b8A8,56565
25
- intentkit/models/agent_data.py,sha256=x3pYRpI0QUcaK09r0m8-06rSbQB4pKEymF5d9JCemlo,27465
26
- intentkit/models/agent_schema.json,sha256=M5MMMAVNJnp6kE8hjti6D0WLdFIGtIdF66_Cg6nZfJU,21724
23
+ intentkit/core/skill.py,sha256=d6VNArNseavb_OaSvmGRMFivYOjX7T6AyKpz9tjhVPI,3815
24
+ intentkit/models/agent.py,sha256=hkcQIpIk84hObCJWDbtxyEDdCZrJ-KSIP2n5lFv0aFo,56664
25
+ intentkit/models/agent_data.py,sha256=4fhhtTh9bl1hzHiaVYHy1RyaFjIqrDxEcRgnbrkKOKM,27225
26
+ intentkit/models/agent_schema.json,sha256=5RMn474uWeN8Mo7RwPQuvPa5twXcenNbUjXCWjzywrI,21659
27
27
  intentkit/models/app_setting.py,sha256=WgW-9t0EbiVemRLrVaC6evdfRU5QFSDK0elsnUU5nIo,5008
28
28
  intentkit/models/base.py,sha256=o-zRjVrak-f5Jokdvj8BjLm8gcC3yYiYMCTLegwT2lA,185
29
- intentkit/models/chat.py,sha256=2P9dPWEti9f7XbO6L6Kp89lcYuyymSwqzxhL4GfBmBc,18019
29
+ intentkit/models/chat.py,sha256=O-7qmFh9Qag-gY2xXR6tpLJ1i-D0wQzzZ1hXnrt0BA0,19052
30
30
  intentkit/models/conversation.py,sha256=nrbDIw-3GK5BYi_xkI15FLdx4a6SNrFK8wfAGLCsrqk,9032
31
31
  intentkit/models/credit.py,sha256=95buGlZwIuoSPasZcqYEKvdrnUiUe2RzJCR3a2rvQvU,42397
32
32
  intentkit/models/db.py,sha256=Ked8-PsvKvqxgvytGpWlDxZNgEuyac-uGM0xWWshKmY,4210
@@ -293,8 +293,8 @@ intentkit/skills/supabase/update_data.py,sha256=Hbwsoa52GZNTPIhWdR9vj9VlcPRUn_vC
293
293
  intentkit/skills/supabase/upsert_data.py,sha256=JgKLFPcQkUwnQhqTZojT4Ae53hYULeGEkQ1gxZJEe-c,2538
294
294
  intentkit/skills/system/__init__.py,sha256=y5sBakdOL1vtXV8DNn-g_MN11CrJ8QrOceoJjD5MzXs,2402
295
295
  intentkit/skills/system/base.py,sha256=Sm4lSNgbxwGK5YimnBfwi3Hc8E1EwSMZIXsCJbIPiLM,700
296
- intentkit/skills/system/read_agent_api_key.py,sha256=PmTi4dJ1yDsowPHk4iT0bR-g9Il_UOg895a8aWvCrUQ,3517
297
- intentkit/skills/system/regenerate_agent_api_key.py,sha256=BaF9l3zDyzJNLoVT8ZAaZTmpXaDwumLW8VO8RLVjLyI,3177
296
+ intentkit/skills/system/read_agent_api_key.py,sha256=x8DIQwDxZ1MONz4tyN3o6QUf2-2aEjZd4yVOY28-IaU,3410
297
+ intentkit/skills/system/regenerate_agent_api_key.py,sha256=AiFXOEIRxXJRWiDufKCi3_ViyAyK19P1XZOleM1eQUc,3070
298
298
  intentkit/skills/system/schema.json,sha256=4lv144DEDz9m1NYQdTgke3nDyCrVsGm82QiIoLbIRww,1462
299
299
  intentkit/skills/system/system.svg,sha256=PVbC6r6rOhvht0lB1fcxDNTcbMUa7haHAkJ8rxp7gm0,3740
300
300
  intentkit/skills/tavily/README.md,sha256=VagMkuHrS_ge2Sir9M9CoeqmWc_rysKhTO9-LGICQsA,2840
@@ -331,7 +331,7 @@ intentkit/skills/twitter/twitter.png,sha256=MggF-4UC40K2mf1K0hqsIFzCmw-n_2yMSH50
331
331
  intentkit/skills/unrealspeech/__init__.py,sha256=1A8084j67jltD4njAsCJVTP7IsPYxTghz2IbtuNS4O8,1588
332
332
  intentkit/skills/unrealspeech/base.py,sha256=0-cWJ58OIswy9O2SENU4VzSbTw5FuhboFNfCRqEtTEI,623
333
333
  intentkit/skills/unrealspeech/schema.json,sha256=9BpixY-SJ4bJP3ODAJpoloCjQaR1djFALqDtQisqpdY,2551
334
- intentkit/skills/unrealspeech/text_to_speech.py,sha256=5qdeQAyRCPnO_EkhtPAGQPt6l1aLlAjTIX0N7Qbhapw,7092
334
+ intentkit/skills/unrealspeech/text_to_speech.py,sha256=H8UoY_Rh7ogOSgVWabfpxGSKDM8a-mn9plI0wTF7mRM,6124
335
335
  intentkit/skills/unrealspeech/unrealspeech.jpg,sha256=t-6RkYflJrL3Pvf5aA_VPAR_QlGyKUImXZBJLiyR3xY,8201
336
336
  intentkit/skills/venice_audio/__init__.py,sha256=E39CeSUHRoGV9IxNUtwo-nCp0Yfq5rvcrq1N61ygwGc,3309
337
337
  intentkit/skills/venice_audio/base.py,sha256=u1WA8gA7lM1EGIXxVaoUw_uW4xuO-xiJsoIiZ254wjY,4780
@@ -390,7 +390,7 @@ intentkit/utils/random.py,sha256=DymMxu9g0kuQLgJUqalvgksnIeLdS-v0aRk5nQU0mLI,452
390
390
  intentkit/utils/s3.py,sha256=9trQNkKQ5VgxWsewVsV8Y0q_pXzGRvsCYP8xauyUYkg,8549
391
391
  intentkit/utils/slack_alert.py,sha256=s7UpRgyzLW7Pbmt8cKzTJgMA9bm4EP-1rQ5KXayHu6E,2264
392
392
  intentkit/utils/tx.py,sha256=2yLLGuhvfBEY5n_GJ8wmIWLCzn0FsYKv5kRNzw_sLUI,1454
393
- intentkit-0.6.5.dev3.dist-info/METADATA,sha256=UtTKDrtt2s1FnYib3keiB48DWzoFp487ptOfBIu2sYg,6321
394
- intentkit-0.6.5.dev3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
395
- intentkit-0.6.5.dev3.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
396
- intentkit-0.6.5.dev3.dist-info/RECORD,,
393
+ intentkit-0.6.5.dev6.dist-info/METADATA,sha256=2DHQB8YDWOBjJPg9o8c7xcDs75kURuWaBeqk9eSXXjo,6321
394
+ intentkit-0.6.5.dev6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
395
+ intentkit-0.6.5.dev6.dist-info/licenses/LICENSE,sha256=Bln6DhK-LtcO4aXy-PBcdZv2f24MlJFm_qn222biJtE,1071
396
+ intentkit-0.6.5.dev6.dist-info/RECORD,,