intentkit 0.8.16.dev1__py3-none-any.whl → 0.8.17.dev2__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 (274) 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 +6 -5
  5. intentkit/abstracts/skill.py +5 -5
  6. intentkit/abstracts/twitter.py +4 -5
  7. intentkit/clients/cdp.py +19 -77
  8. intentkit/clients/twitter.py +26 -34
  9. intentkit/clients/web3.py +1 -3
  10. intentkit/config/config.py +4 -0
  11. intentkit/core/agent.py +15 -15
  12. intentkit/core/asset.py +1 -2
  13. intentkit/core/client.py +1 -1
  14. intentkit/core/credit.py +19 -20
  15. intentkit/core/engine.py +2 -4
  16. intentkit/core/node.py +2 -1
  17. intentkit/core/prompt.py +3 -4
  18. intentkit/core/scheduler.py +1 -1
  19. intentkit/core/statistics.py +6 -7
  20. intentkit/models/agent.py +125 -92
  21. intentkit/models/agent_data.py +62 -36
  22. intentkit/models/app_setting.py +6 -6
  23. intentkit/models/chat.py +27 -24
  24. intentkit/models/conversation.py +8 -8
  25. intentkit/models/credit.py +62 -64
  26. intentkit/models/db.py +8 -7
  27. intentkit/models/db_mig.py +2 -2
  28. intentkit/models/llm.py +12 -14
  29. intentkit/models/redis.py +2 -3
  30. intentkit/models/skill.py +25 -27
  31. intentkit/models/skills.csv +29 -28
  32. intentkit/models/user.py +21 -22
  33. intentkit/skills/acolyt/ask.py +3 -4
  34. intentkit/skills/acolyt/base.py +1 -3
  35. intentkit/skills/aixbt/base.py +1 -3
  36. intentkit/skills/aixbt/projects.py +13 -13
  37. intentkit/skills/allora/base.py +1 -3
  38. intentkit/skills/allora/price.py +2 -3
  39. intentkit/skills/base.py +15 -22
  40. intentkit/skills/basename/__init__.py +3 -5
  41. intentkit/skills/carv/__init__.py +7 -8
  42. intentkit/skills/carv/base.py +6 -6
  43. intentkit/skills/carv/fetch_news.py +3 -3
  44. intentkit/skills/carv/onchain_query.py +4 -4
  45. intentkit/skills/carv/token_info_and_price.py +5 -5
  46. intentkit/skills/casino/base.py +1 -3
  47. intentkit/skills/casino/deck_draw.py +1 -2
  48. intentkit/skills/casino/deck_shuffle.py +1 -2
  49. intentkit/skills/casino/dice_roll.py +1 -2
  50. intentkit/skills/cdp/__init__.py +3 -5
  51. intentkit/skills/cdp/base.py +1 -3
  52. intentkit/skills/chainlist/base.py +1 -3
  53. intentkit/skills/chainlist/chain_lookup.py +18 -18
  54. intentkit/skills/common/base.py +1 -3
  55. intentkit/skills/common/current_time.py +1 -2
  56. intentkit/skills/cookiefun/base.py +1 -2
  57. intentkit/skills/cookiefun/get_account_details.py +7 -7
  58. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  59. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  60. intentkit/skills/cookiefun/get_sectors.py +3 -3
  61. intentkit/skills/cookiefun/search_accounts.py +9 -9
  62. intentkit/skills/cryptocompare/api.py +2 -3
  63. intentkit/skills/cryptocompare/base.py +6 -6
  64. intentkit/skills/cryptocompare/fetch_news.py +3 -4
  65. intentkit/skills/cryptocompare/fetch_price.py +5 -6
  66. intentkit/skills/cryptocompare/fetch_top_exchanges.py +3 -4
  67. intentkit/skills/cryptocompare/fetch_top_market_cap.py +3 -4
  68. intentkit/skills/cryptocompare/fetch_top_volume.py +3 -4
  69. intentkit/skills/cryptocompare/fetch_trading_signals.py +4 -5
  70. intentkit/skills/cryptopanic/__init__.py +4 -4
  71. intentkit/skills/cryptopanic/base.py +1 -3
  72. intentkit/skills/cryptopanic/fetch_crypto_news.py +3 -5
  73. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +3 -3
  74. intentkit/skills/dapplooker/base.py +1 -3
  75. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  76. intentkit/skills/defillama/api.py +6 -9
  77. intentkit/skills/defillama/base.py +5 -6
  78. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +6 -8
  79. intentkit/skills/defillama/coins/fetch_block.py +4 -6
  80. intentkit/skills/defillama/coins/fetch_current_prices.py +6 -8
  81. intentkit/skills/defillama/coins/fetch_first_price.py +5 -7
  82. intentkit/skills/defillama/coins/fetch_historical_prices.py +7 -9
  83. intentkit/skills/defillama/coins/fetch_price_chart.py +7 -9
  84. intentkit/skills/defillama/coins/fetch_price_percentage.py +5 -7
  85. intentkit/skills/defillama/config/chains.py +1 -3
  86. intentkit/skills/defillama/fees/fetch_fees_overview.py +22 -24
  87. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +14 -16
  88. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +6 -8
  89. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +3 -5
  90. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +5 -7
  91. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  92. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +2 -4
  93. intentkit/skills/defillama/tvl/fetch_chains.py +7 -9
  94. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +2 -4
  95. intentkit/skills/defillama/tvl/fetch_protocol.py +30 -36
  96. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +1 -3
  97. intentkit/skills/defillama/tvl/fetch_protocols.py +35 -43
  98. intentkit/skills/defillama/volumes/fetch_dex_overview.py +40 -46
  99. intentkit/skills/defillama/volumes/fetch_dex_summary.py +33 -35
  100. intentkit/skills/defillama/volumes/fetch_options_overview.py +22 -26
  101. intentkit/skills/defillama/yields/fetch_pool_chart.py +8 -10
  102. intentkit/skills/defillama/yields/fetch_pools.py +24 -28
  103. intentkit/skills/dexscreener/__init__.py +2 -2
  104. intentkit/skills/dexscreener/base.py +3 -3
  105. intentkit/skills/dexscreener/get_pair_info.py +2 -2
  106. intentkit/skills/dexscreener/get_token_pairs.py +2 -2
  107. intentkit/skills/dexscreener/get_tokens_info.py +5 -5
  108. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  109. intentkit/skills/dexscreener/search_token.py +182 -182
  110. intentkit/skills/dexscreener/utils.py +15 -14
  111. intentkit/skills/dune_analytics/__init__.py +4 -4
  112. intentkit/skills/dune_analytics/base.py +1 -3
  113. intentkit/skills/dune_analytics/fetch_kol_buys.py +4 -4
  114. intentkit/skills/dune_analytics/fetch_nation_metrics.py +5 -5
  115. intentkit/skills/elfa/base.py +1 -3
  116. intentkit/skills/elfa/mention.py +19 -21
  117. intentkit/skills/elfa/stats.py +4 -4
  118. intentkit/skills/elfa/tokens.py +12 -12
  119. intentkit/skills/elfa/utils.py +25 -27
  120. intentkit/skills/enso/__init__.py +2 -2
  121. intentkit/skills/enso/base.py +5 -8
  122. intentkit/skills/enso/best_yield.py +4 -6
  123. intentkit/skills/enso/networks.py +1 -2
  124. intentkit/skills/enso/prices.py +1 -3
  125. intentkit/skills/enso/route.py +1 -3
  126. intentkit/skills/enso/tokens.py +1 -3
  127. intentkit/skills/enso/wallet.py +5 -5
  128. intentkit/skills/erc20/__init__.py +4 -6
  129. intentkit/skills/erc721/__init__.py +4 -6
  130. intentkit/skills/firecrawl/base.py +1 -3
  131. intentkit/skills/firecrawl/clear.py +1 -2
  132. intentkit/skills/firecrawl/crawl.py +9 -10
  133. intentkit/skills/firecrawl/query.py +1 -2
  134. intentkit/skills/firecrawl/scrape.py +7 -8
  135. intentkit/skills/firecrawl/utils.py +13 -13
  136. intentkit/skills/github/base.py +1 -3
  137. intentkit/skills/github/github_search.py +1 -2
  138. intentkit/skills/heurist/base.py +1 -3
  139. intentkit/skills/heurist/image_generation_animagine_xl.py +7 -8
  140. intentkit/skills/heurist/image_generation_arthemy_comics.py +7 -8
  141. intentkit/skills/heurist/image_generation_arthemy_real.py +7 -8
  142. intentkit/skills/heurist/image_generation_braindance.py +7 -8
  143. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +7 -8
  144. intentkit/skills/heurist/image_generation_flux_1_dev.py +7 -8
  145. intentkit/skills/heurist/image_generation_sdxl.py +7 -8
  146. intentkit/skills/http/base.py +1 -3
  147. intentkit/skills/http/get.py +7 -7
  148. intentkit/skills/http/post.py +9 -9
  149. intentkit/skills/http/put.py +9 -9
  150. intentkit/skills/lifi/__init__.py +4 -4
  151. intentkit/skills/lifi/base.py +1 -3
  152. intentkit/skills/lifi/token_execute.py +13 -13
  153. intentkit/skills/lifi/token_quote.py +6 -6
  154. intentkit/skills/lifi/utils.py +16 -16
  155. intentkit/skills/moralis/__init__.py +3 -3
  156. intentkit/skills/moralis/api.py +6 -7
  157. intentkit/skills/moralis/base.py +2 -4
  158. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  159. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  160. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  161. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  162. intentkit/skills/morpho/__init__.py +4 -6
  163. intentkit/skills/nation/__init__.py +2 -2
  164. intentkit/skills/nation/base.py +1 -3
  165. intentkit/skills/nation/nft_check.py +3 -4
  166. intentkit/skills/onchain.py +2 -6
  167. intentkit/skills/openai/base.py +1 -3
  168. intentkit/skills/openai/dalle_image_generation.py +1 -3
  169. intentkit/skills/openai/gpt_image_generation.py +2 -3
  170. intentkit/skills/openai/gpt_image_to_image.py +2 -3
  171. intentkit/skills/openai/image_to_text.py +1 -2
  172. intentkit/skills/portfolio/base.py +6 -6
  173. intentkit/skills/portfolio/token_balances.py +21 -21
  174. intentkit/skills/portfolio/wallet_approvals.py +7 -7
  175. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  176. intentkit/skills/portfolio/wallet_history.py +21 -21
  177. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  178. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  179. intentkit/skills/portfolio/wallet_profitability.py +7 -7
  180. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  181. intentkit/skills/portfolio/wallet_stats.py +3 -3
  182. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  183. intentkit/skills/pyth/__init__.py +3 -5
  184. intentkit/skills/slack/base.py +2 -4
  185. intentkit/skills/slack/get_channel.py +8 -8
  186. intentkit/skills/slack/get_message.py +9 -9
  187. intentkit/skills/slack/schedule_message.py +5 -5
  188. intentkit/skills/slack/send_message.py +3 -5
  189. intentkit/skills/supabase/base.py +1 -3
  190. intentkit/skills/supabase/delete_data.py +4 -4
  191. intentkit/skills/supabase/fetch_data.py +12 -12
  192. intentkit/skills/supabase/insert_data.py +4 -4
  193. intentkit/skills/supabase/invoke_function.py +6 -6
  194. intentkit/skills/supabase/update_data.py +6 -6
  195. intentkit/skills/supabase/upsert_data.py +4 -4
  196. intentkit/skills/superfluid/__init__.py +4 -6
  197. intentkit/skills/system/add_autonomous_task.py +8 -10
  198. intentkit/skills/system/edit_autonomous_task.py +12 -14
  199. intentkit/skills/system/list_autonomous_tasks.py +1 -3
  200. intentkit/skills/tavily/base.py +1 -3
  201. intentkit/skills/tavily/tavily_extract.py +1 -2
  202. intentkit/skills/tavily/tavily_search.py +1 -3
  203. intentkit/skills/token/base.py +5 -5
  204. intentkit/skills/token/erc20_transfers.py +19 -19
  205. intentkit/skills/token/token_analytics.py +3 -3
  206. intentkit/skills/token/token_price.py +13 -13
  207. intentkit/skills/token/token_search.py +9 -9
  208. intentkit/skills/twitter/base.py +3 -4
  209. intentkit/skills/twitter/follow_user.py +1 -2
  210. intentkit/skills/twitter/get_mentions.py +3 -4
  211. intentkit/skills/twitter/get_timeline.py +1 -2
  212. intentkit/skills/twitter/get_user_by_username.py +1 -2
  213. intentkit/skills/twitter/get_user_tweets.py +2 -3
  214. intentkit/skills/twitter/like_tweet.py +1 -2
  215. intentkit/skills/twitter/post_tweet.py +3 -4
  216. intentkit/skills/twitter/reply_tweet.py +3 -4
  217. intentkit/skills/twitter/retweet.py +1 -2
  218. intentkit/skills/twitter/search_tweets.py +1 -2
  219. intentkit/skills/unrealspeech/base.py +1 -3
  220. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  221. intentkit/skills/venice_audio/__init__.py +8 -9
  222. intentkit/skills/venice_audio/base.py +3 -4
  223. intentkit/skills/venice_audio/input.py +41 -41
  224. intentkit/skills/venice_audio/venice_audio.py +6 -6
  225. intentkit/skills/venice_image/__init__.py +5 -5
  226. intentkit/skills/venice_image/api.py +138 -138
  227. intentkit/skills/venice_image/base.py +3 -3
  228. intentkit/skills/venice_image/config.py +33 -35
  229. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  230. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  231. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  232. intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
  233. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  234. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  235. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  236. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  237. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  238. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  239. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  240. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  241. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  242. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  243. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  244. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  245. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  246. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  247. intentkit/skills/venice_image/utils.py +77 -78
  248. intentkit/skills/web_scraper/base.py +1 -3
  249. intentkit/skills/web_scraper/document_indexer.py +1 -2
  250. intentkit/skills/web_scraper/scrape_and_index.py +4 -5
  251. intentkit/skills/web_scraper/utils.py +25 -26
  252. intentkit/skills/web_scraper/website_indexer.py +10 -11
  253. intentkit/skills/weth/__init__.py +4 -6
  254. intentkit/skills/wow/__init__.py +4 -6
  255. intentkit/skills/x402/__init__.py +11 -3
  256. intentkit/skills/x402/ask_agent.py +12 -78
  257. intentkit/skills/x402/base.py +90 -0
  258. intentkit/skills/x402/http_request.py +117 -0
  259. intentkit/skills/x402/schema.json +15 -10
  260. intentkit/skills/xmtp/base.py +3 -3
  261. intentkit/skills/xmtp/price.py +2 -2
  262. intentkit/skills/xmtp/swap.py +2 -4
  263. intentkit/skills/xmtp/transfer.py +4 -6
  264. intentkit/utils/error.py +2 -2
  265. intentkit/utils/logging.py +2 -4
  266. intentkit/utils/s3.py +8 -9
  267. intentkit/utils/schema.py +5 -5
  268. intentkit/utils/slack_alert.py +7 -8
  269. {intentkit-0.8.16.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/METADATA +3 -4
  270. intentkit-0.8.17.dev2.dist-info/RECORD +464 -0
  271. intentkit/models/generator.py +0 -347
  272. intentkit-0.8.16.dev1.dist-info/RECORD +0 -464
  273. {intentkit-0.8.16.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/WHEEL +0 -0
  274. {intentkit-0.8.16.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/licenses/LICENSE +0 -0
@@ -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):
@@ -72,7 +70,7 @@ class DefiLlamaFetchChains(DefiLlamaBaseTool):
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
  )
@@ -59,7 +57,7 @@ class DefiLlamaFetchHistoricalTvl(DefiLlamaBaseTool):
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):
@@ -153,7 +147,7 @@ class DefiLlamaFetchProtocol(DefiLlamaBaseTool):
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
@@ -47,7 +45,7 @@ class DefiLlamaFetchProtocolCurrentTvl(DefiLlamaBaseTool):
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.
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching all protocols via DeFi Llama API."""
2
2
 
3
- from typing import Dict, List, Optional, Type, Union
4
-
5
3
  from pydantic import BaseModel, Field
6
4
 
7
5
  from intentkit.skills.defillama.api import fetch_protocols
@@ -35,89 +33,83 @@ class Protocol(BaseModel):
35
33
  # Basic Info
36
34
  id: str = Field(..., description="Protocol unique identifier")
37
35
  name: str = Field(..., description="Protocol name")
38
- address: Optional[str] = Field(None, description="Protocol's main contract address")
36
+ address: str | None = Field(None, description="Protocol's main contract address")
39
37
  symbol: str = Field(..., description="Protocol token symbol")
40
- url: Optional[str] = Field(None, description="Protocol website")
41
- description: Optional[str] = Field(None, description="Protocol description")
42
- chain: Optional[str] = Field(None, description="Main chain of the protocol")
43
- logo: Optional[str] = Field(None, description="URL to protocol logo")
38
+ url: str | None = Field(None, description="Protocol website")
39
+ description: str | None = Field(None, description="Protocol description")
40
+ chain: str | None = Field(None, description="Main chain of the protocol")
41
+ logo: str | None = Field(None, description="URL to protocol logo")
44
42
 
45
43
  # Audit Information
46
- audits: Union[str, int] = Field("0", description="Number of audits")
47
- audit_note: Optional[str] = Field(None, description="Additional audit information")
48
- audit_links: Optional[List[str]] = Field(None, description="Links to audit reports")
44
+ audits: str | int = Field("0", description="Number of audits")
45
+ audit_note: str | None = Field(None, description="Additional audit information")
46
+ audit_links: list[str] | None = Field(None, description="Links to audit reports")
49
47
 
50
48
  # External IDs
51
- gecko_id: Optional[str] = Field(None, description="CoinGecko ID")
52
- cmcId: Optional[Union[str, int]] = Field(None, description="CoinMarketCap ID")
49
+ gecko_id: str | None = Field(None, description="CoinGecko ID")
50
+ cmcId: str | int | None = Field(None, description="CoinMarketCap ID")
53
51
 
54
52
  # Classification
55
53
  category: str = Field(..., description="Protocol category")
56
- chains: List[str] = Field(
54
+ chains: list[str] = Field(
57
55
  default_factory=list, description="Chains the protocol operates on"
58
56
  )
59
57
 
60
58
  # Module and Related Info
61
59
  module: str = Field(..., description="Module name in DefiLlama")
62
- parentProtocol: Optional[str] = Field(
63
- None, description="Parent protocol identifier"
64
- )
60
+ parentProtocol: str | None = Field(None, description="Parent protocol identifier")
65
61
 
66
62
  # Social and Development
67
- twitter: Optional[str] = Field(None, description="Twitter handle")
68
- github: Optional[List[str]] = Field(None, description="GitHub organization names")
63
+ twitter: str | None = Field(None, description="Twitter handle")
64
+ github: list[str] | None = Field(None, description="GitHub organization names")
69
65
 
70
66
  # Protocol Relationships
71
- oracles: List[str] = Field(default_factory=list, description="Oracle services used")
72
- forkedFrom: List[str] = Field(
67
+ oracles: list[str] = Field(default_factory=list, description="Oracle services used")
68
+ forkedFrom: list[str] = Field(
73
69
  default_factory=list, description="Protocols this one was forked from"
74
70
  )
75
71
 
76
72
  # Additional Metadata
77
- methodology: Optional[str] = Field(None, description="TVL calculation methodology")
78
- listedAt: Optional[int] = Field(
79
- None, description="Timestamp when protocol was listed"
80
- )
81
- openSource: Optional[bool] = Field(
82
- None, description="Whether protocol is open source"
83
- )
84
- treasury: Optional[str] = Field(None, description="Treasury information")
85
- misrepresentedTokens: Optional[bool] = Field(
73
+ methodology: str | None = Field(None, description="TVL calculation methodology")
74
+ listedAt: int | None = Field(None, description="Timestamp when protocol was listed")
75
+ openSource: bool | None = Field(None, description="Whether protocol is open source")
76
+ treasury: str | None = Field(None, description="Treasury information")
77
+ misrepresentedTokens: bool | None = Field(
86
78
  None, description="Whether tokens are misrepresented"
87
79
  )
88
- hallmarks: Optional[List[Hallmark]] = Field(
80
+ hallmarks: list[Hallmark] | None = Field(
89
81
  None, description="Significant protocol events"
90
82
  )
91
83
 
92
84
  # TVL Related Data
93
- tvl: Optional[float] = Field(None, description="Total Value Locked in USD")
94
- chainTvls: Dict[str, float] = Field(
85
+ tvl: float | None = Field(None, description="Total Value Locked in USD")
86
+ chainTvls: dict[str, float] = Field(
95
87
  default_factory=dict,
96
88
  description="TVL breakdown by chain including special types (staking, borrowed, etc.)",
97
89
  )
98
- change_1h: Optional[float] = Field(None, description="1 hour TVL change percentage")
99
- change_1d: Optional[float] = Field(None, description="1 day TVL change percentage")
100
- change_7d: Optional[float] = Field(None, description="7 day TVL change percentage")
90
+ change_1h: float | None = Field(None, description="1 hour TVL change percentage")
91
+ change_1d: float | None = Field(None, description="1 day TVL change percentage")
92
+ change_7d: float | None = Field(None, description="7 day TVL change percentage")
101
93
 
102
94
  # Additional TVL Components
103
- staking: Optional[float] = Field(None, description="Value in staking")
104
- pool2: Optional[float] = Field(None, description="Value in pool2")
105
- borrowed: Optional[float] = Field(None, description="Value borrowed")
95
+ staking: float | None = Field(None, description="Value in staking")
96
+ pool2: float | None = Field(None, description="Value in pool2")
97
+ borrowed: float | None = Field(None, description="Value borrowed")
106
98
 
107
99
  # Token Information
108
- tokenBreakdowns: Dict[str, float] = Field(
100
+ tokenBreakdowns: dict[str, float] = Field(
109
101
  default_factory=dict, description="TVL breakdown by token"
110
102
  )
111
- mcap: Optional[float] = Field(None, description="Market capitalization")
103
+ mcap: float | None = Field(None, description="Market capitalization")
112
104
 
113
105
 
114
106
  class DefiLlamaProtocolsOutput(BaseModel):
115
107
  """Output model for the protocols fetching tool."""
116
108
 
117
- protocols: List[Protocol] = Field(
109
+ protocols: list[Protocol] = Field(
118
110
  default_factory=list, description="List of fetched protocols"
119
111
  )
120
- error: Optional[str] = Field(None, description="Error message if any")
112
+ error: str | None = Field(None, description="Error message if any")
121
113
 
122
114
 
123
115
  class DefiLlamaFetchProtocols(DefiLlamaBaseTool):
@@ -143,7 +135,7 @@ class DefiLlamaFetchProtocols(DefiLlamaBaseTool):
143
135
 
144
136
  pass
145
137
 
146
- args_schema: Type[BaseModel] = EmptyArgsSchema
138
+ args_schema: type[BaseModel] = EmptyArgsSchema
147
139
 
148
140
  async def _arun(self, **kwargs) -> DefiLlamaProtocolsOutput:
149
141
  """Fetch information about all protocols.
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching DEX overview 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_dex_overview
@@ -20,78 +18,74 @@ Returns:
20
18
  class MethodologyInfo(BaseModel):
21
19
  """Model representing methodology information."""
22
20
 
23
- UserFees: Optional[str] = Field(None, description="User fee information")
24
- Fees: Optional[str] = Field(None, description="Fee structure")
25
- Revenue: Optional[str] = Field(None, description="Revenue model")
26
- ProtocolRevenue: Optional[str] = Field(None, description="Protocol revenue info")
27
- HoldersRevenue: Optional[str] = Field(None, description="Holder revenue info")
28
- SupplySideRevenue: Optional[str] = Field(
29
- None, description="Supply side revenue info"
30
- )
21
+ UserFees: str | None = Field(None, description="User fee information")
22
+ Fees: str | None = Field(None, description="Fee structure")
23
+ Revenue: str | None = Field(None, description="Revenue model")
24
+ ProtocolRevenue: str | None = Field(None, description="Protocol revenue info")
25
+ HoldersRevenue: str | None = Field(None, description="Holder revenue info")
26
+ SupplySideRevenue: str | None = Field(None, description="Supply side revenue info")
31
27
 
32
28
 
33
29
  class ProtocolInfo(BaseModel):
34
30
  """Model representing individual protocol data."""
35
31
 
36
- total24h: Optional[float] = Field(None, description="24h total")
37
- total48hto24h: Optional[float] = Field(None, description="48h to 24h total")
38
- total7d: Optional[float] = Field(None, description="7d total")
39
- total14dto7d: Optional[float] = Field(None, description="14d to 7d total")
40
- total60dto30d: Optional[float] = Field(None, description="60d to 30d total")
41
- total30d: Optional[float] = Field(None, description="30d total")
42
- total1y: Optional[float] = Field(None, description="1y total")
43
- totalAllTime: Optional[float] = Field(None, description="All time total")
44
- average1y: Optional[float] = Field(None, description="1y average")
45
- change_1d: Optional[float] = Field(None, description="1d change")
46
- change_7d: Optional[float] = Field(None, description="7d change")
47
- change_1m: Optional[float] = Field(None, description="1m change")
48
- change_7dover7d: Optional[float] = Field(None, description="7d over 7d change")
49
- change_30dover30d: Optional[float] = Field(None, description="30d over 30d change")
50
- breakdown24h: Optional[Dict[str, Dict[str, float]]] = Field(
32
+ total24h: float | None = Field(None, description="24h total")
33
+ total48hto24h: float | None = Field(None, description="48h to 24h total")
34
+ total7d: float | None = Field(None, description="7d total")
35
+ total14dto7d: float | None = Field(None, description="14d to 7d total")
36
+ total60dto30d: float | None = Field(None, description="60d to 30d total")
37
+ total30d: float | None = Field(None, description="30d total")
38
+ total1y: float | None = Field(None, description="1y total")
39
+ totalAllTime: float | None = Field(None, description="All time total")
40
+ average1y: float | None = Field(None, description="1y average")
41
+ change_1d: float | None = Field(None, description="1d change")
42
+ change_7d: float | None = Field(None, description="7d change")
43
+ change_1m: float | None = Field(None, description="1m change")
44
+ change_7dover7d: float | None = Field(None, description="7d over 7d change")
45
+ change_30dover30d: float | None = Field(None, description="30d over 30d change")
46
+ breakdown24h: dict[str, dict[str, float]] | None = Field(
51
47
  None, description="24h breakdown by chain"
52
48
  )
53
- breakdown30d: Optional[Dict[str, Dict[str, float]]] = Field(
49
+ breakdown30d: dict[str, dict[str, float]] | None = Field(
54
50
  None, description="30d breakdown by chain"
55
51
  )
56
- total7DaysAgo: Optional[float] = Field(None, description="Total 7 days ago")
57
- total30DaysAgo: Optional[float] = Field(None, description="Total 30 days ago")
58
- defillamaId: Optional[str] = Field(None, description="DeFi Llama ID")
52
+ total7DaysAgo: float | None = Field(None, description="Total 7 days ago")
53
+ total30DaysAgo: float | None = Field(None, description="Total 30 days ago")
54
+ defillamaId: str | None = Field(None, description="DeFi Llama ID")
59
55
  name: str = Field(..., description="Protocol name")
60
56
  displayName: str = Field(..., description="Display name")
61
57
  module: str = Field(..., description="Module name")
62
58
  category: str = Field(..., description="Protocol category")
63
- logo: Optional[str] = Field(None, description="Logo URL")
64
- chains: List[str] = Field(..., description="Supported chains")
59
+ logo: str | None = Field(None, description="Logo URL")
60
+ chains: list[str] = Field(..., description="Supported chains")
65
61
  protocolType: str = Field(..., description="Protocol type")
66
- methodologyURL: Optional[str] = Field(None, description="Methodology URL")
67
- methodology: Optional[MethodologyInfo] = Field(
68
- None, description="Methodology details"
69
- )
62
+ methodologyURL: str | None = Field(None, description="Methodology URL")
63
+ methodology: MethodologyInfo | None = Field(None, description="Methodology details")
70
64
  latestFetchIsOk: bool = Field(..., description="Latest fetch status")
71
- disabled: Optional[bool] = Field(None, description="Whether protocol is disabled")
72
- parentProtocol: Optional[str] = Field(None, description="Parent protocol")
65
+ disabled: bool | None = Field(None, description="Whether protocol is disabled")
66
+ parentProtocol: str | None = Field(None, description="Parent protocol")
73
67
  slug: str = Field(..., description="Protocol slug")
74
- linkedProtocols: Optional[List[str]] = Field(None, description="Linked protocols")
68
+ linkedProtocols: list[str] | None = Field(None, description="Linked protocols")
75
69
  id: str = Field(..., description="Protocol ID")
76
70
 
77
71
 
78
72
  class FetchDexOverviewResponse(BaseModel):
79
73
  """Response schema for DEX overview data."""
80
74
 
81
- totalDataChart: List = Field(
75
+ totalDataChart: list = Field(
82
76
  default_factory=list, description="Total data chart points"
83
77
  )
84
- totalDataChartBreakdown: List = Field(
78
+ totalDataChartBreakdown: list = Field(
85
79
  default_factory=list, description="Total data chart breakdown"
86
80
  )
87
- breakdown24h: Optional[Dict[str, Dict[str, float]]] = Field(
81
+ breakdown24h: dict[str, dict[str, float]] | None = Field(
88
82
  None, description="24h breakdown by chain"
89
83
  )
90
- breakdown30d: Optional[Dict[str, Dict[str, float]]] = Field(
84
+ breakdown30d: dict[str, dict[str, float]] | None = Field(
91
85
  None, description="30d breakdown by chain"
92
86
  )
93
- chain: Optional[str] = Field(None, description="Specific chain")
94
- allChains: List[str] = Field(..., description="List of all chains")
87
+ chain: str | None = Field(None, description="Specific chain")
88
+ allChains: list[str] = Field(..., description="List of all chains")
95
89
  total24h: float = Field(..., description="24h total")
96
90
  total48hto24h: float = Field(..., description="48h to 24h total")
97
91
  total7d: float = Field(..., description="7d total")
@@ -106,8 +100,8 @@ class FetchDexOverviewResponse(BaseModel):
106
100
  change_30dover30d: float = Field(..., description="30d over 30d change")
107
101
  total7DaysAgo: float = Field(..., description="Total 7 days ago")
108
102
  total30DaysAgo: float = Field(..., description="Total 30 days ago")
109
- protocols: List[ProtocolInfo] = Field(..., description="List of protocol data")
110
- error: Optional[str] = Field(None, description="Error message if any")
103
+ protocols: list[ProtocolInfo] = Field(..., description="List of protocol data")
104
+ error: str | None = Field(None, description="Error message if any")
111
105
 
112
106
 
113
107
  class DefiLlamaFetchDexOverview(DefiLlamaBaseTool):
@@ -1,7 +1,5 @@
1
1
  """Tool for fetching DEX protocol summary 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_dex_summary
@@ -30,44 +28,44 @@ class FetchDexSummaryResponse(BaseModel):
30
28
 
31
29
  id: str = Field(..., description="Protocol ID")
32
30
  name: str = Field(..., description="Protocol name")
33
- url: Optional[str] = Field(None, description="Protocol website URL")
34
- description: Optional[str] = Field(None, description="Protocol description")
35
- logo: Optional[str] = Field(None, description="Logo URL")
36
- gecko_id: Optional[str] = Field(None, description="CoinGecko ID")
37
- cmcId: Optional[str] = Field(None, description="CoinMarketCap ID")
38
- chains: List[str] = Field(default_factory=list, description="Supported chains")
39
- twitter: Optional[str] = Field(None, description="Twitter handle")
40
- treasury: Optional[str] = Field(None, description="Treasury identifier")
41
- governanceID: Optional[List[str]] = Field(None, description="Governance IDs")
42
- github: Optional[List[str]] = Field(None, description="GitHub organizations")
43
- childProtocols: Optional[List[str]] = Field(None, description="Child protocols")
44
- linkedProtocols: Optional[List[str]] = Field(None, description="Linked protocols")
45
- disabled: Optional[bool] = Field(None, description="Whether protocol is disabled")
31
+ url: str | None = Field(None, description="Protocol website URL")
32
+ description: str | None = Field(None, description="Protocol description")
33
+ logo: str | None = Field(None, description="Logo URL")
34
+ gecko_id: str | None = Field(None, description="CoinGecko ID")
35
+ cmcId: str | None = Field(None, description="CoinMarketCap ID")
36
+ chains: list[str] = Field(default_factory=list, description="Supported chains")
37
+ twitter: str | None = Field(None, description="Twitter handle")
38
+ treasury: str | None = Field(None, description="Treasury identifier")
39
+ governanceID: list[str] | None = Field(None, description="Governance IDs")
40
+ github: list[str] | None = Field(None, description="GitHub organizations")
41
+ childProtocols: list[str] | None = Field(None, description="Child protocols")
42
+ linkedProtocols: list[str] | None = Field(None, description="Linked protocols")
43
+ disabled: bool | None = Field(None, description="Whether protocol is disabled")
46
44
  displayName: str = Field(..., description="Display name")
47
- module: Optional[str] = Field(None, description="Module name")
48
- category: Optional[str] = Field(None, description="Protocol category")
49
- methodologyURL: Optional[str] = Field(None, description="Methodology URL")
50
- methodology: Optional[Dict] = Field(None, description="Methodology details")
51
- forkedFrom: Optional[List[str]] = Field(None, description="Forked from protocols")
52
- audits: Optional[str] = Field(None, description="Audit information")
53
- address: Optional[str] = Field(None, description="Contract address")
54
- audit_links: Optional[List[str]] = Field(None, description="Audit links")
55
- versionKey: Optional[str] = Field(None, description="Version key")
56
- parentProtocol: Optional[str] = Field(None, description="Parent protocol")
57
- previousNames: Optional[List[str]] = Field(None, description="Previous names")
45
+ module: str | None = Field(None, description="Module name")
46
+ category: str | None = Field(None, description="Protocol category")
47
+ methodologyURL: str | None = Field(None, description="Methodology URL")
48
+ methodology: dict | None = Field(None, description="Methodology details")
49
+ forkedFrom: list[str] | None = Field(None, description="Forked from protocols")
50
+ audits: str | None = Field(None, description="Audit information")
51
+ address: str | None = Field(None, description="Contract address")
52
+ audit_links: list[str] | None = Field(None, description="Audit links")
53
+ versionKey: str | None = Field(None, description="Version key")
54
+ parentProtocol: str | None = Field(None, description="Parent protocol")
55
+ previousNames: list[str] | None = Field(None, description="Previous names")
58
56
  latestFetchIsOk: bool = Field(..., description="Latest fetch status")
59
57
  slug: str = Field(..., description="Protocol slug")
60
58
  protocolType: str = Field(..., description="Protocol type")
61
- total24h: Optional[float] = Field(None, description="24h total volume")
62
- total48hto24h: Optional[float] = Field(None, description="48h to 24h total volume")
63
- total7d: Optional[float] = Field(None, description="7d total volume")
64
- totalAllTime: Optional[float] = Field(None, description="All time total volume")
65
- totalDataChart: List = Field(default_factory=list, description="Total data chart")
66
- totalDataChartBreakdown: List = Field(
59
+ total24h: float | None = Field(None, description="24h total volume")
60
+ total48hto24h: float | None = Field(None, description="48h to 24h total volume")
61
+ total7d: float | None = Field(None, description="7d total volume")
62
+ totalAllTime: float | None = Field(None, description="All time total volume")
63
+ totalDataChart: list = Field(default_factory=list, description="Total data chart")
64
+ totalDataChartBreakdown: list = Field(
67
65
  default_factory=list, description="Chart breakdown"
68
66
  )
69
- change_1d: Optional[float] = Field(None, description="1d change percentage")
70
- error: Optional[str] = Field(None, description="Error message if any")
67
+ change_1d: float | None = Field(None, description="1d change percentage")
68
+ error: str | None = Field(None, description="Error message if any")
71
69
 
72
70
 
73
71
  class DefiLlamaFetchDexSummary(DefiLlamaBaseTool):
@@ -87,7 +85,7 @@ class DefiLlamaFetchDexSummary(DefiLlamaBaseTool):
87
85
 
88
86
  name: str = "defillama_fetch_dex_summary"
89
87
  description: str = FETCH_DEX_SUMMARY_PROMPT
90
- args_schema: Type[BaseModel] = FetchDexSummaryInput
88
+ args_schema: type[BaseModel] = FetchDexSummaryInput
91
89
 
92
90
  async def _arun(self, protocol: str) -> FetchDexSummaryResponse:
93
91
  """Fetch summary data for the given DEX protocol.