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

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

Potentially problematic release.


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

Files changed (385) 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 +14 -7
  5. intentkit/abstracts/skill.py +6 -144
  6. intentkit/abstracts/twitter.py +4 -5
  7. intentkit/clients/__init__.py +5 -2
  8. intentkit/clients/cdp.py +101 -141
  9. intentkit/clients/twitter.py +83 -62
  10. intentkit/clients/web3.py +29 -0
  11. intentkit/config/config.py +8 -5
  12. intentkit/core/agent.py +472 -195
  13. intentkit/core/asset.py +253 -0
  14. intentkit/core/chat.py +51 -0
  15. intentkit/core/client.py +1 -1
  16. intentkit/core/credit.py +460 -130
  17. intentkit/core/engine.py +262 -233
  18. intentkit/core/node.py +15 -16
  19. intentkit/core/prompt.py +62 -28
  20. intentkit/core/scheduler.py +92 -0
  21. intentkit/core/statistics.py +168 -0
  22. intentkit/models/agent.py +1096 -949
  23. intentkit/models/agent_data.py +68 -38
  24. intentkit/models/agent_public.json +98 -0
  25. intentkit/models/agent_schema.json +54 -439
  26. intentkit/models/app_setting.py +96 -33
  27. intentkit/models/chat.py +74 -27
  28. intentkit/models/conversation.py +8 -8
  29. intentkit/models/credit.py +362 -74
  30. intentkit/models/db.py +26 -8
  31. intentkit/models/db_mig.py +2 -2
  32. intentkit/models/llm.csv +28 -0
  33. intentkit/models/llm.py +185 -350
  34. intentkit/models/redis.py +6 -4
  35. intentkit/models/skill.py +186 -72
  36. intentkit/models/skills.csv +174 -0
  37. intentkit/models/user.py +82 -24
  38. intentkit/skills/acolyt/__init__.py +2 -9
  39. intentkit/skills/acolyt/ask.py +3 -4
  40. intentkit/skills/acolyt/base.py +4 -9
  41. intentkit/skills/acolyt/schema.json +4 -3
  42. intentkit/skills/aixbt/__init__.py +2 -13
  43. intentkit/skills/aixbt/base.py +1 -7
  44. intentkit/skills/aixbt/projects.py +14 -15
  45. intentkit/skills/aixbt/schema.json +4 -4
  46. intentkit/skills/allora/__init__.py +2 -9
  47. intentkit/skills/allora/base.py +4 -9
  48. intentkit/skills/allora/price.py +3 -4
  49. intentkit/skills/allora/schema.json +3 -2
  50. intentkit/skills/base.py +248 -85
  51. intentkit/skills/basename/__init__.py +51 -0
  52. intentkit/skills/basename/base.py +11 -0
  53. intentkit/skills/basename/basename.svg +11 -0
  54. intentkit/skills/basename/schema.json +58 -0
  55. intentkit/skills/carv/__init__.py +115 -121
  56. intentkit/skills/carv/base.py +184 -185
  57. intentkit/skills/carv/fetch_news.py +3 -3
  58. intentkit/skills/carv/onchain_query.py +4 -4
  59. intentkit/skills/carv/schema.json +134 -137
  60. intentkit/skills/carv/token_info_and_price.py +5 -5
  61. intentkit/skills/casino/README.md +254 -0
  62. intentkit/skills/casino/__init__.py +86 -0
  63. intentkit/skills/casino/base.py +17 -0
  64. intentkit/skills/casino/casino.png +0 -0
  65. intentkit/skills/casino/deck_draw.py +127 -0
  66. intentkit/skills/casino/deck_shuffle.py +118 -0
  67. intentkit/skills/casino/dice_roll.py +100 -0
  68. intentkit/skills/casino/schema.json +77 -0
  69. intentkit/skills/casino/utils.py +107 -0
  70. intentkit/skills/cdp/__init__.py +22 -84
  71. intentkit/skills/cdp/base.py +1 -7
  72. intentkit/skills/cdp/schema.json +11 -314
  73. intentkit/skills/chainlist/__init__.py +2 -7
  74. intentkit/skills/chainlist/base.py +1 -7
  75. intentkit/skills/chainlist/chain_lookup.py +18 -18
  76. intentkit/skills/chainlist/schema.json +3 -5
  77. intentkit/skills/common/__init__.py +2 -9
  78. intentkit/skills/common/base.py +1 -7
  79. intentkit/skills/common/current_time.py +1 -2
  80. intentkit/skills/common/schema.json +2 -2
  81. intentkit/skills/cookiefun/__init__.py +6 -9
  82. intentkit/skills/cookiefun/base.py +2 -7
  83. intentkit/skills/cookiefun/get_account_details.py +7 -7
  84. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  85. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  86. intentkit/skills/cookiefun/get_sectors.py +3 -3
  87. intentkit/skills/cookiefun/schema.json +1 -3
  88. intentkit/skills/cookiefun/search_accounts.py +9 -9
  89. intentkit/skills/cryptocompare/__init__.py +7 -24
  90. intentkit/skills/cryptocompare/api.py +2 -3
  91. intentkit/skills/cryptocompare/base.py +11 -25
  92. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  93. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  94. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  95. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  96. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  97. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  98. intentkit/skills/cryptocompare/schema.json +3 -3
  99. intentkit/skills/cryptopanic/__init__.py +7 -10
  100. intentkit/skills/cryptopanic/base.py +51 -55
  101. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  102. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  103. intentkit/skills/cryptopanic/schema.json +105 -103
  104. intentkit/skills/dapplooker/__init__.py +2 -9
  105. intentkit/skills/dapplooker/base.py +4 -9
  106. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  107. intentkit/skills/dapplooker/schema.json +3 -5
  108. intentkit/skills/defillama/__init__.py +24 -74
  109. intentkit/skills/defillama/api.py +6 -9
  110. intentkit/skills/defillama/base.py +11 -21
  111. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  112. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  113. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  114. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  115. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  116. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  117. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  118. intentkit/skills/defillama/config/chains.py +1 -3
  119. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  120. intentkit/skills/defillama/schema.json +5 -1
  121. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  122. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  123. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  124. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  125. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  126. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  127. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  128. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  129. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  130. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  131. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  132. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  133. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  134. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  135. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  136. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  137. intentkit/skills/dexscreener/README.md +154 -0
  138. intentkit/skills/dexscreener/__init__.py +97 -93
  139. intentkit/skills/dexscreener/base.py +125 -133
  140. intentkit/skills/dexscreener/get_pair_info.py +158 -0
  141. intentkit/skills/dexscreener/get_token_pairs.py +165 -0
  142. intentkit/skills/dexscreener/get_tokens_info.py +212 -0
  143. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  144. intentkit/skills/dexscreener/schema.json +91 -48
  145. intentkit/skills/dexscreener/search_token.py +182 -321
  146. intentkit/skills/dexscreener/utils.py +420 -0
  147. intentkit/skills/dune_analytics/__init__.py +7 -9
  148. intentkit/skills/dune_analytics/base.py +48 -52
  149. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  150. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  151. intentkit/skills/dune_analytics/schema.json +104 -99
  152. intentkit/skills/elfa/__init__.py +5 -18
  153. intentkit/skills/elfa/base.py +10 -14
  154. intentkit/skills/elfa/mention.py +19 -21
  155. intentkit/skills/elfa/schema.json +3 -2
  156. intentkit/skills/elfa/stats.py +4 -4
  157. intentkit/skills/elfa/tokens.py +12 -12
  158. intentkit/skills/elfa/utils.py +26 -28
  159. intentkit/skills/enso/__init__.py +11 -31
  160. intentkit/skills/enso/base.py +50 -35
  161. intentkit/skills/enso/best_yield.py +16 -24
  162. intentkit/skills/enso/networks.py +6 -11
  163. intentkit/skills/enso/prices.py +11 -13
  164. intentkit/skills/enso/route.py +34 -38
  165. intentkit/skills/enso/schema.json +3 -2
  166. intentkit/skills/enso/tokens.py +29 -38
  167. intentkit/skills/enso/wallet.py +76 -191
  168. intentkit/skills/erc20/__init__.py +50 -0
  169. intentkit/skills/erc20/base.py +11 -0
  170. intentkit/skills/erc20/erc20.svg +5 -0
  171. intentkit/skills/erc20/schema.json +74 -0
  172. intentkit/skills/erc721/__init__.py +53 -0
  173. intentkit/skills/erc721/base.py +11 -0
  174. intentkit/skills/erc721/erc721.svg +5 -0
  175. intentkit/skills/erc721/schema.json +90 -0
  176. intentkit/skills/firecrawl/README.md +11 -5
  177. intentkit/skills/firecrawl/__init__.py +5 -18
  178. intentkit/skills/firecrawl/base.py +4 -11
  179. intentkit/skills/firecrawl/clear.py +4 -8
  180. intentkit/skills/firecrawl/crawl.py +19 -19
  181. intentkit/skills/firecrawl/query.py +4 -3
  182. intentkit/skills/firecrawl/schema.json +6 -8
  183. intentkit/skills/firecrawl/scrape.py +150 -40
  184. intentkit/skills/firecrawl/utils.py +50 -42
  185. intentkit/skills/github/__init__.py +2 -7
  186. intentkit/skills/github/base.py +1 -7
  187. intentkit/skills/github/github_search.py +1 -2
  188. intentkit/skills/github/schema.json +3 -4
  189. intentkit/skills/heurist/__init__.py +8 -27
  190. intentkit/skills/heurist/base.py +4 -9
  191. intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
  192. intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
  193. intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
  194. intentkit/skills/heurist/image_generation_braindance.py +12 -13
  195. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
  196. intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
  197. intentkit/skills/heurist/image_generation_sdxl.py +12 -13
  198. intentkit/skills/heurist/schema.json +2 -2
  199. intentkit/skills/http/__init__.py +4 -15
  200. intentkit/skills/http/base.py +1 -7
  201. intentkit/skills/http/get.py +21 -16
  202. intentkit/skills/http/post.py +23 -18
  203. intentkit/skills/http/put.py +23 -18
  204. intentkit/skills/http/schema.json +4 -5
  205. intentkit/skills/lifi/__init__.py +8 -13
  206. intentkit/skills/lifi/base.py +1 -7
  207. intentkit/skills/lifi/schema.json +17 -8
  208. intentkit/skills/lifi/token_execute.py +36 -30
  209. intentkit/skills/lifi/token_quote.py +8 -10
  210. intentkit/skills/lifi/utils.py +104 -51
  211. intentkit/skills/moralis/__init__.py +6 -10
  212. intentkit/skills/moralis/api.py +6 -7
  213. intentkit/skills/moralis/base.py +5 -10
  214. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  215. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  216. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  217. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  218. intentkit/skills/moralis/schema.json +7 -2
  219. intentkit/skills/morpho/__init__.py +52 -0
  220. intentkit/skills/morpho/base.py +11 -0
  221. intentkit/skills/morpho/morpho.svg +12 -0
  222. intentkit/skills/morpho/schema.json +73 -0
  223. intentkit/skills/nation/__init__.py +4 -9
  224. intentkit/skills/nation/base.py +5 -10
  225. intentkit/skills/nation/nft_check.py +3 -4
  226. intentkit/skills/nation/schema.json +4 -3
  227. intentkit/skills/onchain.py +23 -0
  228. intentkit/skills/openai/__init__.py +17 -18
  229. intentkit/skills/openai/base.py +10 -14
  230. intentkit/skills/openai/dalle_image_generation.py +3 -8
  231. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  232. intentkit/skills/openai/gpt_image_generation.py +4 -8
  233. intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
  234. intentkit/skills/openai/gpt_image_to_image.py +4 -8
  235. intentkit/skills/openai/image_to_text.py +3 -7
  236. intentkit/skills/openai/schema.json +34 -3
  237. intentkit/skills/portfolio/__init__.py +11 -35
  238. intentkit/skills/portfolio/base.py +33 -19
  239. intentkit/skills/portfolio/schema.json +3 -5
  240. intentkit/skills/portfolio/token_balances.py +21 -21
  241. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  242. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  243. intentkit/skills/portfolio/wallet_history.py +31 -31
  244. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  245. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  246. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  247. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  248. intentkit/skills/portfolio/wallet_stats.py +3 -3
  249. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  250. intentkit/skills/pyth/__init__.py +50 -0
  251. intentkit/skills/pyth/base.py +11 -0
  252. intentkit/skills/pyth/pyth.svg +6 -0
  253. intentkit/skills/pyth/schema.json +75 -0
  254. intentkit/skills/skills.toml +40 -0
  255. intentkit/skills/slack/__init__.py +5 -17
  256. intentkit/skills/slack/base.py +3 -9
  257. intentkit/skills/slack/get_channel.py +8 -8
  258. intentkit/skills/slack/get_message.py +9 -9
  259. intentkit/skills/slack/schedule_message.py +5 -5
  260. intentkit/skills/slack/schema.json +2 -2
  261. intentkit/skills/slack/send_message.py +3 -5
  262. intentkit/skills/supabase/__init__.py +7 -23
  263. intentkit/skills/supabase/base.py +9 -13
  264. intentkit/skills/supabase/delete_data.py +5 -6
  265. intentkit/skills/supabase/fetch_data.py +13 -14
  266. intentkit/skills/supabase/insert_data.py +5 -6
  267. intentkit/skills/supabase/invoke_function.py +7 -8
  268. intentkit/skills/supabase/schema.json +2 -3
  269. intentkit/skills/supabase/update_data.py +7 -8
  270. intentkit/skills/supabase/upsert_data.py +5 -6
  271. intentkit/skills/superfluid/__init__.py +53 -0
  272. intentkit/skills/superfluid/base.py +11 -0
  273. intentkit/skills/superfluid/schema.json +89 -0
  274. intentkit/skills/superfluid/superfluid.svg +6 -0
  275. intentkit/skills/system/__init__.py +7 -24
  276. intentkit/skills/system/add_autonomous_task.py +10 -12
  277. intentkit/skills/system/delete_autonomous_task.py +2 -2
  278. intentkit/skills/system/edit_autonomous_task.py +14 -18
  279. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  280. intentkit/skills/system/read_agent_api_key.py +6 -4
  281. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  282. intentkit/skills/system/schema.json +6 -8
  283. intentkit/skills/tavily/__init__.py +3 -12
  284. intentkit/skills/tavily/base.py +4 -9
  285. intentkit/skills/tavily/schema.json +3 -5
  286. intentkit/skills/tavily/tavily_extract.py +2 -4
  287. intentkit/skills/tavily/tavily_search.py +4 -6
  288. intentkit/skills/token/__init__.py +5 -10
  289. intentkit/skills/token/base.py +7 -11
  290. intentkit/skills/token/erc20_transfers.py +19 -19
  291. intentkit/skills/token/schema.json +3 -6
  292. intentkit/skills/token/token_analytics.py +3 -3
  293. intentkit/skills/token/token_price.py +13 -13
  294. intentkit/skills/token/token_search.py +9 -9
  295. intentkit/skills/twitter/__init__.py +11 -35
  296. intentkit/skills/twitter/base.py +23 -35
  297. intentkit/skills/twitter/follow_user.py +3 -7
  298. intentkit/skills/twitter/get_mentions.py +6 -13
  299. intentkit/skills/twitter/get_timeline.py +5 -13
  300. intentkit/skills/twitter/get_user_by_username.py +3 -7
  301. intentkit/skills/twitter/get_user_tweets.py +6 -14
  302. intentkit/skills/twitter/like_tweet.py +3 -7
  303. intentkit/skills/twitter/post_tweet.py +23 -12
  304. intentkit/skills/twitter/reply_tweet.py +21 -12
  305. intentkit/skills/twitter/retweet.py +3 -7
  306. intentkit/skills/twitter/schema.json +1 -0
  307. intentkit/skills/twitter/search_tweets.py +5 -13
  308. intentkit/skills/unrealspeech/__init__.py +2 -7
  309. intentkit/skills/unrealspeech/base.py +2 -8
  310. intentkit/skills/unrealspeech/schema.json +2 -5
  311. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  312. intentkit/skills/venice_audio/__init__.py +98 -106
  313. intentkit/skills/venice_audio/base.py +117 -121
  314. intentkit/skills/venice_audio/input.py +41 -41
  315. intentkit/skills/venice_audio/schema.json +151 -152
  316. intentkit/skills/venice_audio/venice_audio.py +38 -21
  317. intentkit/skills/venice_image/__init__.py +147 -154
  318. intentkit/skills/venice_image/api.py +138 -138
  319. intentkit/skills/venice_image/base.py +185 -192
  320. intentkit/skills/venice_image/config.py +33 -35
  321. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  322. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  323. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  324. intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
  325. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  326. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  327. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  328. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  329. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  330. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  331. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  332. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  333. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  334. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  335. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  336. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  337. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  338. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  339. intentkit/skills/venice_image/schema.json +267 -267
  340. intentkit/skills/venice_image/utils.py +77 -78
  341. intentkit/skills/web_scraper/__init__.py +5 -18
  342. intentkit/skills/web_scraper/base.py +21 -7
  343. intentkit/skills/web_scraper/document_indexer.py +7 -6
  344. intentkit/skills/web_scraper/schema.json +2 -6
  345. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  346. intentkit/skills/web_scraper/utils.py +62 -63
  347. intentkit/skills/web_scraper/website_indexer.py +17 -19
  348. intentkit/skills/weth/__init__.py +49 -0
  349. intentkit/skills/weth/base.py +11 -0
  350. intentkit/skills/weth/schema.json +58 -0
  351. intentkit/skills/weth/weth.svg +6 -0
  352. intentkit/skills/wow/__init__.py +51 -0
  353. intentkit/skills/wow/base.py +11 -0
  354. intentkit/skills/wow/schema.json +89 -0
  355. intentkit/skills/wow/wow.svg +7 -0
  356. intentkit/skills/x402/__init__.py +61 -0
  357. intentkit/skills/x402/ask_agent.py +98 -0
  358. intentkit/skills/x402/base.py +99 -0
  359. intentkit/skills/x402/http_request.py +117 -0
  360. intentkit/skills/x402/schema.json +45 -0
  361. intentkit/skills/x402/x402.webp +0 -0
  362. intentkit/skills/xmtp/__init__.py +4 -15
  363. intentkit/skills/xmtp/base.py +61 -2
  364. intentkit/skills/xmtp/price.py +18 -13
  365. intentkit/skills/xmtp/schema.json +69 -71
  366. intentkit/skills/xmtp/swap.py +22 -25
  367. intentkit/skills/xmtp/transfer.py +71 -32
  368. intentkit/utils/chain.py +3 -3
  369. intentkit/utils/error.py +14 -1
  370. intentkit/utils/logging.py +2 -4
  371. intentkit/utils/s3.py +59 -7
  372. intentkit/utils/schema.py +100 -0
  373. intentkit/utils/slack_alert.py +7 -8
  374. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +14 -16
  375. intentkit-0.8.17.dist-info/RECORD +466 -0
  376. intentkit/abstracts/exception.py +0 -9
  377. intentkit/core/skill.py +0 -200
  378. intentkit/models/generator.py +0 -347
  379. intentkit/skills/cdp/get_balance.py +0 -110
  380. intentkit/skills/cdp/swap.py +0 -121
  381. intentkit/skills/moralis/tests/__init__.py +0 -0
  382. intentkit/skills/moralis/tests/test_wallet.py +0 -511
  383. intentkit-0.6.13.dev2.dist-info/RECORD +0 -409
  384. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
  385. {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
@@ -3,11 +3,12 @@
3
3
  import logging
4
4
  from typing import TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.base import SkillConfig, SkillState
8
7
  from intentkit.skills.openai.base import OpenAIBaseTool
9
8
  from intentkit.skills.openai.dalle_image_generation import DALLEImageGeneration
9
+ from intentkit.skills.openai.gpt_avatar_generator import GPTAvatarGenerator
10
10
  from intentkit.skills.openai.gpt_image_generation import GPTImageGeneration
11
+ from intentkit.skills.openai.gpt_image_mini_generator import GPTImageMiniGenerator
11
12
  from intentkit.skills.openai.gpt_image_to_image import GPTImageToImage
12
13
  from intentkit.skills.openai.image_to_text import ImageToText
13
14
 
@@ -21,6 +22,8 @@ class SkillStates(TypedDict):
21
22
  image_to_text: SkillState
22
23
  dalle_image_generation: SkillState
23
24
  gpt_image_generation: SkillState
25
+ gpt_image_mini_generator: SkillState
26
+ gpt_avatar_generator: SkillState
24
27
  gpt_image_to_image: SkillState
25
28
 
26
29
 
@@ -34,7 +37,6 @@ class Config(SkillConfig):
34
37
  async def get_skills(
35
38
  config: "Config",
36
39
  is_private: bool,
37
- store: SkillStoreABC,
38
40
  **_,
39
41
  ) -> list[OpenAIBaseTool]:
40
42
  """Get all OpenAI skills.
@@ -42,7 +44,6 @@ async def get_skills(
42
44
  Args:
43
45
  config: The configuration for OpenAI skills.
44
46
  is_private: Whether to include private skills.
45
- store: The skill store for persisting data.
46
47
 
47
48
  Returns:
48
49
  A list of OpenAI skills.
@@ -59,7 +60,7 @@ async def get_skills(
59
60
  # Get each skill using the cached getter
60
61
  result = []
61
62
  for name in available_skills:
62
- skill = get_openai_skill(name, store)
63
+ skill = get_openai_skill(name)
63
64
  if skill:
64
65
  result.append(skill)
65
66
  return result
@@ -67,40 +68,38 @@ async def get_skills(
67
68
 
68
69
  def get_openai_skill(
69
70
  name: str,
70
- store: SkillStoreABC,
71
71
  ) -> OpenAIBaseTool:
72
72
  """Get an OpenAI skill by name.
73
73
 
74
74
  Args:
75
75
  name: The name of the skill to get
76
- store: The skill store for persisting data
77
76
 
78
77
  Returns:
79
78
  The requested OpenAI skill
80
79
  """
81
80
  if name == "image_to_text":
82
81
  if name not in _cache:
83
- _cache[name] = ImageToText(
84
- skill_store=store,
85
- )
82
+ _cache[name] = ImageToText()
86
83
  return _cache[name]
87
84
  elif name == "dalle_image_generation":
88
85
  if name not in _cache:
89
- _cache[name] = DALLEImageGeneration(
90
- skill_store=store,
91
- )
86
+ _cache[name] = DALLEImageGeneration()
92
87
  return _cache[name]
93
88
  elif name == "gpt_image_generation":
94
89
  if name not in _cache:
95
- _cache[name] = GPTImageGeneration(
96
- skill_store=store,
97
- )
90
+ _cache[name] = GPTImageGeneration()
91
+ return _cache[name]
92
+ elif name == "gpt_image_mini_generator":
93
+ if name not in _cache:
94
+ _cache[name] = GPTImageMiniGenerator()
95
+ return _cache[name]
96
+ elif name == "gpt_avatar_generator":
97
+ if name not in _cache:
98
+ _cache[name] = GPTAvatarGenerator()
98
99
  return _cache[name]
99
100
  elif name == "gpt_image_to_image":
100
101
  if name not in _cache:
101
- _cache[name] = GPTImageToImage(
102
- skill_store=store,
103
- )
102
+ _cache[name] = GPTImageToImage()
104
103
  return _cache[name]
105
104
  else:
106
105
  logger.warning(f"Unknown OpenAI skill: {name}")
@@ -1,11 +1,9 @@
1
1
  """Base class for OpenAI skills."""
2
2
 
3
- from typing import Type
4
-
5
- from langchain.tools.base import ToolException
3
+ from langchain_core.tools.base import ToolException
6
4
  from pydantic import BaseModel, Field
7
5
 
8
- from intentkit.abstracts.skill import SkillStoreABC
6
+ from intentkit.config.config import config
9
7
  from intentkit.skills.base import IntentKitSkill
10
8
 
11
9
 
@@ -17,24 +15,22 @@ class OpenAIBaseTool(IntentKitSkill):
17
15
 
18
16
  name: str = Field(description="The name of the tool")
19
17
  description: str = Field(description="A description of what the tool does")
20
- args_schema: Type[BaseModel]
21
- skill_store: SkillStoreABC = Field(
22
- description="The skill store for persisting data"
23
- )
18
+ args_schema: type[BaseModel]
24
19
 
25
20
  def get_api_key(self) -> str:
26
21
  context = self.get_context()
27
22
  skill_config = context.agent.skill_config(self.category)
28
23
  api_key_provider = skill_config.get("api_key_provider")
29
24
  if api_key_provider == "platform":
30
- return self.skill_store.get_system_config("openai_api_key")
25
+ if not config.openai_api_key:
26
+ raise ToolException("OpenAI API key is not configured")
27
+ return config.openai_api_key
31
28
  # for backward compatibility, may only have api_key in skill_config
32
- elif skill_config.get("api_key"):
29
+ if skill_config.get("api_key"):
33
30
  return skill_config.get("api_key")
34
- else:
35
- raise ToolException(
36
- f"Invalid API key provider: {api_key_provider}, or no api_key in config"
37
- )
31
+ raise ToolException(
32
+ f"Invalid API key provider: {api_key_provider}, or no api_key in config"
33
+ )
38
34
 
39
35
  @property
40
36
  def category(self) -> str:
@@ -1,7 +1,6 @@
1
1
  """DALL-E image generation skill for OpenAI."""
2
2
 
3
3
  import logging
4
- from typing import Type
5
4
 
6
5
  import openai
7
6
  from epyxid import XID
@@ -53,7 +52,7 @@ class DALLEImageGeneration(OpenAIBaseTool):
53
52
  "high-quality images from text descriptions.\n"
54
53
  "You can specify size, quality, and style parameters for more control.\n"
55
54
  )
56
- args_schema: Type[BaseModel] = DALLEImageGenerationInput
55
+ args_schema: type[BaseModel] = DALLEImageGenerationInput
57
56
 
58
57
  async def _arun(
59
58
  self,
@@ -71,7 +70,6 @@ class DALLEImageGeneration(OpenAIBaseTool):
71
70
  quality: Quality of the generated image. Options: standard, hd
72
71
  style: Style of the generated image. Options: vivid, natural
73
72
 
74
-
75
73
  Returns:
76
74
  str: URL of the generated image.
77
75
 
@@ -79,12 +77,9 @@ class DALLEImageGeneration(OpenAIBaseTool):
79
77
  Exception: If the image generation fails.
80
78
  """
81
79
  context = self.get_context()
82
- skill_config = context.agent.skill_config(self.category)
83
80
 
84
- # Get the OpenAI API key from the skill store
85
- api_key = skill_config.get("api_key") or self.skill_store.get_system_config(
86
- "openai_api_key"
87
- )
81
+ # Get the OpenAI API key from configuration or agent settings
82
+ api_key = self.get_api_key()
88
83
 
89
84
  # Generate a unique job ID
90
85
  job_id = str(XID())
@@ -0,0 +1,102 @@
1
+ """GPT avatar generator skill for OpenAI."""
2
+
3
+ import base64
4
+ import logging
5
+
6
+ import openai
7
+ from epyxid import XID
8
+ from pydantic import BaseModel, Field
9
+
10
+ from intentkit.skills.openai.base import OpenAIBaseTool
11
+ from intentkit.utils.s3 import store_image_bytes
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+ AVATAR_PROMPT_PREFIX = (
16
+ "Create a single, centered portrait that works perfectly as a profile avatar. "
17
+ "Use flattering, even lighting, a simple soft-focus background, and a composition from shoulders up. "
18
+ "Avoid text, logos, watermarks, and distracting elements so the result feels polished and personable."
19
+ )
20
+
21
+
22
+ class GPTAvatarGeneratorInput(BaseModel):
23
+ """Input schema for the GPT avatar generator skill."""
24
+
25
+ prompt: str = Field(
26
+ description="Description of the avatar or profile image to generate.",
27
+ )
28
+
29
+
30
+ class GPTAvatarGenerator(OpenAIBaseTool):
31
+ """Tool for generating avatar-friendly images using OpenAI's GPT-Image-1-Mini model."""
32
+
33
+ name: str = "gpt_avatar_generator"
34
+ description: str = (
35
+ "Generate avatar-ready profile images using OpenAI's GPT-Image-1-Mini model."
36
+ )
37
+ args_schema = GPTAvatarGeneratorInput
38
+
39
+ async def _arun(self, prompt: str, **kwargs) -> str:
40
+ """Generate avatar-friendly images using OpenAI's GPT-Image-1-Mini model."""
41
+ context = self.get_context()
42
+ api_key = self.get_api_key()
43
+ job_id = str(XID())
44
+
45
+ composed_prompt = (
46
+ f"{AVATAR_PROMPT_PREFIX}\n{prompt.strip()}"
47
+ if prompt
48
+ else AVATAR_PROMPT_PREFIX
49
+ )
50
+
51
+ try:
52
+ client = openai.OpenAI(api_key=api_key)
53
+
54
+ response = client.images.generate(
55
+ model="gpt-image-1-mini",
56
+ prompt=composed_prompt,
57
+ size="1024x1024",
58
+ quality="medium",
59
+ background="opaque",
60
+ moderation="low",
61
+ n=1,
62
+ )
63
+
64
+ base64_image = response.data[0].b64_json
65
+
66
+ if hasattr(response, "usage") and response.usage:
67
+ usage = response.usage
68
+ logger.info(
69
+ "GPT-Image-1-Mini avatar generation usage: "
70
+ f"input_tokens={usage.input_tokens}, "
71
+ f"output_tokens={usage.output_tokens}, "
72
+ f"total_tokens={usage.total_tokens}"
73
+ )
74
+
75
+ if (
76
+ hasattr(usage, "input_tokens_details")
77
+ and usage.input_tokens_details
78
+ ):
79
+ details = usage.input_tokens_details
80
+ logger.info(f"Input tokens details: {details}")
81
+
82
+ image_bytes = base64.b64decode(base64_image)
83
+
84
+ image_key = f"{context.agent_id}/gpt-avatar/{job_id}"
85
+
86
+ stored_url = await store_image_bytes(
87
+ image_bytes,
88
+ image_key,
89
+ "image/jpeg",
90
+ )
91
+
92
+ return stored_url
93
+
94
+ except openai.OpenAIError as e:
95
+ error_message = f"OpenAI API error: {str(e)}"
96
+ logger.error(error_message)
97
+ raise Exception(error_message)
98
+
99
+ except Exception as e:
100
+ error_message = f"Error generating avatar with GPT-Image-1-Mini: {str(e)}"
101
+ logger.error(error_message)
102
+ raise Exception(error_message)
@@ -2,7 +2,7 @@
2
2
 
3
3
  import base64
4
4
  import logging
5
- from typing import Literal, Type
5
+ from typing import Literal
6
6
 
7
7
  import openai
8
8
  from epyxid import XID
@@ -54,7 +54,7 @@ class GPTImageGeneration(OpenAIBaseTool):
54
54
  "high-quality images from text descriptions.\n"
55
55
  "You can specify size, quality, and background parameters for more control.\n"
56
56
  )
57
- args_schema: Type[BaseModel] = GPTImageGenerationInput
57
+ args_schema: type[BaseModel] = GPTImageGenerationInput
58
58
 
59
59
  async def _arun(
60
60
  self,
@@ -72,7 +72,6 @@ class GPTImageGeneration(OpenAIBaseTool):
72
72
  quality: Quality of the generated image. Options: high, medium, low, auto
73
73
  background: Background transparency. Options: transparent, opaque, auto
74
74
 
75
-
76
75
  Returns:
77
76
  str: URL of the generated image.
78
77
 
@@ -80,12 +79,9 @@ class GPTImageGeneration(OpenAIBaseTool):
80
79
  Exception: If the image generation fails.
81
80
  """
82
81
  context = self.get_context()
83
- skill_config = context.agent.skill_config(self.category)
84
82
 
85
- # Get the OpenAI API key from the skill store
86
- api_key = skill_config.get("api_key") or self.skill_store.get_system_config(
87
- "openai_api_key"
88
- )
83
+ # Get the OpenAI API key from configuration or agent settings
84
+ api_key = self.get_api_key()
89
85
 
90
86
  # Generate a unique job ID
91
87
  job_id = str(XID())
@@ -0,0 +1,91 @@
1
+ """GPT image mini generator skill for OpenAI."""
2
+
3
+ import base64
4
+ import logging
5
+ from typing import Literal
6
+
7
+ import openai
8
+ from epyxid import XID
9
+
10
+ from intentkit.skills.openai.base import OpenAIBaseTool
11
+ from intentkit.skills.openai.gpt_image_generation import GPTImageGenerationInput
12
+ from intentkit.utils.s3 import store_image_bytes
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ class GPTImageMiniGenerator(OpenAIBaseTool):
18
+ """Tool for generating images using OpenAI's GPT-Image-1-Mini model."""
19
+
20
+ name: str = "gpt_image_mini_generator"
21
+ description: str = (
22
+ "Generate images using OpenAI's GPT-Image-1-Mini model.\n"
23
+ "Provide a text prompt describing the image you want to generate.\n"
24
+ "GPT-Image-1-Mini delivers high-quality images with faster performance at a lower cost.\n"
25
+ "You can specify size, quality, and background parameters for more control.\n"
26
+ )
27
+ args_schema = GPTImageGenerationInput
28
+
29
+ async def _arun(
30
+ self,
31
+ prompt: str,
32
+ size: Literal["1024x1024", "1536x1024", "1024x1536", "auto"] = "auto",
33
+ quality: Literal["high", "medium", "low", "auto"] = "auto",
34
+ background: Literal["transparent", "opaque", "auto"] = "auto",
35
+ **kwargs,
36
+ ) -> str:
37
+ """Generate images using OpenAI's GPT-Image-1-Mini model."""
38
+ context = self.get_context()
39
+ api_key = self.get_api_key()
40
+ job_id = str(XID())
41
+
42
+ try:
43
+ client = openai.OpenAI(api_key=api_key)
44
+
45
+ content_type = "image/png" if background == "transparent" else "image/jpeg"
46
+
47
+ response = client.images.generate(
48
+ model="gpt-image-1-mini",
49
+ prompt=prompt,
50
+ size=size,
51
+ quality=quality,
52
+ background=background,
53
+ moderation="low",
54
+ n=1,
55
+ )
56
+
57
+ base64_image = response.data[0].b64_json
58
+
59
+ if hasattr(response, "usage") and response.usage:
60
+ usage = response.usage
61
+ logger.info(
62
+ "GPT-Image-1-Mini generation usage: "
63
+ f"input_tokens={usage.input_tokens}, "
64
+ f"output_tokens={usage.output_tokens}, "
65
+ f"total_tokens={usage.total_tokens}"
66
+ )
67
+
68
+ if (
69
+ hasattr(usage, "input_tokens_details")
70
+ and usage.input_tokens_details
71
+ ):
72
+ details = usage.input_tokens_details
73
+ logger.info(f"Input tokens details: {details}")
74
+
75
+ image_bytes = base64.b64decode(base64_image)
76
+
77
+ image_key = f"{context.agent_id}/gpt-image-mini/{job_id}"
78
+
79
+ stored_url = await store_image_bytes(image_bytes, image_key, content_type)
80
+
81
+ return stored_url
82
+
83
+ except openai.OpenAIError as e:
84
+ error_message = f"OpenAI API error: {str(e)}"
85
+ logger.error(error_message)
86
+ raise Exception(error_message)
87
+
88
+ except Exception as e:
89
+ error_message = f"Error generating image with GPT-Image-1-Mini: {str(e)}"
90
+ logger.error(error_message)
91
+ raise Exception(error_message)
@@ -3,7 +3,7 @@
3
3
  import base64
4
4
  import logging
5
5
  from io import BytesIO
6
- from typing import Literal, Type
6
+ from typing import Literal
7
7
 
8
8
  import httpx
9
9
  import openai
@@ -55,7 +55,7 @@ class GPTImageToImage(OpenAIBaseTool):
55
55
  "based on text descriptions.\n"
56
56
  "You can specify size and quality parameters for more control.\n"
57
57
  )
58
- args_schema: Type[BaseModel] = GPTImageToImageInput
58
+ args_schema: type[BaseModel] = GPTImageToImageInput
59
59
 
60
60
  async def _arun(
61
61
  self,
@@ -73,7 +73,6 @@ class GPTImageToImage(OpenAIBaseTool):
73
73
  size: Size of the generated image. Options: 1024x1024, 1536x1024, 1024x1536, auto
74
74
  quality: Quality of the generated image. Options: high, medium, low, auto
75
75
 
76
-
77
76
  Returns:
78
77
  str: URL of the edited image.
79
78
 
@@ -81,12 +80,9 @@ class GPTImageToImage(OpenAIBaseTool):
81
80
  Exception: If the image editing fails.
82
81
  """
83
82
  context = self.get_context()
84
- skill_config = context.agent.skill_config(self.category)
85
83
 
86
- # Get the OpenAI API key from the skill store
87
- api_key = skill_config.get("api_key") or self.skill_store.get_system_config(
88
- "openai_api_key"
89
- )
84
+ # Get the OpenAI API key from configuration or agent settings
85
+ api_key = self.get_api_key()
90
86
 
91
87
  # Generate a unique job ID
92
88
  job_id = str(XID())
@@ -1,6 +1,5 @@
1
1
  import io
2
2
  import logging
3
- from typing import Type
4
3
 
5
4
  import aiohttp
6
5
  import openai
@@ -46,7 +45,7 @@ class ImageToText(OpenAIBaseTool):
46
45
  "Provide a URL to the image to analyze and get a comprehensive textual description.\n"
47
46
  "Optimized for DALL-E generated images and preserves as many details as possible."
48
47
  )
49
- args_schema: Type[BaseModel] = ImageToTextInput
48
+ args_schema: type[BaseModel] = ImageToTextInput
50
49
 
51
50
  async def _arun(self, image: str, **kwargs) -> ImageToTextOutput:
52
51
  """Implementation of the tool to convert images to text.
@@ -58,13 +57,10 @@ class ImageToText(OpenAIBaseTool):
58
57
  ImageToTextOutput: Object containing the text description and image dimensions.
59
58
  """
60
59
  context = self.get_context()
61
- skill_config = context.agent.skill_config(self.category)
62
60
  logger.debug(f"context: {context}")
63
61
 
64
- # Get the OpenAI client from the skill store
65
- api_key = skill_config.get("api_key") or self.skill_store.get_system_config(
66
- "openai_api_key"
67
- )
62
+ # Get the OpenAI client from configuration or agent settings
63
+ api_key = self.get_api_key()
68
64
  client = openai.AsyncOpenAI(api_key=api_key)
69
65
 
70
66
  try:
@@ -6,15 +6,14 @@
6
6
  "x-icon": "https://ai.service.crestal.dev/skills/openai/openai.png",
7
7
  "x-tags": [
8
8
  "AI",
9
- "Image Generation",
10
- "Image Analysis"
9
+ "Image"
11
10
  ],
12
11
  "properties": {
13
12
  "enabled": {
14
13
  "type": "boolean",
15
14
  "title": "Enabled",
16
15
  "description": "Whether this skill is enabled",
17
- "default": true
16
+ "default": false
18
17
  },
19
18
  "states": {
20
19
  "type": "object",
@@ -67,6 +66,38 @@
67
66
  "description": "Generate images using OpenAI's GPT-Image-1 model based on text prompts",
68
67
  "default": "private"
69
68
  },
69
+ "gpt_image_mini_generator": {
70
+ "type": "string",
71
+ "title": "Image Generation by GPT Mini",
72
+ "enum": [
73
+ "disabled",
74
+ "public",
75
+ "private"
76
+ ],
77
+ "x-enum-title": [
78
+ "Disabled",
79
+ "Agent Owner + All Users",
80
+ "Agent Owner Only"
81
+ ],
82
+ "description": "Generate images using OpenAI's GPT-Image-1-Mini model based on text prompts",
83
+ "default": "private"
84
+ },
85
+ "gpt_avatar_generator": {
86
+ "type": "string",
87
+ "title": "Avatar Generation by GPT Mini",
88
+ "enum": [
89
+ "disabled",
90
+ "public",
91
+ "private"
92
+ ],
93
+ "x-enum-title": [
94
+ "Disabled",
95
+ "Agent Owner + All Users",
96
+ "Agent Owner Only"
97
+ ],
98
+ "description": "Generate avatar-ready profile images using OpenAI's GPT-Image-1-Mini model",
99
+ "default": "private"
100
+ },
70
101
  "gpt_image_to_image": {
71
102
  "type": "string",
72
103
  "title": "Image Editing by GPT",
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import TypedDict
5
5
 
6
- from intentkit.abstracts.skill import SkillStoreABC
7
6
  from intentkit.skills.base import SkillConfig, SkillState
8
7
  from intentkit.skills.portfolio.base import PortfolioBaseTool
9
8
  from intentkit.skills.portfolio.token_balances import TokenBalances
@@ -51,7 +50,6 @@ class Config(SkillConfig):
51
50
  async def get_skills(
52
51
  config: "Config",
53
52
  is_private: bool,
54
- store: SkillStoreABC,
55
53
  **_,
56
54
  ) -> list[PortfolioBaseTool]:
57
55
  """Get all Portfolio blockchain analysis skills.
@@ -59,7 +57,6 @@ async def get_skills(
59
57
  Args:
60
58
  config: The configuration for Portfolio skills.
61
59
  is_private: Whether to include private skills.
62
- store: The skill store for persisting data.
63
60
 
64
61
  Returns:
65
62
  A list of Portfolio blockchain analysis skills.
@@ -76,7 +73,7 @@ async def get_skills(
76
73
  # Get each skill using the cached getter
77
74
  result = []
78
75
  for name in available_skills:
79
- skill = get_portfolio_skill(name, store)
76
+ skill = get_portfolio_skill(name)
80
77
  if skill:
81
78
  result.append(skill)
82
79
  return result
@@ -84,68 +81,47 @@ async def get_skills(
84
81
 
85
82
  def get_portfolio_skill(
86
83
  name: str,
87
- store: SkillStoreABC,
88
84
  ) -> PortfolioBaseTool:
89
85
  """Get a portfolio skill by name."""
90
86
  if name == "wallet_history":
91
87
  if name not in _cache:
92
- _cache[name] = WalletHistory(
93
- skill_store=store,
94
- )
88
+ _cache[name] = WalletHistory()
95
89
  return _cache[name]
96
90
  elif name == "token_balances":
97
91
  if name not in _cache:
98
- _cache[name] = TokenBalances(
99
- skill_store=store,
100
- )
92
+ _cache[name] = TokenBalances()
101
93
  return _cache[name]
102
94
  elif name == "wallet_approvals":
103
95
  if name not in _cache:
104
- _cache[name] = WalletApprovals(
105
- skill_store=store,
106
- )
96
+ _cache[name] = WalletApprovals()
107
97
  return _cache[name]
108
98
  elif name == "wallet_swaps":
109
99
  if name not in _cache:
110
- _cache[name] = WalletSwaps(
111
- skill_store=store,
112
- )
100
+ _cache[name] = WalletSwaps()
113
101
  return _cache[name]
114
102
  elif name == "wallet_net_worth":
115
103
  if name not in _cache:
116
- _cache[name] = WalletNetWorth(
117
- skill_store=store,
118
- )
104
+ _cache[name] = WalletNetWorth()
119
105
  return _cache[name]
120
106
  elif name == "wallet_profitability_summary":
121
107
  if name not in _cache:
122
- _cache[name] = WalletProfitabilitySummary(
123
- skill_store=store,
124
- )
108
+ _cache[name] = WalletProfitabilitySummary()
125
109
  return _cache[name]
126
110
  elif name == "wallet_profitability":
127
111
  if name not in _cache:
128
- _cache[name] = WalletProfitability(
129
- skill_store=store,
130
- )
112
+ _cache[name] = WalletProfitability()
131
113
  return _cache[name]
132
114
  elif name == "wallet_stats":
133
115
  if name not in _cache:
134
- _cache[name] = WalletStats(
135
- skill_store=store,
136
- )
116
+ _cache[name] = WalletStats()
137
117
  return _cache[name]
138
118
  elif name == "wallet_defi_positions":
139
119
  if name not in _cache:
140
- _cache[name] = WalletDefiPositions(
141
- skill_store=store,
142
- )
120
+ _cache[name] = WalletDefiPositions()
143
121
  return _cache[name]
144
122
  elif name == "wallet_nfts":
145
123
  if name not in _cache:
146
- _cache[name] = WalletNFTs(
147
- skill_store=store,
148
- )
124
+ _cache[name] = WalletNFTs()
149
125
  return _cache[name]
150
126
  else:
151
127
  raise ValueError(f"Unknown portfolio skill: {name}")