intentkit 0.7.5.dev3__py3-none-any.whl → 0.8.34.dev7__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.
Files changed (393) hide show
  1. intentkit/MANIFEST.in +14 -0
  2. intentkit/README.md +88 -0
  3. intentkit/__init__.py +6 -4
  4. intentkit/abstracts/agent.py +4 -5
  5. intentkit/abstracts/engine.py +5 -5
  6. intentkit/abstracts/graph.py +15 -8
  7. intentkit/abstracts/skill.py +6 -144
  8. intentkit/abstracts/twitter.py +4 -5
  9. intentkit/clients/__init__.py +9 -2
  10. intentkit/clients/cdp.py +129 -153
  11. intentkit/{utils → clients}/s3.py +109 -34
  12. intentkit/clients/twitter.py +83 -62
  13. intentkit/clients/web3.py +4 -7
  14. intentkit/config/config.py +123 -90
  15. intentkit/core/account_checking.py +802 -0
  16. intentkit/core/agent.py +313 -498
  17. intentkit/core/asset.py +267 -0
  18. intentkit/core/chat.py +5 -3
  19. intentkit/core/client.py +1 -1
  20. intentkit/core/credit.py +49 -41
  21. intentkit/core/draft.py +201 -0
  22. intentkit/core/draft_chat.py +118 -0
  23. intentkit/core/engine.py +378 -287
  24. intentkit/core/manager/__init__.py +25 -0
  25. intentkit/core/manager/engine.py +220 -0
  26. intentkit/core/manager/service.py +172 -0
  27. intentkit/core/manager/skills.py +178 -0
  28. intentkit/core/middleware.py +231 -0
  29. intentkit/core/prompt.py +74 -114
  30. intentkit/core/scheduler.py +143 -0
  31. intentkit/core/statistics.py +168 -0
  32. intentkit/models/agent.py +931 -518
  33. intentkit/models/agent_data.py +165 -106
  34. intentkit/models/agent_schema.json +38 -251
  35. intentkit/models/app_setting.py +15 -13
  36. intentkit/models/chat.py +86 -140
  37. intentkit/models/credit.py +182 -162
  38. intentkit/models/db.py +42 -23
  39. intentkit/models/db_mig.py +120 -3
  40. intentkit/models/draft.py +222 -0
  41. intentkit/models/llm.csv +31 -0
  42. intentkit/models/llm.py +262 -370
  43. intentkit/models/redis.py +6 -4
  44. intentkit/models/skill.py +222 -101
  45. intentkit/models/skills.csv +173 -0
  46. intentkit/models/team.py +189 -0
  47. intentkit/models/user.py +103 -31
  48. intentkit/skills/acolyt/__init__.py +2 -9
  49. intentkit/skills/acolyt/ask.py +3 -4
  50. intentkit/skills/acolyt/base.py +4 -9
  51. intentkit/skills/acolyt/schema.json +4 -3
  52. intentkit/skills/aixbt/__init__.py +2 -13
  53. intentkit/skills/aixbt/base.py +1 -7
  54. intentkit/skills/aixbt/projects.py +14 -15
  55. intentkit/skills/aixbt/schema.json +4 -4
  56. intentkit/skills/allora/__init__.py +2 -9
  57. intentkit/skills/allora/base.py +4 -9
  58. intentkit/skills/allora/price.py +3 -4
  59. intentkit/skills/allora/schema.json +3 -2
  60. intentkit/skills/base.py +241 -41
  61. intentkit/skills/basename/__init__.py +51 -0
  62. intentkit/skills/basename/base.py +11 -0
  63. intentkit/skills/basename/basename.svg +11 -0
  64. intentkit/skills/basename/schema.json +58 -0
  65. intentkit/skills/carv/__init__.py +115 -121
  66. intentkit/skills/carv/base.py +184 -185
  67. intentkit/skills/carv/fetch_news.py +3 -3
  68. intentkit/skills/carv/onchain_query.py +4 -4
  69. intentkit/skills/carv/schema.json +134 -137
  70. intentkit/skills/carv/token_info_and_price.py +6 -6
  71. intentkit/skills/casino/__init__.py +4 -15
  72. intentkit/skills/casino/base.py +1 -7
  73. intentkit/skills/casino/deck_draw.py +5 -8
  74. intentkit/skills/casino/deck_shuffle.py +6 -6
  75. intentkit/skills/casino/dice_roll.py +2 -4
  76. intentkit/skills/casino/schema.json +0 -1
  77. intentkit/skills/cdp/__init__.py +22 -84
  78. intentkit/skills/cdp/base.py +1 -7
  79. intentkit/skills/cdp/schema.json +11 -314
  80. intentkit/skills/chainlist/__init__.py +2 -7
  81. intentkit/skills/chainlist/base.py +1 -7
  82. intentkit/skills/chainlist/chain_lookup.py +18 -18
  83. intentkit/skills/chainlist/schema.json +3 -5
  84. intentkit/skills/common/__init__.py +2 -9
  85. intentkit/skills/common/base.py +1 -7
  86. intentkit/skills/common/current_time.py +1 -2
  87. intentkit/skills/common/schema.json +2 -2
  88. intentkit/skills/cookiefun/__init__.py +6 -9
  89. intentkit/skills/cookiefun/base.py +2 -7
  90. intentkit/skills/cookiefun/get_account_details.py +7 -7
  91. intentkit/skills/cookiefun/get_account_feed.py +19 -19
  92. intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
  93. intentkit/skills/cookiefun/get_sectors.py +3 -3
  94. intentkit/skills/cookiefun/schema.json +1 -3
  95. intentkit/skills/cookiefun/search_accounts.py +9 -9
  96. intentkit/skills/cryptocompare/__init__.py +7 -24
  97. intentkit/skills/cryptocompare/api.py +2 -3
  98. intentkit/skills/cryptocompare/base.py +10 -24
  99. intentkit/skills/cryptocompare/fetch_news.py +4 -5
  100. intentkit/skills/cryptocompare/fetch_price.py +6 -7
  101. intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
  102. intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
  103. intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
  104. intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
  105. intentkit/skills/cryptocompare/schema.json +3 -3
  106. intentkit/skills/cryptopanic/__init__.py +7 -10
  107. intentkit/skills/cryptopanic/base.py +51 -55
  108. intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
  109. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
  110. intentkit/skills/cryptopanic/schema.json +105 -103
  111. intentkit/skills/dapplooker/__init__.py +2 -9
  112. intentkit/skills/dapplooker/base.py +4 -9
  113. intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
  114. intentkit/skills/dapplooker/schema.json +3 -5
  115. intentkit/skills/defillama/__init__.py +24 -74
  116. intentkit/skills/defillama/api.py +6 -9
  117. intentkit/skills/defillama/base.py +8 -19
  118. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
  119. intentkit/skills/defillama/coins/fetch_block.py +6 -8
  120. intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
  121. intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
  122. intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
  123. intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
  124. intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
  125. intentkit/skills/defillama/config/chains.py +1 -3
  126. intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
  127. intentkit/skills/defillama/schema.json +5 -1
  128. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
  129. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
  130. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
  131. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
  132. intentkit/skills/defillama/tests/api_integration.test.py +1 -1
  133. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
  134. intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
  135. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
  136. intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
  137. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
  138. intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
  139. intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
  140. intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
  141. intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
  142. intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
  143. intentkit/skills/defillama/yields/fetch_pools.py +26 -30
  144. intentkit/skills/dexscreener/__init__.py +97 -102
  145. intentkit/skills/dexscreener/base.py +125 -130
  146. intentkit/skills/dexscreener/get_pair_info.py +4 -5
  147. intentkit/skills/dexscreener/get_token_pairs.py +4 -5
  148. intentkit/skills/dexscreener/get_tokens_info.py +7 -8
  149. intentkit/skills/dexscreener/model/search_token_response.py +80 -82
  150. intentkit/skills/dexscreener/schema.json +91 -93
  151. intentkit/skills/dexscreener/search_token.py +182 -184
  152. intentkit/skills/dexscreener/utils.py +15 -14
  153. intentkit/skills/dune_analytics/__init__.py +7 -9
  154. intentkit/skills/dune_analytics/base.py +48 -52
  155. intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
  156. intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
  157. intentkit/skills/dune_analytics/schema.json +104 -99
  158. intentkit/skills/elfa/__init__.py +5 -18
  159. intentkit/skills/elfa/base.py +10 -14
  160. intentkit/skills/elfa/mention.py +19 -21
  161. intentkit/skills/elfa/schema.json +3 -2
  162. intentkit/skills/elfa/stats.py +4 -4
  163. intentkit/skills/elfa/tokens.py +12 -12
  164. intentkit/skills/elfa/utils.py +26 -28
  165. intentkit/skills/enso/__init__.py +11 -31
  166. intentkit/skills/enso/base.py +54 -35
  167. intentkit/skills/enso/best_yield.py +16 -24
  168. intentkit/skills/enso/networks.py +6 -11
  169. intentkit/skills/enso/prices.py +11 -13
  170. intentkit/skills/enso/route.py +34 -38
  171. intentkit/skills/enso/schema.json +3 -2
  172. intentkit/skills/enso/tokens.py +29 -38
  173. intentkit/skills/enso/wallet.py +76 -191
  174. intentkit/skills/erc20/__init__.py +50 -0
  175. intentkit/skills/erc20/base.py +11 -0
  176. intentkit/skills/erc20/erc20.svg +5 -0
  177. intentkit/skills/erc20/schema.json +74 -0
  178. intentkit/skills/erc721/__init__.py +53 -0
  179. intentkit/skills/erc721/base.py +11 -0
  180. intentkit/skills/erc721/erc721.svg +5 -0
  181. intentkit/skills/erc721/schema.json +90 -0
  182. intentkit/skills/firecrawl/__init__.py +5 -18
  183. intentkit/skills/firecrawl/base.py +4 -9
  184. intentkit/skills/firecrawl/clear.py +4 -8
  185. intentkit/skills/firecrawl/crawl.py +19 -19
  186. intentkit/skills/firecrawl/query.py +4 -3
  187. intentkit/skills/firecrawl/schema.json +2 -6
  188. intentkit/skills/firecrawl/scrape.py +17 -22
  189. intentkit/skills/firecrawl/utils.py +50 -42
  190. intentkit/skills/github/__init__.py +2 -7
  191. intentkit/skills/github/base.py +1 -7
  192. intentkit/skills/github/github_search.py +1 -2
  193. intentkit/skills/github/schema.json +3 -4
  194. intentkit/skills/heurist/__init__.py +8 -27
  195. intentkit/skills/heurist/base.py +4 -9
  196. intentkit/skills/heurist/image_generation_animagine_xl.py +13 -15
  197. intentkit/skills/heurist/image_generation_arthemy_comics.py +13 -15
  198. intentkit/skills/heurist/image_generation_arthemy_real.py +13 -15
  199. intentkit/skills/heurist/image_generation_braindance.py +13 -15
  200. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +13 -15
  201. intentkit/skills/heurist/image_generation_flux_1_dev.py +13 -15
  202. intentkit/skills/heurist/image_generation_sdxl.py +13 -15
  203. intentkit/skills/heurist/schema.json +2 -2
  204. intentkit/skills/http/__init__.py +4 -15
  205. intentkit/skills/http/base.py +1 -7
  206. intentkit/skills/http/get.py +21 -16
  207. intentkit/skills/http/post.py +23 -18
  208. intentkit/skills/http/put.py +23 -18
  209. intentkit/skills/http/schema.json +4 -5
  210. intentkit/skills/lifi/__init__.py +8 -13
  211. intentkit/skills/lifi/base.py +3 -9
  212. intentkit/skills/lifi/schema.json +17 -8
  213. intentkit/skills/lifi/token_execute.py +150 -60
  214. intentkit/skills/lifi/token_quote.py +8 -10
  215. intentkit/skills/lifi/utils.py +104 -51
  216. intentkit/skills/moralis/__init__.py +6 -10
  217. intentkit/skills/moralis/api.py +6 -7
  218. intentkit/skills/moralis/base.py +5 -10
  219. intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
  220. intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
  221. intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
  222. intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
  223. intentkit/skills/moralis/schema.json +7 -2
  224. intentkit/skills/morpho/__init__.py +52 -0
  225. intentkit/skills/morpho/base.py +11 -0
  226. intentkit/skills/morpho/morpho.svg +12 -0
  227. intentkit/skills/morpho/schema.json +73 -0
  228. intentkit/skills/nation/__init__.py +4 -9
  229. intentkit/skills/nation/base.py +5 -10
  230. intentkit/skills/nation/nft_check.py +3 -4
  231. intentkit/skills/nation/schema.json +4 -3
  232. intentkit/skills/onchain.py +30 -0
  233. intentkit/skills/openai/__init__.py +17 -18
  234. intentkit/skills/openai/base.py +10 -14
  235. intentkit/skills/openai/dalle_image_generation.py +4 -9
  236. intentkit/skills/openai/gpt_avatar_generator.py +102 -0
  237. intentkit/skills/openai/gpt_image_generation.py +5 -9
  238. intentkit/skills/openai/gpt_image_mini_generator.py +92 -0
  239. intentkit/skills/openai/gpt_image_to_image.py +5 -9
  240. intentkit/skills/openai/image_to_text.py +3 -7
  241. intentkit/skills/openai/schema.json +34 -3
  242. intentkit/skills/portfolio/__init__.py +11 -35
  243. intentkit/skills/portfolio/base.py +33 -19
  244. intentkit/skills/portfolio/schema.json +3 -5
  245. intentkit/skills/portfolio/token_balances.py +21 -21
  246. intentkit/skills/portfolio/wallet_approvals.py +17 -18
  247. intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
  248. intentkit/skills/portfolio/wallet_history.py +31 -31
  249. intentkit/skills/portfolio/wallet_net_worth.py +13 -13
  250. intentkit/skills/portfolio/wallet_nfts.py +19 -19
  251. intentkit/skills/portfolio/wallet_profitability.py +18 -18
  252. intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
  253. intentkit/skills/portfolio/wallet_stats.py +3 -3
  254. intentkit/skills/portfolio/wallet_swaps.py +19 -19
  255. intentkit/skills/pyth/__init__.py +50 -0
  256. intentkit/skills/pyth/base.py +11 -0
  257. intentkit/skills/pyth/pyth.svg +6 -0
  258. intentkit/skills/pyth/schema.json +75 -0
  259. intentkit/skills/skills.toml +36 -0
  260. intentkit/skills/slack/__init__.py +5 -17
  261. intentkit/skills/slack/base.py +3 -9
  262. intentkit/skills/slack/get_channel.py +8 -8
  263. intentkit/skills/slack/get_message.py +9 -9
  264. intentkit/skills/slack/schedule_message.py +5 -5
  265. intentkit/skills/slack/schema.json +2 -2
  266. intentkit/skills/slack/send_message.py +3 -5
  267. intentkit/skills/supabase/__init__.py +7 -23
  268. intentkit/skills/supabase/base.py +1 -7
  269. intentkit/skills/supabase/delete_data.py +4 -4
  270. intentkit/skills/supabase/fetch_data.py +12 -12
  271. intentkit/skills/supabase/insert_data.py +4 -4
  272. intentkit/skills/supabase/invoke_function.py +6 -6
  273. intentkit/skills/supabase/schema.json +2 -3
  274. intentkit/skills/supabase/update_data.py +6 -6
  275. intentkit/skills/supabase/upsert_data.py +4 -4
  276. intentkit/skills/superfluid/__init__.py +53 -0
  277. intentkit/skills/superfluid/base.py +11 -0
  278. intentkit/skills/superfluid/schema.json +89 -0
  279. intentkit/skills/superfluid/superfluid.svg +6 -0
  280. intentkit/skills/system/__init__.py +7 -24
  281. intentkit/skills/system/add_autonomous_task.py +10 -12
  282. intentkit/skills/system/delete_autonomous_task.py +2 -2
  283. intentkit/skills/system/edit_autonomous_task.py +14 -18
  284. intentkit/skills/system/list_autonomous_tasks.py +3 -5
  285. intentkit/skills/system/read_agent_api_key.py +6 -4
  286. intentkit/skills/system/regenerate_agent_api_key.py +6 -4
  287. intentkit/skills/system/schema.json +6 -8
  288. intentkit/skills/tavily/__init__.py +3 -12
  289. intentkit/skills/tavily/base.py +4 -9
  290. intentkit/skills/tavily/schema.json +3 -5
  291. intentkit/skills/tavily/tavily_extract.py +2 -4
  292. intentkit/skills/tavily/tavily_search.py +4 -6
  293. intentkit/skills/token/__init__.py +5 -10
  294. intentkit/skills/token/base.py +7 -11
  295. intentkit/skills/token/erc20_transfers.py +19 -19
  296. intentkit/skills/token/schema.json +3 -6
  297. intentkit/skills/token/token_analytics.py +3 -3
  298. intentkit/skills/token/token_price.py +13 -13
  299. intentkit/skills/token/token_search.py +9 -9
  300. intentkit/skills/twitter/__init__.py +11 -35
  301. intentkit/skills/twitter/base.py +22 -34
  302. intentkit/skills/twitter/follow_user.py +2 -6
  303. intentkit/skills/twitter/get_mentions.py +5 -12
  304. intentkit/skills/twitter/get_timeline.py +4 -12
  305. intentkit/skills/twitter/get_user_by_username.py +2 -6
  306. intentkit/skills/twitter/get_user_tweets.py +5 -13
  307. intentkit/skills/twitter/like_tweet.py +2 -6
  308. intentkit/skills/twitter/post_tweet.py +6 -9
  309. intentkit/skills/twitter/reply_tweet.py +6 -9
  310. intentkit/skills/twitter/retweet.py +2 -6
  311. intentkit/skills/twitter/schema.json +1 -0
  312. intentkit/skills/twitter/search_tweets.py +4 -12
  313. intentkit/skills/unrealspeech/__init__.py +2 -7
  314. intentkit/skills/unrealspeech/base.py +2 -8
  315. intentkit/skills/unrealspeech/schema.json +2 -5
  316. intentkit/skills/unrealspeech/text_to_speech.py +8 -8
  317. intentkit/skills/venice_audio/__init__.py +98 -106
  318. intentkit/skills/venice_audio/base.py +117 -121
  319. intentkit/skills/venice_audio/input.py +41 -41
  320. intentkit/skills/venice_audio/schema.json +151 -152
  321. intentkit/skills/venice_audio/venice_audio.py +38 -21
  322. intentkit/skills/venice_image/__init__.py +147 -154
  323. intentkit/skills/venice_image/api.py +138 -138
  324. intentkit/skills/venice_image/base.py +185 -192
  325. intentkit/skills/venice_image/config.py +33 -35
  326. intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
  327. intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
  328. intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
  329. intentkit/skills/venice_image/image_generation/image_generation_base.py +11 -10
  330. intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
  331. intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
  332. intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
  333. intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
  334. intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
  335. intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
  336. intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
  337. intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
  338. intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
  339. intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
  340. intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
  341. intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
  342. intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
  343. intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
  344. intentkit/skills/venice_image/schema.json +267 -267
  345. intentkit/skills/venice_image/utils.py +77 -78
  346. intentkit/skills/web_scraper/__init__.py +5 -18
  347. intentkit/skills/web_scraper/base.py +21 -7
  348. intentkit/skills/web_scraper/document_indexer.py +7 -6
  349. intentkit/skills/web_scraper/schema.json +2 -6
  350. intentkit/skills/web_scraper/scrape_and_index.py +15 -15
  351. intentkit/skills/web_scraper/utils.py +62 -63
  352. intentkit/skills/web_scraper/website_indexer.py +17 -19
  353. intentkit/skills/weth/__init__.py +49 -0
  354. intentkit/skills/weth/base.py +11 -0
  355. intentkit/skills/weth/schema.json +58 -0
  356. intentkit/skills/weth/weth.svg +6 -0
  357. intentkit/skills/wow/__init__.py +51 -0
  358. intentkit/skills/wow/base.py +11 -0
  359. intentkit/skills/wow/schema.json +89 -0
  360. intentkit/skills/wow/wow.svg +7 -0
  361. intentkit/skills/x402/__init__.py +58 -0
  362. intentkit/skills/x402/base.py +99 -0
  363. intentkit/skills/x402/http_request.py +117 -0
  364. intentkit/skills/x402/schema.json +40 -0
  365. intentkit/skills/x402/x402.webp +0 -0
  366. intentkit/skills/xmtp/__init__.py +4 -15
  367. intentkit/skills/xmtp/base.py +5 -5
  368. intentkit/skills/xmtp/price.py +7 -6
  369. intentkit/skills/xmtp/schema.json +69 -71
  370. intentkit/skills/xmtp/swap.py +6 -8
  371. intentkit/skills/xmtp/transfer.py +4 -6
  372. intentkit/utils/__init__.py +4 -0
  373. intentkit/utils/chain.py +198 -96
  374. intentkit/utils/ens.py +135 -0
  375. intentkit/utils/error.py +5 -2
  376. intentkit/utils/logging.py +9 -11
  377. intentkit/utils/schema.py +100 -0
  378. intentkit/utils/slack_alert.py +8 -8
  379. intentkit/utils/tx.py +16 -8
  380. intentkit/uv.lock +3377 -0
  381. {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/METADATA +13 -15
  382. intentkit-0.8.34.dev7.dist-info/RECORD +478 -0
  383. intentkit-0.8.34.dev7.dist-info/licenses/LICENSE +21 -0
  384. intentkit/core/node.py +0 -215
  385. intentkit/models/conversation.py +0 -286
  386. intentkit/models/generator.py +0 -347
  387. intentkit/skills/cdp/get_balance.py +0 -110
  388. intentkit/skills/cdp/swap.py +0 -121
  389. intentkit/skills/moralis/tests/__init__.py +0 -0
  390. intentkit/skills/moralis/tests/test_wallet.py +0 -511
  391. intentkit-0.7.5.dev3.dist-info/RECORD +0 -424
  392. {intentkit-0.7.5.dev3.dist-info/licenses → intentkit}/LICENSE +0 -0
  393. {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/WHEEL +0 -0
intentkit/models/chat.py CHANGED
@@ -1,16 +1,14 @@
1
- from datetime import datetime, timezone
1
+ from __future__ import annotations
2
+
3
+ from datetime import UTC, datetime
2
4
  from decimal import Decimal
3
5
  from enum import Enum
4
- from typing import Annotated, List, NotRequired, Optional, TypedDict
6
+ from typing import Annotated, ClassVar, NotRequired, TypedDict, final
5
7
 
6
8
  from epyxid import XID
7
- from intentkit.models.app_setting import AppSetting, SystemMessageType
8
- from intentkit.models.base import Base
9
- from intentkit.models.db import get_session
10
9
  from pydantic import BaseModel, ConfigDict, Field
11
10
  from sqlalchemy import (
12
11
  Boolean,
13
- Column,
14
12
  DateTime,
15
13
  Float,
16
14
  Index,
@@ -24,6 +22,11 @@ from sqlalchemy import (
24
22
  )
25
23
  from sqlalchemy.dialects.postgresql import JSON, JSONB
26
24
  from sqlalchemy.ext.asyncio import AsyncSession
25
+ from sqlalchemy.orm import Mapped, mapped_column
26
+
27
+ from intentkit.models.app_setting import AppSetting, SystemMessageType
28
+ from intentkit.models.base import Base
29
+ from intentkit.models.db import get_session
27
30
 
28
31
 
29
32
  class ChatMessageAttachmentType(str, Enum):
@@ -43,10 +46,12 @@ class AuthorType(str, Enum):
43
46
  SKILL = "skill"
44
47
  TELEGRAM = "telegram"
45
48
  TWITTER = "twitter"
49
+ DISCORD = "discord"
46
50
  WEB = "web"
47
51
  SYSTEM = "system"
48
52
  API = "api"
49
53
  XMTP = "xmtp"
54
+ X402 = "x402"
50
55
 
51
56
 
52
57
  class ChatMessageAttachment(TypedDict):
@@ -64,7 +69,7 @@ class ChatMessageAttachment(TypedDict):
64
69
  ),
65
70
  ]
66
71
  url: Annotated[
67
- Optional[str],
72
+ str | None,
68
73
  Field(
69
74
  ...,
70
75
  description="URL of the attachment",
@@ -72,7 +77,7 @@ class ChatMessageAttachment(TypedDict):
72
77
  ),
73
78
  ]
74
79
  json: Annotated[
75
- Optional[dict],
80
+ dict[str, object] | None,
76
81
  Field(
77
82
  None,
78
83
  description="JSON data of the attachment",
@@ -85,7 +90,7 @@ class ChatMessageSkillCall(TypedDict):
85
90
 
86
91
  id: NotRequired[str]
87
92
  name: str
88
- parameters: dict
93
+ parameters: dict[str, object]
89
94
  success: bool
90
95
  response: NotRequired[
91
96
  str
@@ -113,7 +118,7 @@ class ChatMessageRequest(BaseModel):
113
118
  ),
114
119
  ]
115
120
  app_id: Annotated[
116
- Optional[str],
121
+ str | None,
117
122
  Field(
118
123
  None,
119
124
  description="Optional application identifier",
@@ -140,21 +145,21 @@ class ChatMessageRequest(BaseModel):
140
145
  ),
141
146
  ]
142
147
  search_mode: Annotated[
143
- Optional[bool],
148
+ bool | None,
144
149
  Field(
145
150
  None,
146
151
  description="Optional flag to enable search mode",
147
152
  ),
148
153
  ]
149
154
  super_mode: Annotated[
150
- Optional[bool],
155
+ bool | None,
151
156
  Field(
152
157
  None,
153
158
  description="Optional flag to enable super mode",
154
159
  ),
155
160
  ]
156
161
  attachments: Annotated[
157
- Optional[List[ChatMessageAttachment]],
162
+ list[ChatMessageAttachment] | None,
158
163
  Field(
159
164
  None,
160
165
  description="Optional list of attachments (links, images, or files)",
@@ -162,126 +167,67 @@ class ChatMessageRequest(BaseModel):
162
167
  ),
163
168
  ]
164
169
 
165
- model_config = ConfigDict(
170
+ model_config: ClassVar[ConfigDict] = ConfigDict(
166
171
  use_enum_values=True,
167
172
  json_schema_extra={
168
173
  "example": {
169
174
  "chat_id": "chat-123",
170
175
  "app_id": "app-789",
171
176
  "user_id": "user-456",
172
- "message": "Hello, how can you help me today?",
173
- "search_mode": True,
177
+ "message": "Hello, what can you do?",
178
+ "search_mode": False,
174
179
  "super_mode": False,
175
- "attachments": [
176
- {
177
- "type": "link",
178
- "url": "https://example.com",
179
- }
180
- ],
181
180
  }
182
181
  },
183
182
  )
184
183
 
185
184
 
185
+ @final
186
186
  class ChatMessageTable(Base):
187
187
  """Chat message database table model."""
188
188
 
189
189
  __tablename__ = "chat_messages"
190
- __table_args__ = (
190
+ __table_args__ = ( # pyright: ignore[reportAny]
191
191
  Index("ix_chat_messages_chat_id", "chat_id"),
192
192
  Index("ix_chat_messages_agent_id_author_type", "agent_id", "author_type"),
193
193
  Index("ix_chat_messages_agent_id_chat_id", "agent_id", "chat_id"),
194
194
  )
195
195
 
196
- id = Column(
197
- String,
198
- primary_key=True,
199
- )
200
- agent_id = Column(
201
- String,
202
- nullable=False,
203
- )
204
- chat_id = Column(
205
- String,
206
- nullable=False,
207
- )
208
- user_id = Column(
209
- String,
210
- nullable=True,
211
- )
212
- author_id = Column(
213
- String,
214
- nullable=False,
215
- )
216
- author_type = Column(
217
- String,
218
- nullable=False,
219
- )
220
- model = Column(
221
- String,
222
- nullable=True,
223
- )
224
- thread_type = Column(
225
- String,
226
- nullable=True,
227
- )
228
- reply_to = Column(
229
- String,
230
- nullable=True,
231
- )
232
- message = Column(
233
- String,
234
- nullable=False,
235
- )
236
- attachments = Column(
196
+ id: Mapped[str] = mapped_column(String, primary_key=True)
197
+ agent_id: Mapped[str] = mapped_column(String, nullable=False)
198
+ chat_id: Mapped[str] = mapped_column(String, nullable=False)
199
+ user_id: Mapped[str | None] = mapped_column(String, nullable=True)
200
+ author_id: Mapped[str] = mapped_column(String, nullable=False)
201
+ author_type: Mapped[str] = mapped_column(String, nullable=False)
202
+ model: Mapped[str | None] = mapped_column(String, nullable=True)
203
+ thread_type: Mapped[AuthorType | None] = mapped_column(String, nullable=True)
204
+ reply_to: Mapped[str | None] = mapped_column(String, nullable=True)
205
+ message: Mapped[str] = mapped_column(String, nullable=False)
206
+ attachments: Mapped[list[ChatMessageAttachment] | None] = mapped_column(
237
207
  JSON().with_variant(JSONB(), "postgresql"),
238
208
  nullable=True,
239
209
  )
240
- skill_calls = Column(
210
+ skill_calls: Mapped[list[ChatMessageSkillCall] | None] = mapped_column(
241
211
  JSON().with_variant(JSONB(), "postgresql"),
242
212
  nullable=True,
243
213
  )
244
- input_tokens = Column(
245
- Integer,
246
- default=0,
247
- )
248
- output_tokens = Column(
249
- Integer,
250
- default=0,
251
- )
252
- time_cost = Column(
253
- Float,
254
- default=0,
255
- )
256
- credit_event_id = Column(
257
- String,
258
- nullable=True,
259
- )
260
- credit_cost = Column(
214
+ input_tokens: Mapped[int] = mapped_column(Integer, default=0)
215
+ output_tokens: Mapped[int] = mapped_column(Integer, default=0)
216
+ time_cost: Mapped[float] = mapped_column(Float, default=0)
217
+ credit_event_id: Mapped[str | None] = mapped_column(String, nullable=True)
218
+ credit_cost: Mapped[Decimal | None] = mapped_column(
261
219
  Numeric(22, 4),
262
220
  nullable=True,
263
221
  )
264
- cold_start_cost = Column(
265
- Float,
266
- default=0,
267
- )
268
- app_id = Column(
269
- String,
270
- nullable=True,
271
- )
272
- search_mode = Column(
273
- Boolean,
274
- nullable=True,
275
- )
276
- super_mode = Column(
277
- Boolean,
278
- nullable=True,
279
- )
280
- error_type = Column(
222
+ cold_start_cost: Mapped[float] = mapped_column(Float, default=0)
223
+ app_id: Mapped[str | None] = mapped_column(String, nullable=True)
224
+ search_mode: Mapped[bool | None] = mapped_column(Boolean, nullable=True)
225
+ super_mode: Mapped[bool | None] = mapped_column(Boolean, nullable=True)
226
+ error_type: Mapped[SystemMessageType | None] = mapped_column(
281
227
  String,
282
228
  nullable=True,
283
229
  )
284
- created_at = Column(
230
+ created_at: Mapped[datetime] = mapped_column(
285
231
  DateTime(timezone=True),
286
232
  nullable=False,
287
233
  server_default=func.now(),
@@ -291,7 +237,7 @@ class ChatMessageTable(Base):
291
237
  class ChatMessageCreate(BaseModel):
292
238
  """Base model for creating chat messages with fields needed for creation."""
293
239
 
294
- model_config = ConfigDict(
240
+ model_config: ClassVar[ConfigDict] = ConfigDict(
295
241
  use_enum_values=True,
296
242
  from_attributes=True,
297
243
  )
@@ -308,68 +254,68 @@ class ChatMessageCreate(BaseModel):
308
254
  ]
309
255
  chat_id: Annotated[str, Field(description="ID of the chat this message belongs to")]
310
256
  user_id: Annotated[
311
- Optional[str],
257
+ str | None,
312
258
  Field(description="ID of the user this message belongs to or reply to"),
313
259
  ]
314
260
  author_id: Annotated[str, Field(description="ID of the message author")]
315
261
  author_type: Annotated[AuthorType, Field(description="Type of the message author")]
316
262
  model: Annotated[
317
- Optional[str], Field(None, description="LLM model used if applicable")
318
- ]
263
+ str | None, Field(None, description="LLM model used if applicable")
264
+ ] = None
319
265
  thread_type: Annotated[
320
- Optional[AuthorType],
266
+ AuthorType | None,
321
267
  Field(None, description="Author Type of the message thread start"),
322
- ]
268
+ ] = None
323
269
  reply_to: Annotated[
324
- Optional[str],
270
+ str | None,
325
271
  Field(None, description="ID of the message this message is a reply to"),
326
- ]
272
+ ] = None
327
273
  message: Annotated[str, Field(description="Content of the message")]
328
274
  attachments: Annotated[
329
- Optional[List[ChatMessageAttachment]],
275
+ list[ChatMessageAttachment] | None,
330
276
  Field(None, description="List of attachments in the message"),
331
- ]
277
+ ] = None
332
278
  skill_calls: Annotated[
333
- Optional[List[ChatMessageSkillCall]],
279
+ list[ChatMessageSkillCall] | None,
334
280
  Field(None, description="Skill call details"),
335
- ]
281
+ ] = None
336
282
  input_tokens: Annotated[
337
283
  int, Field(0, description="Number of tokens in the input message")
338
- ]
284
+ ] = 0
339
285
  output_tokens: Annotated[
340
286
  int, Field(0, description="Number of tokens in the output message")
341
- ]
287
+ ] = 0
342
288
  time_cost: Annotated[
343
289
  float, Field(0.0, description="Time cost for the message in seconds")
344
- ]
290
+ ] = 0.0
345
291
  credit_event_id: Annotated[
346
- Optional[str],
292
+ str | None,
347
293
  Field(None, description="ID of the credit event for this message"),
348
- ]
294
+ ] = None
349
295
  credit_cost: Annotated[
350
- Optional[Decimal],
296
+ Decimal | None,
351
297
  Field(None, description="Credit cost for the message in credits"),
352
- ]
298
+ ] = None
353
299
  cold_start_cost: Annotated[
354
300
  float,
355
301
  Field(0.0, description="Cost for the cold start of the message in seconds"),
356
- ]
302
+ ] = 0.0
357
303
  app_id: Annotated[
358
- Optional[str],
304
+ str | None,
359
305
  Field(None, description="Optional application identifier"),
360
- ]
306
+ ] = None
361
307
  search_mode: Annotated[
362
- Optional[bool],
308
+ bool | None,
363
309
  Field(None, description="Optional flag to enable search mode"),
364
- ]
310
+ ] = None
365
311
  super_mode: Annotated[
366
- Optional[bool],
312
+ bool | None,
367
313
  Field(None, description="Optional flag to enable super mode"),
368
- ]
314
+ ] = None
369
315
  error_type: Annotated[
370
- Optional[SystemMessageType],
316
+ SystemMessageType | None,
371
317
  Field(None, description="Optional error type, used when author_type is system"),
372
- ]
318
+ ] = None
373
319
 
374
320
  async def save_in_session(self, db: AsyncSession) -> "ChatMessage":
375
321
  """Save the chat message to the database.
@@ -433,7 +379,7 @@ class ChatMessageCreate(BaseModel):
433
379
  class ChatMessage(ChatMessageCreate):
434
380
  """Chat message model with all fields including server-generated ones."""
435
381
 
436
- model_config = ConfigDict(
382
+ model_config: ClassVar[ConfigDict] = ConfigDict(
437
383
  use_enum_values=True,
438
384
  json_encoders={
439
385
  datetime: lambda v: v.isoformat(timespec="milliseconds"),
@@ -526,7 +472,7 @@ class ChatMessage(ChatMessageCreate):
526
472
  return ChatMessage.model_validate(sanitized_data)
527
473
 
528
474
  @classmethod
529
- async def get(cls, message_id: str) -> Optional["ChatMessage"]:
475
+ async def get(cls, message_id: str) -> ChatMessage | None:
530
476
  async with get_session() as db:
531
477
  raw = await db.get(ChatMessageTable, message_id)
532
478
  if raw:
@@ -540,36 +486,36 @@ class ChatTable(Base):
540
486
  __tablename__ = "chats"
541
487
  __table_args__ = (Index("ix_chats_agent_user", "agent_id", "user_id"),)
542
488
 
543
- id = Column(
489
+ id: Mapped[str] = mapped_column(
544
490
  String,
545
491
  primary_key=True,
546
492
  )
547
- agent_id = Column(
493
+ agent_id: Mapped[str] = mapped_column(
548
494
  String,
549
495
  nullable=False,
550
496
  )
551
- user_id = Column(
497
+ user_id: Mapped[str] = mapped_column(
552
498
  String,
553
499
  nullable=False,
554
500
  )
555
- summary = Column(
501
+ summary: Mapped[str] = mapped_column(
556
502
  String,
557
503
  default="",
558
504
  )
559
- rounds = Column(
505
+ rounds: Mapped[int] = mapped_column(
560
506
  Integer,
561
507
  default=0,
562
508
  )
563
- created_at = Column(
509
+ created_at: Mapped[datetime] = mapped_column(
564
510
  DateTime(timezone=True),
565
511
  nullable=False,
566
512
  server_default=func.now(),
567
513
  )
568
- updated_at = Column(
514
+ updated_at: Mapped[datetime] = mapped_column(
569
515
  DateTime(timezone=True),
570
516
  nullable=False,
571
517
  server_default=func.now(),
572
- onupdate=lambda: datetime.now(timezone.utc),
518
+ onupdate=lambda: datetime.now(UTC),
573
519
  )
574
520
 
575
521
 
@@ -624,7 +570,7 @@ class Chat(ChatCreate):
624
570
  ]
625
571
 
626
572
  @classmethod
627
- async def get(cls, id: str) -> Optional["Chat"]:
573
+ async def get(cls, id: str) -> "Chat" | None:
628
574
  """Get a chat by its ID.
629
575
 
630
576
  Args:
@@ -688,7 +634,7 @@ class Chat(ChatCreate):
688
634
  return self
689
635
 
690
636
  @classmethod
691
- async def get_by_agent_user(cls, agent_id: str, user_id: str) -> List["Chat"]:
637
+ async def get_by_agent_user(cls, agent_id: str, user_id: str) -> list["Chat"]:
692
638
  """Get all chats for a specific agent and user.
693
639
 
694
640
  Args: