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.
- intentkit/__init__.py +17 -0
- intentkit/abstracts/__init__.py +0 -0
- intentkit/abstracts/agent.py +60 -0
- intentkit/abstracts/api.py +4 -0
- intentkit/abstracts/engine.py +38 -0
- intentkit/abstracts/exception.py +9 -0
- intentkit/abstracts/graph.py +25 -0
- intentkit/abstracts/skill.py +129 -0
- intentkit/abstracts/twitter.py +54 -0
- intentkit/clients/__init__.py +14 -0
- intentkit/clients/cdp.py +53 -0
- intentkit/clients/twitter.py +445 -0
- intentkit/config/__init__.py +0 -0
- intentkit/config/config.py +164 -0
- intentkit/core/__init__.py +0 -0
- intentkit/core/agent.py +191 -0
- intentkit/core/api.py +40 -0
- intentkit/core/client.py +45 -0
- intentkit/core/credit.py +1767 -0
- intentkit/core/engine.py +1018 -0
- intentkit/core/node.py +223 -0
- intentkit/core/prompt.py +58 -0
- intentkit/core/skill.py +124 -0
- intentkit/models/agent.py +1689 -0
- intentkit/models/agent_data.py +810 -0
- intentkit/models/agent_schema.json +733 -0
- intentkit/models/app_setting.py +156 -0
- intentkit/models/base.py +9 -0
- intentkit/models/chat.py +581 -0
- intentkit/models/conversation.py +286 -0
- intentkit/models/credit.py +1406 -0
- intentkit/models/db.py +120 -0
- intentkit/models/db_mig.py +102 -0
- intentkit/models/generator.py +347 -0
- intentkit/models/llm.py +746 -0
- intentkit/models/redis.py +132 -0
- intentkit/models/skill.py +466 -0
- intentkit/models/user.py +243 -0
- intentkit/skills/__init__.py +12 -0
- intentkit/skills/acolyt/__init__.py +83 -0
- intentkit/skills/acolyt/acolyt.jpg +0 -0
- intentkit/skills/acolyt/ask.py +128 -0
- intentkit/skills/acolyt/base.py +28 -0
- intentkit/skills/acolyt/schema.json +89 -0
- intentkit/skills/aixbt/README.md +71 -0
- intentkit/skills/aixbt/__init__.py +73 -0
- intentkit/skills/aixbt/aixbt.jpg +0 -0
- intentkit/skills/aixbt/base.py +21 -0
- intentkit/skills/aixbt/projects.py +153 -0
- intentkit/skills/aixbt/schema.json +99 -0
- intentkit/skills/allora/__init__.py +83 -0
- intentkit/skills/allora/allora.jpeg +0 -0
- intentkit/skills/allora/base.py +28 -0
- intentkit/skills/allora/price.py +130 -0
- intentkit/skills/allora/schema.json +89 -0
- intentkit/skills/base.py +174 -0
- intentkit/skills/carv/README.md +95 -0
- intentkit/skills/carv/__init__.py +121 -0
- intentkit/skills/carv/base.py +183 -0
- intentkit/skills/carv/carv.webp +0 -0
- intentkit/skills/carv/fetch_news.py +92 -0
- intentkit/skills/carv/onchain_query.py +164 -0
- intentkit/skills/carv/schema.json +137 -0
- intentkit/skills/carv/token_info_and_price.py +110 -0
- intentkit/skills/cdp/__init__.py +137 -0
- intentkit/skills/cdp/base.py +21 -0
- intentkit/skills/cdp/cdp.png +0 -0
- intentkit/skills/cdp/get_balance.py +81 -0
- intentkit/skills/cdp/schema.json +473 -0
- intentkit/skills/chainlist/README.md +38 -0
- intentkit/skills/chainlist/__init__.py +54 -0
- intentkit/skills/chainlist/base.py +21 -0
- intentkit/skills/chainlist/chain_lookup.py +208 -0
- intentkit/skills/chainlist/chainlist.png +0 -0
- intentkit/skills/chainlist/schema.json +47 -0
- intentkit/skills/common/__init__.py +82 -0
- intentkit/skills/common/base.py +21 -0
- intentkit/skills/common/common.jpg +0 -0
- intentkit/skills/common/current_time.py +84 -0
- intentkit/skills/common/schema.json +57 -0
- intentkit/skills/cookiefun/README.md +121 -0
- intentkit/skills/cookiefun/__init__.py +78 -0
- intentkit/skills/cookiefun/base.py +41 -0
- intentkit/skills/cookiefun/constants.py +18 -0
- intentkit/skills/cookiefun/cookiefun.png +0 -0
- intentkit/skills/cookiefun/get_account_details.py +171 -0
- intentkit/skills/cookiefun/get_account_feed.py +282 -0
- intentkit/skills/cookiefun/get_account_smart_followers.py +181 -0
- intentkit/skills/cookiefun/get_sectors.py +128 -0
- intentkit/skills/cookiefun/schema.json +155 -0
- intentkit/skills/cookiefun/search_accounts.py +225 -0
- intentkit/skills/cryptocompare/__init__.py +130 -0
- intentkit/skills/cryptocompare/api.py +159 -0
- intentkit/skills/cryptocompare/base.py +303 -0
- intentkit/skills/cryptocompare/cryptocompare.png +0 -0
- intentkit/skills/cryptocompare/fetch_news.py +96 -0
- intentkit/skills/cryptocompare/fetch_price.py +99 -0
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +113 -0
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +109 -0
- intentkit/skills/cryptocompare/fetch_top_volume.py +108 -0
- intentkit/skills/cryptocompare/fetch_trading_signals.py +107 -0
- intentkit/skills/cryptocompare/schema.json +168 -0
- intentkit/skills/cryptopanic/__init__.py +108 -0
- intentkit/skills/cryptopanic/base.py +51 -0
- intentkit/skills/cryptopanic/cryptopanic.png +0 -0
- intentkit/skills/cryptopanic/fetch_crypto_news.py +153 -0
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +136 -0
- intentkit/skills/cryptopanic/schema.json +103 -0
- intentkit/skills/dapplooker/README.md +92 -0
- intentkit/skills/dapplooker/__init__.py +83 -0
- intentkit/skills/dapplooker/base.py +26 -0
- intentkit/skills/dapplooker/dapplooker.jpg +0 -0
- intentkit/skills/dapplooker/dapplooker_token_data.py +476 -0
- intentkit/skills/dapplooker/schema.json +91 -0
- intentkit/skills/defillama/__init__.py +323 -0
- intentkit/skills/defillama/api.py +315 -0
- intentkit/skills/defillama/base.py +135 -0
- intentkit/skills/defillama/coins/__init__.py +0 -0
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +116 -0
- intentkit/skills/defillama/coins/fetch_block.py +98 -0
- intentkit/skills/defillama/coins/fetch_current_prices.py +105 -0
- intentkit/skills/defillama/coins/fetch_first_price.py +100 -0
- intentkit/skills/defillama/coins/fetch_historical_prices.py +110 -0
- intentkit/skills/defillama/coins/fetch_price_chart.py +109 -0
- intentkit/skills/defillama/coins/fetch_price_percentage.py +93 -0
- intentkit/skills/defillama/config/__init__.py +0 -0
- intentkit/skills/defillama/config/chains.py +433 -0
- intentkit/skills/defillama/defillama.jpeg +0 -0
- intentkit/skills/defillama/fees/__init__.py +0 -0
- intentkit/skills/defillama/fees/fetch_fees_overview.py +130 -0
- intentkit/skills/defillama/schema.json +383 -0
- intentkit/skills/defillama/stablecoins/__init__.py +0 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +100 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +129 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +83 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +126 -0
- intentkit/skills/defillama/tests/__init__.py +0 -0
- intentkit/skills/defillama/tests/api_integration.test.py +192 -0
- intentkit/skills/defillama/tests/api_unit.test.py +583 -0
- intentkit/skills/defillama/tvl/__init__.py +0 -0
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +106 -0
- intentkit/skills/defillama/tvl/fetch_chains.py +107 -0
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +91 -0
- intentkit/skills/defillama/tvl/fetch_protocol.py +207 -0
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +93 -0
- intentkit/skills/defillama/tvl/fetch_protocols.py +196 -0
- intentkit/skills/defillama/volumes/__init__.py +0 -0
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +157 -0
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +123 -0
- intentkit/skills/defillama/volumes/fetch_options_overview.py +131 -0
- intentkit/skills/defillama/yields/__init__.py +0 -0
- intentkit/skills/defillama/yields/fetch_pool_chart.py +100 -0
- intentkit/skills/defillama/yields/fetch_pools.py +126 -0
- intentkit/skills/dexscreener/__init__.py +93 -0
- intentkit/skills/dexscreener/base.py +133 -0
- intentkit/skills/dexscreener/dexscreener.png +0 -0
- intentkit/skills/dexscreener/model/__init__.py +0 -0
- intentkit/skills/dexscreener/model/search_token_response.py +82 -0
- intentkit/skills/dexscreener/schema.json +48 -0
- intentkit/skills/dexscreener/search_token.py +321 -0
- intentkit/skills/dune_analytics/__init__.py +103 -0
- intentkit/skills/dune_analytics/base.py +46 -0
- intentkit/skills/dune_analytics/dune.png +0 -0
- intentkit/skills/dune_analytics/fetch_kol_buys.py +128 -0
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +237 -0
- intentkit/skills/dune_analytics/schema.json +99 -0
- intentkit/skills/elfa/README.md +100 -0
- intentkit/skills/elfa/__init__.py +123 -0
- intentkit/skills/elfa/base.py +28 -0
- intentkit/skills/elfa/elfa.jpg +0 -0
- intentkit/skills/elfa/mention.py +504 -0
- intentkit/skills/elfa/schema.json +153 -0
- intentkit/skills/elfa/stats.py +118 -0
- intentkit/skills/elfa/tokens.py +126 -0
- intentkit/skills/enso/README.md +75 -0
- intentkit/skills/enso/__init__.py +114 -0
- intentkit/skills/enso/abi/__init__.py +0 -0
- intentkit/skills/enso/abi/approval.py +279 -0
- intentkit/skills/enso/abi/erc20.py +14 -0
- intentkit/skills/enso/abi/route.py +129 -0
- intentkit/skills/enso/base.py +44 -0
- intentkit/skills/enso/best_yield.py +286 -0
- intentkit/skills/enso/enso.jpg +0 -0
- intentkit/skills/enso/networks.py +105 -0
- intentkit/skills/enso/prices.py +93 -0
- intentkit/skills/enso/route.py +300 -0
- intentkit/skills/enso/schema.json +212 -0
- intentkit/skills/enso/tokens.py +223 -0
- intentkit/skills/enso/wallet.py +381 -0
- intentkit/skills/github/README.md +63 -0
- intentkit/skills/github/__init__.py +54 -0
- intentkit/skills/github/base.py +21 -0
- intentkit/skills/github/github.jpg +0 -0
- intentkit/skills/github/github_search.py +183 -0
- intentkit/skills/github/schema.json +59 -0
- intentkit/skills/heurist/__init__.py +143 -0
- intentkit/skills/heurist/base.py +26 -0
- intentkit/skills/heurist/heurist.png +0 -0
- intentkit/skills/heurist/image_generation_animagine_xl.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_comics.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_real.py +162 -0
- intentkit/skills/heurist/image_generation_braindance.py +162 -0
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +162 -0
- intentkit/skills/heurist/image_generation_flux_1_dev.py +162 -0
- intentkit/skills/heurist/image_generation_sdxl.py +161 -0
- intentkit/skills/heurist/schema.json +196 -0
- intentkit/skills/lifi/README.md +294 -0
- intentkit/skills/lifi/__init__.py +141 -0
- intentkit/skills/lifi/base.py +21 -0
- intentkit/skills/lifi/lifi.png +0 -0
- intentkit/skills/lifi/schema.json +89 -0
- intentkit/skills/lifi/token_execute.py +472 -0
- intentkit/skills/lifi/token_quote.py +190 -0
- intentkit/skills/lifi/utils.py +656 -0
- intentkit/skills/moralis/README.md +490 -0
- intentkit/skills/moralis/__init__.py +110 -0
- intentkit/skills/moralis/api.py +281 -0
- intentkit/skills/moralis/base.py +55 -0
- intentkit/skills/moralis/fetch_chain_portfolio.py +191 -0
- intentkit/skills/moralis/fetch_nft_portfolio.py +284 -0
- intentkit/skills/moralis/fetch_solana_portfolio.py +331 -0
- intentkit/skills/moralis/fetch_wallet_portfolio.py +301 -0
- intentkit/skills/moralis/moralis.png +0 -0
- intentkit/skills/moralis/schema.json +156 -0
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +511 -0
- intentkit/skills/nation/__init__.py +62 -0
- intentkit/skills/nation/base.py +31 -0
- intentkit/skills/nation/nation.png +0 -0
- intentkit/skills/nation/nft_check.py +106 -0
- intentkit/skills/nation/schema.json +58 -0
- intentkit/skills/openai/__init__.py +107 -0
- intentkit/skills/openai/base.py +32 -0
- intentkit/skills/openai/dalle_image_generation.py +128 -0
- intentkit/skills/openai/gpt_image_generation.py +152 -0
- intentkit/skills/openai/gpt_image_to_image.py +186 -0
- intentkit/skills/openai/image_to_text.py +126 -0
- intentkit/skills/openai/openai.png +0 -0
- intentkit/skills/openai/schema.json +139 -0
- intentkit/skills/portfolio/README.md +55 -0
- intentkit/skills/portfolio/__init__.py +151 -0
- intentkit/skills/portfolio/base.py +107 -0
- intentkit/skills/portfolio/constants.py +9 -0
- intentkit/skills/portfolio/moralis.png +0 -0
- intentkit/skills/portfolio/schema.json +237 -0
- intentkit/skills/portfolio/token_balances.py +155 -0
- intentkit/skills/portfolio/wallet_approvals.py +102 -0
- intentkit/skills/portfolio/wallet_defi_positions.py +80 -0
- intentkit/skills/portfolio/wallet_history.py +155 -0
- intentkit/skills/portfolio/wallet_net_worth.py +112 -0
- intentkit/skills/portfolio/wallet_nfts.py +139 -0
- intentkit/skills/portfolio/wallet_profitability.py +101 -0
- intentkit/skills/portfolio/wallet_profitability_summary.py +91 -0
- intentkit/skills/portfolio/wallet_stats.py +79 -0
- intentkit/skills/portfolio/wallet_swaps.py +147 -0
- intentkit/skills/skills.toml +103 -0
- intentkit/skills/slack/__init__.py +98 -0
- intentkit/skills/slack/base.py +55 -0
- intentkit/skills/slack/get_channel.py +109 -0
- intentkit/skills/slack/get_message.py +136 -0
- intentkit/skills/slack/schedule_message.py +92 -0
- intentkit/skills/slack/schema.json +135 -0
- intentkit/skills/slack/send_message.py +81 -0
- intentkit/skills/slack/slack.jpg +0 -0
- intentkit/skills/system/__init__.py +90 -0
- intentkit/skills/system/base.py +22 -0
- intentkit/skills/system/read_agent_api_key.py +87 -0
- intentkit/skills/system/regenerate_agent_api_key.py +77 -0
- intentkit/skills/system/schema.json +53 -0
- intentkit/skills/system/system.svg +76 -0
- intentkit/skills/tavily/README.md +86 -0
- intentkit/skills/tavily/__init__.py +91 -0
- intentkit/skills/tavily/base.py +27 -0
- intentkit/skills/tavily/schema.json +119 -0
- intentkit/skills/tavily/tavily.jpg +0 -0
- intentkit/skills/tavily/tavily_extract.py +147 -0
- intentkit/skills/tavily/tavily_search.py +139 -0
- intentkit/skills/token/README.md +89 -0
- intentkit/skills/token/__init__.py +107 -0
- intentkit/skills/token/base.py +154 -0
- intentkit/skills/token/constants.py +9 -0
- intentkit/skills/token/erc20_transfers.py +145 -0
- intentkit/skills/token/moralis.png +0 -0
- intentkit/skills/token/schema.json +141 -0
- intentkit/skills/token/token_analytics.py +81 -0
- intentkit/skills/token/token_price.py +132 -0
- intentkit/skills/token/token_search.py +121 -0
- intentkit/skills/twitter/__init__.py +146 -0
- intentkit/skills/twitter/base.py +68 -0
- intentkit/skills/twitter/follow_user.py +69 -0
- intentkit/skills/twitter/get_mentions.py +124 -0
- intentkit/skills/twitter/get_timeline.py +111 -0
- intentkit/skills/twitter/get_user_by_username.py +84 -0
- intentkit/skills/twitter/get_user_tweets.py +123 -0
- intentkit/skills/twitter/like_tweet.py +65 -0
- intentkit/skills/twitter/post_tweet.py +90 -0
- intentkit/skills/twitter/reply_tweet.py +98 -0
- intentkit/skills/twitter/retweet.py +76 -0
- intentkit/skills/twitter/schema.json +258 -0
- intentkit/skills/twitter/search_tweets.py +115 -0
- intentkit/skills/twitter/twitter.png +0 -0
- intentkit/skills/unrealspeech/__init__.py +55 -0
- intentkit/skills/unrealspeech/base.py +21 -0
- intentkit/skills/unrealspeech/schema.json +100 -0
- intentkit/skills/unrealspeech/text_to_speech.py +177 -0
- intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
- intentkit/skills/venice_audio/__init__.py +106 -0
- intentkit/skills/venice_audio/base.py +119 -0
- intentkit/skills/venice_audio/input.py +41 -0
- intentkit/skills/venice_audio/schema.json +152 -0
- intentkit/skills/venice_audio/venice_audio.py +240 -0
- intentkit/skills/venice_audio/venice_logo.jpg +0 -0
- intentkit/skills/venice_image/README.md +119 -0
- intentkit/skills/venice_image/__init__.py +154 -0
- intentkit/skills/venice_image/api.py +138 -0
- intentkit/skills/venice_image/base.py +188 -0
- intentkit/skills/venice_image/config.py +35 -0
- intentkit/skills/venice_image/image_enhance/README.md +119 -0
- intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
- intentkit/skills/venice_image/image_enhance/image_enhance.py +80 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +23 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +40 -0
- intentkit/skills/venice_image/image_generation/README.md +144 -0
- intentkit/skills/venice_image/image_generation/__init__.py +0 -0
- intentkit/skills/venice_image/image_generation/image_generation_base.py +117 -0
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -0
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -0
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -0
- intentkit/skills/venice_image/image_upscale/README.md +111 -0
- intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
- intentkit/skills/venice_image/image_upscale/image_upscale.py +90 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +23 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -0
- intentkit/skills/venice_image/image_vision/README.md +112 -0
- intentkit/skills/venice_image/image_vision/__init__.py +0 -0
- intentkit/skills/venice_image/image_vision/image_vision.py +100 -0
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -0
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -0
- intentkit/skills/venice_image/schema.json +267 -0
- intentkit/skills/venice_image/utils.py +78 -0
- intentkit/skills/venice_image/venice_image.jpg +0 -0
- intentkit/skills/web_scraper/README.md +82 -0
- intentkit/skills/web_scraper/__init__.py +92 -0
- intentkit/skills/web_scraper/base.py +21 -0
- intentkit/skills/web_scraper/langchain.png +0 -0
- intentkit/skills/web_scraper/schema.json +115 -0
- intentkit/skills/web_scraper/scrape_and_index.py +327 -0
- intentkit/utils/__init__.py +1 -0
- intentkit/utils/chain.py +436 -0
- intentkit/utils/error.py +134 -0
- intentkit/utils/logging.py +70 -0
- intentkit/utils/middleware.py +61 -0
- intentkit/utils/random.py +16 -0
- intentkit/utils/s3.py +267 -0
- intentkit/utils/slack_alert.py +79 -0
- intentkit/utils/tx.py +37 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/METADATA +1 -1
- intentkit-0.5.2.dist-info/RECORD +365 -0
- intentkit-0.5.0.dist-info/RECORD +0 -4
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/WHEEL +0 -0
- {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
|
+
}
|