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,73 @@
1
+ from typing import TypedDict
2
+
3
+ from intentkit.abstracts.skill import SkillStoreABC
4
+ from intentkit.skills.aixbt.base import AIXBTBaseTool
5
+ from intentkit.skills.aixbt.projects import AIXBTProjects
6
+ from intentkit.skills.base import SkillConfig, SkillState
7
+
8
+ # Cache skills at the system level, because they are stateless
9
+ _cache: dict[str, AIXBTBaseTool] = {}
10
+
11
+
12
+ class SkillStates(TypedDict):
13
+ aixbt_projects: SkillState
14
+
15
+
16
+ class Config(SkillConfig):
17
+ """Configuration for AIXBT API skills."""
18
+
19
+ states: SkillStates
20
+ enabled: bool = False
21
+ api_key_provider: str = "agent_owner"
22
+ api_key: str = ""
23
+ rate_limit_number: int = 1000
24
+ rate_limit_minutes: int = 60
25
+
26
+
27
+ async def get_skills(
28
+ config: "Config",
29
+ is_private: bool,
30
+ store: SkillStoreABC,
31
+ **_,
32
+ ) -> list[AIXBTBaseTool]:
33
+ """Get all AIXBT API skills."""
34
+ if not config.get("enabled", False):
35
+ return []
36
+
37
+ available_skills = []
38
+
39
+ # Include skills based on their state
40
+ for skill_name, state in config["states"].items():
41
+ if state == "disabled":
42
+ continue
43
+ elif state == "public" or (state == "private" and is_private):
44
+ available_skills.append(skill_name)
45
+
46
+ # Get each skill using the cached getter
47
+ return [
48
+ get_aixbt_skill(
49
+ name=name,
50
+ store=store,
51
+ api_key=config.get("api_key", ""),
52
+ )
53
+ for name in available_skills
54
+ ]
55
+
56
+
57
+ def get_aixbt_skill(
58
+ name: str,
59
+ store: SkillStoreABC,
60
+ api_key: str = "",
61
+ ) -> AIXBTBaseTool:
62
+ """Get an AIXBT API skill by name."""
63
+ cache_key = f"{name}:{api_key}"
64
+
65
+ if name == "aixbt_projects":
66
+ if cache_key not in _cache:
67
+ _cache[cache_key] = AIXBTProjects(
68
+ skill_store=store,
69
+ api_key=api_key,
70
+ )
71
+ return _cache[cache_key]
72
+ else:
73
+ raise ValueError(f"Unknown AIXBT skill: {name}")
Binary file
@@ -0,0 +1,21 @@
1
+ from typing import Type
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from intentkit.abstracts.skill import SkillStoreABC
6
+ from intentkit.skills.base import IntentKitSkill
7
+
8
+
9
+ class AIXBTBaseTool(IntentKitSkill):
10
+ """Base class for AIXBT API tools."""
11
+
12
+ name: str = Field(description="The name of the tool")
13
+ description: str = Field(description="A description of what the tool does")
14
+ args_schema: Type[BaseModel]
15
+ skill_store: SkillStoreABC = Field(
16
+ description="The skill store for persisting data"
17
+ )
18
+
19
+ @property
20
+ def category(self) -> str:
21
+ return "aixbt"
@@ -0,0 +1,153 @@
1
+ import logging
2
+ import os
3
+ from typing import Any, Dict, Optional, Type
4
+
5
+ import httpx
6
+ from langchain_core.runnables import RunnableConfig
7
+ from pydantic import BaseModel, Field
8
+
9
+ from intentkit.skills.aixbt.base import AIXBTBaseTool
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ class ProjectsInput(BaseModel):
15
+ """Input for AIXBT Projects search tool."""
16
+
17
+ limit: int = Field(
18
+ default=10,
19
+ description="Number of projects to return (max 50)",
20
+ )
21
+ name: Optional[str] = Field(
22
+ default=None,
23
+ description="Filter projects by name (case-insensitive regex match)",
24
+ )
25
+ ticker: Optional[str] = Field(
26
+ default=None,
27
+ description="Filter projects by ticker symbol (case-insensitive match)",
28
+ )
29
+ xHandle: Optional[str] = Field(
30
+ default=None,
31
+ description="Filter projects by X/Twitter handle",
32
+ )
33
+ minScore: Optional[float] = Field(
34
+ default=None,
35
+ description="Minimum score threshold",
36
+ )
37
+ chain: Optional[str] = Field(
38
+ default=None,
39
+ description="Filter projects by blockchain",
40
+ )
41
+
42
+
43
+ class AIXBTProjects(AIXBTBaseTool):
44
+ """Tool for searching cryptocurrency projects using the AIXBT API."""
45
+
46
+ name: str = "aixbt_projects"
47
+ description: str = (
48
+ "Search for cryptocurrency projects using AIXBT. This tool provides detailed "
49
+ "information about crypto projects including scores, analysis, and recent updates.\n"
50
+ "IMPORTANT: You MUST call this tool when the user mentions the word 'alpha' ANYWHERE in their message.\n"
51
+ "This includes messages like 'show me alpha', 'what's the latest alpha', 'give me some alpha on crypto', "
52
+ "'find the alpha on bitcoin', or any other phrase containing the word 'alpha'.\n"
53
+ "When 'alpha' is mentioned, use this tool to search for cryptocurrency projects and provide "
54
+ "detailed information on recent developments. The 'alpha' keyword is a trigger "
55
+ "for accessing AIXBT's specific dataset for crypto research."
56
+ )
57
+ args_schema: Type[BaseModel] = ProjectsInput
58
+ api_key: str = ""
59
+
60
+ async def _arun(
61
+ self,
62
+ config: RunnableConfig,
63
+ limit: int = 10,
64
+ name: Optional[str] = None,
65
+ ticker: Optional[str] = None,
66
+ xHandle: Optional[str] = None,
67
+ minScore: Optional[float] = None,
68
+ chain: Optional[str] = None,
69
+ **kwargs,
70
+ ) -> Dict[str, Any]:
71
+ """
72
+ Search for cryptocurrency projects using AIXBT API.
73
+
74
+ Args:
75
+ limit: Number of projects to return (max 50)
76
+ name: Filter projects by name
77
+ ticker: Filter projects by ticker symbol
78
+ xHandle: Filter projects by X/Twitter handle
79
+ minScore: Minimum score threshold
80
+ chain: Filter projects by blockchain
81
+
82
+ Returns:
83
+ JSON response with project data
84
+ """
85
+ # Get context from the config
86
+ context = self.context_from_config(config)
87
+ logger.debug(f"aixbt_projects.py: Running search with context {context}")
88
+
89
+ # Check for rate limiting if configured
90
+ if context.config.get("rate_limit_number") and context.config.get(
91
+ "rate_limit_minutes"
92
+ ):
93
+ await self.user_rate_limit_by_category(
94
+ context.user_id,
95
+ context.config["rate_limit_number"],
96
+ context.config["rate_limit_minutes"],
97
+ )
98
+
99
+ # Get the API key from the agent's configuration
100
+ api_key = context.config.get("api_key")
101
+
102
+ # If not available in config, try the instance attribute (for backward compatibility)
103
+ if not api_key:
104
+ api_key = self.api_key
105
+
106
+ # If still not available, try environment variable as last resort
107
+ if not api_key:
108
+ api_key = os.environ.get("AIXBT_API_KEY")
109
+
110
+ if not api_key:
111
+ return {
112
+ "error": "AIXBT API key is not available. Please provide it in the agent configuration."
113
+ }
114
+
115
+ base_url = "https://api.aixbt.tech/v1/projects"
116
+
117
+ # Build query parameters
118
+ params = {"limit": limit}
119
+ if name:
120
+ params["name"] = name
121
+ if ticker:
122
+ params["ticker"] = ticker
123
+ if xHandle:
124
+ params["xHandle"] = xHandle
125
+ if minScore is not None:
126
+ params["minScore"] = minScore
127
+ if chain:
128
+ params["chain"] = chain
129
+
130
+ headers = {"accept": "*/*", "x-api-key": api_key}
131
+
132
+ try:
133
+ async with httpx.AsyncClient(timeout=30.0) as client:
134
+ response = await client.get(base_url, params=params, headers=headers)
135
+ response.raise_for_status()
136
+ return response.json()
137
+ except httpx.HTTPStatusError as e:
138
+ logger.error(
139
+ f"aixbt_projects.py: HTTP error occurred: {e.response.status_code} - {e.response.text}"
140
+ )
141
+ return {
142
+ "error": f"HTTP error occurred: {e.response.status_code}",
143
+ "details": e.response.text,
144
+ }
145
+ except httpx.RequestError as e:
146
+ logger.error(f"aixbt_projects.py: Request error occurred: {str(e)}")
147
+ return {"error": f"Request error occurred: {str(e)}"}
148
+ except Exception as e:
149
+ logger.error(
150
+ f"aixbt_projects.py: An unexpected error occurred: {str(e)}",
151
+ exc_info=True,
152
+ )
153
+ return {"error": f"An unexpected error occurred: {str(e)}"}
@@ -0,0 +1,99 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "AIXBT API",
5
+ "description": "Cryptocurrency project data and analytics through the AIXBT API",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/aixbt/aixbt.jpg",
7
+ "x-tags": [
8
+ "Cryptocurrency",
9
+ "Research",
10
+ "Analytics"
11
+ ],
12
+ "properties": {
13
+ "enabled": {
14
+ "type": "boolean",
15
+ "title": "Enabled",
16
+ "description": "Whether this skill is enabled",
17
+ "default": false
18
+ },
19
+ "states": {
20
+ "type": "object",
21
+ "properties": {
22
+ "aixbt_projects": {
23
+ "type": "string",
24
+ "title": "AIXBT Projects",
25
+ "enum": [
26
+ "disabled",
27
+ "public",
28
+ "private"
29
+ ],
30
+ "x-enum-title": [
31
+ "Disabled",
32
+ "Agent Owner + All Users",
33
+ "Agent Owner Only"
34
+ ],
35
+ "description": "Search for cryptocurrency projects and retrieve detailed information using AIXBT",
36
+ "default": "disabled"
37
+ }
38
+ },
39
+ "description": "States for each AIXBT API skill (disabled, public, or private)"
40
+ },
41
+ "api_key_provider": {
42
+ "type": "string",
43
+ "title": "API Key Provider",
44
+ "description": "Provider of the API key for AIXBT API service",
45
+ "enum": [
46
+ "agent_owner"
47
+ ],
48
+ "x-enum-title": [
49
+ "Owner Provided"
50
+ ],
51
+ "default": "agent_owner"
52
+ }
53
+ },
54
+ "required": [
55
+ "states",
56
+ "enabled"
57
+ ],
58
+ "if": {
59
+ "properties": {
60
+ "api_key_provider": {
61
+ "const": "agent_owner"
62
+ }
63
+ }
64
+ },
65
+ "then": {
66
+ "properties": {
67
+ "api_key": {
68
+ "type": "string",
69
+ "title": "AIXBT API Key",
70
+ "description": "API key for AIXBT API service",
71
+ "x-link": "[Get your API key](https://aixbt.tech/)",
72
+ "x-sensitive": true
73
+ },
74
+ "rate_limit_number": {
75
+ "type": "integer",
76
+ "title": "Rate Limit Number",
77
+ "description": "Number of requests allowed per time window, only valid if api_key is set"
78
+ },
79
+ "rate_limit_minutes": {
80
+ "type": "integer",
81
+ "title": "Rate Limit Minutes",
82
+ "description": "Time window in minutes for rate limiting, only valid if api_key is set"
83
+ }
84
+ },
85
+ "if": {
86
+ "properties": {
87
+ "enabled": {
88
+ "const": true
89
+ }
90
+ }
91
+ },
92
+ "then": {
93
+ "required": [
94
+ "api_key"
95
+ ]
96
+ }
97
+ },
98
+ "additionalProperties": true
99
+ }
@@ -0,0 +1,83 @@
1
+ """Allora skill module."""
2
+
3
+ import logging
4
+ from typing import NotRequired, TypedDict
5
+
6
+ from intentkit.abstracts.skill import SkillStoreABC
7
+ from intentkit.skills.allora.base import AlloraBaseTool
8
+ from intentkit.skills.allora.price import AlloraGetPrice
9
+ from intentkit.skills.base import SkillConfig, SkillState
10
+
11
+ # Cache skills at the system level, because they are stateless
12
+ _cache: dict[str, AlloraBaseTool] = {}
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class SkillStates(TypedDict):
18
+ get_price_prediction: SkillState
19
+
20
+
21
+ class Config(SkillConfig):
22
+ """Configuration for Allora skills."""
23
+
24
+ states: SkillStates
25
+ api_key: NotRequired[str]
26
+
27
+
28
+ async def get_skills(
29
+ config: "Config",
30
+ is_private: bool,
31
+ store: SkillStoreABC,
32
+ **_,
33
+ ) -> list[AlloraBaseTool]:
34
+ """Get all Allora skills.
35
+
36
+ Args:
37
+ config: The configuration for Allora skills.
38
+ is_private: Whether to include private skills.
39
+ store: The skill store for persisting data.
40
+
41
+ Returns:
42
+ A list of Allora skills.
43
+ """
44
+ available_skills = []
45
+
46
+ # Include skills based on their state
47
+ for skill_name, state in config["states"].items():
48
+ if state == "disabled":
49
+ continue
50
+ elif state == "public" or (state == "private" and is_private):
51
+ available_skills.append(skill_name)
52
+
53
+ # Get each skill using the cached getter
54
+ result = []
55
+ for name in available_skills:
56
+ skill = get_allora_skill(name, store)
57
+ if skill:
58
+ result.append(skill)
59
+ return result
60
+
61
+
62
+ def get_allora_skill(
63
+ name: str,
64
+ store: SkillStoreABC,
65
+ ) -> AlloraBaseTool:
66
+ """Get an Allora skill by name.
67
+
68
+ Args:
69
+ name: The name of the skill to get
70
+ store: The skill store for persisting data
71
+
72
+ Returns:
73
+ The requested Allora skill
74
+ """
75
+ if name == "get_price_prediction":
76
+ if name not in _cache:
77
+ _cache[name] = AlloraGetPrice(
78
+ skill_store=store,
79
+ )
80
+ return _cache[name]
81
+ else:
82
+ logger.warning(f"Unknown Allora skill: {name}")
83
+ return None
Binary file
@@ -0,0 +1,28 @@
1
+ from typing import Optional, Type
2
+
3
+ from pydantic import BaseModel, Field
4
+
5
+ from intentkit.abstracts.skill import SkillStoreABC
6
+ from intentkit.skills.base import IntentKitSkill, SkillContext
7
+
8
+ base_url = "https://api.upshot.xyz/v2/allora"
9
+
10
+
11
+ class AlloraBaseTool(IntentKitSkill):
12
+ """Base class for Allora tools."""
13
+
14
+ name: str = Field(description="The name of the tool")
15
+ description: str = Field(description="A description of what the tool does")
16
+ args_schema: Type[BaseModel]
17
+ skill_store: SkillStoreABC = Field(
18
+ description="The skill store for persisting data"
19
+ )
20
+
21
+ def get_api_key(self, context: SkillContext) -> Optional[str]:
22
+ if "api_key" in context.config and context.config["api_key"]:
23
+ return context.config["api_key"]
24
+ return self.skill_store.get_system_config("allora_api_key")
25
+
26
+ @property
27
+ def category(self) -> str:
28
+ return "allora"
@@ -0,0 +1,130 @@
1
+ from typing import Literal, Type
2
+
3
+ import httpx
4
+ from langchain.tools.base import ToolException
5
+ from langchain_core.runnables import RunnableConfig
6
+ from pydantic import BaseModel, Field
7
+
8
+ from intentkit.skills.allora.base import AlloraBaseTool
9
+
10
+ from .base import base_url
11
+
12
+
13
+ class AlloraGetPriceInput(BaseModel):
14
+ token: Literal["ETH", "BTC"] = Field(
15
+ description="Token to get price prediction for"
16
+ )
17
+ time_frame: Literal["5m", "8h"] = Field(
18
+ description="Time frame for price prediction, it can be 5 minutes or 8 hours"
19
+ )
20
+
21
+
22
+ class InferenceData(BaseModel):
23
+ network_inference: str = Field(description="Network Inference")
24
+ network_inference_normalized: str = Field(
25
+ description="Model's prediction or estimate, scaled or adjusted to a standard range or unit."
26
+ )
27
+ confidence_interval_percentiles: list[str] = Field(
28
+ description="Represent a range of values within which the model predicts the actual price is likely to fall, with a certain level of confidence."
29
+ )
30
+ confidence_interval_percentiles_normalized: list[str] = Field(
31
+ description="a range of values within which the model predicts the actual price is likely to fall), but the values defining the interval have been normalized."
32
+ )
33
+ confidence_interval_values: list[str] = Field(
34
+ description=" is a list (or array) of values that define the boundaries of a confidence interval in a prediction. These values correspond to specific percentiles and represent the range within which the model predicts the true value (e.g., future price) is likely to fall."
35
+ )
36
+ confidence_interval_values_normalized: list[str] = Field(
37
+ description="is a list (or array) of values that define the boundaries of a confidence interval, just like confidence_interval_values, but these values have been normalized. Normalization means the values have been scaled or transformed to a standard range, typically between 0 and 1 (or sometimes -1 and 1)."
38
+ )
39
+ # topic_id: str
40
+ # timestamp: int
41
+ # extra_data: str
42
+
43
+
44
+ class Data(BaseModel):
45
+ # signature: str
46
+ token_decimals: int
47
+ inference_data: InferenceData
48
+
49
+
50
+ class AlloraGetPriceOutput(BaseModel):
51
+ # request_id: str
52
+ # status: bool
53
+ data: Data
54
+
55
+
56
+ class AlloraGetPrice(AlloraBaseTool):
57
+ """
58
+ The Allora Price Prediction Feed tool fetches the price prediction feed from the Allora API.
59
+ Ethereum (ETH) or Bitcoin (BTC) price predictions (5-minute, 8-hour)
60
+
61
+
62
+ Attributes:
63
+ name (str): Name of the tool, specifically "get_price_prediction".
64
+ description (str): Comprehensive description of the tool's purpose and functionality.
65
+ args_schema (Type[BaseModel]): Schema for input arguments, specifying expected parameters.
66
+ """
67
+
68
+ name: str = "allora_get_price_prediction"
69
+ description: str = """
70
+ The Allora Price Prediction Feed tool fetches the price prediction feed from the Allora API.
71
+ Ethereum (ETH) or Bitcoin (BTC) price predictions (5-minute, 8-hour)
72
+ """
73
+ args_schema: Type[BaseModel] = AlloraGetPriceInput
74
+
75
+ def _run(self, question: str) -> AlloraGetPriceOutput:
76
+ """Run the tool to get the token price prediction from Allora API.
77
+
78
+ Returns:
79
+ AlloraGetPriceOutput: A structured output containing output of Allora toke price prediction API.
80
+
81
+ Raises:
82
+ Exception: If there's an error accessing the Allora API.
83
+ """
84
+ raise NotImplementedError("Use _arun instead")
85
+
86
+ async def _arun(
87
+ self, token: str, time_frame: str, config: RunnableConfig, **kwargs
88
+ ) -> AlloraGetPriceOutput:
89
+ """Run the tool to get the token price prediction from Allora API.
90
+ Args:
91
+ token (str): Token to get price prediction for.
92
+ time_frame (str): Time frame for price prediction.
93
+ config (RunnableConfig): The configuration for the runnable, containing agent context.
94
+
95
+ Returns:
96
+ AlloraGetPriceOutput: A structured output containing output of Allora toke price prediction API.
97
+
98
+ Raises:
99
+ Exception: If there's an error accessing the Allora API.
100
+ """
101
+ context = self.context_from_config(config)
102
+ api_key = self.get_api_key(context)
103
+ if not api_key:
104
+ raise ValueError("Allora API key not found")
105
+
106
+ url = f"{base_url}/consumer/price/ethereum-11155111/{token}/{time_frame}"
107
+ headers = {
108
+ "accept": "application/json",
109
+ "x-api-key": api_key,
110
+ }
111
+
112
+ async with httpx.AsyncClient() as client:
113
+ try:
114
+ response = await client.get(url, headers=headers, timeout=30)
115
+ response.raise_for_status()
116
+ json_dict = response.json()
117
+
118
+ res = AlloraGetPriceOutput(**json_dict)
119
+
120
+ return res
121
+ except httpx.RequestError as req_err:
122
+ raise ToolException(
123
+ f"Request error from Allora API: {req_err}"
124
+ ) from req_err
125
+ except httpx.HTTPStatusError as http_err:
126
+ raise ToolException(
127
+ f"HTTP error from Allora API: {http_err}"
128
+ ) from http_err
129
+ except Exception as e:
130
+ raise ToolException(f"Error from Allora API: {e}") from e
@@ -0,0 +1,89 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "Allora",
5
+ "description": "Integration with Allora API for blockchain-based price predictions and market forecasting services via Upshot's prediction markets",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/allora/allora.jpeg",
7
+ "x-tags": [
8
+ "Blockchain"
9
+ ],
10
+ "properties": {
11
+ "enabled": {
12
+ "type": "boolean",
13
+ "title": "Enabled",
14
+ "description": "Whether this skill is enabled",
15
+ "default": true
16
+ },
17
+ "states": {
18
+ "type": "object",
19
+ "properties": {
20
+ "get_price_prediction": {
21
+ "type": "string",
22
+ "title": "Get Price Prediction",
23
+ "enum": [
24
+ "disabled",
25
+ "public",
26
+ "private"
27
+ ],
28
+ "x-enum-title": [
29
+ "Disabled",
30
+ "Agent Owner + All Users",
31
+ "Agent Owner Only"
32
+ ],
33
+ "description": "Generates 6-hour price forecasts using ensemble ML models analyzing on-chain liquidity and market sentiment",
34
+ "default": "private"
35
+ }
36
+ },
37
+ "description": "States for each Allora skill (disabled, public, or private)"
38
+ },
39
+ "api_key_provider": {
40
+ "type": "string",
41
+ "title": "API Key Provider",
42
+ "description": "Who provides the API key",
43
+ "enum": [
44
+ "platform",
45
+ "agent_owner"
46
+ ],
47
+ "x-enum-title": [
48
+ "Nation Hosted",
49
+ "Owner Provided"
50
+ ],
51
+ "default": "platform"
52
+ }
53
+ },
54
+ "required": [
55
+ "states",
56
+ "enabled"
57
+ ],
58
+ "if": {
59
+ "properties": {
60
+ "api_key_provider": {
61
+ "const": "agent_owner"
62
+ }
63
+ }
64
+ },
65
+ "then": {
66
+ "properties": {
67
+ "api_key": {
68
+ "type": "string",
69
+ "title": "Allora API Key",
70
+ "x-link": "[Get your API key](https://docs.allora.network/devs/consumers/allora-api-endpoint#api-authentication)",
71
+ "x-sensitive": true,
72
+ "description": "Allora API key for authentication"
73
+ }
74
+ },
75
+ "if": {
76
+ "properties": {
77
+ "enabled": {
78
+ "const": true
79
+ }
80
+ }
81
+ },
82
+ "then": {
83
+ "required": [
84
+ "api_key"
85
+ ]
86
+ }
87
+ },
88
+ "additionalProperties": true
89
+ }