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,162 @@
1
+ import logging
2
+ from typing import Optional, Type
3
+
4
+ import httpx
5
+ from epyxid import XID
6
+ from langchain_core.runnables import RunnableConfig
7
+ from pydantic import BaseModel, Field
8
+
9
+ from intentkit.skills.heurist.base import HeuristBaseTool
10
+ from intentkit.utils.s3 import store_image
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class ImageGenerationFlux1DevInput(BaseModel):
16
+ """Input for ImageGenerationFlux1Dev tool."""
17
+
18
+ prompt: str = Field(
19
+ description="Text prompt describing the image to generate.",
20
+ )
21
+ neg_prompt: Optional[str] = Field(
22
+ default="",
23
+ description="Negative prompt describing what to avoid in the generated image.",
24
+ )
25
+ width: Optional[int] = Field(
26
+ default=1024,
27
+ le=2048,
28
+ description="Width of the generated image.",
29
+ )
30
+ height: Optional[int] = Field(
31
+ default=1024,
32
+ le=2048,
33
+ description="Height of the generated image.",
34
+ )
35
+
36
+
37
+ class ImageGenerationFlux1Dev(HeuristBaseTool):
38
+ """Tool for generating versatile images using Heurist AI's Flux.1-dev model.
39
+
40
+ This tool takes a text prompt and uses Heurist's API to generate
41
+ an image based on the description using the versatile Flux.1-dev model.
42
+
43
+ Attributes:
44
+ name: The name of the tool.
45
+ description: A description of what the tool does.
46
+ args_schema: The schema for the tool's input arguments.
47
+ """
48
+
49
+ name: str = "heurist_image_generation_flux_1_dev"
50
+ description: str = (
51
+ "Generate images using Heurist AI's Flux.1-dev model.\n"
52
+ "Provide a text prompt describing the image you want to generate.\n"
53
+ "Flux.1-dev is a versatile, general-purpose model capable of generating images in any style.\n"
54
+ "If you have height and width, remember to specify them.\n"
55
+ )
56
+ args_schema: Type[BaseModel] = ImageGenerationFlux1DevInput
57
+
58
+ async def _arun(
59
+ self,
60
+ prompt: str,
61
+ neg_prompt: Optional[str] = "",
62
+ width: Optional[int] = 1024,
63
+ height: Optional[int] = 680,
64
+ config: RunnableConfig = None,
65
+ **kwargs,
66
+ ) -> str:
67
+ """Implementation of the tool to generate images using Heurist AI's Flux.1-dev model.
68
+
69
+ Args:
70
+ prompt: Text prompt describing the image to generate.
71
+ neg_prompt: Negative prompt describing what to avoid in the generated image.
72
+ width: Width of the generated image.
73
+ height: Height of the generated image.
74
+ config: Configuration for the runnable.
75
+
76
+ Returns:
77
+ str: URL of the generated image.
78
+ """
79
+ context = self.context_from_config(config)
80
+ skill_config = context.config
81
+
82
+ # Get the Heurist API key from the skill store
83
+ if "api_key" in skill_config and skill_config["api_key"]:
84
+ api_key = skill_config["api_key"]
85
+ if skill_config.get("rate_limit_number") and skill_config.get(
86
+ "rate_limit_minutes"
87
+ ):
88
+ await self.user_rate_limit_by_category(
89
+ context.user_id,
90
+ skill_config["rate_limit_number"],
91
+ skill_config["rate_limit_minutes"],
92
+ )
93
+ else:
94
+ api_key = self.skill_store.get_system_config("heurist_api_key")
95
+ await self.user_rate_limit_by_category(context.user_id, 10, 1440)
96
+
97
+ # Generate a unique job ID
98
+ job_id = str(XID())
99
+
100
+ # Prepare the request payload
101
+ payload = {
102
+ "job_id": job_id,
103
+ "model_input": {
104
+ "SD": {
105
+ "prompt": prompt,
106
+ "neg_prompt": neg_prompt,
107
+ "num_iterations": 22,
108
+ "width": width,
109
+ "height": height,
110
+ "guidance_scale": 3,
111
+ "seed": -1,
112
+ }
113
+ },
114
+ "model_id": "Flux.1-dev",
115
+ "deadline": 180,
116
+ "priority": 1,
117
+ }
118
+ logger.debug(f"Heurist API payload: {payload}")
119
+
120
+ headers = {
121
+ "Authorization": f"Bearer {api_key}",
122
+ "Content-Type": "application/json",
123
+ }
124
+
125
+ try:
126
+ # Make the API request
127
+ async with httpx.AsyncClient() as client:
128
+ response = await client.post(
129
+ "http://sequencer.heurist.xyz/submit_job",
130
+ json=payload,
131
+ headers=headers,
132
+ timeout=120,
133
+ )
134
+ logger.debug(f"Heurist API response: {response.text}")
135
+ response.raise_for_status()
136
+
137
+ # Store the image URL
138
+ image_url = response.text.strip('"')
139
+ # Generate a key with agent ID as prefix
140
+ image_key = f"{context.agent.id}/heurist/{job_id}"
141
+ # Store the image and get the CDN URL
142
+ stored_url = await store_image(image_url, image_key)
143
+
144
+ # Return the stored image URL
145
+ return stored_url
146
+
147
+ except httpx.HTTPStatusError as e:
148
+ # Extract error details from response
149
+ try:
150
+ error_json = e.response.json()
151
+ error_code = error_json.get("error", "")
152
+ error_message = error_json.get("message", "")
153
+ full_error = f"Heurist API error: Error code: {error_code}, Message: {error_message}"
154
+ except Exception:
155
+ full_error = f"Heurist API error: {e}"
156
+
157
+ logger.error(full_error)
158
+ raise Exception(full_error)
159
+
160
+ except Exception as e:
161
+ logger.error(f"Error generating image with Heurist: {e}")
162
+ raise Exception(f"Error generating image with Heurist: {str(e)}")
@@ -0,0 +1,161 @@
1
+ import logging
2
+ from typing import Optional, Type
3
+
4
+ import httpx
5
+ from epyxid import XID
6
+ from langchain_core.runnables import RunnableConfig
7
+ from pydantic import BaseModel, Field
8
+
9
+ from intentkit.skills.heurist.base import HeuristBaseTool
10
+ from intentkit.utils.s3 import store_image
11
+
12
+ logger = logging.getLogger(__name__)
13
+
14
+
15
+ class ImageGenerationSDXLInput(BaseModel):
16
+ """Input for ImageGenerationSDXL tool."""
17
+
18
+ prompt: str = Field(
19
+ description="Text prompt describing the image to generate.",
20
+ )
21
+ neg_prompt: Optional[str] = Field(
22
+ default="(worst quality: 1.4), bad quality, nsfw",
23
+ description="Negative prompt describing what to avoid in the generated image.",
24
+ )
25
+ width: Optional[int] = Field(
26
+ default=1024,
27
+ le=1024,
28
+ description="Width of the generated image.",
29
+ )
30
+ height: Optional[int] = Field(
31
+ default=1024,
32
+ le=1024,
33
+ description="Height of the generated image.",
34
+ )
35
+
36
+
37
+ class ImageGenerationSDXL(HeuristBaseTool):
38
+ """Tool for generating high-quality images using Heurist AI's SDXL model.
39
+
40
+ This tool takes a text prompt and uses Heurist's API to generate
41
+ an image based on the description using the versatile SDXL model.
42
+
43
+ Attributes:
44
+ name: The name of the tool.
45
+ description: A description of what the tool does.
46
+ args_schema: The schema for the tool's input arguments.
47
+ """
48
+
49
+ name: str = "heurist_image_generation_sdxl"
50
+ description: str = (
51
+ "Generate images using Heurist AI's SDXL model.\n"
52
+ "Provide a text prompt describing the image you want to generate.\n"
53
+ "SDXL is a versatile, general-purpose model capable of generating high-quality images in any style.\n"
54
+ "If you have height and width, remember to specify them.\n"
55
+ )
56
+ args_schema: Type[BaseModel] = ImageGenerationSDXLInput
57
+
58
+ async def _arun(
59
+ self,
60
+ prompt: str,
61
+ neg_prompt: Optional[str] = "(worst quality: 1.4), bad quality, nsfw",
62
+ width: Optional[int] = 1024,
63
+ height: Optional[int] = 680,
64
+ config: RunnableConfig = None,
65
+ **kwargs,
66
+ ) -> str:
67
+ """Implementation of the tool to generate images using Heurist AI's SDXL model.
68
+
69
+ Args:
70
+ prompt: Text prompt describing the image to generate.
71
+ neg_prompt: Negative prompt describing what to avoid in the generated image.
72
+ width: Width of the generated image.
73
+ height: Height of the generated image.
74
+ config: Configuration for the runnable.
75
+
76
+ Returns:
77
+ str: URL of the generated image.
78
+ """
79
+ context = self.context_from_config(config)
80
+ skill_config = context.config
81
+
82
+ # Get the Heurist API key from the skill store
83
+ if "api_key" in skill_config and skill_config["api_key"]:
84
+ api_key = skill_config["api_key"]
85
+ if skill_config.get("rate_limit_number") and skill_config.get(
86
+ "rate_limit_minutes"
87
+ ):
88
+ await self.user_rate_limit_by_category(
89
+ context.user_id,
90
+ skill_config["rate_limit_number"],
91
+ skill_config["rate_limit_minutes"],
92
+ )
93
+ else:
94
+ api_key = self.skill_store.get_system_config("heurist_api_key")
95
+ await self.user_rate_limit_by_category(context.user_id, 10, 1440)
96
+
97
+ # Generate a unique job ID
98
+ job_id = str(XID())
99
+
100
+ # Prepare the request payload
101
+ payload = {
102
+ "job_id": job_id,
103
+ "model_input": {
104
+ "SD": {
105
+ "prompt": prompt,
106
+ "neg_prompt": neg_prompt,
107
+ "num_iterations": 25,
108
+ "width": width,
109
+ "height": height,
110
+ "guidance_scale": 5,
111
+ "seed": -1,
112
+ }
113
+ },
114
+ "model_id": "SDXL",
115
+ "deadline": 180,
116
+ "priority": 1,
117
+ }
118
+
119
+ headers = {
120
+ "Authorization": f"Bearer {api_key}",
121
+ "Content-Type": "application/json",
122
+ }
123
+
124
+ try:
125
+ # Make the API request
126
+ async with httpx.AsyncClient() as client:
127
+ response = await client.post(
128
+ "http://sequencer.heurist.xyz/submit_job",
129
+ json=payload,
130
+ headers=headers,
131
+ timeout=120,
132
+ )
133
+ logger.debug(f"Heurist API response: {response.text}")
134
+ response.raise_for_status()
135
+
136
+ # Store the image URL
137
+ image_url = response.text.strip('"')
138
+ # Generate a key with agent ID as prefix
139
+ image_key = f"{context.agent.id}/heurist/{job_id}"
140
+ # Store the image and get the CDN URL
141
+ stored_url = await store_image(image_url, image_key)
142
+
143
+ # Return the stored image URL
144
+ return stored_url
145
+
146
+ except httpx.HTTPStatusError as e:
147
+ # Extract error details from response
148
+ try:
149
+ error_json = e.response.json()
150
+ error_code = error_json.get("error", "")
151
+ error_message = error_json.get("message", "")
152
+ full_error = f"Heurist API error: Error code: {error_code}, Message: {error_message}"
153
+ except Exception:
154
+ full_error = f"Heurist API error: {e}"
155
+
156
+ logger.error(full_error)
157
+ raise Exception(full_error)
158
+
159
+ except Exception as e:
160
+ logger.error(f"Error generating image with Heurist: {e}")
161
+ raise Exception(f"Error generating image with Heurist: {str(e)}")
@@ -0,0 +1,196 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "Heurist AI",
5
+ "description": "Skills for interacting with Heurist AI services, including image generation and other AI capabilities",
6
+ "x-icon": "https://ai.service.crestal.dev/skills/heurist/heurist.png",
7
+ "x-tags": [
8
+ "AI",
9
+ "Image Generation"
10
+ ],
11
+ "properties": {
12
+ "enabled": {
13
+ "type": "boolean",
14
+ "title": "Enabled",
15
+ "description": "Whether this skill is enabled",
16
+ "default": false
17
+ },
18
+ "states": {
19
+ "type": "object",
20
+ "properties": {
21
+ "image_generation_animagine_xl": {
22
+ "type": "string",
23
+ "title": "Japanese Anime Image Generation",
24
+ "enum": [
25
+ "disabled",
26
+ "public",
27
+ "private"
28
+ ],
29
+ "x-enum-title": [
30
+ "Disabled",
31
+ "Agent Owner + All Users",
32
+ "Agent Owner Only"
33
+ ],
34
+ "description": "Generate Japanese anime-style images using Heurist's AnimagineXL model based on text prompts",
35
+ "default": "disabled"
36
+ },
37
+ "image_generation_arthemy_comics": {
38
+ "type": "string",
39
+ "title": "Comic Style Image Generation",
40
+ "enum": [
41
+ "disabled",
42
+ "public",
43
+ "private"
44
+ ],
45
+ "x-enum-title": [
46
+ "Disabled",
47
+ "Agent Owner + All Users",
48
+ "Agent Owner Only"
49
+ ],
50
+ "description": "Generate comic-style images using Heurist's ArthemyComics model based on text prompts",
51
+ "default": "disabled"
52
+ },
53
+ "image_generation_arthemy_real": {
54
+ "type": "string",
55
+ "title": "Realistic Image Generation",
56
+ "enum": [
57
+ "disabled",
58
+ "public",
59
+ "private"
60
+ ],
61
+ "x-enum-title": [
62
+ "Disabled",
63
+ "Agent Owner + All Users",
64
+ "Agent Owner Only"
65
+ ],
66
+ "description": "Generate realistic images using Heurist's ArthemyReal model based on text prompts",
67
+ "default": "disabled"
68
+ },
69
+ "image_generation_braindance": {
70
+ "type": "string",
71
+ "title": "Artistic Image Generation",
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 artistic images using Heurist's BrainDance model based on text prompts",
83
+ "default": "disabled"
84
+ },
85
+ "image_generation_cyber_realistic_xl": {
86
+ "type": "string",
87
+ "title": "Cyberpunk Hyperrealistic Image Generation",
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 hyperrealistic photographs with a cyberpunk aesthetic using Heurist's CyberRealisticXL model based on text prompts",
99
+ "default": "disabled"
100
+ },
101
+ "image_generation_flux_1_dev": {
102
+ "type": "string",
103
+ "title": "Versatile Image Generation (Flux)",
104
+ "enum": [
105
+ "disabled",
106
+ "public",
107
+ "private"
108
+ ],
109
+ "x-enum-title": [
110
+ "Disabled",
111
+ "Agent Owner + All Users",
112
+ "Agent Owner Only"
113
+ ],
114
+ "description": "Generate versatile images in any style using Heurist's Flux.1-dev model based on text prompts",
115
+ "default": "disabled"
116
+ },
117
+ "image_generation_sdxl": {
118
+ "type": "string",
119
+ "title": "High-Quality Image Generation (SDXL)",
120
+ "enum": [
121
+ "disabled",
122
+ "public",
123
+ "private"
124
+ ],
125
+ "x-enum-title": [
126
+ "Disabled",
127
+ "Agent Owner + All Users",
128
+ "Agent Owner Only"
129
+ ],
130
+ "description": "Generate high-quality images in any style using Heurist's SDXL model based on text prompts",
131
+ "default": "disabled"
132
+ }
133
+ },
134
+ "description": "States for each Heurist AI skill (disabled, public, or private)"
135
+ },
136
+ "api_key_provider": {
137
+ "type": "string",
138
+ "title": "API Key Provider",
139
+ "description": "Provider of the API key",
140
+ "enum": [
141
+ "platform",
142
+ "agent_owner"
143
+ ],
144
+ "x-enum-title": [
145
+ "Nation Hosted",
146
+ "Owner Provided"
147
+ ],
148
+ "default": "platform"
149
+ }
150
+ },
151
+ "required": [
152
+ "states",
153
+ "enabled"
154
+ ],
155
+ "if": {
156
+ "properties": {
157
+ "api_key_provider": {
158
+ "const": "agent_owner"
159
+ }
160
+ }
161
+ },
162
+ "then": {
163
+ "properties": {
164
+ "api_key": {
165
+ "type": "string",
166
+ "title": "Heurist API Key",
167
+ "x-link": "[Get your API key](https://dev-api-form.heurist.ai/)",
168
+ "x-sensitive": true,
169
+ "description": "API key for Heurist AI services, if you have one, you can set the rate limit for your user"
170
+ },
171
+ "rate_limit_number": {
172
+ "type": "integer",
173
+ "title": "Rate Limit Number",
174
+ "description": "Number of requests allowed per time window, only valid if api_key is set"
175
+ },
176
+ "rate_limit_minutes": {
177
+ "type": "integer",
178
+ "title": "Rate Limit Minutes",
179
+ "description": "Time window in minutes for rate limiting, only valid if api_key is set"
180
+ }
181
+ },
182
+ "if": {
183
+ "properties": {
184
+ "enabled": {
185
+ "const": true
186
+ }
187
+ }
188
+ },
189
+ "then": {
190
+ "required": [
191
+ "api_key"
192
+ ]
193
+ }
194
+ },
195
+ "additionalProperties": true
196
+ }