intentkit 0.8.6.dev2__py3-none-any.whl → 0.8.17__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of intentkit might be problematic. Click here for more details.
- intentkit/__init__.py +1 -1
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +10 -5
- intentkit/abstracts/skill.py +6 -144
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/__init__.py +3 -2
- intentkit/clients/cdp.py +53 -92
- intentkit/clients/twitter.py +56 -57
- intentkit/clients/web3.py +1 -3
- intentkit/config/config.py +5 -0
- intentkit/core/agent.py +16 -388
- intentkit/core/asset.py +64 -18
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +19 -20
- intentkit/core/engine.py +26 -11
- intentkit/core/node.py +2 -1
- intentkit/core/prompt.py +53 -15
- intentkit/core/scheduler.py +9 -9
- intentkit/core/statistics.py +6 -7
- intentkit/models/agent.py +256 -176
- intentkit/models/agent_data.py +62 -36
- intentkit/models/agent_schema.json +6 -9
- intentkit/models/app_setting.py +6 -6
- intentkit/models/chat.py +28 -24
- intentkit/models/conversation.py +8 -8
- intentkit/models/credit.py +62 -64
- intentkit/models/db.py +8 -7
- intentkit/models/db_mig.py +2 -2
- intentkit/models/llm.csv +15 -12
- intentkit/models/llm.py +18 -16
- intentkit/models/redis.py +2 -3
- intentkit/models/skill.py +62 -66
- intentkit/models/skills.csv +30 -26
- intentkit/models/user.py +46 -21
- intentkit/skills/acolyt/__init__.py +2 -9
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +4 -9
- intentkit/skills/aixbt/__init__.py +2 -13
- intentkit/skills/aixbt/base.py +1 -7
- intentkit/skills/aixbt/projects.py +14 -15
- intentkit/skills/allora/__init__.py +2 -9
- intentkit/skills/allora/base.py +4 -9
- intentkit/skills/allora/price.py +3 -4
- intentkit/skills/base.py +175 -52
- intentkit/skills/basename/__init__.py +4 -8
- intentkit/skills/carv/__init__.py +115 -121
- intentkit/skills/carv/base.py +184 -185
- intentkit/skills/carv/fetch_news.py +3 -3
- intentkit/skills/carv/onchain_query.py +4 -4
- intentkit/skills/carv/token_info_and_price.py +5 -5
- intentkit/skills/casino/__init__.py +4 -15
- intentkit/skills/casino/base.py +1 -7
- intentkit/skills/casino/deck_draw.py +5 -8
- intentkit/skills/casino/deck_shuffle.py +6 -6
- intentkit/skills/casino/dice_roll.py +2 -4
- intentkit/skills/cdp/__init__.py +3 -10
- intentkit/skills/cdp/base.py +1 -7
- intentkit/skills/cdp/schema.json +1 -17
- intentkit/skills/chainlist/__init__.py +2 -7
- intentkit/skills/chainlist/base.py +1 -7
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/common/__init__.py +2 -9
- intentkit/skills/common/base.py +1 -7
- intentkit/skills/common/current_time.py +1 -2
- intentkit/skills/cookiefun/__init__.py +6 -9
- intentkit/skills/cookiefun/base.py +2 -7
- intentkit/skills/cookiefun/get_account_details.py +7 -7
- intentkit/skills/cookiefun/get_account_feed.py +19 -19
- intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
- intentkit/skills/cookiefun/get_sectors.py +3 -3
- intentkit/skills/cookiefun/search_accounts.py +9 -9
- intentkit/skills/cryptocompare/__init__.py +7 -24
- intentkit/skills/cryptocompare/api.py +2 -3
- intentkit/skills/cryptocompare/base.py +10 -24
- intentkit/skills/cryptocompare/fetch_news.py +4 -5
- intentkit/skills/cryptocompare/fetch_price.py +6 -7
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
- intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
- intentkit/skills/cryptopanic/__init__.py +7 -10
- intentkit/skills/cryptopanic/base.py +51 -55
- intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
- intentkit/skills/dapplooker/__init__.py +2 -9
- intentkit/skills/dapplooker/base.py +4 -9
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- intentkit/skills/defillama/__init__.py +24 -74
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +8 -19
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_block.py +6 -8
- intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
- intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
- intentkit/skills/defillama/config/chains.py +1 -3
- intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
- intentkit/skills/defillama/tests/api_integration.test.py +1 -1
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
- intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
- intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
- intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
- intentkit/skills/defillama/yields/fetch_pools.py +26 -30
- intentkit/skills/dexscreener/__init__.py +97 -102
- intentkit/skills/dexscreener/base.py +125 -130
- intentkit/skills/dexscreener/get_pair_info.py +4 -5
- intentkit/skills/dexscreener/get_token_pairs.py +4 -5
- intentkit/skills/dexscreener/get_tokens_info.py +7 -8
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/search_token.py +182 -184
- intentkit/skills/dexscreener/utils.py +15 -14
- intentkit/skills/dune_analytics/__init__.py +7 -9
- intentkit/skills/dune_analytics/base.py +48 -52
- intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
- intentkit/skills/elfa/__init__.py +5 -18
- intentkit/skills/elfa/base.py +10 -14
- intentkit/skills/elfa/mention.py +19 -21
- intentkit/skills/elfa/stats.py +4 -4
- intentkit/skills/elfa/tokens.py +12 -12
- intentkit/skills/elfa/utils.py +26 -28
- intentkit/skills/enso/__init__.py +11 -31
- intentkit/skills/enso/base.py +9 -15
- intentkit/skills/enso/best_yield.py +5 -7
- intentkit/skills/enso/networks.py +3 -9
- intentkit/skills/enso/prices.py +2 -4
- intentkit/skills/enso/route.py +6 -12
- intentkit/skills/enso/tokens.py +4 -16
- intentkit/skills/enso/wallet.py +6 -6
- intentkit/skills/erc20/__init__.py +5 -11
- intentkit/skills/erc721/__init__.py +5 -9
- intentkit/skills/firecrawl/__init__.py +5 -18
- intentkit/skills/firecrawl/base.py +4 -9
- intentkit/skills/firecrawl/clear.py +4 -8
- intentkit/skills/firecrawl/crawl.py +19 -19
- intentkit/skills/firecrawl/query.py +4 -3
- intentkit/skills/firecrawl/scrape.py +17 -22
- intentkit/skills/firecrawl/utils.py +50 -42
- intentkit/skills/github/__init__.py +2 -7
- intentkit/skills/github/base.py +1 -7
- intentkit/skills/github/github_search.py +1 -2
- intentkit/skills/heurist/__init__.py +8 -27
- intentkit/skills/heurist/base.py +4 -9
- intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
- intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
- intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
- intentkit/skills/heurist/image_generation_braindance.py +12 -13
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
- intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
- intentkit/skills/heurist/image_generation_sdxl.py +12 -13
- intentkit/skills/http/__init__.py +4 -15
- intentkit/skills/http/base.py +1 -7
- intentkit/skills/http/get.py +21 -16
- intentkit/skills/http/post.py +23 -18
- intentkit/skills/http/put.py +23 -18
- intentkit/skills/lifi/__init__.py +5 -10
- intentkit/skills/lifi/base.py +1 -7
- intentkit/skills/lifi/token_execute.py +14 -17
- intentkit/skills/lifi/token_quote.py +7 -9
- intentkit/skills/lifi/utils.py +16 -16
- intentkit/skills/moralis/__init__.py +6 -10
- intentkit/skills/moralis/api.py +6 -7
- intentkit/skills/moralis/base.py +5 -10
- intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
- intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
- intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
- intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
- intentkit/skills/morpho/__init__.py +5 -9
- intentkit/skills/nation/__init__.py +4 -9
- intentkit/skills/nation/base.py +5 -10
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/onchain.py +23 -0
- intentkit/skills/openai/__init__.py +17 -18
- intentkit/skills/openai/base.py +10 -14
- intentkit/skills/openai/dalle_image_generation.py +3 -8
- intentkit/skills/openai/gpt_avatar_generator.py +102 -0
- intentkit/skills/openai/gpt_image_generation.py +4 -8
- intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
- intentkit/skills/openai/gpt_image_to_image.py +4 -8
- intentkit/skills/openai/image_to_text.py +3 -7
- intentkit/skills/openai/schema.json +32 -0
- intentkit/skills/portfolio/__init__.py +11 -35
- intentkit/skills/portfolio/base.py +33 -19
- intentkit/skills/portfolio/token_balances.py +21 -21
- intentkit/skills/portfolio/wallet_approvals.py +17 -18
- intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
- intentkit/skills/portfolio/wallet_history.py +31 -31
- intentkit/skills/portfolio/wallet_net_worth.py +13 -13
- intentkit/skills/portfolio/wallet_nfts.py +19 -19
- intentkit/skills/portfolio/wallet_profitability.py +18 -18
- intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
- intentkit/skills/portfolio/wallet_stats.py +3 -3
- intentkit/skills/portfolio/wallet_swaps.py +19 -19
- intentkit/skills/pyth/__init__.py +4 -10
- intentkit/skills/skills.toml +4 -0
- intentkit/skills/slack/__init__.py +5 -17
- intentkit/skills/slack/base.py +3 -9
- intentkit/skills/slack/get_channel.py +8 -8
- intentkit/skills/slack/get_message.py +9 -9
- intentkit/skills/slack/schedule_message.py +5 -5
- intentkit/skills/slack/send_message.py +3 -5
- intentkit/skills/supabase/__init__.py +7 -23
- intentkit/skills/supabase/base.py +1 -7
- intentkit/skills/supabase/delete_data.py +4 -4
- intentkit/skills/supabase/fetch_data.py +12 -12
- intentkit/skills/supabase/insert_data.py +4 -4
- intentkit/skills/supabase/invoke_function.py +6 -6
- intentkit/skills/supabase/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- intentkit/skills/superfluid/__init__.py +5 -9
- intentkit/skills/system/__init__.py +7 -24
- intentkit/skills/system/add_autonomous_task.py +10 -12
- intentkit/skills/system/delete_autonomous_task.py +2 -2
- intentkit/skills/system/edit_autonomous_task.py +14 -18
- intentkit/skills/system/list_autonomous_tasks.py +3 -5
- intentkit/skills/system/read_agent_api_key.py +6 -4
- intentkit/skills/system/regenerate_agent_api_key.py +6 -4
- intentkit/skills/tavily/__init__.py +3 -12
- intentkit/skills/tavily/base.py +4 -9
- intentkit/skills/tavily/tavily_extract.py +2 -4
- intentkit/skills/tavily/tavily_search.py +4 -6
- intentkit/skills/token/__init__.py +5 -10
- intentkit/skills/token/base.py +7 -11
- intentkit/skills/token/erc20_transfers.py +19 -19
- intentkit/skills/token/token_analytics.py +3 -3
- intentkit/skills/token/token_price.py +13 -13
- intentkit/skills/token/token_search.py +9 -9
- intentkit/skills/twitter/__init__.py +11 -35
- intentkit/skills/twitter/base.py +22 -34
- intentkit/skills/twitter/follow_user.py +2 -6
- intentkit/skills/twitter/get_mentions.py +5 -12
- intentkit/skills/twitter/get_timeline.py +4 -12
- intentkit/skills/twitter/get_user_by_username.py +2 -6
- intentkit/skills/twitter/get_user_tweets.py +5 -13
- intentkit/skills/twitter/like_tweet.py +2 -6
- intentkit/skills/twitter/post_tweet.py +6 -9
- intentkit/skills/twitter/reply_tweet.py +6 -9
- intentkit/skills/twitter/retweet.py +2 -6
- intentkit/skills/twitter/search_tweets.py +4 -12
- intentkit/skills/unrealspeech/__init__.py +2 -7
- intentkit/skills/unrealspeech/base.py +2 -8
- intentkit/skills/unrealspeech/text_to_speech.py +8 -8
- intentkit/skills/venice_audio/__init__.py +98 -106
- intentkit/skills/venice_audio/base.py +117 -121
- intentkit/skills/venice_audio/input.py +41 -41
- intentkit/skills/venice_audio/venice_audio.py +7 -11
- intentkit/skills/venice_image/__init__.py +147 -154
- intentkit/skills/venice_image/api.py +138 -138
- intentkit/skills/venice_image/base.py +185 -192
- intentkit/skills/venice_image/config.py +33 -35
- intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
- intentkit/skills/venice_image/utils.py +77 -78
- intentkit/skills/web_scraper/__init__.py +5 -18
- intentkit/skills/web_scraper/base.py +21 -7
- intentkit/skills/web_scraper/document_indexer.py +7 -6
- intentkit/skills/web_scraper/scrape_and_index.py +15 -15
- intentkit/skills/web_scraper/utils.py +62 -63
- intentkit/skills/web_scraper/website_indexer.py +17 -19
- intentkit/skills/weth/__init__.py +5 -11
- intentkit/skills/wow/__init__.py +5 -11
- intentkit/skills/x402/__init__.py +61 -0
- intentkit/skills/x402/ask_agent.py +98 -0
- intentkit/skills/x402/base.py +99 -0
- intentkit/skills/x402/http_request.py +117 -0
- intentkit/skills/x402/schema.json +45 -0
- intentkit/skills/x402/x402.webp +0 -0
- intentkit/skills/xmtp/__init__.py +4 -15
- intentkit/skills/xmtp/base.py +5 -5
- intentkit/skills/xmtp/price.py +6 -6
- intentkit/skills/xmtp/swap.py +6 -8
- intentkit/skills/xmtp/transfer.py +4 -6
- intentkit/utils/error.py +2 -2
- intentkit/utils/logging.py +2 -4
- intentkit/utils/s3.py +8 -9
- intentkit/utils/schema.py +100 -0
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +3 -4
- intentkit-0.8.17.dist-info/RECORD +466 -0
- intentkit/models/generator.py +0 -347
- intentkit-0.8.6.dev2.dist-info/RECORD +0 -457
- {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
- {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional, Type
|
|
3
2
|
|
|
4
3
|
import httpx
|
|
5
4
|
from epyxid import XID
|
|
6
5
|
from pydantic import BaseModel, Field
|
|
7
6
|
|
|
7
|
+
from intentkit.config.config import config
|
|
8
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
9
|
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
@@ -17,16 +17,16 @@ class ImageGenerationArthemyComicsInput(BaseModel):
|
|
|
17
17
|
prompt: str = Field(
|
|
18
18
|
description="Text prompt describing the image to generate.",
|
|
19
19
|
)
|
|
20
|
-
neg_prompt:
|
|
20
|
+
neg_prompt: str | None = Field(
|
|
21
21
|
default="(worst quality: 1.4), bad quality, nsfw",
|
|
22
22
|
description="Negative prompt describing what to avoid in the generated image.",
|
|
23
23
|
)
|
|
24
|
-
width:
|
|
24
|
+
width: int | None = Field(
|
|
25
25
|
default=1024,
|
|
26
26
|
le=1024,
|
|
27
27
|
description="Width of the generated image.",
|
|
28
28
|
)
|
|
29
|
-
height:
|
|
29
|
+
height: int | None = Field(
|
|
30
30
|
default=1024,
|
|
31
31
|
le=1024,
|
|
32
32
|
description="Height of the generated image.",
|
|
@@ -52,14 +52,14 @@ class ImageGenerationArthemyComics(HeuristBaseTool):
|
|
|
52
52
|
"ArthemyComics specializes in creating vibrant, stylized comic book illustrations.\n"
|
|
53
53
|
"If you have height and width, remember to specify them.\n"
|
|
54
54
|
)
|
|
55
|
-
args_schema:
|
|
55
|
+
args_schema: type[BaseModel] = ImageGenerationArthemyComicsInput
|
|
56
56
|
|
|
57
57
|
async def _arun(
|
|
58
58
|
self,
|
|
59
59
|
prompt: str,
|
|
60
|
-
neg_prompt:
|
|
61
|
-
width:
|
|
62
|
-
height:
|
|
60
|
+
neg_prompt: str | None = "(worst quality: 1.4), bad quality, nsfw",
|
|
61
|
+
width: int | None = 1024,
|
|
62
|
+
height: int | None = 680,
|
|
63
63
|
**kwargs,
|
|
64
64
|
) -> str:
|
|
65
65
|
"""Implementation of the tool to generate comic-style images using Heurist AI's ArthemyComics model.
|
|
@@ -78,20 +78,19 @@ class ImageGenerationArthemyComics(HeuristBaseTool):
|
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
79
|
skill_config = skill_config
|
|
80
80
|
|
|
81
|
-
# Get the Heurist API key from
|
|
81
|
+
# Get the Heurist API key from configuration
|
|
82
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
|
83
83
|
api_key = skill_config["api_key"]
|
|
84
84
|
if skill_config.get("rate_limit_number") and skill_config.get(
|
|
85
85
|
"rate_limit_minutes"
|
|
86
86
|
):
|
|
87
87
|
await self.user_rate_limit_by_category(
|
|
88
|
-
context.user_id,
|
|
89
88
|
skill_config["rate_limit_number"],
|
|
90
|
-
skill_config["rate_limit_minutes"],
|
|
89
|
+
skill_config["rate_limit_minutes"] * 60,
|
|
91
90
|
)
|
|
92
91
|
else:
|
|
93
|
-
api_key =
|
|
94
|
-
await self.user_rate_limit_by_category(
|
|
92
|
+
api_key = config.heurist_api_key
|
|
93
|
+
await self.user_rate_limit_by_category(10, 1440 * 60)
|
|
95
94
|
|
|
96
95
|
# Generate a unique job ID
|
|
97
96
|
job_id = str(XID())
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional, Type
|
|
3
2
|
|
|
4
3
|
import httpx
|
|
5
4
|
from epyxid import XID
|
|
6
5
|
from pydantic import BaseModel, Field
|
|
7
6
|
|
|
7
|
+
from intentkit.config.config import config
|
|
8
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
9
|
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
@@ -17,16 +17,16 @@ class ImageGenerationArthemyRealInput(BaseModel):
|
|
|
17
17
|
prompt: str = Field(
|
|
18
18
|
description="Text prompt describing the image to generate.",
|
|
19
19
|
)
|
|
20
|
-
neg_prompt:
|
|
20
|
+
neg_prompt: str | None = Field(
|
|
21
21
|
default="(worst quality: 1.4), bad quality, nsfw",
|
|
22
22
|
description="Negative prompt describing what to avoid in the generated image.",
|
|
23
23
|
)
|
|
24
|
-
width:
|
|
24
|
+
width: int | None = Field(
|
|
25
25
|
default=1024,
|
|
26
26
|
le=1024,
|
|
27
27
|
description="Width of the generated image.",
|
|
28
28
|
)
|
|
29
|
-
height:
|
|
29
|
+
height: int | None = Field(
|
|
30
30
|
default=1024,
|
|
31
31
|
le=1024,
|
|
32
32
|
description="Height of the generated image.",
|
|
@@ -52,14 +52,14 @@ class ImageGenerationArthemyReal(HeuristBaseTool):
|
|
|
52
52
|
"ArthemyReal specializes in creating photorealistic, lifelike images with fine details.\n"
|
|
53
53
|
"If you have height and width, remember to specify them.\n"
|
|
54
54
|
)
|
|
55
|
-
args_schema:
|
|
55
|
+
args_schema: type[BaseModel] = ImageGenerationArthemyRealInput
|
|
56
56
|
|
|
57
57
|
async def _arun(
|
|
58
58
|
self,
|
|
59
59
|
prompt: str,
|
|
60
|
-
neg_prompt:
|
|
61
|
-
width:
|
|
62
|
-
height:
|
|
60
|
+
neg_prompt: str | None = "(worst quality: 1.4), bad quality, nsfw",
|
|
61
|
+
width: int | None = 1024,
|
|
62
|
+
height: int | None = 680,
|
|
63
63
|
**kwargs,
|
|
64
64
|
) -> str:
|
|
65
65
|
"""Implementation of the tool to generate realistic images using Heurist AI's ArthemyReal model.
|
|
@@ -78,20 +78,19 @@ class ImageGenerationArthemyReal(HeuristBaseTool):
|
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
79
|
skill_config = skill_config
|
|
80
80
|
|
|
81
|
-
# Get the Heurist API key from
|
|
81
|
+
# Get the Heurist API key from configuration
|
|
82
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
|
83
83
|
api_key = skill_config["api_key"]
|
|
84
84
|
if skill_config.get("rate_limit_number") and skill_config.get(
|
|
85
85
|
"rate_limit_minutes"
|
|
86
86
|
):
|
|
87
87
|
await self.user_rate_limit_by_category(
|
|
88
|
-
context.user_id,
|
|
89
88
|
skill_config["rate_limit_number"],
|
|
90
|
-
skill_config["rate_limit_minutes"],
|
|
89
|
+
skill_config["rate_limit_minutes"] * 60,
|
|
91
90
|
)
|
|
92
91
|
else:
|
|
93
|
-
api_key =
|
|
94
|
-
await self.user_rate_limit_by_category(
|
|
92
|
+
api_key = config.heurist_api_key
|
|
93
|
+
await self.user_rate_limit_by_category(10, 1440 * 60)
|
|
95
94
|
|
|
96
95
|
# Generate a unique job ID
|
|
97
96
|
job_id = str(XID())
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional, Type
|
|
3
2
|
|
|
4
3
|
import httpx
|
|
5
4
|
from epyxid import XID
|
|
6
5
|
from pydantic import BaseModel, Field
|
|
7
6
|
|
|
7
|
+
from intentkit.config.config import config
|
|
8
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
9
|
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
@@ -17,16 +17,16 @@ class ImageGenerationBrainDanceInput(BaseModel):
|
|
|
17
17
|
prompt: str = Field(
|
|
18
18
|
description="Text prompt describing the image to generate.",
|
|
19
19
|
)
|
|
20
|
-
neg_prompt:
|
|
20
|
+
neg_prompt: str | None = Field(
|
|
21
21
|
default="(worst quality: 1.4), bad quality, nsfw",
|
|
22
22
|
description="Negative prompt describing what to avoid in the generated image.",
|
|
23
23
|
)
|
|
24
|
-
width:
|
|
24
|
+
width: int | None = Field(
|
|
25
25
|
default=1024,
|
|
26
26
|
le=1024,
|
|
27
27
|
description="Width of the generated image.",
|
|
28
28
|
)
|
|
29
|
-
height:
|
|
29
|
+
height: int | None = Field(
|
|
30
30
|
default=1024,
|
|
31
31
|
le=1024,
|
|
32
32
|
description="Height of the generated image.",
|
|
@@ -52,14 +52,14 @@ class ImageGenerationBrainDance(HeuristBaseTool):
|
|
|
52
52
|
"BrainDance specializes in creating unique, artistic interpretations with creative flair.\n"
|
|
53
53
|
"If you have height and width, remember to specify them.\n"
|
|
54
54
|
)
|
|
55
|
-
args_schema:
|
|
55
|
+
args_schema: type[BaseModel] = ImageGenerationBrainDanceInput
|
|
56
56
|
|
|
57
57
|
async def _arun(
|
|
58
58
|
self,
|
|
59
59
|
prompt: str,
|
|
60
|
-
neg_prompt:
|
|
61
|
-
width:
|
|
62
|
-
height:
|
|
60
|
+
neg_prompt: str | None = "(worst quality: 1.4), bad quality, nsfw",
|
|
61
|
+
width: int | None = 1024,
|
|
62
|
+
height: int | None = 680,
|
|
63
63
|
**kwargs,
|
|
64
64
|
) -> str:
|
|
65
65
|
"""Implementation of the tool to generate artistic images using Heurist AI's BrainDance model.
|
|
@@ -78,20 +78,19 @@ class ImageGenerationBrainDance(HeuristBaseTool):
|
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
79
|
skill_config = skill_config
|
|
80
80
|
|
|
81
|
-
# Get the Heurist API key from
|
|
81
|
+
# Get the Heurist API key from configuration
|
|
82
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
|
83
83
|
api_key = skill_config["api_key"]
|
|
84
84
|
if skill_config.get("rate_limit_number") and skill_config.get(
|
|
85
85
|
"rate_limit_minutes"
|
|
86
86
|
):
|
|
87
87
|
await self.user_rate_limit_by_category(
|
|
88
|
-
context.user_id,
|
|
89
88
|
skill_config["rate_limit_number"],
|
|
90
|
-
skill_config["rate_limit_minutes"],
|
|
89
|
+
skill_config["rate_limit_minutes"] * 60,
|
|
91
90
|
)
|
|
92
91
|
else:
|
|
93
|
-
api_key =
|
|
94
|
-
await self.user_rate_limit_by_category(
|
|
92
|
+
api_key = config.heurist_api_key
|
|
93
|
+
await self.user_rate_limit_by_category(10, 1440 * 60)
|
|
95
94
|
|
|
96
95
|
# Generate a unique job ID
|
|
97
96
|
job_id = str(XID())
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional, Type
|
|
3
2
|
|
|
4
3
|
import httpx
|
|
5
4
|
from epyxid import XID
|
|
6
5
|
from pydantic import BaseModel, Field
|
|
7
6
|
|
|
7
|
+
from intentkit.config.config import config
|
|
8
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
9
|
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
@@ -17,16 +17,16 @@ class ImageGenerationCyberRealisticXLInput(BaseModel):
|
|
|
17
17
|
prompt: str = Field(
|
|
18
18
|
description="Text prompt describing the image to generate.",
|
|
19
19
|
)
|
|
20
|
-
neg_prompt:
|
|
20
|
+
neg_prompt: str | None = Field(
|
|
21
21
|
default="(worst quality: 1.4), bad quality, nsfw",
|
|
22
22
|
description="Negative prompt describing what to avoid in the generated image.",
|
|
23
23
|
)
|
|
24
|
-
width:
|
|
24
|
+
width: int | None = Field(
|
|
25
25
|
default=1024,
|
|
26
26
|
le=1024,
|
|
27
27
|
description="Width of the generated image.",
|
|
28
28
|
)
|
|
29
|
-
height:
|
|
29
|
+
height: int | None = Field(
|
|
30
30
|
default=680,
|
|
31
31
|
le=1024,
|
|
32
32
|
description="Height of the generated image.",
|
|
@@ -52,14 +52,14 @@ class ImageGenerationCyberRealisticXL(HeuristBaseTool):
|
|
|
52
52
|
"CyberRealisticXL specializes in creating high-quality hyperrealistic photographs with a cyberpunk aesthetic.\n"
|
|
53
53
|
"If you have height and width, remember to specify them.\n"
|
|
54
54
|
)
|
|
55
|
-
args_schema:
|
|
55
|
+
args_schema: type[BaseModel] = ImageGenerationCyberRealisticXLInput
|
|
56
56
|
|
|
57
57
|
async def _arun(
|
|
58
58
|
self,
|
|
59
59
|
prompt: str,
|
|
60
|
-
neg_prompt:
|
|
61
|
-
width:
|
|
62
|
-
height:
|
|
60
|
+
neg_prompt: str | None = "(worst quality: 1.4), bad quality, nsfw",
|
|
61
|
+
width: int | None = 1024,
|
|
62
|
+
height: int | None = 680,
|
|
63
63
|
**kwargs,
|
|
64
64
|
) -> str:
|
|
65
65
|
"""Implementation of the tool to generate hyperrealistic cyberpunk images using Heurist AI's CyberRealisticXL model.
|
|
@@ -78,20 +78,19 @@ class ImageGenerationCyberRealisticXL(HeuristBaseTool):
|
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
79
|
skill_config = skill_config
|
|
80
80
|
|
|
81
|
-
# Get the Heurist API key from
|
|
81
|
+
# Get the Heurist API key from configuration
|
|
82
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
|
83
83
|
api_key = skill_config["api_key"]
|
|
84
84
|
if skill_config.get("rate_limit_number") and skill_config.get(
|
|
85
85
|
"rate_limit_minutes"
|
|
86
86
|
):
|
|
87
87
|
await self.user_rate_limit_by_category(
|
|
88
|
-
context.user_id,
|
|
89
88
|
skill_config["rate_limit_number"],
|
|
90
|
-
skill_config["rate_limit_minutes"],
|
|
89
|
+
skill_config["rate_limit_minutes"] * 60,
|
|
91
90
|
)
|
|
92
91
|
else:
|
|
93
|
-
api_key =
|
|
94
|
-
await self.user_rate_limit_by_category(
|
|
92
|
+
api_key = config.heurist_api_key
|
|
93
|
+
await self.user_rate_limit_by_category(10, 1440 * 60)
|
|
95
94
|
|
|
96
95
|
# Generate a unique job ID
|
|
97
96
|
job_id = str(XID())
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional, Type
|
|
3
2
|
|
|
4
3
|
import httpx
|
|
5
4
|
from epyxid import XID
|
|
6
5
|
from pydantic import BaseModel, Field
|
|
7
6
|
|
|
7
|
+
from intentkit.config.config import config
|
|
8
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
9
|
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
@@ -17,16 +17,16 @@ class ImageGenerationFlux1DevInput(BaseModel):
|
|
|
17
17
|
prompt: str = Field(
|
|
18
18
|
description="Text prompt describing the image to generate.",
|
|
19
19
|
)
|
|
20
|
-
neg_prompt:
|
|
20
|
+
neg_prompt: str | None = Field(
|
|
21
21
|
default="",
|
|
22
22
|
description="Negative prompt describing what to avoid in the generated image.",
|
|
23
23
|
)
|
|
24
|
-
width:
|
|
24
|
+
width: int | None = Field(
|
|
25
25
|
default=1024,
|
|
26
26
|
le=2048,
|
|
27
27
|
description="Width of the generated image.",
|
|
28
28
|
)
|
|
29
|
-
height:
|
|
29
|
+
height: int | None = Field(
|
|
30
30
|
default=1024,
|
|
31
31
|
le=2048,
|
|
32
32
|
description="Height of the generated image.",
|
|
@@ -52,14 +52,14 @@ class ImageGenerationFlux1Dev(HeuristBaseTool):
|
|
|
52
52
|
"Flux.1-dev is a versatile, general-purpose model capable of generating images in any style.\n"
|
|
53
53
|
"If you have height and width, remember to specify them.\n"
|
|
54
54
|
)
|
|
55
|
-
args_schema:
|
|
55
|
+
args_schema: type[BaseModel] = ImageGenerationFlux1DevInput
|
|
56
56
|
|
|
57
57
|
async def _arun(
|
|
58
58
|
self,
|
|
59
59
|
prompt: str,
|
|
60
|
-
neg_prompt:
|
|
61
|
-
width:
|
|
62
|
-
height:
|
|
60
|
+
neg_prompt: str | None = "",
|
|
61
|
+
width: int | None = 1024,
|
|
62
|
+
height: int | None = 680,
|
|
63
63
|
**kwargs,
|
|
64
64
|
) -> str:
|
|
65
65
|
"""Implementation of the tool to generate images using Heurist AI's Flux.1-dev model.
|
|
@@ -78,20 +78,19 @@ class ImageGenerationFlux1Dev(HeuristBaseTool):
|
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
79
|
skill_config = skill_config
|
|
80
80
|
|
|
81
|
-
# Get the Heurist API key from
|
|
81
|
+
# Get the Heurist API key from configuration
|
|
82
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
|
83
83
|
api_key = skill_config["api_key"]
|
|
84
84
|
if skill_config.get("rate_limit_number") and skill_config.get(
|
|
85
85
|
"rate_limit_minutes"
|
|
86
86
|
):
|
|
87
87
|
await self.user_rate_limit_by_category(
|
|
88
|
-
context.user_id,
|
|
89
88
|
skill_config["rate_limit_number"],
|
|
90
|
-
skill_config["rate_limit_minutes"],
|
|
89
|
+
skill_config["rate_limit_minutes"] * 60,
|
|
91
90
|
)
|
|
92
91
|
else:
|
|
93
|
-
api_key =
|
|
94
|
-
await self.user_rate_limit_by_category(
|
|
92
|
+
api_key = config.heurist_api_key
|
|
93
|
+
await self.user_rate_limit_by_category(10, 1440 * 60)
|
|
95
94
|
|
|
96
95
|
# Generate a unique job ID
|
|
97
96
|
job_id = str(XID())
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional, Type
|
|
3
2
|
|
|
4
3
|
import httpx
|
|
5
4
|
from epyxid import XID
|
|
6
5
|
from pydantic import BaseModel, Field
|
|
7
6
|
|
|
7
|
+
from intentkit.config.config import config
|
|
8
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
9
|
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
@@ -17,16 +17,16 @@ class ImageGenerationSDXLInput(BaseModel):
|
|
|
17
17
|
prompt: str = Field(
|
|
18
18
|
description="Text prompt describing the image to generate.",
|
|
19
19
|
)
|
|
20
|
-
neg_prompt:
|
|
20
|
+
neg_prompt: str | None = Field(
|
|
21
21
|
default="(worst quality: 1.4), bad quality, nsfw",
|
|
22
22
|
description="Negative prompt describing what to avoid in the generated image.",
|
|
23
23
|
)
|
|
24
|
-
width:
|
|
24
|
+
width: int | None = Field(
|
|
25
25
|
default=1024,
|
|
26
26
|
le=1024,
|
|
27
27
|
description="Width of the generated image.",
|
|
28
28
|
)
|
|
29
|
-
height:
|
|
29
|
+
height: int | None = Field(
|
|
30
30
|
default=1024,
|
|
31
31
|
le=1024,
|
|
32
32
|
description="Height of the generated image.",
|
|
@@ -52,14 +52,14 @@ class ImageGenerationSDXL(HeuristBaseTool):
|
|
|
52
52
|
"SDXL is a versatile, general-purpose model capable of generating high-quality images in any style.\n"
|
|
53
53
|
"If you have height and width, remember to specify them.\n"
|
|
54
54
|
)
|
|
55
|
-
args_schema:
|
|
55
|
+
args_schema: type[BaseModel] = ImageGenerationSDXLInput
|
|
56
56
|
|
|
57
57
|
async def _arun(
|
|
58
58
|
self,
|
|
59
59
|
prompt: str,
|
|
60
|
-
neg_prompt:
|
|
61
|
-
width:
|
|
62
|
-
height:
|
|
60
|
+
neg_prompt: str | None = "(worst quality: 1.4), bad quality, nsfw",
|
|
61
|
+
width: int | None = 1024,
|
|
62
|
+
height: int | None = 680,
|
|
63
63
|
**kwargs,
|
|
64
64
|
) -> str:
|
|
65
65
|
"""Implementation of the tool to generate images using Heurist AI's SDXL model.
|
|
@@ -78,20 +78,19 @@ class ImageGenerationSDXL(HeuristBaseTool):
|
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
79
|
skill_config = skill_config
|
|
80
80
|
|
|
81
|
-
# Get the Heurist API key from
|
|
81
|
+
# Get the Heurist API key from configuration
|
|
82
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
|
83
83
|
api_key = skill_config["api_key"]
|
|
84
84
|
if skill_config.get("rate_limit_number") and skill_config.get(
|
|
85
85
|
"rate_limit_minutes"
|
|
86
86
|
):
|
|
87
87
|
await self.user_rate_limit_by_category(
|
|
88
|
-
context.user_id,
|
|
89
88
|
skill_config["rate_limit_number"],
|
|
90
|
-
skill_config["rate_limit_minutes"],
|
|
89
|
+
skill_config["rate_limit_minutes"] * 60,
|
|
91
90
|
)
|
|
92
91
|
else:
|
|
93
|
-
api_key =
|
|
94
|
-
await self.user_rate_limit_by_category(
|
|
92
|
+
api_key = config.heurist_api_key
|
|
93
|
+
await self.user_rate_limit_by_category(10, 1440 * 60)
|
|
95
94
|
|
|
96
95
|
# Generate a unique job ID
|
|
97
96
|
job_id = str(XID())
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import TypedDict
|
|
5
5
|
|
|
6
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
7
6
|
from intentkit.skills.base import SkillConfig, SkillState
|
|
8
7
|
from intentkit.skills.http.base import HttpBaseTool
|
|
9
8
|
from intentkit.skills.http.get import HttpGet
|
|
@@ -33,7 +32,6 @@ class Config(SkillConfig):
|
|
|
33
32
|
async def get_skills(
|
|
34
33
|
config: "Config",
|
|
35
34
|
is_private: bool,
|
|
36
|
-
store: SkillStoreABC,
|
|
37
35
|
**_,
|
|
38
36
|
) -> list[HttpBaseTool]:
|
|
39
37
|
"""Get all HTTP client skills.
|
|
@@ -41,7 +39,6 @@ async def get_skills(
|
|
|
41
39
|
Args:
|
|
42
40
|
config: The configuration for HTTP client skills.
|
|
43
41
|
is_private: Whether to include private skills.
|
|
44
|
-
store: The skill store for persisting data.
|
|
45
42
|
|
|
46
43
|
Returns:
|
|
47
44
|
A list of HTTP client skills.
|
|
@@ -58,7 +55,7 @@ async def get_skills(
|
|
|
58
55
|
# Get each skill using the cached getter
|
|
59
56
|
result = []
|
|
60
57
|
for name in available_skills:
|
|
61
|
-
skill = get_http_skill(name
|
|
58
|
+
skill = get_http_skill(name)
|
|
62
59
|
if skill:
|
|
63
60
|
result.append(skill)
|
|
64
61
|
return result
|
|
@@ -66,34 +63,26 @@ async def get_skills(
|
|
|
66
63
|
|
|
67
64
|
def get_http_skill(
|
|
68
65
|
name: str,
|
|
69
|
-
store: SkillStoreABC,
|
|
70
66
|
) -> HttpBaseTool:
|
|
71
67
|
"""Get an HTTP client skill by name.
|
|
72
68
|
|
|
73
69
|
Args:
|
|
74
70
|
name: The name of the skill to get
|
|
75
|
-
store: The skill store for persisting data
|
|
76
71
|
|
|
77
72
|
Returns:
|
|
78
73
|
The requested HTTP client skill
|
|
79
74
|
"""
|
|
80
75
|
if name == "http_get":
|
|
81
76
|
if name not in _cache:
|
|
82
|
-
_cache[name] = HttpGet(
|
|
83
|
-
skill_store=store,
|
|
84
|
-
)
|
|
77
|
+
_cache[name] = HttpGet()
|
|
85
78
|
return _cache[name]
|
|
86
79
|
elif name == "http_post":
|
|
87
80
|
if name not in _cache:
|
|
88
|
-
_cache[name] = HttpPost(
|
|
89
|
-
skill_store=store,
|
|
90
|
-
)
|
|
81
|
+
_cache[name] = HttpPost()
|
|
91
82
|
return _cache[name]
|
|
92
83
|
elif name == "http_put":
|
|
93
84
|
if name not in _cache:
|
|
94
|
-
_cache[name] = HttpPut(
|
|
95
|
-
skill_store=store,
|
|
96
|
-
)
|
|
85
|
+
_cache[name] = HttpPut()
|
|
97
86
|
return _cache[name]
|
|
98
87
|
else:
|
|
99
88
|
logger.warning(f"Unknown HTTP skill: {name}")
|
intentkit/skills/http/base.py
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
from typing import Type
|
|
2
|
-
|
|
3
1
|
from pydantic import BaseModel, Field
|
|
4
2
|
|
|
5
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
6
3
|
from intentkit.skills.base import IntentKitSkill
|
|
7
4
|
|
|
8
5
|
|
|
@@ -11,10 +8,7 @@ class HttpBaseTool(IntentKitSkill):
|
|
|
11
8
|
|
|
12
9
|
name: str = Field(description="The name of the tool")
|
|
13
10
|
description: str = Field(description="A description of what the tool does")
|
|
14
|
-
args_schema:
|
|
15
|
-
skill_store: SkillStoreABC = Field(
|
|
16
|
-
description="The skill store for persisting data"
|
|
17
|
-
)
|
|
11
|
+
args_schema: type[BaseModel]
|
|
18
12
|
|
|
19
13
|
@property
|
|
20
14
|
def category(self) -> str:
|
intentkit/skills/http/get.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
import httpx
|
|
5
|
+
from langchain_core.tools import ToolException
|
|
5
6
|
from pydantic import BaseModel, Field
|
|
6
7
|
|
|
7
8
|
from intentkit.skills.http.base import HttpBaseTool
|
|
@@ -13,15 +14,15 @@ class HttpGetInput(BaseModel):
|
|
|
13
14
|
"""Input for HTTP GET request."""
|
|
14
15
|
|
|
15
16
|
url: str = Field(description="The URL to send the GET request to")
|
|
16
|
-
headers:
|
|
17
|
+
headers: dict[str, str] | None = Field(
|
|
17
18
|
description="Optional headers to include in the request",
|
|
18
19
|
default=None,
|
|
19
20
|
)
|
|
20
|
-
params:
|
|
21
|
+
params: dict[str, Any] | None = Field(
|
|
21
22
|
description="Optional query parameters to include in the request",
|
|
22
23
|
default=None,
|
|
23
24
|
)
|
|
24
|
-
timeout:
|
|
25
|
+
timeout: float | None = Field(
|
|
25
26
|
description="Request timeout in seconds (default: 30)",
|
|
26
27
|
default=30.0,
|
|
27
28
|
)
|
|
@@ -46,13 +47,13 @@ class HttpGet(HttpBaseTool):
|
|
|
46
47
|
"Returns the response content as text. "
|
|
47
48
|
"Use this when you need to fetch data from web APIs or websites."
|
|
48
49
|
)
|
|
49
|
-
args_schema:
|
|
50
|
+
args_schema: type[BaseModel] = HttpGetInput
|
|
50
51
|
|
|
51
52
|
async def _arun(
|
|
52
53
|
self,
|
|
53
54
|
url: str,
|
|
54
|
-
headers:
|
|
55
|
-
params:
|
|
55
|
+
headers: dict[str, str] | None = None,
|
|
56
|
+
params: dict[str, Any] | None = None,
|
|
56
57
|
timeout: float = 30.0,
|
|
57
58
|
**kwargs,
|
|
58
59
|
) -> str:
|
|
@@ -83,12 +84,16 @@ class HttpGet(HttpBaseTool):
|
|
|
83
84
|
# Return response content
|
|
84
85
|
return f"Status: {response.status_code}\nContent: {response.text}"
|
|
85
86
|
|
|
86
|
-
except httpx.TimeoutException:
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
except httpx.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
except httpx.TimeoutException as exc:
|
|
88
|
+
raise ToolException(
|
|
89
|
+
f"Request to {url} timed out after {timeout} seconds"
|
|
90
|
+
) from exc
|
|
91
|
+
except httpx.HTTPStatusError as exc:
|
|
92
|
+
raise ToolException(
|
|
93
|
+
f"HTTP {exc.response.status_code} - {exc.response.text}"
|
|
94
|
+
) from exc
|
|
95
|
+
except httpx.RequestError as exc:
|
|
96
|
+
raise ToolException(f"Failed to connect to {url} - {str(exc)}") from exc
|
|
97
|
+
except Exception as exc: # noqa: BLE001
|
|
98
|
+
logger.error("Unexpected error in HTTP GET request", exc_info=exc)
|
|
99
|
+
raise ToolException(f"Unexpected error occurred - {str(exc)}") from exc
|