intentkit 0.8.6.dev2__py3-none-any.whl → 0.8.17__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.

Files changed (312) hide show
  1. intentkit/__init__.py +1 -1
  2. intentkit/abstracts/agent.py +4 -5
  3. intentkit/abstracts/engine.py +5 -5
  4. intentkit/abstracts/graph.py +10 -5
  5. intentkit/abstracts/skill.py +6 -144
  6. intentkit/abstracts/twitter.py +4 -5
  7. intentkit/clients/__init__.py +3 -2
  8. intentkit/clients/cdp.py +53 -92
  9. intentkit/clients/twitter.py +56 -57
  10. intentkit/clients/web3.py +1 -3
  11. intentkit/config/config.py +5 -0
  12. intentkit/core/agent.py +16 -388
  13. intentkit/core/asset.py +64 -18
  14. intentkit/core/client.py +1 -1
  15. intentkit/core/credit.py +19 -20
  16. intentkit/core/engine.py +26 -11
  17. intentkit/core/node.py +2 -1
  18. intentkit/core/prompt.py +53 -15
  19. intentkit/core/scheduler.py +9 -9
  20. intentkit/core/statistics.py +6 -7
  21. intentkit/models/agent.py +256 -176
  22. intentkit/models/agent_data.py +62 -36
  23. intentkit/models/agent_schema.json +6 -9
  24. intentkit/models/app_setting.py +6 -6
  25. intentkit/models/chat.py +28 -24
  26. intentkit/models/conversation.py +8 -8
  27. intentkit/models/credit.py +62 -64
  28. intentkit/models/db.py +8 -7
  29. intentkit/models/db_mig.py +2 -2
  30. intentkit/models/llm.csv +15 -12
  31. intentkit/models/llm.py +18 -16
  32. intentkit/models/redis.py +2 -3
  33. intentkit/models/skill.py +62 -66
  34. intentkit/models/skills.csv +30 -26
  35. intentkit/models/user.py +46 -21
  36. intentkit/skills/acolyt/__init__.py +2 -9
  37. intentkit/skills/acolyt/ask.py +3 -4
  38. intentkit/skills/acolyt/base.py +4 -9
  39. intentkit/skills/aixbt/__init__.py +2 -13
  40. intentkit/skills/aixbt/base.py +1 -7
  41. intentkit/skills/aixbt/projects.py +14 -15
  42. intentkit/skills/allora/__init__.py +2 -9
  43. intentkit/skills/allora/base.py +4 -9
  44. intentkit/skills/allora/price.py +3 -4
  45. intentkit/skills/base.py +175 -52
  46. intentkit/skills/basename/__init__.py +4 -8
  47. intentkit/skills/carv/__init__.py +115 -121
  48. intentkit/skills/carv/base.py +184 -185
  49. intentkit/skills/carv/fetch_news.py +3 -3
  50. intentkit/skills/carv/onchain_query.py +4 -4
  51. intentkit/skills/carv/token_info_and_price.py +5 -5
  52. intentkit/skills/casino/__init__.py +4 -15
  53. intentkit/skills/casino/base.py +1 -7
  54. intentkit/skills/casino/deck_draw.py +5 -8
  55. intentkit/skills/casino/deck_shuffle.py +6 -6
  56. intentkit/skills/casino/dice_roll.py +2 -4
  57. intentkit/skills/cdp/__init__.py +3 -10
  58. intentkit/skills/cdp/base.py +1 -7
  59. intentkit/skills/cdp/schema.json +1 -17
  60. intentkit/skills/chainlist/__init__.py +2 -7
  61. intentkit/skills/chainlist/base.py +1 -7
  62. intentkit/skills/chainlist/chain_lookup.py +18 -18
  63. intentkit/skills/common/__init__.py +2 -9
  64. intentkit/skills/common/base.py +1 -7
  65. intentkit/skills/common/current_time.py +1 -2
  66. intentkit/skills/cookiefun/__init__.py +6 -9
  67. intentkit/skills/cookiefun/base.py +2 -7
  68. intentkit/skills/cookiefun/get_account_details.py +7 -7
  69. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  70. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  71. intentkit/skills/cookiefun/get_sectors.py +3 -3
  72. intentkit/skills/cookiefun/search_accounts.py +9 -9
  73. intentkit/skills/cryptocompare/__init__.py +7 -24
  74. intentkit/skills/cryptocompare/api.py +2 -3
  75. intentkit/skills/cryptocompare/base.py +10 -24
  76. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  77. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  78. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  79. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  80. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  81. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  82. intentkit/skills/cryptopanic/__init__.py +7 -10
  83. intentkit/skills/cryptopanic/base.py +51 -55
  84. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  85. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  86. intentkit/skills/dapplooker/__init__.py +2 -9
  87. intentkit/skills/dapplooker/base.py +4 -9
  88. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  89. intentkit/skills/defillama/__init__.py +24 -74
  90. intentkit/skills/defillama/api.py +6 -9
  91. intentkit/skills/defillama/base.py +8 -19
  92. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  93. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  94. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  95. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  96. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  97. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  98. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  99. intentkit/skills/defillama/config/chains.py +1 -3
  100. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  101. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  102. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  103. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  104. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  105. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  106. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  107. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  108. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  109. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  110. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  111. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  112. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  113. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  114. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  115. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  116. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  117. intentkit/skills/dexscreener/__init__.py +97 -102
  118. intentkit/skills/dexscreener/base.py +125 -130
  119. intentkit/skills/dexscreener/get_pair_info.py +4 -5
  120. intentkit/skills/dexscreener/get_token_pairs.py +4 -5
  121. intentkit/skills/dexscreener/get_tokens_info.py +7 -8
  122. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  123. intentkit/skills/dexscreener/search_token.py +182 -184
  124. intentkit/skills/dexscreener/utils.py +15 -14
  125. intentkit/skills/dune_analytics/__init__.py +7 -9
  126. intentkit/skills/dune_analytics/base.py +48 -52
  127. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  128. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  129. intentkit/skills/elfa/__init__.py +5 -18
  130. intentkit/skills/elfa/base.py +10 -14
  131. intentkit/skills/elfa/mention.py +19 -21
  132. intentkit/skills/elfa/stats.py +4 -4
  133. intentkit/skills/elfa/tokens.py +12 -12
  134. intentkit/skills/elfa/utils.py +26 -28
  135. intentkit/skills/enso/__init__.py +11 -31
  136. intentkit/skills/enso/base.py +9 -15
  137. intentkit/skills/enso/best_yield.py +5 -7
  138. intentkit/skills/enso/networks.py +3 -9
  139. intentkit/skills/enso/prices.py +2 -4
  140. intentkit/skills/enso/route.py +6 -12
  141. intentkit/skills/enso/tokens.py +4 -16
  142. intentkit/skills/enso/wallet.py +6 -6
  143. intentkit/skills/erc20/__init__.py +5 -11
  144. intentkit/skills/erc721/__init__.py +5 -9
  145. intentkit/skills/firecrawl/__init__.py +5 -18
  146. intentkit/skills/firecrawl/base.py +4 -9
  147. intentkit/skills/firecrawl/clear.py +4 -8
  148. intentkit/skills/firecrawl/crawl.py +19 -19
  149. intentkit/skills/firecrawl/query.py +4 -3
  150. intentkit/skills/firecrawl/scrape.py +17 -22
  151. intentkit/skills/firecrawl/utils.py +50 -42
  152. intentkit/skills/github/__init__.py +2 -7
  153. intentkit/skills/github/base.py +1 -7
  154. intentkit/skills/github/github_search.py +1 -2
  155. intentkit/skills/heurist/__init__.py +8 -27
  156. intentkit/skills/heurist/base.py +4 -9
  157. intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
  158. intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
  159. intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
  160. intentkit/skills/heurist/image_generation_braindance.py +12 -13
  161. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
  162. intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
  163. intentkit/skills/heurist/image_generation_sdxl.py +12 -13
  164. intentkit/skills/http/__init__.py +4 -15
  165. intentkit/skills/http/base.py +1 -7
  166. intentkit/skills/http/get.py +21 -16
  167. intentkit/skills/http/post.py +23 -18
  168. intentkit/skills/http/put.py +23 -18
  169. intentkit/skills/lifi/__init__.py +5 -10
  170. intentkit/skills/lifi/base.py +1 -7
  171. intentkit/skills/lifi/token_execute.py +14 -17
  172. intentkit/skills/lifi/token_quote.py +7 -9
  173. intentkit/skills/lifi/utils.py +16 -16
  174. intentkit/skills/moralis/__init__.py +6 -10
  175. intentkit/skills/moralis/api.py +6 -7
  176. intentkit/skills/moralis/base.py +5 -10
  177. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  178. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  179. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  180. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  181. intentkit/skills/morpho/__init__.py +5 -9
  182. intentkit/skills/nation/__init__.py +4 -9
  183. intentkit/skills/nation/base.py +5 -10
  184. intentkit/skills/nation/nft_check.py +3 -4
  185. intentkit/skills/onchain.py +23 -0
  186. intentkit/skills/openai/__init__.py +17 -18
  187. intentkit/skills/openai/base.py +10 -14
  188. intentkit/skills/openai/dalle_image_generation.py +3 -8
  189. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  190. intentkit/skills/openai/gpt_image_generation.py +4 -8
  191. intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
  192. intentkit/skills/openai/gpt_image_to_image.py +4 -8
  193. intentkit/skills/openai/image_to_text.py +3 -7
  194. intentkit/skills/openai/schema.json +32 -0
  195. intentkit/skills/portfolio/__init__.py +11 -35
  196. intentkit/skills/portfolio/base.py +33 -19
  197. intentkit/skills/portfolio/token_balances.py +21 -21
  198. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  199. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  200. intentkit/skills/portfolio/wallet_history.py +31 -31
  201. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  202. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  203. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  204. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  205. intentkit/skills/portfolio/wallet_stats.py +3 -3
  206. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  207. intentkit/skills/pyth/__init__.py +4 -10
  208. intentkit/skills/skills.toml +4 -0
  209. intentkit/skills/slack/__init__.py +5 -17
  210. intentkit/skills/slack/base.py +3 -9
  211. intentkit/skills/slack/get_channel.py +8 -8
  212. intentkit/skills/slack/get_message.py +9 -9
  213. intentkit/skills/slack/schedule_message.py +5 -5
  214. intentkit/skills/slack/send_message.py +3 -5
  215. intentkit/skills/supabase/__init__.py +7 -23
  216. intentkit/skills/supabase/base.py +1 -7
  217. intentkit/skills/supabase/delete_data.py +4 -4
  218. intentkit/skills/supabase/fetch_data.py +12 -12
  219. intentkit/skills/supabase/insert_data.py +4 -4
  220. intentkit/skills/supabase/invoke_function.py +6 -6
  221. intentkit/skills/supabase/update_data.py +6 -6
  222. intentkit/skills/supabase/upsert_data.py +4 -4
  223. intentkit/skills/superfluid/__init__.py +5 -9
  224. intentkit/skills/system/__init__.py +7 -24
  225. intentkit/skills/system/add_autonomous_task.py +10 -12
  226. intentkit/skills/system/delete_autonomous_task.py +2 -2
  227. intentkit/skills/system/edit_autonomous_task.py +14 -18
  228. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  229. intentkit/skills/system/read_agent_api_key.py +6 -4
  230. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  231. intentkit/skills/tavily/__init__.py +3 -12
  232. intentkit/skills/tavily/base.py +4 -9
  233. intentkit/skills/tavily/tavily_extract.py +2 -4
  234. intentkit/skills/tavily/tavily_search.py +4 -6
  235. intentkit/skills/token/__init__.py +5 -10
  236. intentkit/skills/token/base.py +7 -11
  237. intentkit/skills/token/erc20_transfers.py +19 -19
  238. intentkit/skills/token/token_analytics.py +3 -3
  239. intentkit/skills/token/token_price.py +13 -13
  240. intentkit/skills/token/token_search.py +9 -9
  241. intentkit/skills/twitter/__init__.py +11 -35
  242. intentkit/skills/twitter/base.py +22 -34
  243. intentkit/skills/twitter/follow_user.py +2 -6
  244. intentkit/skills/twitter/get_mentions.py +5 -12
  245. intentkit/skills/twitter/get_timeline.py +4 -12
  246. intentkit/skills/twitter/get_user_by_username.py +2 -6
  247. intentkit/skills/twitter/get_user_tweets.py +5 -13
  248. intentkit/skills/twitter/like_tweet.py +2 -6
  249. intentkit/skills/twitter/post_tweet.py +6 -9
  250. intentkit/skills/twitter/reply_tweet.py +6 -9
  251. intentkit/skills/twitter/retweet.py +2 -6
  252. intentkit/skills/twitter/search_tweets.py +4 -12
  253. intentkit/skills/unrealspeech/__init__.py +2 -7
  254. intentkit/skills/unrealspeech/base.py +2 -8
  255. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  256. intentkit/skills/venice_audio/__init__.py +98 -106
  257. intentkit/skills/venice_audio/base.py +117 -121
  258. intentkit/skills/venice_audio/input.py +41 -41
  259. intentkit/skills/venice_audio/venice_audio.py +7 -11
  260. intentkit/skills/venice_image/__init__.py +147 -154
  261. intentkit/skills/venice_image/api.py +138 -138
  262. intentkit/skills/venice_image/base.py +185 -192
  263. intentkit/skills/venice_image/config.py +33 -35
  264. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  265. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  266. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  267. intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
  268. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  269. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  270. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  271. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  272. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  273. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  274. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  275. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  276. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  277. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  278. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  279. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  280. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  281. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  282. intentkit/skills/venice_image/utils.py +77 -78
  283. intentkit/skills/web_scraper/__init__.py +5 -18
  284. intentkit/skills/web_scraper/base.py +21 -7
  285. intentkit/skills/web_scraper/document_indexer.py +7 -6
  286. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  287. intentkit/skills/web_scraper/utils.py +62 -63
  288. intentkit/skills/web_scraper/website_indexer.py +17 -19
  289. intentkit/skills/weth/__init__.py +5 -11
  290. intentkit/skills/wow/__init__.py +5 -11
  291. intentkit/skills/x402/__init__.py +61 -0
  292. intentkit/skills/x402/ask_agent.py +98 -0
  293. intentkit/skills/x402/base.py +99 -0
  294. intentkit/skills/x402/http_request.py +117 -0
  295. intentkit/skills/x402/schema.json +45 -0
  296. intentkit/skills/x402/x402.webp +0 -0
  297. intentkit/skills/xmtp/__init__.py +4 -15
  298. intentkit/skills/xmtp/base.py +5 -5
  299. intentkit/skills/xmtp/price.py +6 -6
  300. intentkit/skills/xmtp/swap.py +6 -8
  301. intentkit/skills/xmtp/transfer.py +4 -6
  302. intentkit/utils/error.py +2 -2
  303. intentkit/utils/logging.py +2 -4
  304. intentkit/utils/s3.py +8 -9
  305. intentkit/utils/schema.py +100 -0
  306. intentkit/utils/slack_alert.py +7 -8
  307. {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +3 -4
  308. intentkit-0.8.17.dist-info/RECORD +466 -0
  309. intentkit/models/generator.py +0 -347
  310. intentkit-0.8.6.dev2.dist-info/RECORD +0 -457
  311. {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
  312. {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  from decimal import Decimal, InvalidOperation
3
- from typing import Any, Dict, Literal, Type
3
+ from typing import Any, Literal
4
4
 
5
5
  from pydantic import BaseModel, Field
6
6
 
@@ -58,14 +58,14 @@ class OnchainQueryTool(CarvBaseTool):
58
58
  "- ETH values are denominated in 18 decimals—consider 10^18 when interpreting amounts.\n"
59
59
  "- Never fabricate or infer data beyond what the tool provides."
60
60
  )
61
- args_schema: Type[BaseModel] = CarvInput
61
+ args_schema: type[BaseModel] = CarvInput
62
62
 
63
63
  async def _arun(
64
64
  self,
65
65
  question: str,
66
66
  chain: str, # type: ignore
67
67
  **kwargs: Any,
68
- ) -> Dict[str, Any]:
68
+ ) -> dict[str, Any]:
69
69
  """
70
70
  Queries the CARV SQL Query API and returns the response.
71
71
  """
@@ -104,7 +104,7 @@ class OnchainQueryTool(CarvBaseTool):
104
104
  }
105
105
 
106
106
 
107
- def _normalize_unit(response_data: Dict[str, Any], chain: str) -> None:
107
+ def _normalize_unit(response_data: dict[str, Any], chain: str) -> None:
108
108
  """
109
109
  Normalizes the 'value' field in on-chain response data to a human-readable format.
110
110
  Adds the corresponding token ticker after the value.
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  import re
3
- from typing import Any, Dict, Optional, Type
3
+ from typing import Any
4
4
 
5
5
  from pydantic import BaseModel, Field
6
6
 
@@ -16,7 +16,7 @@ class TokenInfoAndPriceInput(BaseModel):
16
16
  token_name: str = Field(
17
17
  description="The token name (e.g ethereum, bitcoin, solana, ripple)"
18
18
  )
19
- amount: Optional[float] = Field(
19
+ amount: float | None = Field(
20
20
  description="(optional) amount of token, fill this if user asking for how much x amount of specific token worth"
21
21
  )
22
22
 
@@ -38,15 +38,15 @@ class TokenInfoAndPriceTool(CarvBaseTool):
38
38
  "Useful for understanding a token's identity, ecosystem, and market value"
39
39
  "Use this tool when you need comprehensive token data and live pricing from CARV."
40
40
  )
41
- args_schema: Type[BaseModel] = TokenInfoAndPriceInput
41
+ args_schema: type[BaseModel] = TokenInfoAndPriceInput
42
42
 
43
43
  async def _arun(
44
44
  self,
45
45
  ticker: str,
46
46
  token_name: str,
47
- amount: Optional[float] = 1, # type: ignore
47
+ amount: float | None = 1, # type: ignore
48
48
  **kwargs: Any,
49
- ) -> Dict[str, Any]:
49
+ ) -> dict[str, Any]:
50
50
  if not ticker:
51
51
  return {
52
52
  "error": True,
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.base import SkillConfig, SkillState
8
7
  from intentkit.skills.casino.base import CasinoBaseTool
9
8
  from intentkit.skills.casino.deck_draw import CasinoDeckDraw
@@ -31,7 +30,6 @@ class Config(SkillConfig):
31
30
  async def get_skills(
32
31
  config: "Config",
33
32
  is_private: bool,
34
- store: SkillStoreABC,
35
33
  **_,
36
34
  ) -> list[CasinoBaseTool]:
37
35
  """Get all Casino skills.
@@ -39,7 +37,6 @@ async def get_skills(
39
37
  Args:
40
38
  config: The configuration for Casino skills.
41
39
  is_private: Whether to include private skills.
42
- store: The skill store for persisting data.
43
40
 
44
41
  Returns:
45
42
  A list of Casino skills.
@@ -56,7 +53,7 @@ async def get_skills(
56
53
  # Get each skill using the cached getter
57
54
  result = []
58
55
  for name in available_skills:
59
- skill = get_casino_skill(name, store)
56
+ skill = get_casino_skill(name)
60
57
  if skill:
61
58
  result.append(skill)
62
59
  return result
@@ -64,34 +61,26 @@ async def get_skills(
64
61
 
65
62
  def get_casino_skill(
66
63
  name: str,
67
- store: SkillStoreABC,
68
64
  ) -> CasinoBaseTool:
69
65
  """Get a Casino skill by name.
70
66
 
71
67
  Args:
72
68
  name: The name of the skill to get
73
- store: The skill store for persisting data
74
69
 
75
70
  Returns:
76
71
  The requested Casino skill
77
72
  """
78
73
  if name == "deck_shuffle":
79
74
  if name not in _cache:
80
- _cache[name] = CasinoDeckShuffle(
81
- skill_store=store,
82
- )
75
+ _cache[name] = CasinoDeckShuffle()
83
76
  return _cache[name]
84
77
  elif name == "deck_draw":
85
78
  if name not in _cache:
86
- _cache[name] = CasinoDeckDraw(
87
- skill_store=store,
88
- )
79
+ _cache[name] = CasinoDeckDraw()
89
80
  return _cache[name]
90
81
  elif name == "dice_roll":
91
82
  if name not in _cache:
92
- _cache[name] = CasinoDiceRoll(
93
- skill_store=store,
94
- )
83
+ _cache[name] = CasinoDiceRoll()
95
84
  return _cache[name]
96
85
  else:
97
86
  raise ValueError(f"Unknown Casino skill: {name}")
@@ -1,10 +1,7 @@
1
1
  """Base class for Casino tools."""
2
2
 
3
- from typing import Type
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
- from intentkit.abstracts.skill import SkillStoreABC
8
5
  from intentkit.skills.base import IntentKitSkill
9
6
 
10
7
 
@@ -13,10 +10,7 @@ class CasinoBaseTool(IntentKitSkill):
13
10
 
14
11
  name: str = Field(description="The name of the tool")
15
12
  description: str = Field(description="A description of what the tool does")
16
- args_schema: Type[BaseModel]
17
- skill_store: SkillStoreABC = Field(
18
- description="The skill store for persisting data"
19
- )
13
+ args_schema: type[BaseModel]
20
14
 
21
15
  @property
22
16
  def category(self) -> str:
@@ -1,7 +1,6 @@
1
1
  """Card drawing skill using Deck of Cards API."""
2
2
 
3
3
  import logging
4
- from typing import Type
5
4
 
6
5
  try:
7
6
  import httpx
@@ -49,7 +48,7 @@ class CasinoDeckDraw(CasinoBaseTool):
49
48
 
50
49
  name: str = NAME
51
50
  description: str = PROMPT
52
- args_schema: Type[BaseModel] = CasinoDeckDrawInput
51
+ args_schema: type[BaseModel] = CasinoDeckDrawInput
53
52
 
54
53
  async def _arun(self, count: int = 1, **kwargs) -> dict:
55
54
  try:
@@ -58,9 +57,8 @@ class CasinoDeckDraw(CasinoBaseTool):
58
57
  # Apply rate limit using built-in user_rate_limit method
59
58
  rate_config = RATE_LIMITS["deck_draw"]
60
59
  await self.user_rate_limit(
61
- context.user_id or context.agent_id,
62
60
  rate_config["max_requests"],
63
- rate_config["interval"] // 60, # Convert to minutes
61
+ rate_config["interval"],
64
62
  "deck_draw",
65
63
  )
66
64
 
@@ -68,8 +66,8 @@ class CasinoDeckDraw(CasinoBaseTool):
68
66
  count = validate_card_count(count)
69
67
 
70
68
  # Get current deck info
71
- deck_info = await self.skill_store.get_agent_skill_data(
72
- context.agent_id, DECK_STORAGE_KEY, CURRENT_DECK_KEY
69
+ deck_info = await self.get_agent_skill_data_raw(
70
+ DECK_STORAGE_KEY, CURRENT_DECK_KEY
73
71
  )
74
72
 
75
73
  deck_id = "new" # Default to new deck
@@ -99,8 +97,7 @@ class CasinoDeckDraw(CasinoBaseTool):
99
97
  else:
100
98
  deck_info["remaining"] = data["remaining"]
101
99
 
102
- await self.skill_store.save_agent_skill_data(
103
- context.agent_id,
100
+ await self.save_agent_skill_data_raw(
104
101
  DECK_STORAGE_KEY,
105
102
  CURRENT_DECK_KEY,
106
103
  deck_info,
@@ -1,7 +1,6 @@
1
1
  """Deck shuffling skill using Deck of Cards API."""
2
2
 
3
3
  import logging
4
- from typing import Type
5
4
 
6
5
  try:
7
6
  import httpx
@@ -53,7 +52,7 @@ class CasinoDeckShuffle(CasinoBaseTool):
53
52
 
54
53
  name: str = NAME
55
54
  description: str = PROMPT
56
- args_schema: Type[BaseModel] = CasinoDeckShuffleInput
55
+ args_schema: type[BaseModel] = CasinoDeckShuffleInput
57
56
 
58
57
  async def _arun(
59
58
  self, deck_count: int = 1, jokers_enabled: bool = False, **kwargs
@@ -64,9 +63,8 @@ class CasinoDeckShuffle(CasinoBaseTool):
64
63
  # Apply rate limit using built-in user_rate_limit method
65
64
  rate_config = RATE_LIMITS["deck_shuffle"]
66
65
  await self.user_rate_limit(
67
- context.user_id or context.agent_id,
68
66
  rate_config["max_requests"],
69
- rate_config["interval"] // 60, # Convert to minutes
67
+ rate_config["interval"],
70
68
  "deck_shuffle",
71
69
  )
72
70
 
@@ -95,8 +93,10 @@ class CasinoDeckShuffle(CasinoBaseTool):
95
93
  "shuffled": data["shuffled"],
96
94
  }
97
95
 
98
- await self.skill_store.save_agent_skill_data(
99
- context.agent_id, DECK_STORAGE_KEY, CURRENT_DECK_KEY, deck_info
96
+ await self.save_agent_skill_data_raw(
97
+ DECK_STORAGE_KEY,
98
+ CURRENT_DECK_KEY,
99
+ deck_info,
100
100
  )
101
101
 
102
102
  return {
@@ -1,7 +1,6 @@
1
1
  """Quantum dice rolling skill using QRandom API."""
2
2
 
3
3
  import logging
4
- from typing import Type
5
4
 
6
5
  try:
7
6
  import httpx
@@ -48,7 +47,7 @@ class CasinoDiceRoll(CasinoBaseTool):
48
47
 
49
48
  name: str = NAME
50
49
  description: str = PROMPT
51
- args_schema: Type[BaseModel] = CasinoDiceRollInput
50
+ args_schema: type[BaseModel] = CasinoDiceRollInput
52
51
 
53
52
  async def _arun(self, dice_count: int = 1, **kwargs) -> dict:
54
53
  try:
@@ -57,9 +56,8 @@ class CasinoDiceRoll(CasinoBaseTool):
57
56
  # Apply rate limit using built-in user_rate_limit method
58
57
  rate_config = RATE_LIMITS["dice_roll"]
59
58
  await self.user_rate_limit(
60
- context.user_id or context.agent_id,
61
59
  rate_config["max_requests"],
62
- rate_config["interval"] // 60, # Convert to minutes
60
+ rate_config["interval"],
63
61
  "dice_roll",
64
62
  )
65
63
 
@@ -1,6 +1,6 @@
1
1
  """CDP wallet interaction skills."""
2
2
 
3
- from typing import TYPE_CHECKING, Optional, TypedDict
3
+ from typing import TypedDict
4
4
 
5
5
  from coinbase_agentkit import (
6
6
  cdp_api_action_provider,
@@ -8,7 +8,7 @@ from coinbase_agentkit import (
8
8
  wallet_action_provider,
9
9
  )
10
10
 
11
- from intentkit.abstracts.skill import SkillStoreABC
11
+ from intentkit.models.agent import Agent
12
12
  from intentkit.skills.base import (
13
13
  SkillConfig,
14
14
  SkillState,
@@ -17,15 +17,11 @@ from intentkit.skills.base import (
17
17
  )
18
18
  from intentkit.skills.cdp.base import CDPBaseTool
19
19
 
20
- if TYPE_CHECKING:
21
- from intentkit.models.agent import Agent
22
-
23
20
 
24
21
  class SkillStates(TypedDict):
25
22
  WalletActionProvider_get_balance: SkillState
26
23
  WalletActionProvider_get_wallet_details: SkillState
27
24
  WalletActionProvider_native_transfer: SkillState
28
- CdpApiActionProvider_request_faucet_funds: SkillState
29
25
  CdpEvmWalletActionProvider_get_swap_price: SkillState
30
26
  CdpEvmWalletActionProvider_swap: SkillState
31
27
 
@@ -41,9 +37,8 @@ class Config(SkillConfig):
41
37
  async def get_skills(
42
38
  config: "Config",
43
39
  is_private: bool,
44
- store: SkillStoreABC,
45
40
  agent_id: str,
46
- agent: Optional["Agent"] = None,
41
+ agent: Agent | None = None,
47
42
  **_,
48
43
  ) -> list[CDPBaseTool]:
49
44
  """Get all CDP skills.
@@ -51,7 +46,6 @@ async def get_skills(
51
46
  Args:
52
47
  config: The configuration for CDP skills.
53
48
  is_private: Whether to include private skills.
54
- store: The skill store for persisting data.
55
49
  agent_id: The ID of the agent using the skills.
56
50
 
57
51
  Returns:
@@ -69,7 +63,6 @@ async def get_skills(
69
63
  # Initialize CDP client
70
64
  actions = await get_agentkit_actions(
71
65
  agent_id,
72
- store,
73
66
  [
74
67
  wallet_action_provider,
75
68
  cdp_api_action_provider,
@@ -1,8 +1,5 @@
1
- from typing import Type
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
- from intentkit.abstracts.skill import SkillStoreABC
6
3
  from intentkit.skills.base import IntentKitSkill
7
4
 
8
5
 
@@ -11,10 +8,7 @@ class CDPBaseTool(IntentKitSkill):
11
8
 
12
9
  name: str = Field(description="The name of the tool")
13
10
  description: str = Field(description="A description of what the tool does")
14
- args_schema: Type[BaseModel]
15
- skill_store: SkillStoreABC = Field(
16
- description="The skill store for persisting data"
17
- )
11
+ args_schema: type[BaseModel]
18
12
 
19
13
  @property
20
14
  def category(self) -> str:
@@ -66,22 +66,6 @@
66
66
  "description": "Transfer the native asset from the wallet",
67
67
  "default": "disabled"
68
68
  },
69
- "CdpApiActionProvider_request_faucet_funds": {
70
- "type": "string",
71
- "title": "Request Faucet Funds",
72
- "enum": [
73
- "disabled",
74
- "public",
75
- "private"
76
- ],
77
- "x-enum-title": [
78
- "Disabled",
79
- "Agent Owner + All Users",
80
- "Agent Owner Only"
81
- ],
82
- "description": "State for CdpApiActionProvider_request_faucet_funds",
83
- "default": "disabled"
84
- },
85
69
  "CdpEvmWalletActionProvider_get_swap_price": {
86
70
  "type": "string",
87
71
  "title": "Get Swap Price",
@@ -135,4 +119,4 @@
135
119
  "enabled"
136
120
  ],
137
121
  "additionalProperties": true
138
- }
122
+ }
@@ -1,6 +1,5 @@
1
1
  from typing import TypedDict
2
2
 
3
- from intentkit.abstracts.skill import SkillStoreABC
4
3
  from intentkit.skills.base import SkillConfig, SkillState
5
4
  from intentkit.skills.chainlist.base import ChainlistBaseTool
6
5
  from intentkit.skills.chainlist.chain_lookup import ChainLookup
@@ -22,7 +21,6 @@ class Config(SkillConfig):
22
21
  async def get_skills(
23
22
  config: "Config",
24
23
  is_private: bool,
25
- store: SkillStoreABC,
26
24
  **_,
27
25
  ) -> list[ChainlistBaseTool]:
28
26
  """Get all chainlist skills."""
@@ -36,19 +34,16 @@ async def get_skills(
36
34
  available_skills.append(skill_name)
37
35
 
38
36
  # Get each skill using the cached getter
39
- return [get_chainlist_skill(name, store) for name in available_skills]
37
+ return [get_chainlist_skill(name) for name in available_skills]
40
38
 
41
39
 
42
40
  def get_chainlist_skill(
43
41
  name: str,
44
- store: SkillStoreABC,
45
42
  ) -> ChainlistBaseTool:
46
43
  """Get a chainlist skill by name."""
47
44
  if name == "chain_lookup":
48
45
  if name not in _cache:
49
- _cache[name] = ChainLookup(
50
- skill_store=store,
51
- )
46
+ _cache[name] = ChainLookup()
52
47
  return _cache[name]
53
48
  else:
54
49
  raise ValueError(f"Unknown chainlist skill: {name}")
@@ -1,8 +1,5 @@
1
- from typing import Type
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
- from intentkit.abstracts.skill import SkillStoreABC
6
3
  from intentkit.skills.base import IntentKitSkill
7
4
 
8
5
 
@@ -11,10 +8,7 @@ class ChainlistBaseTool(IntentKitSkill):
11
8
 
12
9
  name: str = Field(description="The name of the tool")
13
10
  description: str = Field(description="A description of what the tool does")
14
- args_schema: Type[BaseModel]
15
- skill_store: SkillStoreABC = Field(
16
- description="The skill store for persisting data"
17
- )
11
+ args_schema: type[BaseModel]
18
12
 
19
13
  @property
20
14
  def category(self) -> str:
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, List, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  import httpx
5
5
  from pydantic import BaseModel, Field
@@ -12,19 +12,19 @@ logger = logging.getLogger(__name__)
12
12
  class ChainLookupInput(BaseModel):
13
13
  """Input for ChainLookup tool."""
14
14
 
15
- search_term: Optional[str] = Field(
15
+ search_term: str | None = Field(
16
16
  description="Term to search for (chain name, symbol, or chain ID)",
17
17
  default=None,
18
18
  )
19
- chain_id: Optional[int] = Field(
19
+ chain_id: int | None = Field(
20
20
  description="Specific chain ID to look up",
21
21
  default=None,
22
22
  )
23
- no_tracking: Optional[bool] = Field(
23
+ no_tracking: bool | None = Field(
24
24
  description="Whether to return only RPC endpoints with no tracking",
25
25
  default=False,
26
26
  )
27
- limit: Optional[int] = Field(
27
+ limit: int | None = Field(
28
28
  description="Limit the number of results returned",
29
29
  default=5,
30
30
  )
@@ -38,7 +38,7 @@ class ChainLookup(ChainlistBaseTool):
38
38
  "Look up blockchain RPC endpoints and details by chain name, symbol, or chain ID.\n"
39
39
  "Returns information about blockchains including RPC endpoints, native currency, and explorers."
40
40
  )
41
- args_schema: Type[BaseModel] = ChainLookupInput
41
+ args_schema: type[BaseModel] = ChainLookupInput
42
42
 
43
43
  def _normalize_text(self, text: str) -> str:
44
44
  """Normalize text for searching (lowercase, remove spaces)."""
@@ -46,7 +46,7 @@ class ChainLookup(ChainlistBaseTool):
46
46
  return ""
47
47
  return text.lower().strip()
48
48
 
49
- async def _fetch_chains_data(self) -> List[Dict[str, Any]]:
49
+ async def _fetch_chains_data(self) -> list[dict[str, Any]]:
50
50
  """Fetch chains data from Chainlist API."""
51
51
  chainlist_api_url = "https://chainlist.org/rpcs.json"
52
52
 
@@ -57,12 +57,12 @@ class ChainLookup(ChainlistBaseTool):
57
57
 
58
58
  def _filter_chains(
59
59
  self,
60
- chains: List[Dict[str, Any]],
61
- search_term: Optional[str] = None,
62
- chain_id: Optional[int] = None,
60
+ chains: list[dict[str, Any]],
61
+ search_term: str | None = None,
62
+ chain_id: int | None = None,
63
63
  no_tracking: bool = False,
64
64
  limit: int = 5,
65
- ) -> List[Dict[str, Any]]:
65
+ ) -> list[dict[str, Any]]:
66
66
  """Filter chains based on search criteria."""
67
67
  filtered_chains = chains
68
68
 
@@ -118,7 +118,7 @@ class ChainLookup(ChainlistBaseTool):
118
118
 
119
119
  return filtered_chains
120
120
 
121
- def _format_chain(self, chain: Dict[str, Any]) -> Dict[str, Any]:
121
+ def _format_chain(self, chain: dict[str, Any]) -> dict[str, Any]:
122
122
  """Format a chain entry for response."""
123
123
  # Format RPC endpoints
124
124
  formatted_rpcs = []
@@ -155,13 +155,13 @@ class ChainLookup(ChainlistBaseTool):
155
155
 
156
156
  async def _arun(
157
157
  self,
158
- search_term: Optional[str] = None,
159
- chain_id: Optional[int] = None,
160
- no_tracking: Optional[bool] = False,
161
- limit: Optional[int] = 5,
162
- config: Optional[Any] = None,
158
+ search_term: str | None = None,
159
+ chain_id: int | None = None,
160
+ no_tracking: bool | None = False,
161
+ limit: int | None = 5,
162
+ config: Any | None = None,
163
163
  **kwargs,
164
- ) -> Dict:
164
+ ) -> dict:
165
165
  """Lookup blockchain RPC endpoints from Chainlist."""
166
166
  if not search_term and not chain_id:
167
167
  return {
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.base import SkillConfig, SkillState
8
7
  from intentkit.skills.common.base import CommonBaseTool
9
8
  from intentkit.skills.common.current_time import CurrentTime
@@ -27,7 +26,6 @@ class Config(SkillConfig):
27
26
  async def get_skills(
28
27
  config: "Config",
29
28
  is_private: bool,
30
- store: SkillStoreABC,
31
29
  **_,
32
30
  ) -> list[CommonBaseTool]:
33
31
  """Get all common utility skills.
@@ -35,7 +33,6 @@ async def get_skills(
35
33
  Args:
36
34
  config: The configuration for common utility skills.
37
35
  is_private: Whether to include private skills.
38
- store: The skill store for persisting data.
39
36
 
40
37
  Returns:
41
38
  A list of common utility skills.
@@ -52,7 +49,7 @@ async def get_skills(
52
49
  # Get each skill using the cached getter
53
50
  result = []
54
51
  for name in available_skills:
55
- skill = get_common_skill(name, store)
52
+ skill = get_common_skill(name)
56
53
  if skill:
57
54
  result.append(skill)
58
55
  return result
@@ -60,22 +57,18 @@ async def get_skills(
60
57
 
61
58
  def get_common_skill(
62
59
  name: str,
63
- store: SkillStoreABC,
64
60
  ) -> CommonBaseTool:
65
61
  """Get a common utility skill by name.
66
62
 
67
63
  Args:
68
64
  name: The name of the skill to get
69
- store: The skill store for persisting data
70
65
 
71
66
  Returns:
72
67
  The requested common utility skill
73
68
  """
74
69
  if name == "current_time":
75
70
  if name not in _cache:
76
- _cache[name] = CurrentTime(
77
- skill_store=store,
78
- )
71
+ _cache[name] = CurrentTime()
79
72
  return _cache[name]
80
73
  else:
81
74
  logger.warning(f"Unknown common skill: {name}")
@@ -1,8 +1,5 @@
1
- from typing import Type
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
- from intentkit.abstracts.skill import SkillStoreABC
6
3
  from intentkit.skills.base import IntentKitSkill
7
4
 
8
5
 
@@ -11,10 +8,7 @@ class CommonBaseTool(IntentKitSkill):
11
8
 
12
9
  name: str = Field(description="The name of the tool")
13
10
  description: str = Field(description="A description of what the tool does")
14
- args_schema: Type[BaseModel]
15
- skill_store: SkillStoreABC = Field(
16
- description="The skill store for persisting data"
17
- )
11
+ args_schema: type[BaseModel]
18
12
 
19
13
  @property
20
14
  def category(self) -> str:
@@ -1,6 +1,5 @@
1
1
  import logging
2
2
  from datetime import datetime
3
- from typing import Type
4
3
 
5
4
  import pytz
6
5
  from pydantic import BaseModel, Field
@@ -36,7 +35,7 @@ class CurrentTime(CommonBaseTool):
36
35
  "Get the current time, converted to a specified timezone.\n"
37
36
  "You must call this tool whenever the user asks for the time."
38
37
  )
39
- args_schema: Type[BaseModel] = CurrentTimeInput
38
+ args_schema: type[BaseModel] = CurrentTimeInput
40
39
 
41
40
  async def _arun(self, timezone: str, **kwargs) -> str:
42
41
  """Implementation of the tool to get the current time.