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
@@ -6,7 +6,7 @@
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/heurist/heurist.png",
7
7
  "x-tags": [
8
8
  "AI",
9
- "Image Generation"
9
+ "Image"
10
10
  ],
11
11
  "properties": {
12
12
  "enabled": {
@@ -193,4 +193,4 @@
193
193
  }
194
194
  },
195
195
  "additionalProperties": true
196
- }
196
+ }
@@ -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.http.base import HttpBaseTool
9
8
  from intentkit.skills.http.get import HttpGet
@@ -33,7 +32,6 @@ class Config(SkillConfig):
33
32
  async def get_skills(
34
33
  config: "Config",
35
34
  is_private: bool,
36
- store: SkillStoreABC,
37
35
  **_,
38
36
  ) -> list[HttpBaseTool]:
39
37
  """Get all HTTP client skills.
@@ -41,7 +39,6 @@ async def get_skills(
41
39
  Args:
42
40
  config: The configuration for HTTP client skills.
43
41
  is_private: Whether to include private skills.
44
- store: The skill store for persisting data.
45
42
 
46
43
  Returns:
47
44
  A list of HTTP client skills.
@@ -58,7 +55,7 @@ async def get_skills(
58
55
  # Get each skill using the cached getter
59
56
  result = []
60
57
  for name in available_skills:
61
- skill = get_http_skill(name, store)
58
+ skill = get_http_skill(name)
62
59
  if skill:
63
60
  result.append(skill)
64
61
  return result
@@ -66,34 +63,26 @@ async def get_skills(
66
63
 
67
64
  def get_http_skill(
68
65
  name: str,
69
- store: SkillStoreABC,
70
66
  ) -> HttpBaseTool:
71
67
  """Get an HTTP client skill by name.
72
68
 
73
69
  Args:
74
70
  name: The name of the skill to get
75
- store: The skill store for persisting data
76
71
 
77
72
  Returns:
78
73
  The requested HTTP client skill
79
74
  """
80
75
  if name == "http_get":
81
76
  if name not in _cache:
82
- _cache[name] = HttpGet(
83
- skill_store=store,
84
- )
77
+ _cache[name] = HttpGet()
85
78
  return _cache[name]
86
79
  elif name == "http_post":
87
80
  if name not in _cache:
88
- _cache[name] = HttpPost(
89
- skill_store=store,
90
- )
81
+ _cache[name] = HttpPost()
91
82
  return _cache[name]
92
83
  elif name == "http_put":
93
84
  if name not in _cache:
94
- _cache[name] = HttpPut(
95
- skill_store=store,
96
- )
85
+ _cache[name] = HttpPut()
97
86
  return _cache[name]
98
87
  else:
99
88
  logger.warning(f"Unknown HTTP 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 HttpBaseTool(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,7 +1,8 @@
1
1
  import logging
2
- from typing import Any, Dict, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  import httpx
5
+ from langchain_core.tools import ToolException
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
  from intentkit.skills.http.base import HttpBaseTool
@@ -13,15 +14,15 @@ class HttpGetInput(BaseModel):
13
14
  """Input for HTTP GET request."""
14
15
 
15
16
  url: str = Field(description="The URL to send the GET request to")
16
- headers: Optional[Dict[str, str]] = Field(
17
+ headers: dict[str, str] | None = Field(
17
18
  description="Optional headers to include in the request",
18
19
  default=None,
19
20
  )
20
- params: Optional[Dict[str, Any]] = Field(
21
+ params: dict[str, Any] | None = Field(
21
22
  description="Optional query parameters to include in the request",
22
23
  default=None,
23
24
  )
24
- timeout: Optional[float] = Field(
25
+ timeout: float | None = Field(
25
26
  description="Request timeout in seconds (default: 30)",
26
27
  default=30.0,
27
28
  )
@@ -46,13 +47,13 @@ class HttpGet(HttpBaseTool):
46
47
  "Returns the response content as text. "
47
48
  "Use this when you need to fetch data from web APIs or websites."
48
49
  )
49
- args_schema: Type[BaseModel] = HttpGetInput
50
+ args_schema: type[BaseModel] = HttpGetInput
50
51
 
51
52
  async def _arun(
52
53
  self,
53
54
  url: str,
54
- headers: Optional[Dict[str, str]] = None,
55
- params: Optional[Dict[str, Any]] = None,
55
+ headers: dict[str, str] | None = None,
56
+ params: dict[str, Any] | None = None,
56
57
  timeout: float = 30.0,
57
58
  **kwargs,
58
59
  ) -> str:
@@ -83,12 +84,16 @@ class HttpGet(HttpBaseTool):
83
84
  # Return response content
84
85
  return f"Status: {response.status_code}\nContent: {response.text}"
85
86
 
86
- except httpx.TimeoutException:
87
- return f"Error: Request to {url} timed out after {timeout} seconds"
88
- except httpx.HTTPStatusError as e:
89
- return f"Error: HTTP {e.response.status_code} - {e.response.text}"
90
- except httpx.RequestError as e:
91
- return f"Error: Failed to connect to {url} - {str(e)}"
92
- except Exception as e:
93
- logger.error(f"Unexpected error in HTTP GET request: {e}")
94
- return f"Error: Unexpected error occurred - {str(e)}"
87
+ except httpx.TimeoutException as exc:
88
+ raise ToolException(
89
+ f"Request to {url} timed out after {timeout} seconds"
90
+ ) from exc
91
+ except httpx.HTTPStatusError as exc:
92
+ raise ToolException(
93
+ f"HTTP {exc.response.status_code} - {exc.response.text}"
94
+ ) from exc
95
+ except httpx.RequestError as exc:
96
+ raise ToolException(f"Failed to connect to {url} - {str(exc)}") from exc
97
+ except Exception as exc: # noqa: BLE001
98
+ logger.error("Unexpected error in HTTP GET request", exc_info=exc)
99
+ raise ToolException(f"Unexpected error occurred - {str(exc)}") from exc
@@ -1,7 +1,8 @@
1
1
  import logging
2
- from typing import Any, Dict, Optional, Type, Union
2
+ from typing import Any
3
3
 
4
4
  import httpx
5
+ from langchain_core.tools import ToolException
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
  from intentkit.skills.http.base import HttpBaseTool
@@ -13,19 +14,19 @@ class HttpPostInput(BaseModel):
13
14
  """Input for HTTP POST request."""
14
15
 
15
16
  url: str = Field(description="The URL to send the POST request to")
16
- data: Optional[Union[Dict[str, Any], str]] = Field(
17
+ data: dict[str, Any] | str | None = Field(
17
18
  description="The data to send in the request body. Can be a dictionary (will be sent as JSON) or a string",
18
19
  default=None,
19
20
  )
20
- headers: Optional[Dict[str, str]] = Field(
21
+ headers: dict[str, str] | None = Field(
21
22
  description="Optional headers to include in the request",
22
23
  default=None,
23
24
  )
24
- params: Optional[Dict[str, Any]] = Field(
25
+ params: dict[str, Any] | None = Field(
25
26
  description="Optional query parameters to include in the request",
26
27
  default=None,
27
28
  )
28
- timeout: Optional[float] = Field(
29
+ timeout: float | None = Field(
29
30
  description="Request timeout in seconds (default: 30)",
30
31
  default=30.0,
31
32
  )
@@ -51,14 +52,14 @@ class HttpPost(HttpBaseTool):
51
52
  "Returns the response content as text. "
52
53
  "Use this when you need to send data to web APIs or submit forms."
53
54
  )
54
- args_schema: Type[BaseModel] = HttpPostInput
55
+ args_schema: type[BaseModel] = HttpPostInput
55
56
 
56
57
  async def _arun(
57
58
  self,
58
59
  url: str,
59
- data: Optional[Union[Dict[str, Any], str]] = None,
60
- headers: Optional[Dict[str, str]] = None,
61
- params: Optional[Dict[str, Any]] = None,
60
+ data: dict[str, Any] | str | None = None,
61
+ headers: dict[str, str] | None = None,
62
+ params: dict[str, Any] | None = None,
62
63
  timeout: float = 30.0,
63
64
  **kwargs,
64
65
  ) -> str:
@@ -100,12 +101,16 @@ class HttpPost(HttpBaseTool):
100
101
  # Return response content
101
102
  return f"Status: {response.status_code}\nContent: {response.text}"
102
103
 
103
- except httpx.TimeoutException:
104
- return f"Error: Request to {url} timed out after {timeout} seconds"
105
- except httpx.HTTPStatusError as e:
106
- return f"Error: HTTP {e.response.status_code} - {e.response.text}"
107
- except httpx.RequestError as e:
108
- return f"Error: Failed to connect to {url} - {str(e)}"
109
- except Exception as e:
110
- logger.error(f"Unexpected error in HTTP POST request: {e}")
111
- return f"Error: Unexpected error occurred - {str(e)}"
104
+ except httpx.TimeoutException as exc:
105
+ raise ToolException(
106
+ f"Request to {url} timed out after {timeout} seconds"
107
+ ) from exc
108
+ except httpx.HTTPStatusError as exc:
109
+ raise ToolException(
110
+ f"HTTP {exc.response.status_code} - {exc.response.text}"
111
+ ) from exc
112
+ except httpx.RequestError as exc:
113
+ raise ToolException(f"Failed to connect to {url} - {str(exc)}") from exc
114
+ except Exception as exc: # noqa: BLE001
115
+ logger.error("Unexpected error in HTTP POST request", exc_info=exc)
116
+ raise ToolException(f"Unexpected error occurred - {str(exc)}") from exc
@@ -1,7 +1,8 @@
1
1
  import logging
2
- from typing import Any, Dict, Optional, Type, Union
2
+ from typing import Any
3
3
 
4
4
  import httpx
5
+ from langchain_core.tools import ToolException
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
  from intentkit.skills.http.base import HttpBaseTool
@@ -13,19 +14,19 @@ class HttpPutInput(BaseModel):
13
14
  """Input for HTTP PUT request."""
14
15
 
15
16
  url: str = Field(description="The URL to send the PUT request to")
16
- data: Optional[Union[Dict[str, Any], str]] = Field(
17
+ data: dict[str, Any] | str | None = Field(
17
18
  description="The data to send in the request body. Can be a dictionary (will be sent as JSON) or a string",
18
19
  default=None,
19
20
  )
20
- headers: Optional[Dict[str, str]] = Field(
21
+ headers: dict[str, str] | None = Field(
21
22
  description="Optional headers to include in the request",
22
23
  default=None,
23
24
  )
24
- params: Optional[Dict[str, Any]] = Field(
25
+ params: dict[str, Any] | None = Field(
25
26
  description="Optional query parameters to include in the request",
26
27
  default=None,
27
28
  )
28
- timeout: Optional[float] = Field(
29
+ timeout: float | None = Field(
29
30
  description="Request timeout in seconds (default: 30)",
30
31
  default=30.0,
31
32
  )
@@ -51,14 +52,14 @@ class HttpPut(HttpBaseTool):
51
52
  "Returns the response content as text. "
52
53
  "Use this when you need to update or replace data on web APIs."
53
54
  )
54
- args_schema: Type[BaseModel] = HttpPutInput
55
+ args_schema: type[BaseModel] = HttpPutInput
55
56
 
56
57
  async def _arun(
57
58
  self,
58
59
  url: str,
59
- data: Optional[Union[Dict[str, Any], str]] = None,
60
- headers: Optional[Dict[str, str]] = None,
61
- params: Optional[Dict[str, Any]] = None,
60
+ data: dict[str, Any] | str | None = None,
61
+ headers: dict[str, str] | None = None,
62
+ params: dict[str, Any] | None = None,
62
63
  timeout: float = 30.0,
63
64
  **kwargs,
64
65
  ) -> str:
@@ -100,12 +101,16 @@ class HttpPut(HttpBaseTool):
100
101
  # Return response content
101
102
  return f"Status: {response.status_code}\nContent: {response.text}"
102
103
 
103
- except httpx.TimeoutException:
104
- return f"Error: Request to {url} timed out after {timeout} seconds"
105
- except httpx.HTTPStatusError as e:
106
- return f"Error: HTTP {e.response.status_code} - {e.response.text}"
107
- except httpx.RequestError as e:
108
- return f"Error: Failed to connect to {url} - {str(e)}"
109
- except Exception as e:
110
- logger.error(f"Unexpected error in HTTP PUT request: {e}")
111
- return f"Error: Unexpected error occurred - {str(e)}"
104
+ except httpx.TimeoutException as exc:
105
+ raise ToolException(
106
+ f"Request to {url} timed out after {timeout} seconds"
107
+ ) from exc
108
+ except httpx.HTTPStatusError as exc:
109
+ raise ToolException(
110
+ f"HTTP {exc.response.status_code} - {exc.response.text}"
111
+ ) from exc
112
+ except httpx.RequestError as exc:
113
+ raise ToolException(f"Failed to connect to {url} - {str(exc)}") from exc
114
+ except Exception as exc: # noqa: BLE001
115
+ logger.error("Unexpected error in HTTP PUT request", exc_info=exc)
116
+ raise ToolException(f"Unexpected error occurred - {str(exc)}") from exc
@@ -5,10 +5,9 @@
5
5
  "description": "HTTP client skills for making web requests",
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/http/http.svg",
7
7
  "x-tags": [
8
- "HTTP",
9
- "Web",
10
- "API",
11
- "Client"
8
+ "Developer Tools",
9
+ "Infrastructure",
10
+ "Knowledge Base"
12
11
  ],
13
12
  "properties": {
14
13
  "enabled": {
@@ -77,4 +76,4 @@
77
76
  "enabled"
78
77
  ],
79
78
  "additionalProperties": true
80
- }
79
+ }
@@ -1,7 +1,6 @@
1
1
  import logging
2
- from typing import List, Optional, TypedDict
2
+ from typing import Any, TypedDict
3
3
 
4
- from intentkit.abstracts.skill import SkillStoreABC
5
4
  from intentkit.skills.base import SkillConfig, SkillState
6
5
  from intentkit.skills.lifi.base import LiFiBaseTool
7
6
  from intentkit.skills.lifi.token_execute import TokenExecute
@@ -23,19 +22,18 @@ class Config(SkillConfig):
23
22
  """Configuration for LiFi skills."""
24
23
 
25
24
  states: SkillStates
26
- default_slippage: Optional[float] = 0.03
27
- allowed_chains: Optional[List[str]] = None
28
- max_execution_time: Optional[int] = 300
25
+ default_slippage: float | None = 0.03
26
+ allowed_chains: list[str] | None = None
27
+ max_execution_time: int | None = 300
29
28
 
30
29
 
31
30
  async def get_skills(
32
31
  config: "Config",
33
32
  is_private: bool,
34
- store: SkillStoreABC,
35
- **_,
33
+ **_: Any,
36
34
  ) -> list[LiFiBaseTool]:
37
35
  """Get all LiFi skills."""
38
- available_skills = []
36
+ available_skills: list[str] = []
39
37
 
40
38
  # Log configuration
41
39
  logger.info(f"[LiFi_Skills] Initializing with config: {config}")
@@ -57,10 +55,10 @@ async def get_skills(
57
55
  logger.info(f"[LiFi_Skills] Available skills: {available_skills}")
58
56
 
59
57
  # Get each skill using the cached getter
60
- skills = []
58
+ skills: list[LiFiBaseTool] = []
61
59
  for name in available_skills:
62
60
  try:
63
- skill = get_lifi_skill(name, store, config)
61
+ skill = get_lifi_skill(name, config)
64
62
  skills.append(skill)
65
63
  logger.info(f"[LiFi_Skills] Successfully loaded skill: {name}")
66
64
  except Exception as e:
@@ -73,7 +71,6 @@ async def get_skills(
73
71
 
74
72
  def get_lifi_skill(
75
73
  name: str,
76
- store: SkillStoreABC,
77
74
  config: Config,
78
75
  ) -> LiFiBaseTool:
79
76
  """Get a LiFi skill by name."""
@@ -108,7 +105,6 @@ def get_lifi_skill(
108
105
  logger.info(f"[LiFi_Skills] Allowed chains: {allowed_chains}")
109
106
 
110
107
  _cache[cache_key] = TokenQuote(
111
- skill_store=store,
112
108
  default_slippage=default_slippage,
113
109
  allowed_chains=allowed_chains,
114
110
  )
@@ -129,7 +125,6 @@ def get_lifi_skill(
129
125
  )
130
126
 
131
127
  _cache[cache_key] = TokenExecute(
132
- skill_store=store,
133
128
  default_slippage=default_slippage,
134
129
  allowed_chains=allowed_chains,
135
130
  max_execution_time=max_execution_time,
@@ -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 LiFiBaseTool(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:
@@ -5,10 +5,7 @@
5
5
  "description": "Cross-chain token transfer and swap capabilities using the LiFi protocol",
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/lifi/lifi.png",
7
7
  "x-tags": [
8
- "DeFi",
9
- "Blockchain",
10
- "Token Transfer",
11
- "Cross-chain"
8
+ "DeFi"
12
9
  ],
13
10
  "properties": {
14
11
  "enabled": {
@@ -53,7 +50,10 @@
53
50
  "description": "Execute token transfers (requires CDP wallet and cdp skills enabled)"
54
51
  }
55
52
  },
56
- "required": ["token_quote", "token_execute"],
53
+ "required": [
54
+ "token_quote",
55
+ "token_execute"
56
+ ],
57
57
  "description": "States for each LiFi skill"
58
58
  },
59
59
  "default_slippage": {
@@ -71,7 +71,13 @@
71
71
  "description": "List of blockchain networks that can be used (if empty, all supported chains are allowed)",
72
72
  "items": {
73
73
  "type": "string",
74
- "examples": ["ETH", "POL", "ARB", "OPT", "DAI"]
74
+ "examples": [
75
+ "ETH",
76
+ "POL",
77
+ "ARB",
78
+ "OPT",
79
+ "DAI"
80
+ ]
75
81
  },
76
82
  "uniqueItems": true
77
83
  },
@@ -84,6 +90,9 @@
84
90
  "maximum": 1800
85
91
  }
86
92
  },
87
- "required": ["states", "enabled"],
93
+ "required": [
94
+ "states",
95
+ "enabled"
96
+ ],
88
97
  "additionalProperties": true
89
- }
98
+ }