intentkit 0.6.13.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 (385) 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 +14 -7
  5. intentkit/abstracts/skill.py +6 -144
  6. intentkit/abstracts/twitter.py +4 -5
  7. intentkit/clients/__init__.py +5 -2
  8. intentkit/clients/cdp.py +101 -141
  9. intentkit/clients/twitter.py +83 -62
  10. intentkit/clients/web3.py +29 -0
  11. intentkit/config/config.py +8 -5
  12. intentkit/core/agent.py +472 -195
  13. intentkit/core/asset.py +253 -0
  14. intentkit/core/chat.py +51 -0
  15. intentkit/core/client.py +1 -1
  16. intentkit/core/credit.py +460 -130
  17. intentkit/core/engine.py +262 -233
  18. intentkit/core/node.py +15 -16
  19. intentkit/core/prompt.py +62 -28
  20. intentkit/core/scheduler.py +92 -0
  21. intentkit/core/statistics.py +168 -0
  22. intentkit/models/agent.py +1096 -949
  23. intentkit/models/agent_data.py +68 -38
  24. intentkit/models/agent_public.json +98 -0
  25. intentkit/models/agent_schema.json +54 -439
  26. intentkit/models/app_setting.py +96 -33
  27. intentkit/models/chat.py +74 -27
  28. intentkit/models/conversation.py +8 -8
  29. intentkit/models/credit.py +362 -74
  30. intentkit/models/db.py +26 -8
  31. intentkit/models/db_mig.py +2 -2
  32. intentkit/models/llm.csv +28 -0
  33. intentkit/models/llm.py +185 -350
  34. intentkit/models/redis.py +6 -4
  35. intentkit/models/skill.py +186 -72
  36. intentkit/models/skills.csv +174 -0
  37. intentkit/models/user.py +82 -24
  38. intentkit/skills/acolyt/__init__.py +2 -9
  39. intentkit/skills/acolyt/ask.py +3 -4
  40. intentkit/skills/acolyt/base.py +4 -9
  41. intentkit/skills/acolyt/schema.json +4 -3
  42. intentkit/skills/aixbt/__init__.py +2 -13
  43. intentkit/skills/aixbt/base.py +1 -7
  44. intentkit/skills/aixbt/projects.py +14 -15
  45. intentkit/skills/aixbt/schema.json +4 -4
  46. intentkit/skills/allora/__init__.py +2 -9
  47. intentkit/skills/allora/base.py +4 -9
  48. intentkit/skills/allora/price.py +3 -4
  49. intentkit/skills/allora/schema.json +3 -2
  50. intentkit/skills/base.py +248 -85
  51. intentkit/skills/basename/__init__.py +51 -0
  52. intentkit/skills/basename/base.py +11 -0
  53. intentkit/skills/basename/basename.svg +11 -0
  54. intentkit/skills/basename/schema.json +58 -0
  55. intentkit/skills/carv/__init__.py +115 -121
  56. intentkit/skills/carv/base.py +184 -185
  57. intentkit/skills/carv/fetch_news.py +3 -3
  58. intentkit/skills/carv/onchain_query.py +4 -4
  59. intentkit/skills/carv/schema.json +134 -137
  60. intentkit/skills/carv/token_info_and_price.py +5 -5
  61. intentkit/skills/casino/README.md +254 -0
  62. intentkit/skills/casino/__init__.py +86 -0
  63. intentkit/skills/casino/base.py +17 -0
  64. intentkit/skills/casino/casino.png +0 -0
  65. intentkit/skills/casino/deck_draw.py +127 -0
  66. intentkit/skills/casino/deck_shuffle.py +118 -0
  67. intentkit/skills/casino/dice_roll.py +100 -0
  68. intentkit/skills/casino/schema.json +77 -0
  69. intentkit/skills/casino/utils.py +107 -0
  70. intentkit/skills/cdp/__init__.py +22 -84
  71. intentkit/skills/cdp/base.py +1 -7
  72. intentkit/skills/cdp/schema.json +11 -314
  73. intentkit/skills/chainlist/__init__.py +2 -7
  74. intentkit/skills/chainlist/base.py +1 -7
  75. intentkit/skills/chainlist/chain_lookup.py +18 -18
  76. intentkit/skills/chainlist/schema.json +3 -5
  77. intentkit/skills/common/__init__.py +2 -9
  78. intentkit/skills/common/base.py +1 -7
  79. intentkit/skills/common/current_time.py +1 -2
  80. intentkit/skills/common/schema.json +2 -2
  81. intentkit/skills/cookiefun/__init__.py +6 -9
  82. intentkit/skills/cookiefun/base.py +2 -7
  83. intentkit/skills/cookiefun/get_account_details.py +7 -7
  84. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  85. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  86. intentkit/skills/cookiefun/get_sectors.py +3 -3
  87. intentkit/skills/cookiefun/schema.json +1 -3
  88. intentkit/skills/cookiefun/search_accounts.py +9 -9
  89. intentkit/skills/cryptocompare/__init__.py +7 -24
  90. intentkit/skills/cryptocompare/api.py +2 -3
  91. intentkit/skills/cryptocompare/base.py +11 -25
  92. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  93. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  94. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  95. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  96. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  97. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  98. intentkit/skills/cryptocompare/schema.json +3 -3
  99. intentkit/skills/cryptopanic/__init__.py +7 -10
  100. intentkit/skills/cryptopanic/base.py +51 -55
  101. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  102. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  103. intentkit/skills/cryptopanic/schema.json +105 -103
  104. intentkit/skills/dapplooker/__init__.py +2 -9
  105. intentkit/skills/dapplooker/base.py +4 -9
  106. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  107. intentkit/skills/dapplooker/schema.json +3 -5
  108. intentkit/skills/defillama/__init__.py +24 -74
  109. intentkit/skills/defillama/api.py +6 -9
  110. intentkit/skills/defillama/base.py +11 -21
  111. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  112. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  113. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  114. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  115. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  116. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  117. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  118. intentkit/skills/defillama/config/chains.py +1 -3
  119. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  120. intentkit/skills/defillama/schema.json +5 -1
  121. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  122. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  123. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  124. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  125. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  126. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  127. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  128. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  129. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  130. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  131. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  132. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  133. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  134. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  135. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  136. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  137. intentkit/skills/dexscreener/README.md +154 -0
  138. intentkit/skills/dexscreener/__init__.py +97 -93
  139. intentkit/skills/dexscreener/base.py +125 -133
  140. intentkit/skills/dexscreener/get_pair_info.py +158 -0
  141. intentkit/skills/dexscreener/get_token_pairs.py +165 -0
  142. intentkit/skills/dexscreener/get_tokens_info.py +212 -0
  143. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  144. intentkit/skills/dexscreener/schema.json +91 -48
  145. intentkit/skills/dexscreener/search_token.py +182 -321
  146. intentkit/skills/dexscreener/utils.py +420 -0
  147. intentkit/skills/dune_analytics/__init__.py +7 -9
  148. intentkit/skills/dune_analytics/base.py +48 -52
  149. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  150. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  151. intentkit/skills/dune_analytics/schema.json +104 -99
  152. intentkit/skills/elfa/__init__.py +5 -18
  153. intentkit/skills/elfa/base.py +10 -14
  154. intentkit/skills/elfa/mention.py +19 -21
  155. intentkit/skills/elfa/schema.json +3 -2
  156. intentkit/skills/elfa/stats.py +4 -4
  157. intentkit/skills/elfa/tokens.py +12 -12
  158. intentkit/skills/elfa/utils.py +26 -28
  159. intentkit/skills/enso/__init__.py +11 -31
  160. intentkit/skills/enso/base.py +50 -35
  161. intentkit/skills/enso/best_yield.py +16 -24
  162. intentkit/skills/enso/networks.py +6 -11
  163. intentkit/skills/enso/prices.py +11 -13
  164. intentkit/skills/enso/route.py +34 -38
  165. intentkit/skills/enso/schema.json +3 -2
  166. intentkit/skills/enso/tokens.py +29 -38
  167. intentkit/skills/enso/wallet.py +76 -191
  168. intentkit/skills/erc20/__init__.py +50 -0
  169. intentkit/skills/erc20/base.py +11 -0
  170. intentkit/skills/erc20/erc20.svg +5 -0
  171. intentkit/skills/erc20/schema.json +74 -0
  172. intentkit/skills/erc721/__init__.py +53 -0
  173. intentkit/skills/erc721/base.py +11 -0
  174. intentkit/skills/erc721/erc721.svg +5 -0
  175. intentkit/skills/erc721/schema.json +90 -0
  176. intentkit/skills/firecrawl/README.md +11 -5
  177. intentkit/skills/firecrawl/__init__.py +5 -18
  178. intentkit/skills/firecrawl/base.py +4 -11
  179. intentkit/skills/firecrawl/clear.py +4 -8
  180. intentkit/skills/firecrawl/crawl.py +19 -19
  181. intentkit/skills/firecrawl/query.py +4 -3
  182. intentkit/skills/firecrawl/schema.json +6 -8
  183. intentkit/skills/firecrawl/scrape.py +150 -40
  184. intentkit/skills/firecrawl/utils.py +50 -42
  185. intentkit/skills/github/__init__.py +2 -7
  186. intentkit/skills/github/base.py +1 -7
  187. intentkit/skills/github/github_search.py +1 -2
  188. intentkit/skills/github/schema.json +3 -4
  189. intentkit/skills/heurist/__init__.py +8 -27
  190. intentkit/skills/heurist/base.py +4 -9
  191. intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
  192. intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
  193. intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
  194. intentkit/skills/heurist/image_generation_braindance.py +12 -13
  195. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
  196. intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
  197. intentkit/skills/heurist/image_generation_sdxl.py +12 -13
  198. intentkit/skills/heurist/schema.json +2 -2
  199. intentkit/skills/http/__init__.py +4 -15
  200. intentkit/skills/http/base.py +1 -7
  201. intentkit/skills/http/get.py +21 -16
  202. intentkit/skills/http/post.py +23 -18
  203. intentkit/skills/http/put.py +23 -18
  204. intentkit/skills/http/schema.json +4 -5
  205. intentkit/skills/lifi/__init__.py +8 -13
  206. intentkit/skills/lifi/base.py +1 -7
  207. intentkit/skills/lifi/schema.json +17 -8
  208. intentkit/skills/lifi/token_execute.py +36 -30
  209. intentkit/skills/lifi/token_quote.py +8 -10
  210. intentkit/skills/lifi/utils.py +104 -51
  211. intentkit/skills/moralis/__init__.py +6 -10
  212. intentkit/skills/moralis/api.py +6 -7
  213. intentkit/skills/moralis/base.py +5 -10
  214. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  215. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  216. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  217. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  218. intentkit/skills/moralis/schema.json +7 -2
  219. intentkit/skills/morpho/__init__.py +52 -0
  220. intentkit/skills/morpho/base.py +11 -0
  221. intentkit/skills/morpho/morpho.svg +12 -0
  222. intentkit/skills/morpho/schema.json +73 -0
  223. intentkit/skills/nation/__init__.py +4 -9
  224. intentkit/skills/nation/base.py +5 -10
  225. intentkit/skills/nation/nft_check.py +3 -4
  226. intentkit/skills/nation/schema.json +4 -3
  227. intentkit/skills/onchain.py +23 -0
  228. intentkit/skills/openai/__init__.py +17 -18
  229. intentkit/skills/openai/base.py +10 -14
  230. intentkit/skills/openai/dalle_image_generation.py +3 -8
  231. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  232. intentkit/skills/openai/gpt_image_generation.py +4 -8
  233. intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
  234. intentkit/skills/openai/gpt_image_to_image.py +4 -8
  235. intentkit/skills/openai/image_to_text.py +3 -7
  236. intentkit/skills/openai/schema.json +34 -3
  237. intentkit/skills/portfolio/__init__.py +11 -35
  238. intentkit/skills/portfolio/base.py +33 -19
  239. intentkit/skills/portfolio/schema.json +3 -5
  240. intentkit/skills/portfolio/token_balances.py +21 -21
  241. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  242. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  243. intentkit/skills/portfolio/wallet_history.py +31 -31
  244. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  245. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  246. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  247. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  248. intentkit/skills/portfolio/wallet_stats.py +3 -3
  249. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  250. intentkit/skills/pyth/__init__.py +50 -0
  251. intentkit/skills/pyth/base.py +11 -0
  252. intentkit/skills/pyth/pyth.svg +6 -0
  253. intentkit/skills/pyth/schema.json +75 -0
  254. intentkit/skills/skills.toml +40 -0
  255. intentkit/skills/slack/__init__.py +5 -17
  256. intentkit/skills/slack/base.py +3 -9
  257. intentkit/skills/slack/get_channel.py +8 -8
  258. intentkit/skills/slack/get_message.py +9 -9
  259. intentkit/skills/slack/schedule_message.py +5 -5
  260. intentkit/skills/slack/schema.json +2 -2
  261. intentkit/skills/slack/send_message.py +3 -5
  262. intentkit/skills/supabase/__init__.py +7 -23
  263. intentkit/skills/supabase/base.py +9 -13
  264. intentkit/skills/supabase/delete_data.py +5 -6
  265. intentkit/skills/supabase/fetch_data.py +13 -14
  266. intentkit/skills/supabase/insert_data.py +5 -6
  267. intentkit/skills/supabase/invoke_function.py +7 -8
  268. intentkit/skills/supabase/schema.json +2 -3
  269. intentkit/skills/supabase/update_data.py +7 -8
  270. intentkit/skills/supabase/upsert_data.py +5 -6
  271. intentkit/skills/superfluid/__init__.py +53 -0
  272. intentkit/skills/superfluid/base.py +11 -0
  273. intentkit/skills/superfluid/schema.json +89 -0
  274. intentkit/skills/superfluid/superfluid.svg +6 -0
  275. intentkit/skills/system/__init__.py +7 -24
  276. intentkit/skills/system/add_autonomous_task.py +10 -12
  277. intentkit/skills/system/delete_autonomous_task.py +2 -2
  278. intentkit/skills/system/edit_autonomous_task.py +14 -18
  279. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  280. intentkit/skills/system/read_agent_api_key.py +6 -4
  281. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  282. intentkit/skills/system/schema.json +6 -8
  283. intentkit/skills/tavily/__init__.py +3 -12
  284. intentkit/skills/tavily/base.py +4 -9
  285. intentkit/skills/tavily/schema.json +3 -5
  286. intentkit/skills/tavily/tavily_extract.py +2 -4
  287. intentkit/skills/tavily/tavily_search.py +4 -6
  288. intentkit/skills/token/__init__.py +5 -10
  289. intentkit/skills/token/base.py +7 -11
  290. intentkit/skills/token/erc20_transfers.py +19 -19
  291. intentkit/skills/token/schema.json +3 -6
  292. intentkit/skills/token/token_analytics.py +3 -3
  293. intentkit/skills/token/token_price.py +13 -13
  294. intentkit/skills/token/token_search.py +9 -9
  295. intentkit/skills/twitter/__init__.py +11 -35
  296. intentkit/skills/twitter/base.py +23 -35
  297. intentkit/skills/twitter/follow_user.py +3 -7
  298. intentkit/skills/twitter/get_mentions.py +6 -13
  299. intentkit/skills/twitter/get_timeline.py +5 -13
  300. intentkit/skills/twitter/get_user_by_username.py +3 -7
  301. intentkit/skills/twitter/get_user_tweets.py +6 -14
  302. intentkit/skills/twitter/like_tweet.py +3 -7
  303. intentkit/skills/twitter/post_tweet.py +23 -12
  304. intentkit/skills/twitter/reply_tweet.py +21 -12
  305. intentkit/skills/twitter/retweet.py +3 -7
  306. intentkit/skills/twitter/schema.json +1 -0
  307. intentkit/skills/twitter/search_tweets.py +5 -13
  308. intentkit/skills/unrealspeech/__init__.py +2 -7
  309. intentkit/skills/unrealspeech/base.py +2 -8
  310. intentkit/skills/unrealspeech/schema.json +2 -5
  311. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  312. intentkit/skills/venice_audio/__init__.py +98 -106
  313. intentkit/skills/venice_audio/base.py +117 -121
  314. intentkit/skills/venice_audio/input.py +41 -41
  315. intentkit/skills/venice_audio/schema.json +151 -152
  316. intentkit/skills/venice_audio/venice_audio.py +38 -21
  317. intentkit/skills/venice_image/__init__.py +147 -154
  318. intentkit/skills/venice_image/api.py +138 -138
  319. intentkit/skills/venice_image/base.py +185 -192
  320. intentkit/skills/venice_image/config.py +33 -35
  321. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  322. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  323. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  324. intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
  325. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  326. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  327. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  328. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  329. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  330. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  331. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  332. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  333. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  334. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  335. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  336. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  337. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  338. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  339. intentkit/skills/venice_image/schema.json +267 -267
  340. intentkit/skills/venice_image/utils.py +77 -78
  341. intentkit/skills/web_scraper/__init__.py +5 -18
  342. intentkit/skills/web_scraper/base.py +21 -7
  343. intentkit/skills/web_scraper/document_indexer.py +7 -6
  344. intentkit/skills/web_scraper/schema.json +2 -6
  345. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  346. intentkit/skills/web_scraper/utils.py +62 -63
  347. intentkit/skills/web_scraper/website_indexer.py +17 -19
  348. intentkit/skills/weth/__init__.py +49 -0
  349. intentkit/skills/weth/base.py +11 -0
  350. intentkit/skills/weth/schema.json +58 -0
  351. intentkit/skills/weth/weth.svg +6 -0
  352. intentkit/skills/wow/__init__.py +51 -0
  353. intentkit/skills/wow/base.py +11 -0
  354. intentkit/skills/wow/schema.json +89 -0
  355. intentkit/skills/wow/wow.svg +7 -0
  356. intentkit/skills/x402/__init__.py +61 -0
  357. intentkit/skills/x402/ask_agent.py +98 -0
  358. intentkit/skills/x402/base.py +99 -0
  359. intentkit/skills/x402/http_request.py +117 -0
  360. intentkit/skills/x402/schema.json +45 -0
  361. intentkit/skills/x402/x402.webp +0 -0
  362. intentkit/skills/xmtp/__init__.py +4 -15
  363. intentkit/skills/xmtp/base.py +61 -2
  364. intentkit/skills/xmtp/price.py +18 -13
  365. intentkit/skills/xmtp/schema.json +69 -71
  366. intentkit/skills/xmtp/swap.py +22 -25
  367. intentkit/skills/xmtp/transfer.py +71 -32
  368. intentkit/utils/chain.py +3 -3
  369. intentkit/utils/error.py +14 -1
  370. intentkit/utils/logging.py +2 -4
  371. intentkit/utils/s3.py +59 -7
  372. intentkit/utils/schema.py +100 -0
  373. intentkit/utils/slack_alert.py +7 -8
  374. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +14 -16
  375. intentkit-0.8.17.dist-info/RECORD +466 -0
  376. intentkit/abstracts/exception.py +0 -9
  377. intentkit/core/skill.py +0 -200
  378. intentkit/models/generator.py +0 -347
  379. intentkit/skills/cdp/get_balance.py +0 -110
  380. intentkit/skills/cdp/swap.py +0 -121
  381. intentkit/skills/moralis/tests/__init__.py +0 -0
  382. intentkit/skills/moralis/tests/test_wallet.py +0 -511
  383. intentkit-0.6.13.dev2.dist-info/RECORD +0 -409
  384. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
  385. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
@@ -3,55 +3,27 @@
3
3
  from typing import TypedDict
4
4
 
5
5
  from coinbase_agentkit import (
6
- AgentKit,
7
- AgentKitConfig,
8
- CdpEvmServerWalletProvider,
9
- basename_action_provider,
10
6
  cdp_api_action_provider,
11
- erc20_action_provider,
12
- morpho_action_provider,
13
- pyth_action_provider,
14
- superfluid_action_provider,
7
+ cdp_evm_wallet_action_provider,
15
8
  wallet_action_provider,
16
- weth_action_provider,
17
- wow_action_provider,
18
9
  )
19
- from coinbase_agentkit.action_providers.erc721 import erc721_action_provider
20
- from coinbase_agentkit_langchain import get_langchain_tools
21
10
 
22
- from intentkit.abstracts.skill import SkillStoreABC
23
- from intentkit.clients import CdpClient, get_cdp_client
24
- from intentkit.skills.base import SkillConfig, SkillState
11
+ from intentkit.models.agent import Agent
12
+ from intentkit.skills.base import (
13
+ SkillConfig,
14
+ SkillState,
15
+ action_to_structured_tool,
16
+ get_agentkit_actions,
17
+ )
25
18
  from intentkit.skills.cdp.base import CDPBaseTool
26
- from intentkit.skills.cdp.get_balance import GetBalance
27
- from intentkit.skills.cdp.swap import Swap
28
19
 
29
20
 
30
21
  class SkillStates(TypedDict):
31
- get_balance: SkillState
32
- swap: SkillState
33
22
  WalletActionProvider_get_balance: SkillState
34
23
  WalletActionProvider_get_wallet_details: SkillState
35
24
  WalletActionProvider_native_transfer: SkillState
36
- CdpApiActionProvider_address_reputation: SkillState
37
- CdpApiActionProvider_request_faucet_funds: SkillState
38
- PythActionProvider_fetch_price: SkillState
39
- PythActionProvider_fetch_price_feed_id: SkillState
40
- BasenameActionProvider_register_basename: SkillState
41
- ERC20ActionProvider_get_balance: SkillState
42
- ERC20ActionProvider_transfer: SkillState
43
- Erc721ActionProvider_get_balance: SkillState
44
- Erc721ActionProvider_mint: SkillState
45
- Erc721ActionProvider_transfer: SkillState
46
- WethActionProvider_wrap_eth: SkillState
47
- MorphoActionProvider_deposit: SkillState
48
- MorphoActionProvider_withdraw: SkillState
49
- SuperfluidActionProvider_create_flow: SkillState
50
- SuperfluidActionProvider_delete_flow: SkillState
51
- SuperfluidActionProvider_update_flow: SkillState
52
- WowActionProvider_buy_token: SkillState
53
- WowActionProvider_create_token: SkillState
54
- WowActionProvider_sell_token: SkillState
25
+ CdpEvmWalletActionProvider_get_swap_price: SkillState
26
+ CdpEvmWalletActionProvider_swap: SkillState
55
27
 
56
28
 
57
29
  class Config(SkillConfig):
@@ -65,8 +37,8 @@ class Config(SkillConfig):
65
37
  async def get_skills(
66
38
  config: "Config",
67
39
  is_private: bool,
68
- store: SkillStoreABC,
69
40
  agent_id: str,
41
+ agent: Agent | None = None,
70
42
  **_,
71
43
  ) -> list[CDPBaseTool]:
72
44
  """Get all CDP skills.
@@ -74,7 +46,6 @@ async def get_skills(
74
46
  Args:
75
47
  config: The configuration for CDP skills.
76
48
  is_private: Whether to include private skills.
77
- store: The skill store for persisting data.
78
49
  agent_id: The ID of the agent using the skills.
79
50
 
80
51
  Returns:
@@ -90,51 +61,18 @@ async def get_skills(
90
61
  available_skills.append(skill_name)
91
62
 
92
63
  # Initialize CDP client
93
- cdp_client: CdpClient = await get_cdp_client(agent_id, store)
94
- cdp_wallet_provider: CdpEvmServerWalletProvider = (
95
- await cdp_client.get_wallet_provider()
96
- )
97
- agent_kit = AgentKit(
98
- AgentKitConfig(
99
- wallet_provider=cdp_wallet_provider,
100
- action_providers=[
101
- wallet_action_provider(),
102
- cdp_api_action_provider(),
103
- pyth_action_provider(),
104
- basename_action_provider(),
105
- erc20_action_provider(),
106
- erc721_action_provider(),
107
- weth_action_provider(),
108
- morpho_action_provider(),
109
- superfluid_action_provider(),
110
- wow_action_provider(),
111
- ],
112
- )
64
+ actions = await get_agentkit_actions(
65
+ agent_id,
66
+ [
67
+ wallet_action_provider,
68
+ cdp_api_action_provider,
69
+ cdp_evm_wallet_action_provider,
70
+ ],
71
+ agent=agent,
113
72
  )
114
- cdp_tools = get_langchain_tools(agent_kit)
115
73
  tools = []
116
74
  for skill in available_skills:
117
- if skill == "get_balance":
118
- # Get the account object for the custom GetBalance skill
119
- tools.append(
120
- GetBalance(
121
- agent_id=agent_id,
122
- skill_store=store,
123
- )
124
- )
125
- continue
126
- elif skill == "swap" or skill.endswith("_trade"):
127
- # Add the custom Swap skill, "trade" is backword compatible
128
- tools.append(
129
- Swap(
130
- agent_id=agent_id,
131
- skill_store=store,
132
- )
133
- )
134
- continue
135
- for tool in cdp_tools:
136
- if tool.name.endswith(skill):
137
- tool.handle_tool_error = lambda e: f"tool error: {e}"
138
- tool.handle_validation_error = lambda e: f"validation error: {e}"
139
- tools.append(tool)
75
+ for action in actions:
76
+ if action.name.endswith(skill):
77
+ tools.append(action_to_structured_tool(action))
140
78
  return tools
@@ -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:
@@ -2,10 +2,11 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "type": "object",
4
4
  "title": "Coinbase Wallet",
5
- "description": "Integration with Coinbase Wallet (CDP) providing blockchain wallet functionality including balance checking, token transfers, and cryptocurrency trading operations",
5
+ "description": "Integration with Coinbase Wallet (CDP) providing blockchain wallet functionality including balance checking and native transfers",
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/cdp/cdp.png",
7
7
  "x-tags": [
8
- "Blockchain"
8
+ "Crypto",
9
+ "DeFi"
9
10
  ],
10
11
  "properties": {
11
12
  "enabled": {
@@ -17,38 +18,6 @@
17
18
  "states": {
18
19
  "type": "object",
19
20
  "properties": {
20
- "get_balance": {
21
- "type": "string",
22
- "title": "CDP Wallet Get Balance",
23
- "enum": [
24
- "disabled",
25
- "public",
26
- "private"
27
- ],
28
- "x-enum-title": [
29
- "Disabled",
30
- "Agent Owner + All Users",
31
- "Agent Owner Only"
32
- ],
33
- "description": "Use coinbase API to get wallet balance, float result.",
34
- "default": "private"
35
- },
36
- "swap": {
37
- "type": "string",
38
- "title": "CDP Wallet Swap",
39
- "enum": [
40
- "disabled",
41
- "public",
42
- "private"
43
- ],
44
- "x-enum-title": [
45
- "Disabled",
46
- "Agent Owner + All Users",
47
- "Agent Owner Only"
48
- ],
49
- "description": "Use coinbase API to swap.",
50
- "default": "disabled"
51
- },
52
21
  "WalletActionProvider_get_balance": {
53
22
  "type": "string",
54
23
  "title": "Normal Get Balance",
@@ -81,281 +50,9 @@
81
50
  "description": "Get wallet details using coinbase API",
82
51
  "default": "public"
83
52
  },
84
- "CdpApiActionProvider_address_reputation": {
85
- "type": "string",
86
- "title": "Address Reputation",
87
- "enum": [
88
- "disabled",
89
- "public",
90
- "private"
91
- ],
92
- "x-enum-title": [
93
- "Disabled",
94
- "Agent Owner + All Users",
95
- "Agent Owner Only"
96
- ],
97
- "description": "State for CdpApiActionProvider_address_reputation",
98
- "default": "disabled"
99
- },
100
- "ERC20ActionProvider_get_balance": {
101
- "type": "string",
102
- "title": "Erc20 Get Balance",
103
- "enum": [
104
- "disabled",
105
- "public",
106
- "private"
107
- ],
108
- "x-enum-title": [
109
- "Disabled",
110
- "Agent Owner + All Users",
111
- "Agent Owner Only"
112
- ],
113
- "description": "State for ERC20ActionProvider_get_balance",
114
- "default": "disabled"
115
- },
116
- "ERC20ActionProvider_transfer": {
117
- "type": "string",
118
- "title": "Erc20 Transfer",
119
- "enum": [
120
- "disabled",
121
- "public",
122
- "private"
123
- ],
124
- "x-enum-title": [
125
- "Disabled",
126
- "Agent Owner + All Users",
127
- "Agent Owner Only"
128
- ],
129
- "description": "State for ERC20ActionProvider_transfer",
130
- "default": "private"
131
- },
132
- "WethActionProvider_wrap_eth": {
133
- "type": "string",
134
- "title": "Wrap ETH",
135
- "enum": [
136
- "disabled",
137
- "public",
138
- "private"
139
- ],
140
- "x-enum-title": [
141
- "Disabled",
142
- "Agent Owner + All Users",
143
- "Agent Owner Only"
144
- ],
145
- "description": "State for WethActionProvider_wrap_eth",
146
- "default": "disabled"
147
- },
148
- "Erc721ActionProvider_get_balance": {
149
- "type": "string",
150
- "title": "Erc721 NFT Get Balance",
151
- "enum": [
152
- "disabled",
153
- "public",
154
- "private"
155
- ],
156
- "x-enum-title": [
157
- "Disabled",
158
- "Agent Owner + All Users",
159
- "Agent Owner Only"
160
- ],
161
- "description": "State for Erc721ActionProvider_get_balance",
162
- "default": "disabled"
163
- },
164
- "Erc721ActionProvider_transfer": {
165
- "type": "string",
166
- "title": "Erc721 NFT Transfer",
167
- "enum": [
168
- "disabled",
169
- "public",
170
- "private"
171
- ],
172
- "x-enum-title": [
173
- "Disabled",
174
- "Agent Owner + All Users",
175
- "Agent Owner Only"
176
- ],
177
- "description": "State for Erc721ActionProvider_transfer",
178
- "default": "disabled"
179
- },
180
- "Erc721ActionProvider_mint": {
181
- "type": "string",
182
- "title": "Erc721 Mint",
183
- "enum": [
184
- "disabled",
185
- "public",
186
- "private"
187
- ],
188
- "x-enum-title": [
189
- "Disabled",
190
- "Agent Owner + All Users",
191
- "Agent Owner Only"
192
- ],
193
- "description": "State for Erc721ActionProvider_mint",
194
- "default": "disabled"
195
- },
196
53
  "WalletActionProvider_native_transfer": {
197
54
  "type": "string",
198
- "title": "Wallet Native Transfer",
199
- "enum": [
200
- "disabled",
201
- "public",
202
- "private"
203
- ],
204
- "x-enum-title": [
205
- "Disabled",
206
- "Agent Owner + All Users",
207
- "Agent Owner Only"
208
- ],
209
- "description": "State for WalletActionProvider_native_transfer",
210
- "default": "private"
211
- },
212
- "CdpApiActionProvider_request_faucet_funds": {
213
- "type": "string",
214
- "title": "CDP Request Faucet Funds",
215
- "enum": [
216
- "disabled",
217
- "public",
218
- "private"
219
- ],
220
- "x-enum-title": [
221
- "Disabled",
222
- "Agent Owner + All Users",
223
- "Agent Owner Only"
224
- ],
225
- "description": "Only available in base-sepolia network",
226
- "default": "disabled"
227
- },
228
- "MorphoActionProvider_deposit": {
229
- "type": "string",
230
- "title": "Morpho Deposit",
231
- "enum": [
232
- "disabled",
233
- "public",
234
- "private"
235
- ],
236
- "x-enum-title": [
237
- "Disabled",
238
- "Agent Owner + All Users",
239
- "Agent Owner Only"
240
- ],
241
- "description": "State for MorphoActionProvider_deposit",
242
- "default": "disabled"
243
- },
244
- "MorphoActionProvider_withdraw": {
245
- "type": "string",
246
- "title": "Morpho Withdraw",
247
- "enum": [
248
- "disabled",
249
- "public",
250
- "private"
251
- ],
252
- "x-enum-title": [
253
- "Disabled",
254
- "Agent Owner + All Users",
255
- "Agent Owner Only"
256
- ],
257
- "description": "State for MorphoActionProvider_withdraw",
258
- "default": "disabled"
259
- },
260
- "PythActionProvider_fetch_price_feed_id": {
261
- "type": "string",
262
- "title": "Pyth Fetch Price Feed Id",
263
- "enum": [
264
- "disabled",
265
- "public",
266
- "private"
267
- ],
268
- "x-enum-title": [
269
- "Disabled",
270
- "Agent Owner + All Users",
271
- "Agent Owner Only"
272
- ],
273
- "description": "State for PythActionProvider_fetch_price_feed_id",
274
- "default": "private"
275
- },
276
- "PythActionProvider_fetch_price": {
277
- "type": "string",
278
- "title": "Pyth Fetch Price",
279
- "enum": [
280
- "disabled",
281
- "public",
282
- "private"
283
- ],
284
- "x-enum-title": [
285
- "Disabled",
286
- "Agent Owner + All Users",
287
- "Agent Owner Only"
288
- ],
289
- "description": "State for PythActionProvider_fetch_price",
290
- "default": "private"
291
- },
292
- "WowActionProvider_buy_token": {
293
- "type": "string",
294
- "title": "Wow Buy Token",
295
- "enum": [
296
- "disabled",
297
- "public",
298
- "private"
299
- ],
300
- "x-enum-title": [
301
- "Disabled",
302
- "Agent Owner + All Users",
303
- "Agent Owner Only"
304
- ],
305
- "description": "State for WowActionProvider_buy_token",
306
- "default": "disabled"
307
- },
308
- "WowActionProvider_create_token": {
309
- "type": "string",
310
- "title": "Wow Create Token",
311
- "enum": [
312
- "disabled",
313
- "public",
314
- "private"
315
- ],
316
- "x-enum-title": [
317
- "Disabled",
318
- "Agent Owner + All Users",
319
- "Agent Owner Only"
320
- ],
321
- "description": "State for WowActionProvider_create_token",
322
- "default": "disabled"
323
- },
324
- "WowActionProvider_sell_token": {
325
- "type": "string",
326
- "title": "Wow Sell Token",
327
- "enum": [
328
- "disabled",
329
- "public",
330
- "private"
331
- ],
332
- "x-enum-title": [
333
- "Disabled",
334
- "Agent Owner + All Users",
335
- "Agent Owner Only"
336
- ],
337
- "description": "State for WowActionProvider_sell_token",
338
- "default": "disabled"
339
- },
340
- "SuperfluidActionProvider_create_flow": {
341
- "type": "string",
342
- "title": "Superfluid Create Flow",
343
- "enum": [
344
- "disabled",
345
- "public",
346
- "private"
347
- ],
348
- "x-enum-title": [
349
- "Disabled",
350
- "Agent Owner + All Users",
351
- "Agent Owner Only"
352
- ],
353
- "description": "State for SuperfluidActionProvider_create_flow",
354
- "default": "disabled"
355
- },
356
- "SuperfluidActionProvider_update_flow": {
357
- "type": "string",
358
- "title": "Superfluid Update Flow",
55
+ "title": "Native Transfer",
359
56
  "enum": [
360
57
  "disabled",
361
58
  "public",
@@ -366,12 +63,12 @@
366
63
  "Agent Owner + All Users",
367
64
  "Agent Owner Only"
368
65
  ],
369
- "description": "State for SuperfluidActionProvider_update_flow",
66
+ "description": "Transfer the native asset from the wallet",
370
67
  "default": "disabled"
371
68
  },
372
- "SuperfluidActionProvider_delete_flow": {
69
+ "CdpEvmWalletActionProvider_get_swap_price": {
373
70
  "type": "string",
374
- "title": "Superfluid Delete Flow",
71
+ "title": "Get Swap Price",
375
72
  "enum": [
376
73
  "disabled",
377
74
  "public",
@@ -382,12 +79,12 @@
382
79
  "Agent Owner + All Users",
383
80
  "Agent Owner Only"
384
81
  ],
385
- "description": "State for SuperfluidActionProvider_delete_flow",
82
+ "description": "State for CdpEvmWalletActionProvider_get_swap_price",
386
83
  "default": "disabled"
387
84
  },
388
- "BasenameActionProvider_register_basename": {
85
+ "CdpEvmWalletActionProvider_swap": {
389
86
  "type": "string",
390
- "title": "Register Basename",
87
+ "title": "Swap Tokens",
391
88
  "enum": [
392
89
  "disabled",
393
90
  "public",
@@ -398,7 +95,7 @@
398
95
  "Agent Owner + All Users",
399
96
  "Agent Owner Only"
400
97
  ],
401
- "description": "State for BasenameActionProvider_register_basename",
98
+ "description": "State for CdpEvmWalletActionProvider_swap",
402
99
  "default": "disabled"
403
100
  }
404
101
  },
@@ -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 {