intentkit 0.8.6.dev2__py3-none-any.whl → 0.8.17__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of intentkit might be problematic. Click here for more details.

Files changed (312) hide show
  1. intentkit/__init__.py +1 -1
  2. intentkit/abstracts/agent.py +4 -5
  3. intentkit/abstracts/engine.py +5 -5
  4. intentkit/abstracts/graph.py +10 -5
  5. intentkit/abstracts/skill.py +6 -144
  6. intentkit/abstracts/twitter.py +4 -5
  7. intentkit/clients/__init__.py +3 -2
  8. intentkit/clients/cdp.py +53 -92
  9. intentkit/clients/twitter.py +56 -57
  10. intentkit/clients/web3.py +1 -3
  11. intentkit/config/config.py +5 -0
  12. intentkit/core/agent.py +16 -388
  13. intentkit/core/asset.py +64 -18
  14. intentkit/core/client.py +1 -1
  15. intentkit/core/credit.py +19 -20
  16. intentkit/core/engine.py +26 -11
  17. intentkit/core/node.py +2 -1
  18. intentkit/core/prompt.py +53 -15
  19. intentkit/core/scheduler.py +9 -9
  20. intentkit/core/statistics.py +6 -7
  21. intentkit/models/agent.py +256 -176
  22. intentkit/models/agent_data.py +62 -36
  23. intentkit/models/agent_schema.json +6 -9
  24. intentkit/models/app_setting.py +6 -6
  25. intentkit/models/chat.py +28 -24
  26. intentkit/models/conversation.py +8 -8
  27. intentkit/models/credit.py +62 -64
  28. intentkit/models/db.py +8 -7
  29. intentkit/models/db_mig.py +2 -2
  30. intentkit/models/llm.csv +15 -12
  31. intentkit/models/llm.py +18 -16
  32. intentkit/models/redis.py +2 -3
  33. intentkit/models/skill.py +62 -66
  34. intentkit/models/skills.csv +30 -26
  35. intentkit/models/user.py +46 -21
  36. intentkit/skills/acolyt/__init__.py +2 -9
  37. intentkit/skills/acolyt/ask.py +3 -4
  38. intentkit/skills/acolyt/base.py +4 -9
  39. intentkit/skills/aixbt/__init__.py +2 -13
  40. intentkit/skills/aixbt/base.py +1 -7
  41. intentkit/skills/aixbt/projects.py +14 -15
  42. intentkit/skills/allora/__init__.py +2 -9
  43. intentkit/skills/allora/base.py +4 -9
  44. intentkit/skills/allora/price.py +3 -4
  45. intentkit/skills/base.py +175 -52
  46. intentkit/skills/basename/__init__.py +4 -8
  47. intentkit/skills/carv/__init__.py +115 -121
  48. intentkit/skills/carv/base.py +184 -185
  49. intentkit/skills/carv/fetch_news.py +3 -3
  50. intentkit/skills/carv/onchain_query.py +4 -4
  51. intentkit/skills/carv/token_info_and_price.py +5 -5
  52. intentkit/skills/casino/__init__.py +4 -15
  53. intentkit/skills/casino/base.py +1 -7
  54. intentkit/skills/casino/deck_draw.py +5 -8
  55. intentkit/skills/casino/deck_shuffle.py +6 -6
  56. intentkit/skills/casino/dice_roll.py +2 -4
  57. intentkit/skills/cdp/__init__.py +3 -10
  58. intentkit/skills/cdp/base.py +1 -7
  59. intentkit/skills/cdp/schema.json +1 -17
  60. intentkit/skills/chainlist/__init__.py +2 -7
  61. intentkit/skills/chainlist/base.py +1 -7
  62. intentkit/skills/chainlist/chain_lookup.py +18 -18
  63. intentkit/skills/common/__init__.py +2 -9
  64. intentkit/skills/common/base.py +1 -7
  65. intentkit/skills/common/current_time.py +1 -2
  66. intentkit/skills/cookiefun/__init__.py +6 -9
  67. intentkit/skills/cookiefun/base.py +2 -7
  68. intentkit/skills/cookiefun/get_account_details.py +7 -7
  69. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  70. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  71. intentkit/skills/cookiefun/get_sectors.py +3 -3
  72. intentkit/skills/cookiefun/search_accounts.py +9 -9
  73. intentkit/skills/cryptocompare/__init__.py +7 -24
  74. intentkit/skills/cryptocompare/api.py +2 -3
  75. intentkit/skills/cryptocompare/base.py +10 -24
  76. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  77. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  78. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  79. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  80. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  81. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  82. intentkit/skills/cryptopanic/__init__.py +7 -10
  83. intentkit/skills/cryptopanic/base.py +51 -55
  84. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  85. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  86. intentkit/skills/dapplooker/__init__.py +2 -9
  87. intentkit/skills/dapplooker/base.py +4 -9
  88. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  89. intentkit/skills/defillama/__init__.py +24 -74
  90. intentkit/skills/defillama/api.py +6 -9
  91. intentkit/skills/defillama/base.py +8 -19
  92. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  93. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  94. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  95. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  96. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  97. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  98. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  99. intentkit/skills/defillama/config/chains.py +1 -3
  100. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  101. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  102. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  103. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  104. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  105. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  106. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  107. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  108. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  109. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  110. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  111. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  112. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  113. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  114. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  115. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  116. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  117. intentkit/skills/dexscreener/__init__.py +97 -102
  118. intentkit/skills/dexscreener/base.py +125 -130
  119. intentkit/skills/dexscreener/get_pair_info.py +4 -5
  120. intentkit/skills/dexscreener/get_token_pairs.py +4 -5
  121. intentkit/skills/dexscreener/get_tokens_info.py +7 -8
  122. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  123. intentkit/skills/dexscreener/search_token.py +182 -184
  124. intentkit/skills/dexscreener/utils.py +15 -14
  125. intentkit/skills/dune_analytics/__init__.py +7 -9
  126. intentkit/skills/dune_analytics/base.py +48 -52
  127. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  128. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  129. intentkit/skills/elfa/__init__.py +5 -18
  130. intentkit/skills/elfa/base.py +10 -14
  131. intentkit/skills/elfa/mention.py +19 -21
  132. intentkit/skills/elfa/stats.py +4 -4
  133. intentkit/skills/elfa/tokens.py +12 -12
  134. intentkit/skills/elfa/utils.py +26 -28
  135. intentkit/skills/enso/__init__.py +11 -31
  136. intentkit/skills/enso/base.py +9 -15
  137. intentkit/skills/enso/best_yield.py +5 -7
  138. intentkit/skills/enso/networks.py +3 -9
  139. intentkit/skills/enso/prices.py +2 -4
  140. intentkit/skills/enso/route.py +6 -12
  141. intentkit/skills/enso/tokens.py +4 -16
  142. intentkit/skills/enso/wallet.py +6 -6
  143. intentkit/skills/erc20/__init__.py +5 -11
  144. intentkit/skills/erc721/__init__.py +5 -9
  145. intentkit/skills/firecrawl/__init__.py +5 -18
  146. intentkit/skills/firecrawl/base.py +4 -9
  147. intentkit/skills/firecrawl/clear.py +4 -8
  148. intentkit/skills/firecrawl/crawl.py +19 -19
  149. intentkit/skills/firecrawl/query.py +4 -3
  150. intentkit/skills/firecrawl/scrape.py +17 -22
  151. intentkit/skills/firecrawl/utils.py +50 -42
  152. intentkit/skills/github/__init__.py +2 -7
  153. intentkit/skills/github/base.py +1 -7
  154. intentkit/skills/github/github_search.py +1 -2
  155. intentkit/skills/heurist/__init__.py +8 -27
  156. intentkit/skills/heurist/base.py +4 -9
  157. intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
  158. intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
  159. intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
  160. intentkit/skills/heurist/image_generation_braindance.py +12 -13
  161. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
  162. intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
  163. intentkit/skills/heurist/image_generation_sdxl.py +12 -13
  164. intentkit/skills/http/__init__.py +4 -15
  165. intentkit/skills/http/base.py +1 -7
  166. intentkit/skills/http/get.py +21 -16
  167. intentkit/skills/http/post.py +23 -18
  168. intentkit/skills/http/put.py +23 -18
  169. intentkit/skills/lifi/__init__.py +5 -10
  170. intentkit/skills/lifi/base.py +1 -7
  171. intentkit/skills/lifi/token_execute.py +14 -17
  172. intentkit/skills/lifi/token_quote.py +7 -9
  173. intentkit/skills/lifi/utils.py +16 -16
  174. intentkit/skills/moralis/__init__.py +6 -10
  175. intentkit/skills/moralis/api.py +6 -7
  176. intentkit/skills/moralis/base.py +5 -10
  177. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  178. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  179. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  180. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  181. intentkit/skills/morpho/__init__.py +5 -9
  182. intentkit/skills/nation/__init__.py +4 -9
  183. intentkit/skills/nation/base.py +5 -10
  184. intentkit/skills/nation/nft_check.py +3 -4
  185. intentkit/skills/onchain.py +23 -0
  186. intentkit/skills/openai/__init__.py +17 -18
  187. intentkit/skills/openai/base.py +10 -14
  188. intentkit/skills/openai/dalle_image_generation.py +3 -8
  189. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  190. intentkit/skills/openai/gpt_image_generation.py +4 -8
  191. intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
  192. intentkit/skills/openai/gpt_image_to_image.py +4 -8
  193. intentkit/skills/openai/image_to_text.py +3 -7
  194. intentkit/skills/openai/schema.json +32 -0
  195. intentkit/skills/portfolio/__init__.py +11 -35
  196. intentkit/skills/portfolio/base.py +33 -19
  197. intentkit/skills/portfolio/token_balances.py +21 -21
  198. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  199. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  200. intentkit/skills/portfolio/wallet_history.py +31 -31
  201. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  202. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  203. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  204. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  205. intentkit/skills/portfolio/wallet_stats.py +3 -3
  206. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  207. intentkit/skills/pyth/__init__.py +4 -10
  208. intentkit/skills/skills.toml +4 -0
  209. intentkit/skills/slack/__init__.py +5 -17
  210. intentkit/skills/slack/base.py +3 -9
  211. intentkit/skills/slack/get_channel.py +8 -8
  212. intentkit/skills/slack/get_message.py +9 -9
  213. intentkit/skills/slack/schedule_message.py +5 -5
  214. intentkit/skills/slack/send_message.py +3 -5
  215. intentkit/skills/supabase/__init__.py +7 -23
  216. intentkit/skills/supabase/base.py +1 -7
  217. intentkit/skills/supabase/delete_data.py +4 -4
  218. intentkit/skills/supabase/fetch_data.py +12 -12
  219. intentkit/skills/supabase/insert_data.py +4 -4
  220. intentkit/skills/supabase/invoke_function.py +6 -6
  221. intentkit/skills/supabase/update_data.py +6 -6
  222. intentkit/skills/supabase/upsert_data.py +4 -4
  223. intentkit/skills/superfluid/__init__.py +5 -9
  224. intentkit/skills/system/__init__.py +7 -24
  225. intentkit/skills/system/add_autonomous_task.py +10 -12
  226. intentkit/skills/system/delete_autonomous_task.py +2 -2
  227. intentkit/skills/system/edit_autonomous_task.py +14 -18
  228. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  229. intentkit/skills/system/read_agent_api_key.py +6 -4
  230. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  231. intentkit/skills/tavily/__init__.py +3 -12
  232. intentkit/skills/tavily/base.py +4 -9
  233. intentkit/skills/tavily/tavily_extract.py +2 -4
  234. intentkit/skills/tavily/tavily_search.py +4 -6
  235. intentkit/skills/token/__init__.py +5 -10
  236. intentkit/skills/token/base.py +7 -11
  237. intentkit/skills/token/erc20_transfers.py +19 -19
  238. intentkit/skills/token/token_analytics.py +3 -3
  239. intentkit/skills/token/token_price.py +13 -13
  240. intentkit/skills/token/token_search.py +9 -9
  241. intentkit/skills/twitter/__init__.py +11 -35
  242. intentkit/skills/twitter/base.py +22 -34
  243. intentkit/skills/twitter/follow_user.py +2 -6
  244. intentkit/skills/twitter/get_mentions.py +5 -12
  245. intentkit/skills/twitter/get_timeline.py +4 -12
  246. intentkit/skills/twitter/get_user_by_username.py +2 -6
  247. intentkit/skills/twitter/get_user_tweets.py +5 -13
  248. intentkit/skills/twitter/like_tweet.py +2 -6
  249. intentkit/skills/twitter/post_tweet.py +6 -9
  250. intentkit/skills/twitter/reply_tweet.py +6 -9
  251. intentkit/skills/twitter/retweet.py +2 -6
  252. intentkit/skills/twitter/search_tweets.py +4 -12
  253. intentkit/skills/unrealspeech/__init__.py +2 -7
  254. intentkit/skills/unrealspeech/base.py +2 -8
  255. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  256. intentkit/skills/venice_audio/__init__.py +98 -106
  257. intentkit/skills/venice_audio/base.py +117 -121
  258. intentkit/skills/venice_audio/input.py +41 -41
  259. intentkit/skills/venice_audio/venice_audio.py +7 -11
  260. intentkit/skills/venice_image/__init__.py +147 -154
  261. intentkit/skills/venice_image/api.py +138 -138
  262. intentkit/skills/venice_image/base.py +185 -192
  263. intentkit/skills/venice_image/config.py +33 -35
  264. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  265. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  266. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  267. intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
  268. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  269. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  270. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  271. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  272. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  273. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  274. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  275. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  276. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  277. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  278. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  279. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  280. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  281. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  282. intentkit/skills/venice_image/utils.py +77 -78
  283. intentkit/skills/web_scraper/__init__.py +5 -18
  284. intentkit/skills/web_scraper/base.py +21 -7
  285. intentkit/skills/web_scraper/document_indexer.py +7 -6
  286. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  287. intentkit/skills/web_scraper/utils.py +62 -63
  288. intentkit/skills/web_scraper/website_indexer.py +17 -19
  289. intentkit/skills/weth/__init__.py +5 -11
  290. intentkit/skills/wow/__init__.py +5 -11
  291. intentkit/skills/x402/__init__.py +61 -0
  292. intentkit/skills/x402/ask_agent.py +98 -0
  293. intentkit/skills/x402/base.py +99 -0
  294. intentkit/skills/x402/http_request.py +117 -0
  295. intentkit/skills/x402/schema.json +45 -0
  296. intentkit/skills/x402/x402.webp +0 -0
  297. intentkit/skills/xmtp/__init__.py +4 -15
  298. intentkit/skills/xmtp/base.py +5 -5
  299. intentkit/skills/xmtp/price.py +6 -6
  300. intentkit/skills/xmtp/swap.py +6 -8
  301. intentkit/skills/xmtp/transfer.py +4 -6
  302. intentkit/utils/error.py +2 -2
  303. intentkit/utils/logging.py +2 -4
  304. intentkit/utils/s3.py +8 -9
  305. intentkit/utils/schema.py +100 -0
  306. intentkit/utils/slack_alert.py +7 -8
  307. {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +3 -4
  308. intentkit-0.8.17.dist-info/RECORD +466 -0
  309. intentkit/models/generator.py +0 -347
  310. intentkit-0.8.6.dev2.dist-info/RECORD +0 -457
  311. {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
  312. {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching token price charts 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_price_chart
@@ -33,14 +31,14 @@ class TokenPriceChart(BaseModel):
33
31
 
34
32
  symbol: str = Field(..., description="Token symbol")
35
33
  confidence: float = Field(..., description="Confidence score for the price data")
36
- decimals: Optional[int] = Field(None, description="Token decimals")
37
- prices: List[PricePoint] = Field(..., description="List of historical price points")
34
+ decimals: int | None = Field(None, description="Token decimals")
35
+ prices: list[PricePoint] = Field(..., description="List of historical price points")
38
36
 
39
37
 
40
38
  class FetchPriceChartInput(BaseModel):
41
39
  """Input schema for fetching token price charts."""
42
40
 
43
- coins: List[str] = Field(
41
+ coins: list[str] = Field(
44
42
  ..., description="List of token identifiers to fetch price charts for"
45
43
  )
46
44
 
@@ -48,10 +46,10 @@ class FetchPriceChartInput(BaseModel):
48
46
  class FetchPriceChartResponse(BaseModel):
49
47
  """Response schema for token price charts."""
50
48
 
51
- coins: Dict[str, TokenPriceChart] = Field(
49
+ coins: dict[str, TokenPriceChart] = Field(
52
50
  default_factory=dict, description="Price chart data keyed by token identifier"
53
51
  )
54
- error: Optional[str] = Field(None, description="Error message if any")
52
+ error: str | None = Field(None, description="Error message if any")
55
53
 
56
54
 
57
55
  class DefiLlamaFetchPriceChart(DefiLlamaBaseTool):
@@ -62,9 +60,9 @@ class DefiLlamaFetchPriceChart(DefiLlamaBaseTool):
62
60
 
63
61
  Example:
64
62
  chart_tool = DefiLlamaFetchPriceChart(
65
- skill_store=store,
63
+ ,
66
64
  agent_id="agent_123",
67
- agent_store=agent_store
65
+ agent=agent
68
66
  )
69
67
  result = await chart_tool._arun(
70
68
  coins=["ethereum:0x...", "coingecko:ethereum"]
@@ -73,9 +71,9 @@ class DefiLlamaFetchPriceChart(DefiLlamaBaseTool):
73
71
 
74
72
  name: str = "defillama_fetch_price_chart"
75
73
  description: str = FETCH_PRICE_CHART_PROMPT
76
- args_schema: Type[BaseModel] = FetchPriceChartInput
74
+ args_schema: type[BaseModel] = FetchPriceChartInput
77
75
 
78
- async def _arun(self, coins: List[str]) -> FetchPriceChartResponse:
76
+ async def _arun(self, coins: list[str]) -> FetchPriceChartResponse:
79
77
  """Fetch price charts for the given tokens.
80
78
 
81
79
  Args:
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching token price percentage changes 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_price_percentage
@@ -23,7 +21,7 @@ Returns price percentage changes:
23
21
  class FetchPricePercentageInput(BaseModel):
24
22
  """Input schema for fetching token price percentage changes."""
25
23
 
26
- coins: List[str] = Field(
24
+ coins: list[str] = Field(
27
25
  ..., description="List of token identifiers to fetch price changes for"
28
26
  )
29
27
 
@@ -31,11 +29,11 @@ class FetchPricePercentageInput(BaseModel):
31
29
  class FetchPricePercentageResponse(BaseModel):
32
30
  """Response schema for token price percentage changes."""
33
31
 
34
- coins: Dict[str, float] = Field(
32
+ coins: dict[str, float] = Field(
35
33
  default_factory=dict,
36
34
  description="Price percentage changes keyed by token identifier",
37
35
  )
38
- error: Optional[str] = Field(None, description="Error message if any")
36
+ error: str | None = Field(None, description="Error message if any")
39
37
 
40
38
 
41
39
  class DefiLlamaFetchPricePercentage(DefiLlamaBaseTool):
@@ -46,9 +44,9 @@ class DefiLlamaFetchPricePercentage(DefiLlamaBaseTool):
46
44
 
47
45
  Example:
48
46
  percentage_tool = DefiLlamaFetchPricePercentage(
49
- skill_store=store,
47
+ ,
50
48
  agent_id="agent_123",
51
- agent_store=agent_store
49
+ agent=agent
52
50
  )
53
51
  result = await percentage_tool._arun(
54
52
  coins=["ethereum:0x...", "coingecko:ethereum"]
@@ -57,9 +55,9 @@ class DefiLlamaFetchPricePercentage(DefiLlamaBaseTool):
57
55
 
58
56
  name: str = "defillama_fetch_price_percentage"
59
57
  description: str = FETCH_PRICE_PERCENTAGE_PROMPT
60
- args_schema: Type[BaseModel] = FetchPricePercentageInput
58
+ args_schema: type[BaseModel] = FetchPricePercentageInput
61
59
 
62
- async def _arun(self, coins: List[str]) -> FetchPricePercentageResponse:
60
+ async def _arun(self, coins: list[str]) -> FetchPricePercentageResponse:
63
61
  """Fetch price percentage changes for the given tokens.
64
62
 
65
63
  Args:
@@ -4,10 +4,8 @@ This module contains the valid chains and their aliases for use with the DeFi Ll
4
4
  The VALID_CHAINS dictionary maps primary chain identifiers to their known aliases.
5
5
  """
6
6
 
7
- from typing import Dict, List
8
-
9
7
  # Chain configuration with aliases
10
- VALID_CHAINS: Dict[str, List[str]] = {
8
+ VALID_CHAINS: dict[str, list[str]] = {
11
9
  "ethereum": ["eth", "eth1", "eth2"],
12
10
  "solana": ["sol"],
13
11
  "bitcoin": ["btc"],
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching fees overview data 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_fees_overview
@@ -20,16 +18,16 @@ Returns detailed metrics including:
20
18
  class ProtocolMethodology(BaseModel):
21
19
  """Model representing protocol methodology data."""
22
20
 
23
- UserFees: Optional[str] = Field(None, description="Description of user fees")
24
- Fees: Optional[str] = Field(None, description="Description of fees")
25
- Revenue: Optional[str] = Field(None, description="Description of revenue")
26
- ProtocolRevenue: Optional[str] = Field(
21
+ UserFees: str | None = Field(None, description="Description of user fees")
22
+ Fees: str | None = Field(None, description="Description of fees")
23
+ Revenue: str | None = Field(None, description="Description of revenue")
24
+ ProtocolRevenue: str | None = Field(
27
25
  None, description="Description of protocol revenue"
28
26
  )
29
- HoldersRevenue: Optional[str] = Field(
27
+ HoldersRevenue: str | None = Field(
30
28
  None, description="Description of holders revenue"
31
29
  )
32
- SupplySideRevenue: Optional[str] = Field(
30
+ SupplySideRevenue: str | None = Field(
33
31
  None, description="Description of supply side revenue"
34
32
  )
35
33
 
@@ -41,23 +39,23 @@ class Protocol(BaseModel):
41
39
  displayName: str = Field(..., description="Display name of protocol")
42
40
  category: str = Field(..., description="Protocol category")
43
41
  logo: str = Field(..., description="Logo URL")
44
- chains: List[str] = Field(..., description="Supported chains")
42
+ chains: list[str] = Field(..., description="Supported chains")
45
43
  module: str = Field(..., description="Protocol module")
46
- total24h: Optional[float] = Field(None, description="24-hour total fees")
47
- total7d: Optional[float] = Field(None, description="7-day total fees")
48
- total30d: Optional[float] = Field(None, description="30-day total fees")
49
- total1y: Optional[float] = Field(None, description="1-year total fees")
50
- totalAllTime: Optional[float] = Field(None, description="All-time total fees")
51
- change_1d: Optional[float] = Field(None, description="24-hour change percentage")
52
- change_7d: Optional[float] = Field(None, description="7-day change percentage")
53
- change_1m: Optional[float] = Field(None, description="30-day change percentage")
54
- methodology: Optional[ProtocolMethodology] = Field(
44
+ total24h: float | None = Field(None, description="24-hour total fees")
45
+ total7d: float | None = Field(None, description="7-day total fees")
46
+ total30d: float | None = Field(None, description="30-day total fees")
47
+ total1y: float | None = Field(None, description="1-year total fees")
48
+ totalAllTime: float | None = Field(None, description="All-time total fees")
49
+ change_1d: float | None = Field(None, description="24-hour change percentage")
50
+ change_7d: float | None = Field(None, description="7-day change percentage")
51
+ change_1m: float | None = Field(None, description="30-day change percentage")
52
+ methodology: ProtocolMethodology | None = Field(
55
53
  None, description="Protocol methodology"
56
54
  )
57
- breakdown24h: Optional[Dict[str, Dict[str, float]]] = Field(
55
+ breakdown24h: dict[str, dict[str, float]] | None = Field(
58
56
  None, description="24-hour breakdown by chain"
59
57
  )
60
- breakdown30d: Optional[Dict[str, Dict[str, float]]] = Field(
58
+ breakdown30d: dict[str, dict[str, float]] | None = Field(
61
59
  None, description="30-day breakdown by chain"
62
60
  )
63
61
 
@@ -72,9 +70,9 @@ class FetchFeesOverviewResponse(BaseModel):
72
70
  change_1d: float = Field(..., description="24-hour change percentage")
73
71
  change_7d: float = Field(..., description="7-day change percentage")
74
72
  change_1m: float = Field(..., description="30-day change percentage")
75
- allChains: List[str] = Field(..., description="List of all chains")
76
- protocols: List[Protocol] = Field(..., description="List of protocols")
77
- error: Optional[str] = Field(None, description="Error message if any")
73
+ allChains: list[str] = Field(..., description="List of all chains")
74
+ protocols: list[Protocol] = Field(..., description="List of protocols")
75
+ error: str | None = Field(None, description="Error message if any")
78
76
 
79
77
 
80
78
  class DefiLlamaFetchFeesOverview(DefiLlamaBaseTool):
@@ -85,9 +83,9 @@ class DefiLlamaFetchFeesOverview(DefiLlamaBaseTool):
85
83
 
86
84
  Example:
87
85
  overview_tool = DefiLlamaFetchFeesOverview(
88
- skill_store=store,
86
+ ,
89
87
  agent_id="agent_123",
90
- agent_store=agent_store
88
+ agent=agent
91
89
  )
92
90
  result = await overview_tool._arun()
93
91
  """
@@ -100,7 +98,7 @@ class DefiLlamaFetchFeesOverview(DefiLlamaBaseTool):
100
98
 
101
99
  pass
102
100
 
103
- args_schema: Type[BaseModel] = EmptyArgsSchema
101
+ args_schema: type[BaseModel] = EmptyArgsSchema
104
102
 
105
103
  async def _arun(self, **kwargs) -> FetchFeesOverviewResponse:
106
104
  """Fetch overview data for protocol fees.
@@ -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.