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,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, List, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
@@ -12,23 +12,23 @@ class WalletNetWorthInput(BaseModel):
12
12
  """Input for wallet net worth tool."""
13
13
 
14
14
  address: str = Field(description="The wallet address to calculate net worth for.")
15
- chains: Optional[List[str]] = Field(
15
+ chains: list[str] | None = Field(
16
16
  description="The chains to query (e.g., ['eth', 'bsc', 'polygon']).",
17
17
  default=None,
18
18
  )
19
- exclude_spam: Optional[bool] = Field(
19
+ exclude_spam: bool | None = Field(
20
20
  description="Exclude spam tokens from the result.",
21
21
  default=True,
22
22
  )
23
- exclude_unverified_contracts: Optional[bool] = Field(
23
+ exclude_unverified_contracts: bool | None = Field(
24
24
  description="Exclude unverified contracts from the result.",
25
25
  default=True,
26
26
  )
27
- max_token_inactivity: Optional[int] = Field(
27
+ max_token_inactivity: int | None = Field(
28
28
  description="Exclude tokens inactive for more than the given amount of days.",
29
29
  default=1,
30
30
  )
31
- min_pair_side_liquidity_usd: Optional[float] = Field(
31
+ min_pair_side_liquidity_usd: float | None = Field(
32
32
  description="Exclude tokens with liquidity less than the specified amount in USD.",
33
33
  default=1000,
34
34
  )
@@ -46,18 +46,18 @@ class WalletNetWorth(PortfolioBaseTool):
46
46
  "Get the net worth of a wallet in USD across multiple chains. "
47
47
  "Filters out spam tokens and low-liquidity assets for more accurate results."
48
48
  )
49
- args_schema: Type[BaseModel] = WalletNetWorthInput
49
+ args_schema: type[BaseModel] = WalletNetWorthInput
50
50
 
51
51
  async def _arun(
52
52
  self,
53
53
  address: str,
54
- chains: Optional[List[str]] = None,
55
- exclude_spam: Optional[bool] = True,
56
- exclude_unverified_contracts: Optional[bool] = True,
57
- max_token_inactivity: Optional[int] = 1,
58
- min_pair_side_liquidity_usd: Optional[float] = 1000,
54
+ chains: list[str] | None = None,
55
+ exclude_spam: bool | None = True,
56
+ exclude_unverified_contracts: bool | None = True,
57
+ max_token_inactivity: int | None = 1,
58
+ min_pair_side_liquidity_usd: float | None = 1000,
59
59
  **kwargs,
60
- ) -> Dict[str, Any]:
60
+ ) -> dict[str, Any]:
61
61
  """Calculate wallet net worth from Moralis.
62
62
 
63
63
  Args:
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, List, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
@@ -17,35 +17,35 @@ class WalletNFTsInput(BaseModel):
17
17
  description="The chain to query (e.g., 'eth', 'base', 'polygon').",
18
18
  default=DEFAULT_CHAIN,
19
19
  )
20
- format: Optional[str] = Field(
20
+ format: str | None = Field(
21
21
  description="The format of the token ID ('decimal' or 'hex').",
22
22
  default="decimal",
23
23
  )
24
- limit: Optional[int] = Field(
24
+ limit: int | None = Field(
25
25
  description="The desired page size of the result.",
26
26
  default=DEFAULT_LIMIT,
27
27
  )
28
- exclude_spam: Optional[bool] = Field(
28
+ exclude_spam: bool | None = Field(
29
29
  description="Should spam NFTs be excluded from the result?",
30
30
  default=True,
31
31
  )
32
- token_addresses: Optional[List[str]] = Field(
32
+ token_addresses: list[str] | None = Field(
33
33
  description="The non-fungible token (NFT) addresses to get balances for.",
34
34
  default=None,
35
35
  )
36
- cursor: Optional[str] = Field(
36
+ cursor: str | None = Field(
37
37
  description="The cursor returned in the previous response (for pagination).",
38
38
  default=None,
39
39
  )
40
- normalize_metadata: Optional[bool] = Field(
40
+ normalize_metadata: bool | None = Field(
41
41
  description="The option to enable metadata normalization.",
42
42
  default=True,
43
43
  )
44
- media_items: Optional[bool] = Field(
44
+ media_items: bool | None = Field(
45
45
  description="Should preview media data be returned?",
46
46
  default=False,
47
47
  )
48
- include_prices: Optional[bool] = Field(
48
+ include_prices: bool | None = Field(
49
49
  description="Should NFT last sale prices be included in the result?",
50
50
  default=False,
51
51
  )
@@ -63,22 +63,22 @@ class WalletNFTs(PortfolioBaseTool):
63
63
  "Get NFTs owned by a given wallet address. Results include token details, "
64
64
  "metadata, collection information, and optionally prices."
65
65
  )
66
- args_schema: Type[BaseModel] = WalletNFTsInput
66
+ args_schema: type[BaseModel] = WalletNFTsInput
67
67
 
68
68
  async def _arun(
69
69
  self,
70
70
  address: str,
71
71
  chain: str = DEFAULT_CHAIN,
72
- format: Optional[str] = "decimal",
73
- limit: Optional[int] = DEFAULT_LIMIT,
74
- exclude_spam: Optional[bool] = True,
75
- token_addresses: Optional[List[str]] = None,
76
- cursor: Optional[str] = None,
77
- normalize_metadata: Optional[bool] = True,
78
- media_items: Optional[bool] = False,
79
- include_prices: Optional[bool] = False,
72
+ format: str | None = "decimal",
73
+ limit: int | None = DEFAULT_LIMIT,
74
+ exclude_spam: bool | None = True,
75
+ token_addresses: list[str] | None = None,
76
+ cursor: str | None = None,
77
+ normalize_metadata: bool | None = True,
78
+ media_items: bool | None = False,
79
+ include_prices: bool | None = False,
80
80
  **kwargs,
81
- ) -> Dict[str, Any]:
81
+ ) -> dict[str, Any]:
82
82
  """Fetch NFTs owned by a wallet from Moralis.
83
83
 
84
84
  Args:
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, List, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from langchain_core.tools import ToolException
5
5
  from pydantic import BaseModel, Field
@@ -20,11 +20,11 @@ class WalletProfitabilityInput(BaseModel):
20
20
  description="The chain to query (e.g., 'eth', 'bsc', 'polygon').",
21
21
  default=DEFAULT_CHAIN,
22
22
  )
23
- days: Optional[str] = Field(
23
+ days: str | None = Field(
24
24
  description="Timeframe in days for which profitability is calculated. Options: 'all', '7', '30', '60', '90'.",
25
25
  default="all",
26
26
  )
27
- token_addresses: Optional[List[str]] = Field(
27
+ token_addresses: list[str] | None = Field(
28
28
  description="The token addresses list to filter the result with.",
29
29
  default=None,
30
30
  )
@@ -42,16 +42,16 @@ class WalletProfitability(PortfolioBaseTool):
42
42
  "Retrieve detailed profitability breakdown for a wallet, including profit/loss per token, "
43
43
  "average buy/sell prices, and realized profits. Can be filtered by specific tokens."
44
44
  )
45
- args_schema: Type[BaseModel] = WalletProfitabilityInput
45
+ args_schema: type[BaseModel] = WalletProfitabilityInput
46
46
 
47
47
  async def _arun(
48
48
  self,
49
49
  address: str,
50
50
  chain: str = DEFAULT_CHAIN,
51
- days: Optional[str] = "all",
52
- token_addresses: Optional[List[str]] = None,
51
+ days: str | None = "all",
52
+ token_addresses: list[str] | None = None,
53
53
  **kwargs,
54
- ) -> Dict[str, Any]:
54
+ ) -> dict[str, Any]:
55
55
  """Fetch detailed wallet profitability from Moralis.
56
56
 
57
57
  Args:
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
@@ -19,7 +19,7 @@ class WalletProfitabilitySummaryInput(BaseModel):
19
19
  description="The chain to query (e.g., 'eth', 'bsc', 'polygon').",
20
20
  default=DEFAULT_CHAIN,
21
21
  )
22
- days: Optional[str] = Field(
22
+ days: str | None = Field(
23
23
  description="Timeframe in days for the profitability summary. Options: 'all', '7', '30', '60', '90'.",
24
24
  default="all",
25
25
  )
@@ -37,15 +37,15 @@ class WalletProfitabilitySummary(PortfolioBaseTool):
37
37
  "Retrieve a summary of wallet profitability including total profit/loss, "
38
38
  "trade volume, and other metrics. Filter by time period."
39
39
  )
40
- args_schema: Type[BaseModel] = WalletProfitabilitySummaryInput
40
+ args_schema: type[BaseModel] = WalletProfitabilitySummaryInput
41
41
 
42
42
  async def _arun(
43
43
  self,
44
44
  address: str,
45
45
  chain: str = DEFAULT_CHAIN,
46
- days: Optional[str] = "all",
46
+ days: str | None = "all",
47
47
  **kwargs,
48
- ) -> Dict[str, Any]:
48
+ ) -> dict[str, Any]:
49
49
  """Fetch wallet profitability summary from Moralis.
50
50
 
51
51
  Args:
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, Type
2
+ from typing import Any
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
@@ -31,14 +31,14 @@ class WalletStats(PortfolioBaseTool):
31
31
  "Get statistical information about a wallet, including the number of NFTs, "
32
32
  "collections, and transaction counts."
33
33
  )
34
- args_schema: Type[BaseModel] = WalletStatsInput
34
+ args_schema: type[BaseModel] = WalletStatsInput
35
35
 
36
36
  async def _arun(
37
37
  self,
38
38
  address: str,
39
39
  chain: str = DEFAULT_CHAIN,
40
40
  **kwargs,
41
- ) -> Dict[str, Any]:
41
+ ) -> dict[str, Any]:
42
42
  """Fetch wallet stats from Moralis.
43
43
 
44
44
  Args:
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, List, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
@@ -21,35 +21,35 @@ class WalletSwapsInput(BaseModel):
21
21
  description="The chain to query (e.g., 'eth', 'bsc', 'polygon').",
22
22
  default=DEFAULT_CHAIN,
23
23
  )
24
- cursor: Optional[str] = Field(
24
+ cursor: str | None = Field(
25
25
  description="The cursor for pagination.",
26
26
  default=None,
27
27
  )
28
- limit: Optional[int] = Field(
28
+ limit: int | None = Field(
29
29
  description="The number of results per page.",
30
30
  default=DEFAULT_LIMIT,
31
31
  )
32
- from_block: Optional[str] = Field(
32
+ from_block: str | None = Field(
33
33
  description="The minimum block number to get transactions from.",
34
34
  default=None,
35
35
  )
36
- to_block: Optional[str] = Field(
36
+ to_block: str | None = Field(
37
37
  description="The maximum block number to get transactions from.",
38
38
  default=None,
39
39
  )
40
- from_date: Optional[str] = Field(
40
+ from_date: str | None = Field(
41
41
  description="The start date to get transactions from (format in seconds or datestring).",
42
42
  default=None,
43
43
  )
44
- to_date: Optional[str] = Field(
44
+ to_date: str | None = Field(
45
45
  description="The end date to get transactions from (format in seconds or datestring).",
46
46
  default=None,
47
47
  )
48
- order: Optional[str] = Field(
48
+ order: str | None = Field(
49
49
  description="The order of the result (ASC or DESC).",
50
50
  default=DEFAULT_ORDER,
51
51
  )
52
- transaction_types: Optional[List[str]] = Field(
52
+ transaction_types: list[str] | None = Field(
53
53
  description="Array of transaction types. Allowed values are 'buy', 'sell'.",
54
54
  default=None,
55
55
  )
@@ -67,22 +67,22 @@ class WalletSwaps(PortfolioBaseTool):
67
67
  "Get all swap-related transactions (buy, sell) for a wallet address. "
68
68
  "Note that swaps data is only available from September 2024 onwards."
69
69
  )
70
- args_schema: Type[BaseModel] = WalletSwapsInput
70
+ args_schema: type[BaseModel] = WalletSwapsInput
71
71
 
72
72
  async def _arun(
73
73
  self,
74
74
  address: str,
75
75
  chain: str = DEFAULT_CHAIN,
76
- cursor: Optional[str] = None,
77
- limit: Optional[int] = DEFAULT_LIMIT,
78
- from_block: Optional[str] = None,
79
- to_block: Optional[str] = None,
80
- from_date: Optional[str] = None,
81
- to_date: Optional[str] = None,
82
- order: Optional[str] = DEFAULT_ORDER,
83
- transaction_types: Optional[List[str]] = None,
76
+ cursor: str | None = None,
77
+ limit: int | None = DEFAULT_LIMIT,
78
+ from_block: str | None = None,
79
+ to_block: str | None = None,
80
+ from_date: str | None = None,
81
+ to_date: str | None = None,
82
+ order: str | None = DEFAULT_ORDER,
83
+ transaction_types: list[str] | None = None,
84
84
  **kwargs,
85
- ) -> Dict[str, Any]:
85
+ ) -> dict[str, Any]:
86
86
  """Fetch wallet swap transactions from Moralis.
87
87
 
88
88
  Args:
@@ -1,9 +1,10 @@
1
1
  """Pyth AgentKit skills."""
2
2
 
3
- from typing import TYPE_CHECKING, Optional, TypedDict
3
+ from typing import TypedDict
4
4
 
5
5
  from coinbase_agentkit import pyth_action_provider
6
6
 
7
+ from intentkit.models.agent import Agent
7
8
  from intentkit.skills.base import (
8
9
  SkillConfig,
9
10
  SkillState,
@@ -12,9 +13,6 @@ from intentkit.skills.base import (
12
13
  )
13
14
  from intentkit.skills.pyth.base import PythBaseTool
14
15
 
15
- if TYPE_CHECKING:
16
- from intentkit.models.agent import Agent
17
-
18
16
 
19
17
  class SkillStates(TypedDict):
20
18
  PythActionProvider_fetch_price: SkillState
@@ -31,7 +29,7 @@ async def get_skills(
31
29
  config: "Config",
32
30
  is_private: bool,
33
31
  agent_id: str,
34
- agent: Optional["Agent"] = None,
32
+ agent: Agent | None = None,
35
33
  **_,
36
34
  ) -> list[PythBaseTool]:
37
35
  """Get all Pyth skills."""
@@ -1,5 +1,3 @@
1
- from typing import Optional, Type
2
-
3
1
  from langchain_core.tools.base import ToolException
4
2
  from pydantic import BaseModel, Field
5
3
  from slack_sdk import WebClient
@@ -12,7 +10,7 @@ class SlackBaseTool(IntentKitSkill):
12
10
 
13
11
  name: str = Field(description="The name of the tool")
14
12
  description: str = Field(description="A description of what the tool does")
15
- args_schema: Type[BaseModel]
13
+ args_schema: type[BaseModel]
16
14
 
17
15
  def get_api_key(self) -> str:
18
16
  context = self.get_context()
@@ -66,4 +64,4 @@ class SlackMessage(BaseModel):
66
64
  text: str
67
65
  user: str
68
66
  channel: str
69
- thread_ts: Optional[str] = None
67
+ thread_ts: str | None = None
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, Optional, Type, Union
1
+ from typing import Any
2
2
 
3
3
  from pydantic import BaseModel, Field
4
4
 
@@ -8,11 +8,11 @@ from intentkit.skills.slack.base import SlackBaseTool, SlackChannel
8
8
  class SlackGetChannelSchema(BaseModel):
9
9
  """Input schema for SlackGetChannel."""
10
10
 
11
- channel_id: Optional[str] = Field(
11
+ channel_id: str | None = Field(
12
12
  None,
13
13
  description="The ID of the channel to get information about. Provide either channel_id or channel_name.",
14
14
  )
15
- channel_name: Optional[str] = Field(
15
+ channel_name: str | None = Field(
16
16
  None,
17
17
  description="The name of the channel to get information about. Provide either channel_id or channel_name.",
18
18
  )
@@ -23,14 +23,14 @@ class SlackGetChannel(SlackBaseTool):
23
23
 
24
24
  name: str = "slack_get_channel"
25
25
  description: str = "Get information about a Slack channel by ID or name"
26
- args_schema: Type[BaseModel] = SlackGetChannelSchema
26
+ args_schema: type[BaseModel] = SlackGetChannelSchema
27
27
 
28
28
  async def _arun(
29
29
  self,
30
- channel_id: Optional[str] = None,
31
- channel_name: Optional[str] = None,
30
+ channel_id: str | None = None,
31
+ channel_name: str | None = None,
32
32
  **kwargs,
33
- ) -> Union[SlackChannel, Dict[str, SlackChannel]]:
33
+ ) -> SlackChannel | dict[str, SlackChannel]:
34
34
  """Run the tool to get information about a Slack channel.
35
35
 
36
36
  Args:
@@ -88,7 +88,7 @@ class SlackGetChannel(SlackBaseTool):
88
88
  except Exception as e:
89
89
  raise Exception(f"Error getting channel information: {str(e)}")
90
90
 
91
- def _format_channel(self, channel: Dict[str, Any]) -> SlackChannel:
91
+ def _format_channel(self, channel: dict[str, Any]) -> SlackChannel:
92
92
  """Format the channel data into a SlackChannel model.
93
93
 
94
94
  Args:
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, Optional, Type
1
+ from typing import Any
2
2
 
3
3
  from pydantic import BaseModel, Field
4
4
 
@@ -11,15 +11,15 @@ class SlackGetMessageSchema(BaseModel):
11
11
  channel_id: str = Field(
12
12
  description="The ID of the channel containing the message",
13
13
  )
14
- ts: Optional[str] = Field(
14
+ ts: str | None = Field(
15
15
  None,
16
16
  description="The timestamp of a specific message to retrieve. If not provided, returns recent messages.",
17
17
  )
18
- thread_ts: Optional[str] = Field(
18
+ thread_ts: str | None = Field(
19
19
  None,
20
20
  description="If provided, retrieve messages from this thread instead of the channel.",
21
21
  )
22
- limit: Optional[int] = Field(
22
+ limit: int | None = Field(
23
23
  10,
24
24
  description="The maximum number of messages to return (1-100, default 10).",
25
25
  )
@@ -30,16 +30,16 @@ class SlackGetMessage(SlackBaseTool):
30
30
 
31
31
  name: str = "slack_get_message"
32
32
  description: str = "Get messages from a Slack channel or thread"
33
- args_schema: Type[BaseModel] = SlackGetMessageSchema
33
+ args_schema: type[BaseModel] = SlackGetMessageSchema
34
34
 
35
35
  async def _arun(
36
36
  self,
37
37
  channel_id: str,
38
- ts: Optional[str] = None,
39
- thread_ts: Optional[str] = None,
38
+ ts: str | None = None,
39
+ thread_ts: str | None = None,
40
40
  limit: int = 10,
41
41
  **kwargs,
42
- ) -> Dict[str, Any]:
42
+ ) -> dict[str, Any]:
43
43
  """Run the tool to get Slack messages.
44
44
 
45
45
  Args:
@@ -116,7 +116,7 @@ class SlackGetMessage(SlackBaseTool):
116
116
  except Exception as e:
117
117
  raise Exception(f"Error getting messages: {str(e)}")
118
118
 
119
- def _format_message(self, message: Dict[str, Any], channel_id: str) -> SlackMessage:
119
+ def _format_message(self, message: dict[str, Any], channel_id: str) -> SlackMessage:
120
120
  """Format the message data into a SlackMessage model.
121
121
 
122
122
  Args:
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime
2
- from typing import Any, Dict, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
@@ -18,7 +18,7 @@ class SlackScheduleMessageSchema(BaseModel):
18
18
  post_at: str = Field(
19
19
  description="The time to send the message in ISO format (e.g., '2023-12-25T10:00:00Z')",
20
20
  )
21
- thread_ts: Optional[str] = Field(
21
+ thread_ts: str | None = Field(
22
22
  None,
23
23
  description="The timestamp of the thread to reply to, if sending a thread reply",
24
24
  )
@@ -29,16 +29,16 @@ class SlackScheduleMessage(SlackBaseTool):
29
29
 
30
30
  name: str = "slack_schedule_message"
31
31
  description: str = "Schedule a message to be sent to a Slack channel or thread at a specific time, if you need current time, use skill common_current_time"
32
- args_schema: Type[BaseModel] = SlackScheduleMessageSchema
32
+ args_schema: type[BaseModel] = SlackScheduleMessageSchema
33
33
 
34
34
  async def _arun(
35
35
  self,
36
36
  channel_id: str,
37
37
  text: str,
38
38
  post_at: str,
39
- thread_ts: Optional[str] = None,
39
+ thread_ts: str | None = None,
40
40
  **kwargs,
41
- ) -> Dict[str, Any]:
41
+ ) -> dict[str, Any]:
42
42
  """Run the tool to schedule a Slack message.
43
43
 
44
44
  Args:
@@ -1,5 +1,3 @@
1
- from typing import Optional, Type
2
-
3
1
  from pydantic import BaseModel, Field
4
2
 
5
3
  from intentkit.skills.slack.base import SlackBaseTool, SlackMessage
@@ -14,7 +12,7 @@ class SlackSendMessageSchema(BaseModel):
14
12
  text: str = Field(
15
13
  description="The text content of the message to send",
16
14
  )
17
- thread_ts: Optional[str] = Field(
15
+ thread_ts: str | None = Field(
18
16
  None,
19
17
  description="The timestamp of the thread to reply to, if sending a thread reply",
20
18
  )
@@ -25,13 +23,13 @@ class SlackSendMessage(SlackBaseTool):
25
23
 
26
24
  name: str = "slack_send_message"
27
25
  description: str = "Send a message to a Slack channel or thread"
28
- args_schema: Type[BaseModel] = SlackSendMessageSchema
26
+ args_schema: type[BaseModel] = SlackSendMessageSchema
29
27
 
30
28
  async def _arun(
31
29
  self,
32
30
  channel_id: str,
33
31
  text: str,
34
- thread_ts: Optional[str] = None,
32
+ thread_ts: str | None = None,
35
33
  **kwargs,
36
34
  ) -> SlackMessage:
37
35
  """Run the tool to send a Slack message.
@@ -1,5 +1,3 @@
1
- from typing import Type
2
-
3
1
  from langchain_core.tools import ToolException
4
2
  from pydantic import BaseModel, Field
5
3
 
@@ -12,7 +10,7 @@ class SupabaseBaseTool(IntentKitSkill):
12
10
 
13
11
  name: str = Field(description="The name of the tool")
14
12
  description: str = Field(description="A description of what the tool does")
15
- args_schema: Type[BaseModel]
13
+ args_schema: type[BaseModel]
16
14
 
17
15
  @property
18
16
  def category(self) -> str:
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, Type
2
+ from typing import Any
3
3
 
4
4
  from langchain_core.tools import ToolException
5
5
  from pydantic import BaseModel, Field
@@ -17,7 +17,7 @@ class SupabaseDeleteDataInput(BaseModel):
17
17
  """Input for SupabaseDeleteData tool."""
18
18
 
19
19
  table: str = Field(description="The name of the table to delete data from")
20
- filters: Dict[str, Any] = Field(
20
+ filters: dict[str, Any] = Field(
21
21
  description="Dictionary of filters to identify which records to delete (e.g., {'id': 123})"
22
22
  )
23
23
  returning: str = Field(
@@ -34,12 +34,12 @@ class SupabaseDeleteData(SupabaseBaseTool):
34
34
 
35
35
  name: str = NAME
36
36
  description: str = PROMPT
37
- args_schema: Type[BaseModel] = SupabaseDeleteDataInput
37
+ args_schema: type[BaseModel] = SupabaseDeleteDataInput
38
38
 
39
39
  async def _arun(
40
40
  self,
41
41
  table: str,
42
- filters: Dict[str, Any],
42
+ filters: dict[str, Any],
43
43
  returning: str = "*",
44
44
  **kwargs,
45
45
  ):
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Any, Dict, Optional, Type
2
+ from typing import Any
3
3
 
4
4
  from langchain_core.tools import ToolException
5
5
  from pydantic import BaseModel, Field
@@ -17,22 +17,22 @@ class SupabaseFetchDataInput(BaseModel):
17
17
  """Input for SupabaseFetchData tool."""
18
18
 
19
19
  table: str = Field(description="The name of the table to fetch data from")
20
- columns: Optional[str] = Field(
20
+ columns: str | None = Field(
21
21
  default="*",
22
22
  description="Comma-separated list of columns to select (default: '*' for all)",
23
23
  )
24
- filters: Optional[Dict[str, Any]] = Field(
24
+ filters: dict[str, Any] | None = Field(
25
25
  default=None,
26
26
  description="Dictionary of filters to apply (e.g., {'column': 'value', 'age': {'gte': 18}})",
27
27
  )
28
- order_by: Optional[str] = Field(default=None, description="Column to order by")
28
+ order_by: str | None = Field(default=None, description="Column to order by")
29
29
  ascending: bool = Field(
30
30
  default=True, description="Whether to order in ascending order (default: True)"
31
31
  )
32
- limit: Optional[int] = Field(
32
+ limit: int | None = Field(
33
33
  default=None, description="Maximum number of records to return"
34
34
  )
35
- offset: Optional[int] = Field(
35
+ offset: int | None = Field(
36
36
  default=None, description="Number of records to skip for pagination"
37
37
  )
38
38
 
@@ -45,17 +45,17 @@ class SupabaseFetchData(SupabaseBaseTool):
45
45
 
46
46
  name: str = NAME
47
47
  description: str = PROMPT
48
- args_schema: Type[BaseModel] = SupabaseFetchDataInput
48
+ args_schema: type[BaseModel] = SupabaseFetchDataInput
49
49
 
50
50
  async def _arun(
51
51
  self,
52
52
  table: str,
53
- columns: Optional[str] = "*",
54
- filters: Optional[Dict[str, Any]] = None,
55
- order_by: Optional[str] = None,
53
+ columns: str | None = "*",
54
+ filters: dict[str, Any] | None = None,
55
+ order_by: str | None = None,
56
56
  ascending: bool = True,
57
- limit: Optional[int] = None,
58
- offset: Optional[int] = None,
57
+ limit: int | None = None,
58
+ offset: int | None = None,
59
59
  **kwargs,
60
60
  ):
61
61
  try: