intentkit 0.5.0__py3-none-any.whl → 0.5.2__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 (366) hide show
  1. intentkit/__init__.py +17 -0
  2. intentkit/abstracts/__init__.py +0 -0
  3. intentkit/abstracts/agent.py +60 -0
  4. intentkit/abstracts/api.py +4 -0
  5. intentkit/abstracts/engine.py +38 -0
  6. intentkit/abstracts/exception.py +9 -0
  7. intentkit/abstracts/graph.py +25 -0
  8. intentkit/abstracts/skill.py +129 -0
  9. intentkit/abstracts/twitter.py +54 -0
  10. intentkit/clients/__init__.py +14 -0
  11. intentkit/clients/cdp.py +53 -0
  12. intentkit/clients/twitter.py +445 -0
  13. intentkit/config/__init__.py +0 -0
  14. intentkit/config/config.py +164 -0
  15. intentkit/core/__init__.py +0 -0
  16. intentkit/core/agent.py +191 -0
  17. intentkit/core/api.py +40 -0
  18. intentkit/core/client.py +45 -0
  19. intentkit/core/credit.py +1767 -0
  20. intentkit/core/engine.py +1018 -0
  21. intentkit/core/node.py +223 -0
  22. intentkit/core/prompt.py +58 -0
  23. intentkit/core/skill.py +124 -0
  24. intentkit/models/agent.py +1689 -0
  25. intentkit/models/agent_data.py +810 -0
  26. intentkit/models/agent_schema.json +733 -0
  27. intentkit/models/app_setting.py +156 -0
  28. intentkit/models/base.py +9 -0
  29. intentkit/models/chat.py +581 -0
  30. intentkit/models/conversation.py +286 -0
  31. intentkit/models/credit.py +1406 -0
  32. intentkit/models/db.py +120 -0
  33. intentkit/models/db_mig.py +102 -0
  34. intentkit/models/generator.py +347 -0
  35. intentkit/models/llm.py +746 -0
  36. intentkit/models/redis.py +132 -0
  37. intentkit/models/skill.py +466 -0
  38. intentkit/models/user.py +243 -0
  39. intentkit/skills/__init__.py +12 -0
  40. intentkit/skills/acolyt/__init__.py +83 -0
  41. intentkit/skills/acolyt/acolyt.jpg +0 -0
  42. intentkit/skills/acolyt/ask.py +128 -0
  43. intentkit/skills/acolyt/base.py +28 -0
  44. intentkit/skills/acolyt/schema.json +89 -0
  45. intentkit/skills/aixbt/README.md +71 -0
  46. intentkit/skills/aixbt/__init__.py +73 -0
  47. intentkit/skills/aixbt/aixbt.jpg +0 -0
  48. intentkit/skills/aixbt/base.py +21 -0
  49. intentkit/skills/aixbt/projects.py +153 -0
  50. intentkit/skills/aixbt/schema.json +99 -0
  51. intentkit/skills/allora/__init__.py +83 -0
  52. intentkit/skills/allora/allora.jpeg +0 -0
  53. intentkit/skills/allora/base.py +28 -0
  54. intentkit/skills/allora/price.py +130 -0
  55. intentkit/skills/allora/schema.json +89 -0
  56. intentkit/skills/base.py +174 -0
  57. intentkit/skills/carv/README.md +95 -0
  58. intentkit/skills/carv/__init__.py +121 -0
  59. intentkit/skills/carv/base.py +183 -0
  60. intentkit/skills/carv/carv.webp +0 -0
  61. intentkit/skills/carv/fetch_news.py +92 -0
  62. intentkit/skills/carv/onchain_query.py +164 -0
  63. intentkit/skills/carv/schema.json +137 -0
  64. intentkit/skills/carv/token_info_and_price.py +110 -0
  65. intentkit/skills/cdp/__init__.py +137 -0
  66. intentkit/skills/cdp/base.py +21 -0
  67. intentkit/skills/cdp/cdp.png +0 -0
  68. intentkit/skills/cdp/get_balance.py +81 -0
  69. intentkit/skills/cdp/schema.json +473 -0
  70. intentkit/skills/chainlist/README.md +38 -0
  71. intentkit/skills/chainlist/__init__.py +54 -0
  72. intentkit/skills/chainlist/base.py +21 -0
  73. intentkit/skills/chainlist/chain_lookup.py +208 -0
  74. intentkit/skills/chainlist/chainlist.png +0 -0
  75. intentkit/skills/chainlist/schema.json +47 -0
  76. intentkit/skills/common/__init__.py +82 -0
  77. intentkit/skills/common/base.py +21 -0
  78. intentkit/skills/common/common.jpg +0 -0
  79. intentkit/skills/common/current_time.py +84 -0
  80. intentkit/skills/common/schema.json +57 -0
  81. intentkit/skills/cookiefun/README.md +121 -0
  82. intentkit/skills/cookiefun/__init__.py +78 -0
  83. intentkit/skills/cookiefun/base.py +41 -0
  84. intentkit/skills/cookiefun/constants.py +18 -0
  85. intentkit/skills/cookiefun/cookiefun.png +0 -0
  86. intentkit/skills/cookiefun/get_account_details.py +171 -0
  87. intentkit/skills/cookiefun/get_account_feed.py +282 -0
  88. intentkit/skills/cookiefun/get_account_smart_followers.py +181 -0
  89. intentkit/skills/cookiefun/get_sectors.py +128 -0
  90. intentkit/skills/cookiefun/schema.json +155 -0
  91. intentkit/skills/cookiefun/search_accounts.py +225 -0
  92. intentkit/skills/cryptocompare/__init__.py +130 -0
  93. intentkit/skills/cryptocompare/api.py +159 -0
  94. intentkit/skills/cryptocompare/base.py +303 -0
  95. intentkit/skills/cryptocompare/cryptocompare.png +0 -0
  96. intentkit/skills/cryptocompare/fetch_news.py +96 -0
  97. intentkit/skills/cryptocompare/fetch_price.py +99 -0
  98. intentkit/skills/cryptocompare/fetch_top_exchanges.py +113 -0
  99. intentkit/skills/cryptocompare/fetch_top_market_cap.py +109 -0
  100. intentkit/skills/cryptocompare/fetch_top_volume.py +108 -0
  101. intentkit/skills/cryptocompare/fetch_trading_signals.py +107 -0
  102. intentkit/skills/cryptocompare/schema.json +168 -0
  103. intentkit/skills/cryptopanic/__init__.py +108 -0
  104. intentkit/skills/cryptopanic/base.py +51 -0
  105. intentkit/skills/cryptopanic/cryptopanic.png +0 -0
  106. intentkit/skills/cryptopanic/fetch_crypto_news.py +153 -0
  107. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +136 -0
  108. intentkit/skills/cryptopanic/schema.json +103 -0
  109. intentkit/skills/dapplooker/README.md +92 -0
  110. intentkit/skills/dapplooker/__init__.py +83 -0
  111. intentkit/skills/dapplooker/base.py +26 -0
  112. intentkit/skills/dapplooker/dapplooker.jpg +0 -0
  113. intentkit/skills/dapplooker/dapplooker_token_data.py +476 -0
  114. intentkit/skills/dapplooker/schema.json +91 -0
  115. intentkit/skills/defillama/__init__.py +323 -0
  116. intentkit/skills/defillama/api.py +315 -0
  117. intentkit/skills/defillama/base.py +135 -0
  118. intentkit/skills/defillama/coins/__init__.py +0 -0
  119. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +116 -0
  120. intentkit/skills/defillama/coins/fetch_block.py +98 -0
  121. intentkit/skills/defillama/coins/fetch_current_prices.py +105 -0
  122. intentkit/skills/defillama/coins/fetch_first_price.py +100 -0
  123. intentkit/skills/defillama/coins/fetch_historical_prices.py +110 -0
  124. intentkit/skills/defillama/coins/fetch_price_chart.py +109 -0
  125. intentkit/skills/defillama/coins/fetch_price_percentage.py +93 -0
  126. intentkit/skills/defillama/config/__init__.py +0 -0
  127. intentkit/skills/defillama/config/chains.py +433 -0
  128. intentkit/skills/defillama/defillama.jpeg +0 -0
  129. intentkit/skills/defillama/fees/__init__.py +0 -0
  130. intentkit/skills/defillama/fees/fetch_fees_overview.py +130 -0
  131. intentkit/skills/defillama/schema.json +383 -0
  132. intentkit/skills/defillama/stablecoins/__init__.py +0 -0
  133. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +100 -0
  134. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +129 -0
  135. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +83 -0
  136. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +126 -0
  137. intentkit/skills/defillama/tests/__init__.py +0 -0
  138. intentkit/skills/defillama/tests/api_integration.test.py +192 -0
  139. intentkit/skills/defillama/tests/api_unit.test.py +583 -0
  140. intentkit/skills/defillama/tvl/__init__.py +0 -0
  141. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +106 -0
  142. intentkit/skills/defillama/tvl/fetch_chains.py +107 -0
  143. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +91 -0
  144. intentkit/skills/defillama/tvl/fetch_protocol.py +207 -0
  145. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +93 -0
  146. intentkit/skills/defillama/tvl/fetch_protocols.py +196 -0
  147. intentkit/skills/defillama/volumes/__init__.py +0 -0
  148. intentkit/skills/defillama/volumes/fetch_dex_overview.py +157 -0
  149. intentkit/skills/defillama/volumes/fetch_dex_summary.py +123 -0
  150. intentkit/skills/defillama/volumes/fetch_options_overview.py +131 -0
  151. intentkit/skills/defillama/yields/__init__.py +0 -0
  152. intentkit/skills/defillama/yields/fetch_pool_chart.py +100 -0
  153. intentkit/skills/defillama/yields/fetch_pools.py +126 -0
  154. intentkit/skills/dexscreener/__init__.py +93 -0
  155. intentkit/skills/dexscreener/base.py +133 -0
  156. intentkit/skills/dexscreener/dexscreener.png +0 -0
  157. intentkit/skills/dexscreener/model/__init__.py +0 -0
  158. intentkit/skills/dexscreener/model/search_token_response.py +82 -0
  159. intentkit/skills/dexscreener/schema.json +48 -0
  160. intentkit/skills/dexscreener/search_token.py +321 -0
  161. intentkit/skills/dune_analytics/__init__.py +103 -0
  162. intentkit/skills/dune_analytics/base.py +46 -0
  163. intentkit/skills/dune_analytics/dune.png +0 -0
  164. intentkit/skills/dune_analytics/fetch_kol_buys.py +128 -0
  165. intentkit/skills/dune_analytics/fetch_nation_metrics.py +237 -0
  166. intentkit/skills/dune_analytics/schema.json +99 -0
  167. intentkit/skills/elfa/README.md +100 -0
  168. intentkit/skills/elfa/__init__.py +123 -0
  169. intentkit/skills/elfa/base.py +28 -0
  170. intentkit/skills/elfa/elfa.jpg +0 -0
  171. intentkit/skills/elfa/mention.py +504 -0
  172. intentkit/skills/elfa/schema.json +153 -0
  173. intentkit/skills/elfa/stats.py +118 -0
  174. intentkit/skills/elfa/tokens.py +126 -0
  175. intentkit/skills/enso/README.md +75 -0
  176. intentkit/skills/enso/__init__.py +114 -0
  177. intentkit/skills/enso/abi/__init__.py +0 -0
  178. intentkit/skills/enso/abi/approval.py +279 -0
  179. intentkit/skills/enso/abi/erc20.py +14 -0
  180. intentkit/skills/enso/abi/route.py +129 -0
  181. intentkit/skills/enso/base.py +44 -0
  182. intentkit/skills/enso/best_yield.py +286 -0
  183. intentkit/skills/enso/enso.jpg +0 -0
  184. intentkit/skills/enso/networks.py +105 -0
  185. intentkit/skills/enso/prices.py +93 -0
  186. intentkit/skills/enso/route.py +300 -0
  187. intentkit/skills/enso/schema.json +212 -0
  188. intentkit/skills/enso/tokens.py +223 -0
  189. intentkit/skills/enso/wallet.py +381 -0
  190. intentkit/skills/github/README.md +63 -0
  191. intentkit/skills/github/__init__.py +54 -0
  192. intentkit/skills/github/base.py +21 -0
  193. intentkit/skills/github/github.jpg +0 -0
  194. intentkit/skills/github/github_search.py +183 -0
  195. intentkit/skills/github/schema.json +59 -0
  196. intentkit/skills/heurist/__init__.py +143 -0
  197. intentkit/skills/heurist/base.py +26 -0
  198. intentkit/skills/heurist/heurist.png +0 -0
  199. intentkit/skills/heurist/image_generation_animagine_xl.py +162 -0
  200. intentkit/skills/heurist/image_generation_arthemy_comics.py +162 -0
  201. intentkit/skills/heurist/image_generation_arthemy_real.py +162 -0
  202. intentkit/skills/heurist/image_generation_braindance.py +162 -0
  203. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +162 -0
  204. intentkit/skills/heurist/image_generation_flux_1_dev.py +162 -0
  205. intentkit/skills/heurist/image_generation_sdxl.py +161 -0
  206. intentkit/skills/heurist/schema.json +196 -0
  207. intentkit/skills/lifi/README.md +294 -0
  208. intentkit/skills/lifi/__init__.py +141 -0
  209. intentkit/skills/lifi/base.py +21 -0
  210. intentkit/skills/lifi/lifi.png +0 -0
  211. intentkit/skills/lifi/schema.json +89 -0
  212. intentkit/skills/lifi/token_execute.py +472 -0
  213. intentkit/skills/lifi/token_quote.py +190 -0
  214. intentkit/skills/lifi/utils.py +656 -0
  215. intentkit/skills/moralis/README.md +490 -0
  216. intentkit/skills/moralis/__init__.py +110 -0
  217. intentkit/skills/moralis/api.py +281 -0
  218. intentkit/skills/moralis/base.py +55 -0
  219. intentkit/skills/moralis/fetch_chain_portfolio.py +191 -0
  220. intentkit/skills/moralis/fetch_nft_portfolio.py +284 -0
  221. intentkit/skills/moralis/fetch_solana_portfolio.py +331 -0
  222. intentkit/skills/moralis/fetch_wallet_portfolio.py +301 -0
  223. intentkit/skills/moralis/moralis.png +0 -0
  224. intentkit/skills/moralis/schema.json +156 -0
  225. intentkit/skills/moralis/tests/__init__.py +0 -0
  226. intentkit/skills/moralis/tests/test_wallet.py +511 -0
  227. intentkit/skills/nation/__init__.py +62 -0
  228. intentkit/skills/nation/base.py +31 -0
  229. intentkit/skills/nation/nation.png +0 -0
  230. intentkit/skills/nation/nft_check.py +106 -0
  231. intentkit/skills/nation/schema.json +58 -0
  232. intentkit/skills/openai/__init__.py +107 -0
  233. intentkit/skills/openai/base.py +32 -0
  234. intentkit/skills/openai/dalle_image_generation.py +128 -0
  235. intentkit/skills/openai/gpt_image_generation.py +152 -0
  236. intentkit/skills/openai/gpt_image_to_image.py +186 -0
  237. intentkit/skills/openai/image_to_text.py +126 -0
  238. intentkit/skills/openai/openai.png +0 -0
  239. intentkit/skills/openai/schema.json +139 -0
  240. intentkit/skills/portfolio/README.md +55 -0
  241. intentkit/skills/portfolio/__init__.py +151 -0
  242. intentkit/skills/portfolio/base.py +107 -0
  243. intentkit/skills/portfolio/constants.py +9 -0
  244. intentkit/skills/portfolio/moralis.png +0 -0
  245. intentkit/skills/portfolio/schema.json +237 -0
  246. intentkit/skills/portfolio/token_balances.py +155 -0
  247. intentkit/skills/portfolio/wallet_approvals.py +102 -0
  248. intentkit/skills/portfolio/wallet_defi_positions.py +80 -0
  249. intentkit/skills/portfolio/wallet_history.py +155 -0
  250. intentkit/skills/portfolio/wallet_net_worth.py +112 -0
  251. intentkit/skills/portfolio/wallet_nfts.py +139 -0
  252. intentkit/skills/portfolio/wallet_profitability.py +101 -0
  253. intentkit/skills/portfolio/wallet_profitability_summary.py +91 -0
  254. intentkit/skills/portfolio/wallet_stats.py +79 -0
  255. intentkit/skills/portfolio/wallet_swaps.py +147 -0
  256. intentkit/skills/skills.toml +103 -0
  257. intentkit/skills/slack/__init__.py +98 -0
  258. intentkit/skills/slack/base.py +55 -0
  259. intentkit/skills/slack/get_channel.py +109 -0
  260. intentkit/skills/slack/get_message.py +136 -0
  261. intentkit/skills/slack/schedule_message.py +92 -0
  262. intentkit/skills/slack/schema.json +135 -0
  263. intentkit/skills/slack/send_message.py +81 -0
  264. intentkit/skills/slack/slack.jpg +0 -0
  265. intentkit/skills/system/__init__.py +90 -0
  266. intentkit/skills/system/base.py +22 -0
  267. intentkit/skills/system/read_agent_api_key.py +87 -0
  268. intentkit/skills/system/regenerate_agent_api_key.py +77 -0
  269. intentkit/skills/system/schema.json +53 -0
  270. intentkit/skills/system/system.svg +76 -0
  271. intentkit/skills/tavily/README.md +86 -0
  272. intentkit/skills/tavily/__init__.py +91 -0
  273. intentkit/skills/tavily/base.py +27 -0
  274. intentkit/skills/tavily/schema.json +119 -0
  275. intentkit/skills/tavily/tavily.jpg +0 -0
  276. intentkit/skills/tavily/tavily_extract.py +147 -0
  277. intentkit/skills/tavily/tavily_search.py +139 -0
  278. intentkit/skills/token/README.md +89 -0
  279. intentkit/skills/token/__init__.py +107 -0
  280. intentkit/skills/token/base.py +154 -0
  281. intentkit/skills/token/constants.py +9 -0
  282. intentkit/skills/token/erc20_transfers.py +145 -0
  283. intentkit/skills/token/moralis.png +0 -0
  284. intentkit/skills/token/schema.json +141 -0
  285. intentkit/skills/token/token_analytics.py +81 -0
  286. intentkit/skills/token/token_price.py +132 -0
  287. intentkit/skills/token/token_search.py +121 -0
  288. intentkit/skills/twitter/__init__.py +146 -0
  289. intentkit/skills/twitter/base.py +68 -0
  290. intentkit/skills/twitter/follow_user.py +69 -0
  291. intentkit/skills/twitter/get_mentions.py +124 -0
  292. intentkit/skills/twitter/get_timeline.py +111 -0
  293. intentkit/skills/twitter/get_user_by_username.py +84 -0
  294. intentkit/skills/twitter/get_user_tweets.py +123 -0
  295. intentkit/skills/twitter/like_tweet.py +65 -0
  296. intentkit/skills/twitter/post_tweet.py +90 -0
  297. intentkit/skills/twitter/reply_tweet.py +98 -0
  298. intentkit/skills/twitter/retweet.py +76 -0
  299. intentkit/skills/twitter/schema.json +258 -0
  300. intentkit/skills/twitter/search_tweets.py +115 -0
  301. intentkit/skills/twitter/twitter.png +0 -0
  302. intentkit/skills/unrealspeech/__init__.py +55 -0
  303. intentkit/skills/unrealspeech/base.py +21 -0
  304. intentkit/skills/unrealspeech/schema.json +100 -0
  305. intentkit/skills/unrealspeech/text_to_speech.py +177 -0
  306. intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
  307. intentkit/skills/venice_audio/__init__.py +106 -0
  308. intentkit/skills/venice_audio/base.py +119 -0
  309. intentkit/skills/venice_audio/input.py +41 -0
  310. intentkit/skills/venice_audio/schema.json +152 -0
  311. intentkit/skills/venice_audio/venice_audio.py +240 -0
  312. intentkit/skills/venice_audio/venice_logo.jpg +0 -0
  313. intentkit/skills/venice_image/README.md +119 -0
  314. intentkit/skills/venice_image/__init__.py +154 -0
  315. intentkit/skills/venice_image/api.py +138 -0
  316. intentkit/skills/venice_image/base.py +188 -0
  317. intentkit/skills/venice_image/config.py +35 -0
  318. intentkit/skills/venice_image/image_enhance/README.md +119 -0
  319. intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
  320. intentkit/skills/venice_image/image_enhance/image_enhance.py +80 -0
  321. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +23 -0
  322. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +40 -0
  323. intentkit/skills/venice_image/image_generation/README.md +144 -0
  324. intentkit/skills/venice_image/image_generation/__init__.py +0 -0
  325. intentkit/skills/venice_image/image_generation/image_generation_base.py +117 -0
  326. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -0
  327. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -0
  328. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -0
  329. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -0
  330. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -0
  331. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -0
  332. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -0
  333. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -0
  334. intentkit/skills/venice_image/image_upscale/README.md +111 -0
  335. intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
  336. intentkit/skills/venice_image/image_upscale/image_upscale.py +90 -0
  337. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +23 -0
  338. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -0
  339. intentkit/skills/venice_image/image_vision/README.md +112 -0
  340. intentkit/skills/venice_image/image_vision/__init__.py +0 -0
  341. intentkit/skills/venice_image/image_vision/image_vision.py +100 -0
  342. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -0
  343. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -0
  344. intentkit/skills/venice_image/schema.json +267 -0
  345. intentkit/skills/venice_image/utils.py +78 -0
  346. intentkit/skills/venice_image/venice_image.jpg +0 -0
  347. intentkit/skills/web_scraper/README.md +82 -0
  348. intentkit/skills/web_scraper/__init__.py +92 -0
  349. intentkit/skills/web_scraper/base.py +21 -0
  350. intentkit/skills/web_scraper/langchain.png +0 -0
  351. intentkit/skills/web_scraper/schema.json +115 -0
  352. intentkit/skills/web_scraper/scrape_and_index.py +327 -0
  353. intentkit/utils/__init__.py +1 -0
  354. intentkit/utils/chain.py +436 -0
  355. intentkit/utils/error.py +134 -0
  356. intentkit/utils/logging.py +70 -0
  357. intentkit/utils/middleware.py +61 -0
  358. intentkit/utils/random.py +16 -0
  359. intentkit/utils/s3.py +267 -0
  360. intentkit/utils/slack_alert.py +79 -0
  361. intentkit/utils/tx.py +37 -0
  362. {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/METADATA +1 -1
  363. intentkit-0.5.2.dist-info/RECORD +365 -0
  364. intentkit-0.5.0.dist-info/RECORD +0 -4
  365. {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/WHEEL +0 -0
  366. {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,109 @@
1
+ """Tool for fetching token price charts via DeFi Llama API."""
2
+
3
+ from typing import Dict, List, Optional, Type
4
+
5
+ from langchain.schema.runnable import RunnableConfig
6
+ from pydantic import BaseModel, Field
7
+
8
+ from intentkit.skills.defillama.api import fetch_price_chart
9
+ from intentkit.skills.defillama.base import DefiLlamaBaseTool
10
+
11
+ FETCH_PRICE_CHART_PROMPT = """
12
+ This tool fetches price chart data from DeFi Llama for multiple tokens.
13
+ Provide a list of token identifiers in the format:
14
+ - Ethereum tokens: 'ethereum:0x...'
15
+ - Other chains: 'chainname:0x...'
16
+ - CoinGecko IDs: 'coingecko:bitcoin'
17
+ Returns price chart data including:
18
+ - Historical price points for the last 24 hours
19
+ - Token symbol and metadata
20
+ - Confidence scores for price data
21
+ - Token decimals (if available)
22
+ """
23
+
24
+
25
+ class PricePoint(BaseModel):
26
+ """Model representing a single price point in the chart."""
27
+
28
+ timestamp: int = Field(..., description="Unix timestamp of the price data")
29
+ price: float = Field(..., description="Token price in USD at the timestamp")
30
+
31
+
32
+ class TokenPriceChart(BaseModel):
33
+ """Model representing price chart data for a single token."""
34
+
35
+ symbol: str = Field(..., description="Token symbol")
36
+ confidence: float = Field(..., description="Confidence score for the price data")
37
+ decimals: Optional[int] = Field(None, description="Token decimals")
38
+ prices: List[PricePoint] = Field(..., description="List of historical price points")
39
+
40
+
41
+ class FetchPriceChartInput(BaseModel):
42
+ """Input schema for fetching token price charts."""
43
+
44
+ coins: List[str] = Field(
45
+ ..., description="List of token identifiers to fetch price charts for"
46
+ )
47
+
48
+
49
+ class FetchPriceChartResponse(BaseModel):
50
+ """Response schema for token price charts."""
51
+
52
+ coins: Dict[str, TokenPriceChart] = Field(
53
+ default_factory=dict, description="Price chart data keyed by token identifier"
54
+ )
55
+ error: Optional[str] = Field(None, description="Error message if any")
56
+
57
+
58
+ class DefiLlamaFetchPriceChart(DefiLlamaBaseTool):
59
+ """Tool for fetching token price charts from DeFi Llama.
60
+
61
+ This tool retrieves price chart data for multiple tokens over the last 24 hours,
62
+ including historical price points and token metadata.
63
+
64
+ Example:
65
+ chart_tool = DefiLlamaFetchPriceChart(
66
+ skill_store=store,
67
+ agent_id="agent_123",
68
+ agent_store=agent_store
69
+ )
70
+ result = await chart_tool._arun(
71
+ coins=["ethereum:0x...", "coingecko:ethereum"]
72
+ )
73
+ """
74
+
75
+ name: str = "defillama_fetch_price_chart"
76
+ description: str = FETCH_PRICE_CHART_PROMPT
77
+ args_schema: Type[BaseModel] = FetchPriceChartInput
78
+
79
+ async def _arun(
80
+ self, config: RunnableConfig, coins: List[str]
81
+ ) -> FetchPriceChartResponse:
82
+ """Fetch price charts for the given tokens.
83
+
84
+ Args:
85
+ config: Runnable configuration
86
+ coins: List of token identifiers to fetch price charts for
87
+
88
+ Returns:
89
+ FetchPriceChartResponse containing price chart data or error
90
+ """
91
+ try:
92
+ # Check rate limiting
93
+ context = self.context_from_config(config)
94
+ is_rate_limited, error_msg = await self.check_rate_limit(context)
95
+ if is_rate_limited:
96
+ return FetchPriceChartResponse(error=error_msg)
97
+
98
+ # Fetch price chart data from API
99
+ result = await fetch_price_chart(coins=coins)
100
+
101
+ # Check for API errors
102
+ if isinstance(result, dict) and "error" in result:
103
+ return FetchPriceChartResponse(error=result["error"])
104
+
105
+ # Return the response matching the API structure
106
+ return FetchPriceChartResponse(coins=result["coins"])
107
+
108
+ except Exception as e:
109
+ return FetchPriceChartResponse(error=str(e))
@@ -0,0 +1,93 @@
1
+ """Tool for fetching token price percentage changes via DeFi Llama API."""
2
+
3
+ from typing import Dict, List, Optional, Type
4
+
5
+ from langchain.schema.runnable import RunnableConfig
6
+ from pydantic import BaseModel, Field
7
+
8
+ from intentkit.skills.defillama.api import fetch_price_percentage
9
+ from intentkit.skills.defillama.base import DefiLlamaBaseTool
10
+
11
+ FETCH_PRICE_PERCENTAGE_PROMPT = """
12
+ This tool fetches 24-hour price percentage changes from DeFi Llama for multiple tokens.
13
+ Provide a list of token identifiers in the format:
14
+ - Ethereum tokens: 'ethereum:0x...'
15
+ - Other chains: 'chainname:0x...'
16
+ - CoinGecko IDs: 'coingecko:bitcoin'
17
+ Returns price percentage changes:
18
+ - Negative values indicate price decrease
19
+ - Positive values indicate price increase
20
+ - Changes are calculated from current time
21
+ """
22
+
23
+
24
+ class FetchPricePercentageInput(BaseModel):
25
+ """Input schema for fetching token price percentage changes."""
26
+
27
+ coins: List[str] = Field(
28
+ ..., description="List of token identifiers to fetch price changes for"
29
+ )
30
+
31
+
32
+ class FetchPricePercentageResponse(BaseModel):
33
+ """Response schema for token price percentage changes."""
34
+
35
+ coins: Dict[str, float] = Field(
36
+ default_factory=dict,
37
+ description="Price percentage changes keyed by token identifier",
38
+ )
39
+ error: Optional[str] = Field(None, description="Error message if any")
40
+
41
+
42
+ class DefiLlamaFetchPricePercentage(DefiLlamaBaseTool):
43
+ """Tool for fetching token price percentage changes from DeFi Llama.
44
+
45
+ This tool retrieves 24-hour price percentage changes for multiple tokens,
46
+ calculated from the current time.
47
+
48
+ Example:
49
+ percentage_tool = DefiLlamaFetchPricePercentage(
50
+ skill_store=store,
51
+ agent_id="agent_123",
52
+ agent_store=agent_store
53
+ )
54
+ result = await percentage_tool._arun(
55
+ coins=["ethereum:0x...", "coingecko:ethereum"]
56
+ )
57
+ """
58
+
59
+ name: str = "defillama_fetch_price_percentage"
60
+ description: str = FETCH_PRICE_PERCENTAGE_PROMPT
61
+ args_schema: Type[BaseModel] = FetchPricePercentageInput
62
+
63
+ async def _arun(
64
+ self, config: RunnableConfig, coins: List[str]
65
+ ) -> FetchPricePercentageResponse:
66
+ """Fetch price percentage changes for the given tokens.
67
+
68
+ Args:
69
+ config: Runnable configuration
70
+ coins: List of token identifiers to fetch price changes for
71
+
72
+ Returns:
73
+ FetchPricePercentageResponse containing price percentage changes or error
74
+ """
75
+ try:
76
+ # Check rate limiting
77
+ context = self.context_from_config(config)
78
+ is_rate_limited, error_msg = await self.check_rate_limit(context)
79
+ if is_rate_limited:
80
+ return FetchPricePercentageResponse(error=error_msg)
81
+
82
+ # Fetch price percentage data from API
83
+ result = await fetch_price_percentage(coins=coins)
84
+
85
+ # Check for API errors
86
+ if isinstance(result, dict) and "error" in result:
87
+ return FetchPricePercentageResponse(error=result["error"])
88
+
89
+ # Return the response matching the API structure
90
+ return FetchPricePercentageResponse(coins=result["coins"])
91
+
92
+ except Exception as e:
93
+ return FetchPricePercentageResponse(error=str(e))
File without changes
@@ -0,0 +1,433 @@
1
+ """Chain configuration for DeFi Llama integration.
2
+
3
+ This module contains the valid chains and their aliases for use with the DeFi Llama API.
4
+ The VALID_CHAINS dictionary maps primary chain identifiers to their known aliases.
5
+ """
6
+
7
+ from typing import Dict, List
8
+
9
+ # Chain configuration with aliases
10
+ VALID_CHAINS: Dict[str, List[str]] = {
11
+ "ethereum": ["eth", "eth1", "eth2"],
12
+ "solana": ["sol"],
13
+ "bitcoin": ["btc"],
14
+ "bsc": ["bnb", "bsc"],
15
+ "tron": ["trx"],
16
+ "base": ["base"],
17
+ "berachain": ["bera"],
18
+ "arbitrum": ["arb"],
19
+ "sui": ["sui"],
20
+ "avalanche": ["avax", "ava"],
21
+ "aptos": ["apt"],
22
+ "polygon": ["matic", "polygon"],
23
+ "hyperliquid": ["hyper"],
24
+ "op_mainnet": ["op"],
25
+ "sonic": ["sonic"],
26
+ "core": ["core"],
27
+ "zircuit": ["zircuit"],
28
+ "cronos": ["cro"],
29
+ "bitlayer": ["bit"],
30
+ "cardano": ["ada"],
31
+ "bsquared": ["b2"],
32
+ "mantle": ["mntl"],
33
+ "pulsechain": ["pulse"],
34
+ "gnosis": ["gnosis"],
35
+ "dydx": ["dydx"],
36
+ "taiko": ["tk"],
37
+ "bob": ["bob"],
38
+ "zksync_era": ["zk", "zkSync"],
39
+ "linea": ["linea"],
40
+ "blast": ["blast"],
41
+ "rootstock": ["rs"],
42
+ "thorchain": ["thor"],
43
+ "ailayer": ["ai"],
44
+ "sei": ["sei"],
45
+ "eos": ["eos"],
46
+ "ton": ["ton"],
47
+ "near": ["near"],
48
+ "merlin": ["merlin"],
49
+ "kava": ["kava"],
50
+ "algorand": ["algo"],
51
+ "starknet": ["stark"],
52
+ "hedera": ["hbar"],
53
+ "mixin": ["mixin"],
54
+ "scroll": ["scroll"],
55
+ "kaia": ["kaia"],
56
+ "stacks": ["stx"],
57
+ "ronin": ["ronin"],
58
+ "osmosis": ["osmo"],
59
+ "verus": ["verus"],
60
+ "multiversx": ["x"],
61
+ "celo": ["celo"],
62
+ "xrpl": ["xrpl"],
63
+ "fraxtal": ["frax"],
64
+ "stellar": ["xlm"],
65
+ "bouncebit": ["bounce"],
66
+ "wemix3_0": ["wemix"],
67
+ "filecoin": ["fil"],
68
+ "hydration": ["hydra"],
69
+ "fantom": ["ftm"],
70
+ "iota_evm": ["iot"],
71
+ "manta": ["manta"],
72
+ "eclipse": ["eclp"],
73
+ "flow": ["flow"],
74
+ "injective": ["inj"],
75
+ "tezos": ["xtz"],
76
+ "soneium": ["son"],
77
+ "neutron": ["neut"],
78
+ "icp": ["icp"],
79
+ "iotex": ["iotex"],
80
+ "metis": ["metis"],
81
+ "opbnb": ["opbnb"],
82
+ "bifrost_network": ["bifrost"],
83
+ "flare": ["flare"],
84
+ "xdc": ["xdc"],
85
+ "morph": ["morph"],
86
+ "waves": ["waves"],
87
+ "conflux": ["conflux"],
88
+ "corn": ["corn"],
89
+ "reya_network": ["reya"],
90
+ "mode": ["mode"],
91
+ "cronos_zkevm": ["cronoszk"],
92
+ "telos": ["telos"],
93
+ "rollux": ["rollux"],
94
+ "zetachain": ["zeta"],
95
+ "chainflip": ["flip"],
96
+ "fuel_ignition": ["fuel"],
97
+ "aurora": ["aurora"],
98
+ "map_protocol": ["map"],
99
+ "kujira": ["kujira"],
100
+ "astar": ["astar"],
101
+ "moonbeam": ["moonbeam"],
102
+ "story": ["story"],
103
+ "abstract": ["abstract"],
104
+ "radix": ["radix"],
105
+ "zklink_nova": ["zklink"],
106
+ "duckchain": ["duck"],
107
+ "swellchain": ["swell"],
108
+ "apechain": ["ape"],
109
+ "icon": ["icx"],
110
+ "immutable_zkevm": ["immutable"],
111
+ "eos_evm": ["eosevm"],
112
+ "bifrost": ["bifrost"],
113
+ "k2": ["k2"],
114
+ "aelf": ["aelf"],
115
+ "fsc": ["fsc"],
116
+ "proton": ["proton"],
117
+ "secret": ["secret"],
118
+ "unichain": ["unichain"],
119
+ "neo": ["neo"],
120
+ "mayachain": ["maya"],
121
+ "canto": ["canto"],
122
+ "chiliz": ["chz"],
123
+ "x_layer": ["xlayer"],
124
+ "polynomial": ["poly"],
125
+ "ontology": ["ont"],
126
+ "onus": ["onus"],
127
+ "bitcoincash": ["bch"],
128
+ "terra2": ["terra2"],
129
+ "polygon_zkevm": ["polyzk"],
130
+ "ink": ["ink"],
131
+ "sophon": ["sophon"],
132
+ "venom": ["venom"],
133
+ "dexalot": ["dexalot"],
134
+ "bahamut": ["bahamut"],
135
+ "vite": ["vite"],
136
+ "dfs_network": ["dfs"],
137
+ "ergo": ["ergo"],
138
+ "wanchain": ["wan"],
139
+ "mantra": ["mantra"],
140
+ "doge": ["doge"],
141
+ "lisk": ["lisk"],
142
+ "alephium": ["alephium"],
143
+ "vision": ["vision"],
144
+ "dogechain": ["dogechain"],
145
+ "nuls": ["nuls"],
146
+ "agoric": ["agoric"],
147
+ "defichain": ["defi"],
148
+ "dymension": ["dym"],
149
+ "thundercore": ["tc"],
150
+ "godwokenv1": ["godwoken"],
151
+ "bevm": ["bevm"],
152
+ "litecoin": ["ltc"],
153
+ "ux": ["ux"],
154
+ "functionx": ["fx"],
155
+ "oraichain": ["oraichain"],
156
+ "dfk": ["dfk"],
157
+ "carbon": ["carbon"],
158
+ "beam": ["beam"],
159
+ "gravity": ["gravity"],
160
+ "horizen_eon": ["horizen"],
161
+ "moonriver": ["movr"],
162
+ "real": ["real"],
163
+ "oasys": ["oasys"],
164
+ "hydra": ["hydra"],
165
+ "oktchain": ["okt"],
166
+ "shibarium": ["shib"],
167
+ "world_chain": ["world"],
168
+ "interlay": ["interlay"],
169
+ "acala": ["acala"],
170
+ "elys": ["elys"],
171
+ "boba": ["boba"],
172
+ "vana": ["vana"],
173
+ "harmony": ["harmony"],
174
+ "lachain_network": ["lachain"],
175
+ "theta": ["theta"],
176
+ "ab": ["ab"],
177
+ "defiverse": ["defiverse"],
178
+ "kcc": ["kcc"],
179
+ "oasis_sapphire": ["oasis"],
180
+ "etherlink": ["etherlink"],
181
+ "wax": ["wax"],
182
+ "archway": ["archway"],
183
+ "redbelly": ["redbelly"],
184
+ "velas": ["velas"],
185
+ "equilibrium": ["equilibrium"],
186
+ "unit0": ["unit0"],
187
+ "ql1": ["ql1"],
188
+ "songbird": ["songbird"],
189
+ "zilliqa": ["zil"],
190
+ "rangers": ["rangers"],
191
+ "odyssey": ["odyssey"],
192
+ "terra_classic": ["terra"],
193
+ "kadena": ["kadena"],
194
+ "zero_network": ["zero"],
195
+ "elastos": ["elastos"],
196
+ "fluence": ["fluence"],
197
+ "idex": ["idex"],
198
+ "xpla": ["xpla"],
199
+ "milkomeda_c1": ["milkomeda"],
200
+ "taraxa": ["taraxa"],
201
+ "bitrock": ["bitrock"],
202
+ "persistence_one": ["persistence"],
203
+ "meter": ["meter"],
204
+ "arbitrum_nova": ["arbitrumnova"],
205
+ "everscale": ["everscale"],
206
+ "ultron": ["ultron"],
207
+ "fuse": ["fuse"],
208
+ "vechain": ["vet"],
209
+ "renec": ["renec"],
210
+ "shimmerevm": ["shimmer"],
211
+ "obyte": ["obyte"],
212
+ "nolus": ["nolus"],
213
+ "airdao": ["airdao"],
214
+ "elysium": ["elysium"],
215
+ "xai": ["xai"],
216
+ "starcoin": ["starcoin"],
217
+ "oasis_emerald": ["oasisem"],
218
+ "haqq": ["haqq"],
219
+ "nos": ["nos"],
220
+ "neon": ["neon"],
221
+ "bittorrent": ["btt"],
222
+ "csc": ["csc"],
223
+ "satoshivm": ["satv"],
224
+ "naka": ["naka"],
225
+ "edu_chain": ["edu"],
226
+ "kintsugi": ["kintsugi"],
227
+ "energi": ["energi"],
228
+ "rss3": ["rss3"],
229
+ "sx_rollup": ["sx"],
230
+ "cosmoshub": ["cosmos"],
231
+ "saakuru": ["saakuru"],
232
+ "boba_bnb": ["boba_bnb"],
233
+ "ethereumclassic": ["etc"],
234
+ "skale_europa": ["skale"],
235
+ "degen": ["degen"],
236
+ "mint": ["mint"],
237
+ "juno": ["juno"],
238
+ "viction": ["viction"],
239
+ "evmos": ["evmos"],
240
+ "enuls": ["enuls"],
241
+ "lightlink": ["lightlink"],
242
+ "sanko": ["sanko"],
243
+ "karura": ["karura"],
244
+ "kardia": ["kardia"],
245
+ "superposition": ["super"],
246
+ "crab": ["crab"],
247
+ "genesys": ["genesys"],
248
+ "matchain": ["matchain"],
249
+ "chihuahua": ["chihuahua"],
250
+ "massa": ["massa"],
251
+ "kroma": ["kroma"],
252
+ "tombchain": ["tomb"],
253
+ "smartbch": ["bchsmart"],
254
+ "ancient8": ["ancient8"],
255
+ "penumbra": ["penumbra"],
256
+ "ethpow": ["ethpow"],
257
+ "omax": ["omax"],
258
+ "migaloo": ["migaloo"],
259
+ "bostrom": ["bostrom"],
260
+ "energyweb": ["energyweb"],
261
+ "libre": ["libre"],
262
+ "defichain_evm": ["defievm"],
263
+ "artela": ["artela"],
264
+ "dash": ["dash"],
265
+ "sora": ["sora"],
266
+ "step": ["step"],
267
+ "nibiru": ["nibiru"],
268
+ "zkfair": ["zkfair"],
269
+ "hela": ["hela"],
270
+ "godwoken": ["godwoken"],
271
+ "shape": ["shape"],
272
+ "stargaze": ["stargaze"],
273
+ "crossfi": ["crossfi"],
274
+ "bitkub_chain": ["bitkub"],
275
+ "q_protocol": ["qprotocol"],
276
+ "loop": ["loop"],
277
+ "parex": ["parex"],
278
+ "alv": ["alv"],
279
+ "nahmii": ["nahmii"],
280
+ "shido": ["shido"],
281
+ "electroneum": ["etn"],
282
+ "zora": ["zora"],
283
+ "astar_zkevm": ["astark"],
284
+ "comdex": ["comdex"],
285
+ "stratis": ["stratis"],
286
+ "polkadex": ["polkadex"],
287
+ "meer": ["meer"],
288
+ "neo_x_mainnet": ["neo_x"],
289
+ "aura_network": ["aura"],
290
+ "findora": ["findora"],
291
+ "shiden": ["shiden"],
292
+ "swan": ["swan"],
293
+ "crescent": ["crescent"],
294
+ "rari": ["rari"],
295
+ "cyber": ["cyber"],
296
+ "redstone": ["redstone"],
297
+ "silicon_zkevm": ["silicon"],
298
+ "endurance": ["endurance"],
299
+ "inevm": ["inevm"],
300
+ "grove": ["grove"],
301
+ "areon_network": ["areon"],
302
+ "jbc": ["jbc"],
303
+ "planq": ["planq"],
304
+ "lachain": ["lachain"],
305
+ "rei": ["rei"],
306
+ "multivac": ["multivac"],
307
+ "cube": ["cube"],
308
+ "syscoin": ["syscoin"],
309
+ "vinuchain": ["vinuchain"],
310
+ "callisto": ["callisto"],
311
+ "hpb": ["hpb"],
312
+ "ham": ["ham"],
313
+ "ethf": ["ethf"],
314
+ "gochain": ["gochain"],
315
+ "darwinia": ["darwinia"],
316
+ "sx_network": ["sx"],
317
+ "manta_atlantic": ["atlantic"],
318
+ "ontologyevm": ["ontEvm"],
319
+ "mvc": ["mvc"],
320
+ "sifchain": ["sifchain"],
321
+ "plume": ["plume"],
322
+ "bitgert": ["bitgert"],
323
+ "reichain": ["reichain"],
324
+ "bitnet": ["bitnet"],
325
+ "tenet": ["tenet"],
326
+ "milkomeda_a1": ["milkomedaA1"],
327
+ "aeternity": ["aeternity"],
328
+ "palm": ["palm"],
329
+ "concordium": ["concordium"],
330
+ "kopi": ["kopi"],
331
+ "asset_chain": ["asset"],
332
+ "pego": ["pego"],
333
+ "waterfall": ["waterfall"],
334
+ "heco": ["heco"],
335
+ "exsat": ["exsat"],
336
+ "goerli": ["goerli"],
337
+ "celestia": ["celestia"],
338
+ "bandchain": ["band"],
339
+ "sommelier": ["sommelier"],
340
+ "stride": ["stride"],
341
+ "polkadot": ["dot"],
342
+ "kusama": ["kusama"],
343
+ "dexit": ["dexit"],
344
+ "fusion": ["fusion"],
345
+ "boba_avax": ["boba"],
346
+ "stafi": ["stafi"],
347
+ "empire": ["empire"],
348
+ "oxfun": ["oxfun"],
349
+ "pryzm": ["pryzm"],
350
+ "hoo": ["hoo"],
351
+ "echelon": ["echelon"],
352
+ "quicksilver": ["quick"],
353
+ "clv": ["clv"],
354
+ "pokt": ["pokt"],
355
+ "dsc": ["dsc"],
356
+ "zksync_lite": ["zkLite"],
357
+ "nova_network": ["nova"],
358
+ "cmp": ["cmp"],
359
+ "genshiro": ["genshiro"],
360
+ "lamden": ["lamden"],
361
+ "polis": ["polis"],
362
+ "zyx": ["zyx"],
363
+ "ubiq": ["ubiq"],
364
+ "heiko": ["heiko"],
365
+ "parallel": ["parallel"],
366
+ "coti": ["coti"],
367
+ "kekchain": ["kek"],
368
+ "muuchain": ["muuchain"],
369
+ "tlchain": ["tlchain"],
370
+ "zeniql": ["zeniql"],
371
+ "bitindi": ["bitindi"],
372
+ "lung": ["lung"],
373
+ "bone": ["bone"],
374
+ "lukso": ["lukso"],
375
+ "joltify": ["joltify"],
376
+ }
377
+
378
+
379
+ def get_chain_from_alias(alias: str) -> str | None:
380
+ """Get the main chain identifier from an alias.
381
+
382
+ Args:
383
+ alias: The chain alias to look up
384
+
385
+ Returns:
386
+ The main chain identifier if found, None otherwise
387
+ """
388
+ normalized_alias = alias.lower().strip()
389
+
390
+ # Check if it's a main chain name
391
+ if normalized_alias in VALID_CHAINS:
392
+ return normalized_alias
393
+
394
+ # Check aliases
395
+ for chain, aliases in VALID_CHAINS.items():
396
+ if normalized_alias in [a.lower() for a in aliases]:
397
+ return chain
398
+
399
+ return None
400
+
401
+
402
+ def is_valid_chain(chain: str) -> bool:
403
+ """Check if a chain identifier is valid.
404
+
405
+ Args:
406
+ chain: The chain identifier to validate
407
+
408
+ Returns:
409
+ True if the chain is valid, False otherwise
410
+ """
411
+ return get_chain_from_alias(chain) is not None
412
+
413
+
414
+ def get_all_chains() -> list[str]:
415
+ """Get a list of all valid main chain identifiers.
416
+
417
+ Returns:
418
+ List of all main chain identifiers
419
+ """
420
+ return list(VALID_CHAINS.keys())
421
+
422
+
423
+ def get_chain_aliases(chain: str) -> list[str]:
424
+ """Get all aliases for a given chain.
425
+
426
+ Args:
427
+ chain: The main chain identifier
428
+
429
+ Returns:
430
+ List of aliases for the chain, empty list if chain not found
431
+ """
432
+ normalized_chain = chain.lower().strip()
433
+ return VALID_CHAINS.get(normalized_chain, [])
File without changes