intentkit 0.7.5.dev3__py3-none-any.whl → 0.8.34.dev7__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.
Files changed (393) hide show
  1. intentkit/MANIFEST.in +14 -0
  2. intentkit/README.md +88 -0
  3. intentkit/__init__.py +6 -4
  4. intentkit/abstracts/agent.py +4 -5
  5. intentkit/abstracts/engine.py +5 -5
  6. intentkit/abstracts/graph.py +15 -8
  7. intentkit/abstracts/skill.py +6 -144
  8. intentkit/abstracts/twitter.py +4 -5
  9. intentkit/clients/__init__.py +9 -2
  10. intentkit/clients/cdp.py +129 -153
  11. intentkit/{utils → clients}/s3.py +109 -34
  12. intentkit/clients/twitter.py +83 -62
  13. intentkit/clients/web3.py +4 -7
  14. intentkit/config/config.py +123 -90
  15. intentkit/core/account_checking.py +802 -0
  16. intentkit/core/agent.py +313 -498
  17. intentkit/core/asset.py +267 -0
  18. intentkit/core/chat.py +5 -3
  19. intentkit/core/client.py +1 -1
  20. intentkit/core/credit.py +49 -41
  21. intentkit/core/draft.py +201 -0
  22. intentkit/core/draft_chat.py +118 -0
  23. intentkit/core/engine.py +378 -287
  24. intentkit/core/manager/__init__.py +25 -0
  25. intentkit/core/manager/engine.py +220 -0
  26. intentkit/core/manager/service.py +172 -0
  27. intentkit/core/manager/skills.py +178 -0
  28. intentkit/core/middleware.py +231 -0
  29. intentkit/core/prompt.py +74 -114
  30. intentkit/core/scheduler.py +143 -0
  31. intentkit/core/statistics.py +168 -0
  32. intentkit/models/agent.py +931 -518
  33. intentkit/models/agent_data.py +165 -106
  34. intentkit/models/agent_schema.json +38 -251
  35. intentkit/models/app_setting.py +15 -13
  36. intentkit/models/chat.py +86 -140
  37. intentkit/models/credit.py +182 -162
  38. intentkit/models/db.py +42 -23
  39. intentkit/models/db_mig.py +120 -3
  40. intentkit/models/draft.py +222 -0
  41. intentkit/models/llm.csv +31 -0
  42. intentkit/models/llm.py +262 -370
  43. intentkit/models/redis.py +6 -4
  44. intentkit/models/skill.py +222 -101
  45. intentkit/models/skills.csv +173 -0
  46. intentkit/models/team.py +189 -0
  47. intentkit/models/user.py +103 -31
  48. intentkit/skills/acolyt/__init__.py +2 -9
  49. intentkit/skills/acolyt/ask.py +3 -4
  50. intentkit/skills/acolyt/base.py +4 -9
  51. intentkit/skills/acolyt/schema.json +4 -3
  52. intentkit/skills/aixbt/__init__.py +2 -13
  53. intentkit/skills/aixbt/base.py +1 -7
  54. intentkit/skills/aixbt/projects.py +14 -15
  55. intentkit/skills/aixbt/schema.json +4 -4
  56. intentkit/skills/allora/__init__.py +2 -9
  57. intentkit/skills/allora/base.py +4 -9
  58. intentkit/skills/allora/price.py +3 -4
  59. intentkit/skills/allora/schema.json +3 -2
  60. intentkit/skills/base.py +241 -41
  61. intentkit/skills/basename/__init__.py +51 -0
  62. intentkit/skills/basename/base.py +11 -0
  63. intentkit/skills/basename/basename.svg +11 -0
  64. intentkit/skills/basename/schema.json +58 -0
  65. intentkit/skills/carv/__init__.py +115 -121
  66. intentkit/skills/carv/base.py +184 -185
  67. intentkit/skills/carv/fetch_news.py +3 -3
  68. intentkit/skills/carv/onchain_query.py +4 -4
  69. intentkit/skills/carv/schema.json +134 -137
  70. intentkit/skills/carv/token_info_and_price.py +6 -6
  71. intentkit/skills/casino/__init__.py +4 -15
  72. intentkit/skills/casino/base.py +1 -7
  73. intentkit/skills/casino/deck_draw.py +5 -8
  74. intentkit/skills/casino/deck_shuffle.py +6 -6
  75. intentkit/skills/casino/dice_roll.py +2 -4
  76. intentkit/skills/casino/schema.json +0 -1
  77. intentkit/skills/cdp/__init__.py +22 -84
  78. intentkit/skills/cdp/base.py +1 -7
  79. intentkit/skills/cdp/schema.json +11 -314
  80. intentkit/skills/chainlist/__init__.py +2 -7
  81. intentkit/skills/chainlist/base.py +1 -7
  82. intentkit/skills/chainlist/chain_lookup.py +18 -18
  83. intentkit/skills/chainlist/schema.json +3 -5
  84. intentkit/skills/common/__init__.py +2 -9
  85. intentkit/skills/common/base.py +1 -7
  86. intentkit/skills/common/current_time.py +1 -2
  87. intentkit/skills/common/schema.json +2 -2
  88. intentkit/skills/cookiefun/__init__.py +6 -9
  89. intentkit/skills/cookiefun/base.py +2 -7
  90. intentkit/skills/cookiefun/get_account_details.py +7 -7
  91. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  92. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  93. intentkit/skills/cookiefun/get_sectors.py +3 -3
  94. intentkit/skills/cookiefun/schema.json +1 -3
  95. intentkit/skills/cookiefun/search_accounts.py +9 -9
  96. intentkit/skills/cryptocompare/__init__.py +7 -24
  97. intentkit/skills/cryptocompare/api.py +2 -3
  98. intentkit/skills/cryptocompare/base.py +10 -24
  99. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  100. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  101. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  102. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  103. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  104. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  105. intentkit/skills/cryptocompare/schema.json +3 -3
  106. intentkit/skills/cryptopanic/__init__.py +7 -10
  107. intentkit/skills/cryptopanic/base.py +51 -55
  108. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  109. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  110. intentkit/skills/cryptopanic/schema.json +105 -103
  111. intentkit/skills/dapplooker/__init__.py +2 -9
  112. intentkit/skills/dapplooker/base.py +4 -9
  113. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  114. intentkit/skills/dapplooker/schema.json +3 -5
  115. intentkit/skills/defillama/__init__.py +24 -74
  116. intentkit/skills/defillama/api.py +6 -9
  117. intentkit/skills/defillama/base.py +8 -19
  118. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  119. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  120. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  121. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  122. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  123. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  124. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  125. intentkit/skills/defillama/config/chains.py +1 -3
  126. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  127. intentkit/skills/defillama/schema.json +5 -1
  128. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  129. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  130. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  131. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  132. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  133. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  134. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  135. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  136. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  137. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  138. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  139. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  140. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  141. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  142. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  143. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  144. intentkit/skills/dexscreener/__init__.py +97 -102
  145. intentkit/skills/dexscreener/base.py +125 -130
  146. intentkit/skills/dexscreener/get_pair_info.py +4 -5
  147. intentkit/skills/dexscreener/get_token_pairs.py +4 -5
  148. intentkit/skills/dexscreener/get_tokens_info.py +7 -8
  149. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  150. intentkit/skills/dexscreener/schema.json +91 -93
  151. intentkit/skills/dexscreener/search_token.py +182 -184
  152. intentkit/skills/dexscreener/utils.py +15 -14
  153. intentkit/skills/dune_analytics/__init__.py +7 -9
  154. intentkit/skills/dune_analytics/base.py +48 -52
  155. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  156. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  157. intentkit/skills/dune_analytics/schema.json +104 -99
  158. intentkit/skills/elfa/__init__.py +5 -18
  159. intentkit/skills/elfa/base.py +10 -14
  160. intentkit/skills/elfa/mention.py +19 -21
  161. intentkit/skills/elfa/schema.json +3 -2
  162. intentkit/skills/elfa/stats.py +4 -4
  163. intentkit/skills/elfa/tokens.py +12 -12
  164. intentkit/skills/elfa/utils.py +26 -28
  165. intentkit/skills/enso/__init__.py +11 -31
  166. intentkit/skills/enso/base.py +54 -35
  167. intentkit/skills/enso/best_yield.py +16 -24
  168. intentkit/skills/enso/networks.py +6 -11
  169. intentkit/skills/enso/prices.py +11 -13
  170. intentkit/skills/enso/route.py +34 -38
  171. intentkit/skills/enso/schema.json +3 -2
  172. intentkit/skills/enso/tokens.py +29 -38
  173. intentkit/skills/enso/wallet.py +76 -191
  174. intentkit/skills/erc20/__init__.py +50 -0
  175. intentkit/skills/erc20/base.py +11 -0
  176. intentkit/skills/erc20/erc20.svg +5 -0
  177. intentkit/skills/erc20/schema.json +74 -0
  178. intentkit/skills/erc721/__init__.py +53 -0
  179. intentkit/skills/erc721/base.py +11 -0
  180. intentkit/skills/erc721/erc721.svg +5 -0
  181. intentkit/skills/erc721/schema.json +90 -0
  182. intentkit/skills/firecrawl/__init__.py +5 -18
  183. intentkit/skills/firecrawl/base.py +4 -9
  184. intentkit/skills/firecrawl/clear.py +4 -8
  185. intentkit/skills/firecrawl/crawl.py +19 -19
  186. intentkit/skills/firecrawl/query.py +4 -3
  187. intentkit/skills/firecrawl/schema.json +2 -6
  188. intentkit/skills/firecrawl/scrape.py +17 -22
  189. intentkit/skills/firecrawl/utils.py +50 -42
  190. intentkit/skills/github/__init__.py +2 -7
  191. intentkit/skills/github/base.py +1 -7
  192. intentkit/skills/github/github_search.py +1 -2
  193. intentkit/skills/github/schema.json +3 -4
  194. intentkit/skills/heurist/__init__.py +8 -27
  195. intentkit/skills/heurist/base.py +4 -9
  196. intentkit/skills/heurist/image_generation_animagine_xl.py +13 -15
  197. intentkit/skills/heurist/image_generation_arthemy_comics.py +13 -15
  198. intentkit/skills/heurist/image_generation_arthemy_real.py +13 -15
  199. intentkit/skills/heurist/image_generation_braindance.py +13 -15
  200. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +13 -15
  201. intentkit/skills/heurist/image_generation_flux_1_dev.py +13 -15
  202. intentkit/skills/heurist/image_generation_sdxl.py +13 -15
  203. intentkit/skills/heurist/schema.json +2 -2
  204. intentkit/skills/http/__init__.py +4 -15
  205. intentkit/skills/http/base.py +1 -7
  206. intentkit/skills/http/get.py +21 -16
  207. intentkit/skills/http/post.py +23 -18
  208. intentkit/skills/http/put.py +23 -18
  209. intentkit/skills/http/schema.json +4 -5
  210. intentkit/skills/lifi/__init__.py +8 -13
  211. intentkit/skills/lifi/base.py +3 -9
  212. intentkit/skills/lifi/schema.json +17 -8
  213. intentkit/skills/lifi/token_execute.py +150 -60
  214. intentkit/skills/lifi/token_quote.py +8 -10
  215. intentkit/skills/lifi/utils.py +104 -51
  216. intentkit/skills/moralis/__init__.py +6 -10
  217. intentkit/skills/moralis/api.py +6 -7
  218. intentkit/skills/moralis/base.py +5 -10
  219. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  220. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  221. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  222. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  223. intentkit/skills/moralis/schema.json +7 -2
  224. intentkit/skills/morpho/__init__.py +52 -0
  225. intentkit/skills/morpho/base.py +11 -0
  226. intentkit/skills/morpho/morpho.svg +12 -0
  227. intentkit/skills/morpho/schema.json +73 -0
  228. intentkit/skills/nation/__init__.py +4 -9
  229. intentkit/skills/nation/base.py +5 -10
  230. intentkit/skills/nation/nft_check.py +3 -4
  231. intentkit/skills/nation/schema.json +4 -3
  232. intentkit/skills/onchain.py +30 -0
  233. intentkit/skills/openai/__init__.py +17 -18
  234. intentkit/skills/openai/base.py +10 -14
  235. intentkit/skills/openai/dalle_image_generation.py +4 -9
  236. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  237. intentkit/skills/openai/gpt_image_generation.py +5 -9
  238. intentkit/skills/openai/gpt_image_mini_generator.py +92 -0
  239. intentkit/skills/openai/gpt_image_to_image.py +5 -9
  240. intentkit/skills/openai/image_to_text.py +3 -7
  241. intentkit/skills/openai/schema.json +34 -3
  242. intentkit/skills/portfolio/__init__.py +11 -35
  243. intentkit/skills/portfolio/base.py +33 -19
  244. intentkit/skills/portfolio/schema.json +3 -5
  245. intentkit/skills/portfolio/token_balances.py +21 -21
  246. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  247. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  248. intentkit/skills/portfolio/wallet_history.py +31 -31
  249. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  250. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  251. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  252. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  253. intentkit/skills/portfolio/wallet_stats.py +3 -3
  254. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  255. intentkit/skills/pyth/__init__.py +50 -0
  256. intentkit/skills/pyth/base.py +11 -0
  257. intentkit/skills/pyth/pyth.svg +6 -0
  258. intentkit/skills/pyth/schema.json +75 -0
  259. intentkit/skills/skills.toml +36 -0
  260. intentkit/skills/slack/__init__.py +5 -17
  261. intentkit/skills/slack/base.py +3 -9
  262. intentkit/skills/slack/get_channel.py +8 -8
  263. intentkit/skills/slack/get_message.py +9 -9
  264. intentkit/skills/slack/schedule_message.py +5 -5
  265. intentkit/skills/slack/schema.json +2 -2
  266. intentkit/skills/slack/send_message.py +3 -5
  267. intentkit/skills/supabase/__init__.py +7 -23
  268. intentkit/skills/supabase/base.py +1 -7
  269. intentkit/skills/supabase/delete_data.py +4 -4
  270. intentkit/skills/supabase/fetch_data.py +12 -12
  271. intentkit/skills/supabase/insert_data.py +4 -4
  272. intentkit/skills/supabase/invoke_function.py +6 -6
  273. intentkit/skills/supabase/schema.json +2 -3
  274. intentkit/skills/supabase/update_data.py +6 -6
  275. intentkit/skills/supabase/upsert_data.py +4 -4
  276. intentkit/skills/superfluid/__init__.py +53 -0
  277. intentkit/skills/superfluid/base.py +11 -0
  278. intentkit/skills/superfluid/schema.json +89 -0
  279. intentkit/skills/superfluid/superfluid.svg +6 -0
  280. intentkit/skills/system/__init__.py +7 -24
  281. intentkit/skills/system/add_autonomous_task.py +10 -12
  282. intentkit/skills/system/delete_autonomous_task.py +2 -2
  283. intentkit/skills/system/edit_autonomous_task.py +14 -18
  284. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  285. intentkit/skills/system/read_agent_api_key.py +6 -4
  286. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  287. intentkit/skills/system/schema.json +6 -8
  288. intentkit/skills/tavily/__init__.py +3 -12
  289. intentkit/skills/tavily/base.py +4 -9
  290. intentkit/skills/tavily/schema.json +3 -5
  291. intentkit/skills/tavily/tavily_extract.py +2 -4
  292. intentkit/skills/tavily/tavily_search.py +4 -6
  293. intentkit/skills/token/__init__.py +5 -10
  294. intentkit/skills/token/base.py +7 -11
  295. intentkit/skills/token/erc20_transfers.py +19 -19
  296. intentkit/skills/token/schema.json +3 -6
  297. intentkit/skills/token/token_analytics.py +3 -3
  298. intentkit/skills/token/token_price.py +13 -13
  299. intentkit/skills/token/token_search.py +9 -9
  300. intentkit/skills/twitter/__init__.py +11 -35
  301. intentkit/skills/twitter/base.py +22 -34
  302. intentkit/skills/twitter/follow_user.py +2 -6
  303. intentkit/skills/twitter/get_mentions.py +5 -12
  304. intentkit/skills/twitter/get_timeline.py +4 -12
  305. intentkit/skills/twitter/get_user_by_username.py +2 -6
  306. intentkit/skills/twitter/get_user_tweets.py +5 -13
  307. intentkit/skills/twitter/like_tweet.py +2 -6
  308. intentkit/skills/twitter/post_tweet.py +6 -9
  309. intentkit/skills/twitter/reply_tweet.py +6 -9
  310. intentkit/skills/twitter/retweet.py +2 -6
  311. intentkit/skills/twitter/schema.json +1 -0
  312. intentkit/skills/twitter/search_tweets.py +4 -12
  313. intentkit/skills/unrealspeech/__init__.py +2 -7
  314. intentkit/skills/unrealspeech/base.py +2 -8
  315. intentkit/skills/unrealspeech/schema.json +2 -5
  316. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  317. intentkit/skills/venice_audio/__init__.py +98 -106
  318. intentkit/skills/venice_audio/base.py +117 -121
  319. intentkit/skills/venice_audio/input.py +41 -41
  320. intentkit/skills/venice_audio/schema.json +151 -152
  321. intentkit/skills/venice_audio/venice_audio.py +38 -21
  322. intentkit/skills/venice_image/__init__.py +147 -154
  323. intentkit/skills/venice_image/api.py +138 -138
  324. intentkit/skills/venice_image/base.py +185 -192
  325. intentkit/skills/venice_image/config.py +33 -35
  326. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  327. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  328. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  329. intentkit/skills/venice_image/image_generation/image_generation_base.py +11 -10
  330. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  331. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  332. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  333. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  334. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  335. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  336. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  337. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  338. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  339. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  340. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  341. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  342. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  343. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  344. intentkit/skills/venice_image/schema.json +267 -267
  345. intentkit/skills/venice_image/utils.py +77 -78
  346. intentkit/skills/web_scraper/__init__.py +5 -18
  347. intentkit/skills/web_scraper/base.py +21 -7
  348. intentkit/skills/web_scraper/document_indexer.py +7 -6
  349. intentkit/skills/web_scraper/schema.json +2 -6
  350. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  351. intentkit/skills/web_scraper/utils.py +62 -63
  352. intentkit/skills/web_scraper/website_indexer.py +17 -19
  353. intentkit/skills/weth/__init__.py +49 -0
  354. intentkit/skills/weth/base.py +11 -0
  355. intentkit/skills/weth/schema.json +58 -0
  356. intentkit/skills/weth/weth.svg +6 -0
  357. intentkit/skills/wow/__init__.py +51 -0
  358. intentkit/skills/wow/base.py +11 -0
  359. intentkit/skills/wow/schema.json +89 -0
  360. intentkit/skills/wow/wow.svg +7 -0
  361. intentkit/skills/x402/__init__.py +58 -0
  362. intentkit/skills/x402/base.py +99 -0
  363. intentkit/skills/x402/http_request.py +117 -0
  364. intentkit/skills/x402/schema.json +40 -0
  365. intentkit/skills/x402/x402.webp +0 -0
  366. intentkit/skills/xmtp/__init__.py +4 -15
  367. intentkit/skills/xmtp/base.py +5 -5
  368. intentkit/skills/xmtp/price.py +7 -6
  369. intentkit/skills/xmtp/schema.json +69 -71
  370. intentkit/skills/xmtp/swap.py +6 -8
  371. intentkit/skills/xmtp/transfer.py +4 -6
  372. intentkit/utils/__init__.py +4 -0
  373. intentkit/utils/chain.py +198 -96
  374. intentkit/utils/ens.py +135 -0
  375. intentkit/utils/error.py +5 -2
  376. intentkit/utils/logging.py +9 -11
  377. intentkit/utils/schema.py +100 -0
  378. intentkit/utils/slack_alert.py +8 -8
  379. intentkit/utils/tx.py +16 -8
  380. intentkit/uv.lock +3377 -0
  381. {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/METADATA +13 -15
  382. intentkit-0.8.34.dev7.dist-info/RECORD +478 -0
  383. intentkit-0.8.34.dev7.dist-info/licenses/LICENSE +21 -0
  384. intentkit/core/node.py +0 -215
  385. intentkit/models/conversation.py +0 -286
  386. intentkit/models/generator.py +0 -347
  387. intentkit/skills/cdp/get_balance.py +0 -110
  388. intentkit/skills/cdp/swap.py +0 -121
  389. intentkit/skills/moralis/tests/__init__.py +0 -0
  390. intentkit/skills/moralis/tests/test_wallet.py +0 -511
  391. intentkit-0.7.5.dev3.dist-info/RECORD +0 -424
  392. {intentkit-0.7.5.dev3.dist-info/licenses → intentkit}/LICENSE +0 -0
  393. {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/WHEEL +0 -0
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching stablecoin chains data via DeFi Llama API."""
2
2
 
3
- from typing import List, Optional
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_stablecoin_chains
@@ -19,16 +17,16 @@ Returns:
19
17
  class CirculatingUSD(BaseModel):
20
18
  """Model representing circulating amounts in different pegs."""
21
19
 
22
- peggedUSD: Optional[float] = Field(None, description="Amount pegged to USD")
23
- peggedEUR: Optional[float] = Field(None, description="Amount pegged to EUR")
24
- peggedVAR: Optional[float] = Field(None, description="Amount in variable pegs")
25
- peggedJPY: Optional[float] = Field(None, description="Amount pegged to JPY")
26
- peggedCHF: Optional[float] = Field(None, description="Amount pegged to CHF")
27
- peggedCAD: Optional[float] = Field(None, description="Amount pegged to CAD")
28
- peggedGBP: Optional[float] = Field(None, description="Amount pegged to GBP")
29
- peggedAUD: Optional[float] = Field(None, description="Amount pegged to AUD")
30
- peggedCNY: Optional[float] = Field(None, description="Amount pegged to CNY")
31
- peggedREAL: Optional[float] = Field(
20
+ peggedUSD: float | None = Field(None, description="Amount pegged to USD")
21
+ peggedEUR: float | None = Field(None, description="Amount pegged to EUR")
22
+ peggedVAR: float | None = Field(None, description="Amount in variable pegs")
23
+ peggedJPY: float | None = Field(None, description="Amount pegged to JPY")
24
+ peggedCHF: float | None = Field(None, description="Amount pegged to CHF")
25
+ peggedCAD: float | None = Field(None, description="Amount pegged to CAD")
26
+ peggedGBP: float | None = Field(None, description="Amount pegged to GBP")
27
+ peggedAUD: float | None = Field(None, description="Amount pegged to AUD")
28
+ peggedCNY: float | None = Field(None, description="Amount pegged to CNY")
29
+ peggedREAL: float | None = Field(
32
30
  None, description="Amount pegged to Brazilian Real"
33
31
  )
34
32
 
@@ -36,21 +34,21 @@ class CirculatingUSD(BaseModel):
36
34
  class ChainData(BaseModel):
37
35
  """Model representing stablecoin data for a single chain."""
38
36
 
39
- gecko_id: Optional[str] = Field(None, description="CoinGecko ID of the chain")
37
+ gecko_id: str | None = Field(None, description="CoinGecko ID of the chain")
40
38
  totalCirculatingUSD: CirculatingUSD = Field(
41
39
  ..., description="Total circulating amounts in different pegs"
42
40
  )
43
- tokenSymbol: Optional[str] = Field(None, description="Native token symbol")
41
+ tokenSymbol: str | None = Field(None, description="Native token symbol")
44
42
  name: str = Field(..., description="Chain name")
45
43
 
46
44
 
47
45
  class FetchStablecoinChainsResponse(BaseModel):
48
46
  """Response schema for stablecoin chains data."""
49
47
 
50
- chains: List[ChainData] = Field(
48
+ chains: list[ChainData] = Field(
51
49
  default_factory=list, description="List of chains with their stablecoin data"
52
50
  )
53
- error: Optional[str] = Field(None, description="Error message if any")
51
+ error: str | None = Field(None, description="Error message if any")
54
52
 
55
53
 
56
54
  class DefiLlamaFetchStablecoinChains(DefiLlamaBaseTool):
@@ -61,9 +59,9 @@ class DefiLlamaFetchStablecoinChains(DefiLlamaBaseTool):
61
59
 
62
60
  Example:
63
61
  chains_tool = DefiLlamaFetchStablecoinChains(
64
- skill_store=store,
62
+ ,
65
63
  agent_id="agent_123",
66
- agent_store=agent_store
64
+ agent=agent
67
65
  )
68
66
  result = await chains_tool._arun()
69
67
  """
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching stablecoin charts via DeFi Llama API."""
2
2
 
3
- from typing import List, Optional, Type
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_stablecoin_charts
@@ -44,7 +42,7 @@ class FetchStablecoinChartsInput(BaseModel):
44
42
  stablecoin_id: str = Field(
45
43
  ..., description="ID of the stablecoin to fetch data for"
46
44
  )
47
- chain: Optional[str] = Field(
45
+ chain: str | None = Field(
48
46
  None, description="Optional chain name for chain-specific data"
49
47
  )
50
48
 
@@ -52,13 +50,13 @@ class FetchStablecoinChartsInput(BaseModel):
52
50
  class FetchStablecoinChartsResponse(BaseModel):
53
51
  """Response schema for stablecoin chart data."""
54
52
 
55
- data: List[StablecoinDataPoint] = Field(
53
+ data: list[StablecoinDataPoint] = Field(
56
54
  default_factory=list, description="List of historical data points"
57
55
  )
58
- chain: Optional[str] = Field(
56
+ chain: str | None = Field(
59
57
  None, description="Chain name if chain-specific data was requested"
60
58
  )
61
- error: Optional[str] = Field(None, description="Error message if any")
59
+ error: str | None = Field(None, description="Error message if any")
62
60
 
63
61
 
64
62
  class DefiLlamaFetchStablecoinCharts(DefiLlamaBaseTool):
@@ -69,9 +67,9 @@ class DefiLlamaFetchStablecoinCharts(DefiLlamaBaseTool):
69
67
 
70
68
  Example:
71
69
  charts_tool = DefiLlamaFetchStablecoinCharts(
72
- skill_store=store,
70
+ ,
73
71
  agent_id="agent_123",
74
- agent_store=agent_store
72
+ agent=agent
75
73
  )
76
74
  # Get all chains data
77
75
  result = await charts_tool._arun(stablecoin_id="1")
@@ -81,10 +79,10 @@ class DefiLlamaFetchStablecoinCharts(DefiLlamaBaseTool):
81
79
 
82
80
  name: str = "defillama_fetch_stablecoin_charts"
83
81
  description: str = FETCH_STABLECOIN_CHARTS_PROMPT
84
- args_schema: Type[BaseModel] = FetchStablecoinChartsInput
82
+ args_schema: type[BaseModel] = FetchStablecoinChartsInput
85
83
 
86
84
  async def _arun(
87
- self, stablecoin_id: str, chain: Optional[str] = None
85
+ self, stablecoin_id: str, chain: str | None = None
88
86
  ) -> FetchStablecoinChartsResponse:
89
87
  """Fetch historical chart data for the given stablecoin.
90
88
 
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching stablecoin prices via DeFi Llama API."""
2
2
 
3
- from typing import Dict, List, Optional
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_stablecoin_prices
@@ -20,7 +18,7 @@ class PriceDataPoint(BaseModel):
20
18
  """Model representing a price data point."""
21
19
 
22
20
  date: str = Field(..., description="Unix timestamp for the price data")
23
- prices: Dict[str, float] = Field(
21
+ prices: dict[str, float] = Field(
24
22
  ..., description="Dictionary of stablecoin prices indexed by identifier"
25
23
  )
26
24
 
@@ -28,10 +26,10 @@ class PriceDataPoint(BaseModel):
28
26
  class FetchStablecoinPricesResponse(BaseModel):
29
27
  """Response schema for stablecoin prices data."""
30
28
 
31
- data: List[PriceDataPoint] = Field(
29
+ data: list[PriceDataPoint] = Field(
32
30
  default_factory=list, description="List of price data points"
33
31
  )
34
- error: Optional[str] = Field(None, description="Error message if any")
32
+ error: str | None = Field(None, description="Error message if any")
35
33
 
36
34
 
37
35
  class DefiLlamaFetchStablecoinPrices(DefiLlamaBaseTool):
@@ -42,9 +40,9 @@ class DefiLlamaFetchStablecoinPrices(DefiLlamaBaseTool):
42
40
 
43
41
  Example:
44
42
  prices_tool = DefiLlamaFetchStablecoinPrices(
45
- skill_store=store,
43
+ ,
46
44
  agent_id="agent_123",
47
- agent_store=agent_store
45
+ agent=agent
48
46
  )
49
47
  result = await prices_tool._arun()
50
48
  """
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching stablecoin data via DeFi Llama API."""
2
2
 
3
- from typing import Dict, List, Optional
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_stablecoins
@@ -45,7 +43,7 @@ class Stablecoin(BaseModel):
45
43
  id: str = Field(..., description="Unique identifier")
46
44
  name: str = Field(..., description="Stablecoin name")
47
45
  symbol: str = Field(..., description="Token symbol")
48
- gecko_id: Optional[str] = Field(None, description="CoinGecko ID if available")
46
+ gecko_id: str | None = Field(None, description="CoinGecko ID if available")
49
47
  pegType: str = Field(..., description="Type of peg (e.g. peggedUSD)")
50
48
  priceSource: str = Field(..., description="Source of price data")
51
49
  pegMechanism: str = Field(..., description="Mechanism maintaining the peg")
@@ -61,10 +59,10 @@ class Stablecoin(BaseModel):
61
59
  circulatingPrevMonth: CirculatingAmount = Field(
62
60
  ..., description="Total circulating amount from previous month"
63
61
  )
64
- chainCirculating: Dict[str, ChainCirculating] = Field(
62
+ chainCirculating: dict[str, ChainCirculating] = Field(
65
63
  ..., description="Circulating amounts per chain"
66
64
  )
67
- chains: List[str] = Field(
65
+ chains: list[str] = Field(
68
66
  ..., description="List of chains where the stablecoin is present"
69
67
  )
70
68
  price: float = Field(..., description="Current price in USD")
@@ -73,10 +71,10 @@ class Stablecoin(BaseModel):
73
71
  class FetchStablecoinsResponse(BaseModel):
74
72
  """Response schema for stablecoin data."""
75
73
 
76
- peggedAssets: List[Stablecoin] = Field(
74
+ peggedAssets: list[Stablecoin] = Field(
77
75
  default_factory=list, description="List of stablecoins with their data"
78
76
  )
79
- error: Optional[str] = Field(None, description="Error message if any")
77
+ error: str | None = Field(None, description="Error message if any")
80
78
 
81
79
 
82
80
  class DefiLlamaFetchStablecoins(DefiLlamaBaseTool):
@@ -87,9 +85,9 @@ class DefiLlamaFetchStablecoins(DefiLlamaBaseTool):
87
85
 
88
86
  Example:
89
87
  stablecoins_tool = DefiLlamaFetchStablecoins(
90
- skill_store=store,
88
+ ,
91
89
  agent_id="agent_123",
92
- agent_store=agent_store
90
+ agent=agent
93
91
  )
94
92
  result = await stablecoins_tool._arun()
95
93
  """
@@ -84,7 +84,7 @@ class TestDefiLlamaAPI(unittest.TestCase):
84
84
  return self.loop.run_until_complete(
85
85
  asyncio.wait_for(coro, timeout=self.timeout)
86
86
  )
87
- except asyncio.TimeoutError:
87
+ except TimeoutError:
88
88
  raise AssertionError(f"Test timed out after {self.timeout} seconds")
89
89
  except Exception as e:
90
90
  raise AssertionError(f"Test failed with exception: {str(e)}")
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching chain historical TVL via DeFiLlama API."""
2
2
 
3
- from typing import List, Type
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_chain_historical_tvl
@@ -33,7 +31,7 @@ class FetchChainHistoricalTVLResponse(BaseModel):
33
31
  """Response schema for chain-specific historical TVL data."""
34
32
 
35
33
  chain: str = Field(..., description="Normalized chain name")
36
- data: List[HistoricalTVLDataPoint] = Field(
34
+ data: list[HistoricalTVLDataPoint] = Field(
37
35
  default_factory=list, description="List of historical TVL data points"
38
36
  )
39
37
  error: str | None = Field(default=None, description="Error message if any")
@@ -48,16 +46,16 @@ class DefiLlamaFetchChainHistoricalTvl(DefiLlamaBaseTool):
48
46
 
49
47
  Example:
50
48
  tvl_tool = DefiLlamaFetchChainHistoricalTvl(
51
- skill_store=store,
49
+ ,
52
50
  agent_id="agent_123",
53
- agent_store=agent_store
51
+ agent=agent
54
52
  )
55
53
  result = await tvl_tool._arun(chain="ethereum")
56
54
  """
57
55
 
58
56
  name: str = "defillama_fetch_chain_historical_tvl"
59
57
  description: str = FETCH_HISTORICAL_TVL_PROMPT
60
- args_schema: Type[BaseModel] = FetchChainHistoricalTVLInput
58
+ args_schema: type[BaseModel] = FetchChainHistoricalTVLInput
61
59
 
62
60
  async def _arun(self, chain: str) -> FetchChainHistoricalTVLResponse:
63
61
  """Fetch historical TVL data for the given chain.
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching chain TVL data via DeFi Llama API."""
2
2
 
3
- from typing import List, Optional, Type
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_chains
@@ -23,14 +21,14 @@ class ChainTVLData(BaseModel):
23
21
 
24
22
  name: str = Field(..., description="Chain name")
25
23
  tvl: float = Field(..., description="Total Value Locked in USD")
26
- gecko_id: Optional[str] = Field(None, description="CoinGecko identifier")
27
- token_symbol: Optional[str] = Field(
24
+ gecko_id: str | None = Field(None, description="CoinGecko identifier")
25
+ token_symbol: str | None = Field(
28
26
  None, alias="tokenSymbol", description="Native token symbol"
29
27
  )
30
- cmc_id: Optional[str] = Field(
28
+ cmc_id: str | None = Field(
31
29
  None, alias="cmcId", description="CoinMarketCap identifier"
32
30
  )
33
- chain_id: Optional[int | str] = Field(
31
+ chain_id: int | str | None = Field(
34
32
  None, alias="chainId", description="Chain identifier"
35
33
  )
36
34
 
@@ -48,11 +46,11 @@ class FetchChainsInput(BaseModel):
48
46
  class FetchChainsResponse(BaseModel):
49
47
  """Response schema for all chains' TVL data."""
50
48
 
51
- chains: List[ChainTVLData] = Field(
49
+ chains: list[ChainTVLData] = Field(
52
50
  default_factory=list, description="List of chains with their TVL data"
53
51
  )
54
52
  total_tvl: float = Field(..., description="Total TVL across all chains in USD")
55
- error: Optional[str] = Field(None, description="Error message if any")
53
+ error: str | None = Field(None, description="Error message if any")
56
54
 
57
55
 
58
56
  class DefiLlamaFetchChains(DefiLlamaBaseTool):
@@ -63,16 +61,16 @@ class DefiLlamaFetchChains(DefiLlamaBaseTool):
63
61
 
64
62
  Example:
65
63
  chains_tool = DefiLlamaFetchChains(
66
- skill_store=store,
64
+ ,
67
65
  agent_id="agent_123",
68
- agent_store=agent_store
66
+ agent=agent
69
67
  )
70
68
  result = await chains_tool._arun()
71
69
  """
72
70
 
73
71
  name: str = "defillama_fetch_chains"
74
72
  description: str = FETCH_CHAINS_PROMPT
75
- args_schema: Type[BaseModel] = FetchChainsInput
73
+ args_schema: type[BaseModel] = FetchChainsInput
76
74
 
77
75
  async def _arun(self, **kwargs) -> FetchChainsResponse:
78
76
  """Fetch TVL data for all chains.
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching total historical TVL via DeFiLlama API."""
2
2
 
3
- from typing import List, Type
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_historical_tvl
@@ -34,7 +32,7 @@ class FetchHistoricalTVLInput(BaseModel):
34
32
  class FetchHistoricalTVLResponse(BaseModel):
35
33
  """Response schema for historical TVL data."""
36
34
 
37
- data: List[HistoricalTVLDataPoint] = Field(
35
+ data: list[HistoricalTVLDataPoint] = Field(
38
36
  default_factory=list,
39
37
  description="List of historical TVL data points across all chains",
40
38
  )
@@ -50,16 +48,16 @@ class DefiLlamaFetchHistoricalTvl(DefiLlamaBaseTool):
50
48
 
51
49
  Example:
52
50
  tvl_tool = DefiLlamaFetchHistoricalTvl(
53
- skill_store=store,
51
+ ,
54
52
  agent_id="agent_123",
55
- agent_store=agent_store
53
+ agent=agent
56
54
  )
57
55
  result = await tvl_tool._arun()
58
56
  """
59
57
 
60
58
  name: str = "defillama_fetch_total_historical_tvl"
61
59
  description: str = FETCH_TOTAL_HISTORICAL_TVL_PROMPT
62
- args_schema: Type[BaseModel] = FetchHistoricalTVLInput
60
+ args_schema: type[BaseModel] = FetchHistoricalTVLInput
63
61
 
64
62
  async def _arun(self, **kwargs) -> FetchHistoricalTVLResponse:
65
63
  """Fetch historical TVL data across all chains.
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching specific protocol details via DeFi Llama API."""
2
2
 
3
- from typing import Dict, List, Optional, Type
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_protocol
@@ -24,17 +22,15 @@ class TokenAmount(BaseModel):
24
22
  """Model representing token amounts at a specific date."""
25
23
 
26
24
  date: int = Field(..., description="Unix timestamp")
27
- tokens: Dict[str, float] = Field(..., description="Token amounts keyed by symbol")
25
+ tokens: dict[str, float] = Field(..., description="Token amounts keyed by symbol")
28
26
 
29
27
 
30
28
  class ChainTVLData(BaseModel):
31
29
  """Model representing TVL data for a specific chain."""
32
30
 
33
- tvl: List[Dict[str, float]] = Field(..., description="Historical TVL data points")
34
- tokens: Optional[Dict[str, float]] = Field(
35
- None, description="Current token amounts"
36
- )
37
- tokensInUsd: Optional[Dict[str, float]] = Field(
31
+ tvl: list[dict[str, float]] = Field(..., description="Historical TVL data points")
32
+ tokens: dict[str, float] | None = Field(None, description="Current token amounts")
33
+ tokensInUsd: dict[str, float] | None = Field(
38
34
  None, description="Current token amounts in USD"
39
35
  )
40
36
 
@@ -53,17 +49,17 @@ class Raise(BaseModel):
53
49
  name: str = Field(..., description="Protocol name")
54
50
  round: str = Field(..., description="Funding round type")
55
51
  amount: float = Field(..., description="Amount raised in millions")
56
- chains: List[str] = Field(..., description="Chains involved")
52
+ chains: list[str] = Field(..., description="Chains involved")
57
53
  sector: str = Field(..., description="Business sector")
58
54
  category: str = Field(..., description="Protocol category")
59
55
  categoryGroup: str = Field(..., description="Category group")
60
56
  source: str = Field(..., description="Information source")
61
- leadInvestors: List[str] = Field(default_factory=list, description="Lead investors")
62
- otherInvestors: List[str] = Field(
57
+ leadInvestors: list[str] = Field(default_factory=list, description="Lead investors")
58
+ otherInvestors: list[str] = Field(
63
59
  default_factory=list, description="Other investors"
64
60
  )
65
- valuation: Optional[float] = Field(None, description="Valuation at time of raise")
66
- defillamaId: Optional[str] = Field(None, description="DefiLlama ID")
61
+ valuation: float | None = Field(None, description="Valuation at time of raise")
62
+ defillamaId: str | None = Field(None, description="DefiLlama ID")
67
63
 
68
64
 
69
65
  class Hallmark(BaseModel):
@@ -79,48 +75,46 @@ class ProtocolDetail(BaseModel):
79
75
  # Basic Info
80
76
  id: str = Field(..., description="Protocol unique identifier")
81
77
  name: str = Field(..., description="Protocol name")
82
- address: Optional[str] = Field(None, description="Protocol address")
78
+ address: str | None = Field(None, description="Protocol address")
83
79
  symbol: str = Field(..., description="Protocol token symbol")
84
80
  url: str = Field(..., description="Protocol website")
85
81
  description: str = Field(..., description="Protocol description")
86
82
  logo: str = Field(..., description="Logo URL")
87
83
 
88
84
  # Chain Info
89
- chains: List[str] = Field(default_factory=list, description="Supported chains")
90
- currentChainTvls: Dict[str, float] = Field(..., description="Current TVL by chain")
91
- chainTvls: Dict[str, ChainTVLData] = Field(
85
+ chains: list[str] = Field(default_factory=list, description="Supported chains")
86
+ currentChainTvls: dict[str, float] = Field(..., description="Current TVL by chain")
87
+ chainTvls: dict[str, ChainTVLData] = Field(
92
88
  ..., description="Historical TVL data by chain"
93
89
  )
94
90
 
95
91
  # Identifiers
96
- gecko_id: Optional[str] = Field(None, description="CoinGecko ID")
97
- cmcId: Optional[str] = Field(None, description="CoinMarketCap ID")
92
+ gecko_id: str | None = Field(None, description="CoinGecko ID")
93
+ cmcId: str | None = Field(None, description="CoinMarketCap ID")
98
94
 
99
95
  # Social & Development
100
- twitter: Optional[str] = Field(None, description="Twitter handle")
101
- treasury: Optional[str] = Field(None, description="Treasury information")
102
- governanceID: Optional[List[str]] = Field(
103
- None, description="Governance identifiers"
104
- )
105
- github: Optional[List[str]] = Field(None, description="GitHub repositories")
96
+ twitter: str | None = Field(None, description="Twitter handle")
97
+ treasury: str | None = Field(None, description="Treasury information")
98
+ governanceID: list[str] | None = Field(None, description="Governance identifiers")
99
+ github: list[str] | None = Field(None, description="GitHub repositories")
106
100
 
107
101
  # Protocol Relationships
108
- isParentProtocol: Optional[bool] = Field(
102
+ isParentProtocol: bool | None = Field(
109
103
  None, description="Whether this is a parent protocol"
110
104
  )
111
- otherProtocols: Optional[List[str]] = Field(None, description="Related protocols")
105
+ otherProtocols: list[str] | None = Field(None, description="Related protocols")
112
106
 
113
107
  # Historical Data
114
- tokens: List[TokenAmount] = Field(
108
+ tokens: list[TokenAmount] = Field(
115
109
  default_factory=list, description="Historical token amounts"
116
110
  )
117
- tvl: List[HistoricalTVL] = Field(..., description="Historical TVL data points")
118
- raises: Optional[List[Raise]] = Field(None, description="Funding rounds")
119
- hallmarks: Optional[List[Hallmark]] = Field(None, description="Significant events")
111
+ tvl: list[HistoricalTVL] = Field(..., description="Historical TVL data points")
112
+ raises: list[Raise] | None = Field(None, description="Funding rounds")
113
+ hallmarks: list[Hallmark] | None = Field(None, description="Significant events")
120
114
 
121
115
  # Market Data
122
- mcap: Optional[float] = Field(None, description="Market capitalization")
123
- metrics: Dict = Field(default_factory=dict, description="Additional metrics")
116
+ mcap: float | None = Field(None, description="Market capitalization")
117
+ metrics: dict = Field(default_factory=dict, description="Additional metrics")
124
118
 
125
119
 
126
120
  class DefiLlamaProtocolInput(BaseModel):
@@ -132,8 +126,8 @@ class DefiLlamaProtocolInput(BaseModel):
132
126
  class DefiLlamaProtocolOutput(BaseModel):
133
127
  """Output model for the protocol fetching tool."""
134
128
 
135
- protocol: Optional[ProtocolDetail] = Field(None, description="Protocol details")
136
- error: Optional[str] = Field(None, description="Error message if any")
129
+ protocol: ProtocolDetail | None = Field(None, description="Protocol details")
130
+ error: str | None = Field(None, description="Error message if any")
137
131
 
138
132
 
139
133
  class DefiLlamaFetchProtocol(DefiLlamaBaseTool):
@@ -144,16 +138,16 @@ class DefiLlamaFetchProtocol(DefiLlamaBaseTool):
144
138
 
145
139
  Example:
146
140
  protocol_tool = DefiLlamaFetchProtocol(
147
- skill_store=store,
141
+ ,
148
142
  agent_id="agent_123",
149
- agent_store=agent_store
143
+ agent=agent
150
144
  )
151
145
  result = await protocol_tool._arun(protocol="aave")
152
146
  """
153
147
 
154
148
  name: str = "defillama_fetch_protocol"
155
149
  description: str = FETCH_PROTOCOL_PROMPT
156
- args_schema: Type[BaseModel] = DefiLlamaProtocolInput
150
+ args_schema: type[BaseModel] = DefiLlamaProtocolInput
157
151
 
158
152
  async def _arun(self, protocol: str) -> DefiLlamaProtocolOutput:
159
153
  """Fetch detailed information about a specific protocol.
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching protocol TVL via DeFiLlama API."""
2
2
 
3
- from typing import Type
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_protocol_current_tvl
@@ -38,16 +36,16 @@ class DefiLlamaFetchProtocolCurrentTvl(DefiLlamaBaseTool):
38
36
 
39
37
  Example:
40
38
  tvl_tool = DefiLlamaFetchProtocolCurrentTvl(
41
- skill_store=store,
39
+ ,
42
40
  agent_id="agent_123",
43
- agent_store=agent_store
41
+ agent=agent
44
42
  )
45
43
  result = await tvl_tool._arun(protocol="aave")
46
44
  """
47
45
 
48
46
  name: str = "defillama_fetch_protocol_tvl"
49
47
  description: str = FETCH_TVL_PROMPT
50
- args_schema: Type[BaseModel] = FetchProtocolCurrentTVLInput
48
+ args_schema: type[BaseModel] = FetchProtocolCurrentTVLInput
51
49
 
52
50
  async def _arun(self, protocol: str) -> FetchProtocolCurrentTVLResponse:
53
51
  """Fetch current TVL for the given protocol.