intentkit 0.6.13.dev2__py3-none-any.whl → 0.8.17__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of intentkit might be problematic. Click here for more details.
- intentkit/__init__.py +1 -1
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +14 -7
- intentkit/abstracts/skill.py +6 -144
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/__init__.py +5 -2
- intentkit/clients/cdp.py +101 -141
- intentkit/clients/twitter.py +83 -62
- intentkit/clients/web3.py +29 -0
- intentkit/config/config.py +8 -5
- intentkit/core/agent.py +472 -195
- intentkit/core/asset.py +253 -0
- intentkit/core/chat.py +51 -0
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +460 -130
- intentkit/core/engine.py +262 -233
- intentkit/core/node.py +15 -16
- intentkit/core/prompt.py +62 -28
- intentkit/core/scheduler.py +92 -0
- intentkit/core/statistics.py +168 -0
- intentkit/models/agent.py +1096 -949
- intentkit/models/agent_data.py +68 -38
- intentkit/models/agent_public.json +98 -0
- intentkit/models/agent_schema.json +54 -439
- intentkit/models/app_setting.py +96 -33
- intentkit/models/chat.py +74 -27
- intentkit/models/conversation.py +8 -8
- intentkit/models/credit.py +362 -74
- intentkit/models/db.py +26 -8
- intentkit/models/db_mig.py +2 -2
- intentkit/models/llm.csv +28 -0
- intentkit/models/llm.py +185 -350
- intentkit/models/redis.py +6 -4
- intentkit/models/skill.py +186 -72
- intentkit/models/skills.csv +174 -0
- intentkit/models/user.py +82 -24
- intentkit/skills/acolyt/__init__.py +2 -9
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +4 -9
- intentkit/skills/acolyt/schema.json +4 -3
- intentkit/skills/aixbt/__init__.py +2 -13
- intentkit/skills/aixbt/base.py +1 -7
- intentkit/skills/aixbt/projects.py +14 -15
- intentkit/skills/aixbt/schema.json +4 -4
- intentkit/skills/allora/__init__.py +2 -9
- intentkit/skills/allora/base.py +4 -9
- intentkit/skills/allora/price.py +3 -4
- intentkit/skills/allora/schema.json +3 -2
- intentkit/skills/base.py +248 -85
- intentkit/skills/basename/__init__.py +51 -0
- intentkit/skills/basename/base.py +11 -0
- intentkit/skills/basename/basename.svg +11 -0
- intentkit/skills/basename/schema.json +58 -0
- 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/schema.json +134 -137
- intentkit/skills/carv/token_info_and_price.py +5 -5
- intentkit/skills/casino/README.md +254 -0
- intentkit/skills/casino/__init__.py +86 -0
- intentkit/skills/casino/base.py +17 -0
- intentkit/skills/casino/casino.png +0 -0
- intentkit/skills/casino/deck_draw.py +127 -0
- intentkit/skills/casino/deck_shuffle.py +118 -0
- intentkit/skills/casino/dice_roll.py +100 -0
- intentkit/skills/casino/schema.json +77 -0
- intentkit/skills/casino/utils.py +107 -0
- intentkit/skills/cdp/__init__.py +22 -84
- intentkit/skills/cdp/base.py +1 -7
- intentkit/skills/cdp/schema.json +11 -314
- intentkit/skills/chainlist/__init__.py +2 -7
- intentkit/skills/chainlist/base.py +1 -7
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/chainlist/schema.json +3 -5
- intentkit/skills/common/__init__.py +2 -9
- intentkit/skills/common/base.py +1 -7
- intentkit/skills/common/current_time.py +1 -2
- intentkit/skills/common/schema.json +2 -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/schema.json +1 -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 +11 -25
- 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/cryptocompare/schema.json +3 -3
- 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/cryptopanic/schema.json +105 -103
- 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/dapplooker/schema.json +3 -5
- intentkit/skills/defillama/__init__.py +24 -74
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +11 -21
- 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/schema.json +5 -1
- 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/README.md +154 -0
- intentkit/skills/dexscreener/__init__.py +97 -93
- intentkit/skills/dexscreener/base.py +125 -133
- intentkit/skills/dexscreener/get_pair_info.py +158 -0
- intentkit/skills/dexscreener/get_token_pairs.py +165 -0
- intentkit/skills/dexscreener/get_tokens_info.py +212 -0
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/schema.json +91 -48
- intentkit/skills/dexscreener/search_token.py +182 -321
- intentkit/skills/dexscreener/utils.py +420 -0
- 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/dune_analytics/schema.json +104 -99
- intentkit/skills/elfa/__init__.py +5 -18
- intentkit/skills/elfa/base.py +10 -14
- intentkit/skills/elfa/mention.py +19 -21
- intentkit/skills/elfa/schema.json +3 -2
- 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 +50 -35
- intentkit/skills/enso/best_yield.py +16 -24
- intentkit/skills/enso/networks.py +6 -11
- intentkit/skills/enso/prices.py +11 -13
- intentkit/skills/enso/route.py +34 -38
- intentkit/skills/enso/schema.json +3 -2
- intentkit/skills/enso/tokens.py +29 -38
- intentkit/skills/enso/wallet.py +76 -191
- intentkit/skills/erc20/__init__.py +50 -0
- intentkit/skills/erc20/base.py +11 -0
- intentkit/skills/erc20/erc20.svg +5 -0
- intentkit/skills/erc20/schema.json +74 -0
- intentkit/skills/erc721/__init__.py +53 -0
- intentkit/skills/erc721/base.py +11 -0
- intentkit/skills/erc721/erc721.svg +5 -0
- intentkit/skills/erc721/schema.json +90 -0
- intentkit/skills/firecrawl/README.md +11 -5
- intentkit/skills/firecrawl/__init__.py +5 -18
- intentkit/skills/firecrawl/base.py +4 -11
- intentkit/skills/firecrawl/clear.py +4 -8
- intentkit/skills/firecrawl/crawl.py +19 -19
- intentkit/skills/firecrawl/query.py +4 -3
- intentkit/skills/firecrawl/schema.json +6 -8
- intentkit/skills/firecrawl/scrape.py +150 -40
- 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/github/schema.json +3 -4
- 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/heurist/schema.json +2 -2
- 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/http/schema.json +4 -5
- intentkit/skills/lifi/__init__.py +8 -13
- intentkit/skills/lifi/base.py +1 -7
- intentkit/skills/lifi/schema.json +17 -8
- intentkit/skills/lifi/token_execute.py +36 -30
- intentkit/skills/lifi/token_quote.py +8 -10
- intentkit/skills/lifi/utils.py +104 -51
- 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/moralis/schema.json +7 -2
- intentkit/skills/morpho/__init__.py +52 -0
- intentkit/skills/morpho/base.py +11 -0
- intentkit/skills/morpho/morpho.svg +12 -0
- intentkit/skills/morpho/schema.json +73 -0
- intentkit/skills/nation/__init__.py +4 -9
- intentkit/skills/nation/base.py +5 -10
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/nation/schema.json +4 -3
- 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 +34 -3
- intentkit/skills/portfolio/__init__.py +11 -35
- intentkit/skills/portfolio/base.py +33 -19
- intentkit/skills/portfolio/schema.json +3 -5
- 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 +50 -0
- intentkit/skills/pyth/base.py +11 -0
- intentkit/skills/pyth/pyth.svg +6 -0
- intentkit/skills/pyth/schema.json +75 -0
- intentkit/skills/skills.toml +40 -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/schema.json +2 -2
- intentkit/skills/slack/send_message.py +3 -5
- intentkit/skills/supabase/__init__.py +7 -23
- intentkit/skills/supabase/base.py +9 -13
- intentkit/skills/supabase/delete_data.py +5 -6
- intentkit/skills/supabase/fetch_data.py +13 -14
- intentkit/skills/supabase/insert_data.py +5 -6
- intentkit/skills/supabase/invoke_function.py +7 -8
- intentkit/skills/supabase/schema.json +2 -3
- intentkit/skills/supabase/update_data.py +7 -8
- intentkit/skills/supabase/upsert_data.py +5 -6
- intentkit/skills/superfluid/__init__.py +53 -0
- intentkit/skills/superfluid/base.py +11 -0
- intentkit/skills/superfluid/schema.json +89 -0
- intentkit/skills/superfluid/superfluid.svg +6 -0
- 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/system/schema.json +6 -8
- intentkit/skills/tavily/__init__.py +3 -12
- intentkit/skills/tavily/base.py +4 -9
- intentkit/skills/tavily/schema.json +3 -5
- 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/schema.json +3 -6
- 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 +23 -35
- intentkit/skills/twitter/follow_user.py +3 -7
- intentkit/skills/twitter/get_mentions.py +6 -13
- intentkit/skills/twitter/get_timeline.py +5 -13
- intentkit/skills/twitter/get_user_by_username.py +3 -7
- intentkit/skills/twitter/get_user_tweets.py +6 -14
- intentkit/skills/twitter/like_tweet.py +3 -7
- intentkit/skills/twitter/post_tweet.py +23 -12
- intentkit/skills/twitter/reply_tweet.py +21 -12
- intentkit/skills/twitter/retweet.py +3 -7
- intentkit/skills/twitter/schema.json +1 -0
- intentkit/skills/twitter/search_tweets.py +5 -13
- intentkit/skills/unrealspeech/__init__.py +2 -7
- intentkit/skills/unrealspeech/base.py +2 -8
- intentkit/skills/unrealspeech/schema.json +2 -5
- 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/schema.json +151 -152
- intentkit/skills/venice_audio/venice_audio.py +38 -21
- 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/schema.json +267 -267
- 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/schema.json +2 -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 +49 -0
- intentkit/skills/weth/base.py +11 -0
- intentkit/skills/weth/schema.json +58 -0
- intentkit/skills/weth/weth.svg +6 -0
- intentkit/skills/wow/__init__.py +51 -0
- intentkit/skills/wow/base.py +11 -0
- intentkit/skills/wow/schema.json +89 -0
- intentkit/skills/wow/wow.svg +7 -0
- 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 +61 -2
- intentkit/skills/xmtp/price.py +18 -13
- intentkit/skills/xmtp/schema.json +69 -71
- intentkit/skills/xmtp/swap.py +22 -25
- intentkit/skills/xmtp/transfer.py +71 -32
- intentkit/utils/chain.py +3 -3
- intentkit/utils/error.py +14 -1
- intentkit/utils/logging.py +2 -4
- intentkit/utils/s3.py +59 -7
- intentkit/utils/schema.py +100 -0
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +14 -16
- intentkit-0.8.17.dist-info/RECORD +466 -0
- intentkit/abstracts/exception.py +0 -9
- intentkit/core/skill.py +0 -200
- intentkit/models/generator.py +0 -347
- intentkit/skills/cdp/get_balance.py +0 -110
- intentkit/skills/cdp/swap.py +0 -121
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +0 -511
- intentkit-0.6.13.dev2.dist-info/RECORD +0 -409
- {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
- {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,192 +1,185 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from typing import Any
|
|
3
|
-
|
|
4
|
-
from
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
from intentkit.
|
|
8
|
-
from intentkit.skills.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
""
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
raise ToolException(
|
|
104
|
-
f"
|
|
105
|
-
)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
system_limit_num
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
- If an error occurs, success is an empty dictionary, and error contains error details.
|
|
187
|
-
"""
|
|
188
|
-
api_key = self.get_api_key()
|
|
189
|
-
|
|
190
|
-
return await make_venice_api_request(
|
|
191
|
-
api_key, path, payload, self.category, self.name
|
|
192
|
-
)
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from langchain_core.tools.base import ToolException
|
|
5
|
+
|
|
6
|
+
from intentkit.config.config import config
|
|
7
|
+
from intentkit.skills.base import IntentKitSkill
|
|
8
|
+
from intentkit.skills.venice_image.api import (
|
|
9
|
+
make_venice_api_request,
|
|
10
|
+
)
|
|
11
|
+
from intentkit.skills.venice_image.config import VeniceImageConfig
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
venice_base_url = "https://api.venice.ai" # Common base URL for all Venice endpoints
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class VeniceImageBaseTool(IntentKitSkill):
|
|
19
|
+
"""
|
|
20
|
+
Base class for all Venice AI image-related skills.
|
|
21
|
+
|
|
22
|
+
This class provides common functionality for interacting with the
|
|
23
|
+
Venice AI API, including:
|
|
24
|
+
|
|
25
|
+
- Retrieving the API key (from agent or system configuration).
|
|
26
|
+
- Applying rate limits to prevent overuse of the API.
|
|
27
|
+
- A standardized `post` method for making API requests.
|
|
28
|
+
|
|
29
|
+
Subclasses should inherit from this class and implement their specific
|
|
30
|
+
API interactions (e.g., image generation, upscaling, inpainting)
|
|
31
|
+
by defining their own `_arun` methods and setting appropriate `name`
|
|
32
|
+
and `description` attributes.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
@property
|
|
36
|
+
def category(self) -> str:
|
|
37
|
+
"""
|
|
38
|
+
Returns the category of this skill, used for configuration and logging.
|
|
39
|
+
"""
|
|
40
|
+
return "venice_image"
|
|
41
|
+
|
|
42
|
+
def getSkillConfig(self, context) -> VeniceImageConfig:
|
|
43
|
+
"""
|
|
44
|
+
Creates a VeniceImageConfig instance from a dictionary of configuration values.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
config: A dictionary containing configuration settings.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
A VeniceImageConfig object.
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
skill_config = context.agent.skill_config(self.category)
|
|
54
|
+
return VeniceImageConfig(
|
|
55
|
+
api_key_provider=skill_config.get("api_key_provider", "agent_owner"),
|
|
56
|
+
safe_mode=skill_config.get("safe_mode", True),
|
|
57
|
+
hide_watermark=skill_config.get("hide_watermark", True),
|
|
58
|
+
embed_exif_metadata=skill_config.get("embed_exif_metadata", False),
|
|
59
|
+
negative_prompt=skill_config.get(
|
|
60
|
+
"negative_prompt", "(worst quality: 1.4), bad quality, nsfw"
|
|
61
|
+
),
|
|
62
|
+
rate_limit_number=skill_config.get("rate_limit_number"),
|
|
63
|
+
rate_limit_minutes=skill_config.get("rate_limit_minutes"),
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def get_api_key(self) -> str:
|
|
67
|
+
"""
|
|
68
|
+
Retrieves the Venice AI API key based on the api_key_provider setting.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
The API key if found.
|
|
72
|
+
|
|
73
|
+
Raises:
|
|
74
|
+
ToolException: If the API key is not found or provider is invalid.
|
|
75
|
+
"""
|
|
76
|
+
try:
|
|
77
|
+
context = self.get_context()
|
|
78
|
+
skillConfig = self.getSkillConfig(context=context)
|
|
79
|
+
if skillConfig.api_key_provider == "agent_owner":
|
|
80
|
+
skill_config = context.agent.skill_config(self.category)
|
|
81
|
+
agent_api_key = skill_config.get("api_key")
|
|
82
|
+
if agent_api_key:
|
|
83
|
+
logger.debug(
|
|
84
|
+
f"Using agent-specific Venice API key for skill {self.name} in category {self.category}"
|
|
85
|
+
)
|
|
86
|
+
return agent_api_key
|
|
87
|
+
raise ToolException(
|
|
88
|
+
f"No agent-owned Venice API key found for skill '{self.name}' in category '{self.category}'."
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
elif skillConfig.api_key_provider == "platform":
|
|
92
|
+
system_api_key = config.venice_api_key
|
|
93
|
+
if system_api_key:
|
|
94
|
+
logger.debug(
|
|
95
|
+
f"Using system Venice API key for skill {self.name} in category {self.category}"
|
|
96
|
+
)
|
|
97
|
+
return system_api_key
|
|
98
|
+
raise ToolException(
|
|
99
|
+
f"No platform-hosted Venice API key found for skill '{self.name}' in category '{self.category}'."
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
else:
|
|
103
|
+
raise ToolException(
|
|
104
|
+
f"Invalid API key provider '{skillConfig.api_key_provider}' for skill '{self.name}'"
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
except Exception as e:
|
|
108
|
+
raise ToolException(f"Failed to retrieve Venice API key: {str(e)}") from e
|
|
109
|
+
|
|
110
|
+
async def apply_venice_rate_limit(self, context) -> None:
|
|
111
|
+
"""
|
|
112
|
+
Applies rate limiting to prevent exceeding the Venice AI API's rate limits.
|
|
113
|
+
|
|
114
|
+
Rate limits are applied based on the api_key_provider setting:
|
|
115
|
+
- 'agent_owner': uses agent-specific configuration.
|
|
116
|
+
- 'platform': uses system-wide configuration.
|
|
117
|
+
"""
|
|
118
|
+
try:
|
|
119
|
+
# Get user_id from the agent context (venice_image only supports agent_owner)
|
|
120
|
+
skillConfig = self.getSkillConfig(context=context)
|
|
121
|
+
|
|
122
|
+
if skillConfig.api_key_provider == "agent_owner":
|
|
123
|
+
limit_num = skillConfig.rate_limit_number
|
|
124
|
+
limit_min = skillConfig.rate_limit_minutes
|
|
125
|
+
|
|
126
|
+
if limit_num and limit_min:
|
|
127
|
+
# For agent_owner, use agent.id as user_id for rate limiting
|
|
128
|
+
user_id = context.agent.id
|
|
129
|
+
logger.debug(
|
|
130
|
+
f"Applying Agent rate limit ({limit_num}/{limit_min} min) for user {user_id} on {self.name}"
|
|
131
|
+
)
|
|
132
|
+
await self.user_rate_limit_by_category(limit_num, limit_min * 60)
|
|
133
|
+
|
|
134
|
+
elif skillConfig.api_key_provider == "platform":
|
|
135
|
+
system_limit_num = getattr(
|
|
136
|
+
config, f"{self.category}_rate_limit_number", None
|
|
137
|
+
)
|
|
138
|
+
system_limit_min = getattr(
|
|
139
|
+
config, f"{self.category}_rate_limit_minutes", None
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
if system_limit_num and system_limit_min:
|
|
143
|
+
# For platform, use agent.id as user_id for rate limiting
|
|
144
|
+
user_id = context.agent.id
|
|
145
|
+
logger.debug(
|
|
146
|
+
f"Applying System rate limit ({system_limit_num}/{system_limit_min} min) for user {user_id} on {self.name}"
|
|
147
|
+
)
|
|
148
|
+
await self.user_rate_limit_by_category(
|
|
149
|
+
system_limit_num, system_limit_min * 60
|
|
150
|
+
)
|
|
151
|
+
# do nothing if no rate limit is
|
|
152
|
+
return None
|
|
153
|
+
|
|
154
|
+
except Exception as e:
|
|
155
|
+
raise ToolException(f"Failed to apply Venice rate limit: {str(e)}") from e
|
|
156
|
+
|
|
157
|
+
async def post(
|
|
158
|
+
self, path: str, payload: dict[str, Any], context
|
|
159
|
+
) -> tuple[dict[str, Any], dict[str, Any] | None]:
|
|
160
|
+
"""
|
|
161
|
+
Makes a POST request to the Venice AI API using the `make_venice_api_request`
|
|
162
|
+
function from the `skills.venice_image.api` module.
|
|
163
|
+
|
|
164
|
+
This method handles the following:
|
|
165
|
+
|
|
166
|
+
1. Retrieving the API key using `get_api_key`.
|
|
167
|
+
2. Constructing the request payload.
|
|
168
|
+
3. Calling `make_venice_api_request` to make the actual API call.
|
|
169
|
+
4. Returning the results from `make_venice_api_request`.
|
|
170
|
+
|
|
171
|
+
Args:
|
|
172
|
+
path: The API endpoint path (e.g., "/api/v1/image/generate").
|
|
173
|
+
payload: The request payload as a dictionary.
|
|
174
|
+
context: The SkillContext for accessing API keys and configs.
|
|
175
|
+
|
|
176
|
+
Returns:
|
|
177
|
+
A tuple: (success_data, error_data).
|
|
178
|
+
- If successful, success contains the JSON response from the API.
|
|
179
|
+
- If an error occurs, success is an empty dictionary, and error contains error details.
|
|
180
|
+
"""
|
|
181
|
+
api_key = self.get_api_key()
|
|
182
|
+
|
|
183
|
+
return await make_venice_api_request(
|
|
184
|
+
api_key, path, payload, self.category, self.name
|
|
185
|
+
)
|
|
@@ -1,35 +1,33 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
description="Duration of the time window (in minutes) for rate limiting.",
|
|
35
|
-
)
|
|
1
|
+
from pydantic import BaseModel, Field
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class VeniceImageConfig(BaseModel):
|
|
5
|
+
"""Skill Config for Venice Image."""
|
|
6
|
+
|
|
7
|
+
api_key_provider: str = Field(
|
|
8
|
+
default="agent_owner",
|
|
9
|
+
description="Provider of the API Key, could be agent_owner or platform",
|
|
10
|
+
)
|
|
11
|
+
safe_mode: bool = Field(
|
|
12
|
+
default=True,
|
|
13
|
+
description="Whether to use safe mode. If enabled, this will blur images that are classified as having adult content",
|
|
14
|
+
)
|
|
15
|
+
hide_watermark: bool = Field(
|
|
16
|
+
default=True,
|
|
17
|
+
description="Whether to hide the Venice watermark. Venice may ignore this parameter for certain generated content.",
|
|
18
|
+
)
|
|
19
|
+
embed_exif_metadata: bool = Field(
|
|
20
|
+
default=False, description="Whether to embed EXIF metadata in the image."
|
|
21
|
+
)
|
|
22
|
+
negative_prompt: str = Field(
|
|
23
|
+
default="(worst quality: 1.4), bad quality, nsfw",
|
|
24
|
+
description="The default negative prompt used when no other prompt is provided.",
|
|
25
|
+
)
|
|
26
|
+
rate_limit_number: int | None = Field(
|
|
27
|
+
default=None,
|
|
28
|
+
description="Maximum number of allowed calls within the specified time window.",
|
|
29
|
+
)
|
|
30
|
+
rate_limit_minutes: int | None = Field(
|
|
31
|
+
default=None,
|
|
32
|
+
description="Duration of the time window (in minutes) for rate limiting.",
|
|
33
|
+
)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Optional
|
|
3
2
|
|
|
4
3
|
from pydantic import HttpUrl
|
|
5
4
|
|
|
@@ -30,8 +29,8 @@ class ImageEnhance(VeniceImageEnhanceBaseTool):
|
|
|
30
29
|
self,
|
|
31
30
|
image_url: HttpUrl,
|
|
32
31
|
enhancePrompt: str,
|
|
33
|
-
replication:
|
|
34
|
-
enhanceCreativity:
|
|
32
|
+
replication: float | None = 0.35,
|
|
33
|
+
enhanceCreativity: float | None = 0.5,
|
|
35
34
|
**kwargs,
|
|
36
35
|
) -> dict:
|
|
37
36
|
"""
|
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
description="A description of what the image Enchanching tool does."
|
|
23
|
-
)
|
|
1
|
+
from pydantic import BaseModel, Field
|
|
2
|
+
|
|
3
|
+
# Import the generic base and shared input
|
|
4
|
+
from intentkit.skills.venice_image.base import VeniceImageBaseTool
|
|
5
|
+
from intentkit.skills.venice_image.image_enhance.image_enhance_input import (
|
|
6
|
+
VeniceImageEnhanceInput,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class VeniceImageEnhanceBaseTool(VeniceImageBaseTool):
|
|
11
|
+
"""
|
|
12
|
+
Base class for Venice AI *Image Enchanching* tools.
|
|
13
|
+
Inherits from VeniceAIBaseTool and handles specifics of the
|
|
14
|
+
/image/upscale endpoint
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
args_schema: type[BaseModel] = VeniceImageEnhanceInput
|
|
18
|
+
name: str = Field(description="The unique name of the image Enchanching tool.")
|
|
19
|
+
description: str = Field(
|
|
20
|
+
description="A description of what the image Enchanching tool does."
|
|
21
|
+
)
|
|
@@ -1,40 +1,38 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
),
|
|
40
|
-
)
|
|
1
|
+
from pydantic import BaseModel, Field
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class VeniceImageEnhanceInput(BaseModel):
|
|
5
|
+
"""Input for Venice Image Enhance tool (scale=1, enhance=True)."""
|
|
6
|
+
|
|
7
|
+
image_url: str = Field(
|
|
8
|
+
description="The URL of the image to enhance. Must be a publicly accessible URL."
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
enhancePrompt: str = Field(
|
|
12
|
+
...,
|
|
13
|
+
max_length=1500,
|
|
14
|
+
description=(
|
|
15
|
+
"Required prompt describing the desired enhancement style. "
|
|
16
|
+
"Best used with short descriptors like 'gold', 'marble', or 'angry, menacing'."
|
|
17
|
+
),
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
replication: float | None = Field(
|
|
21
|
+
default=0.35,
|
|
22
|
+
ge=0.1,
|
|
23
|
+
le=1.0,
|
|
24
|
+
description=(
|
|
25
|
+
"How strongly lines and noise in the base image are preserved. "
|
|
26
|
+
"Higher values retain more noise and detail but are less smooth."
|
|
27
|
+
),
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
enhanceCreativity: float = Field(
|
|
31
|
+
default=0.5,
|
|
32
|
+
ge=0.0,
|
|
33
|
+
le=1.0,
|
|
34
|
+
description=(
|
|
35
|
+
"How much the enhancement AI is allowed to change the image. "
|
|
36
|
+
"0 = minimal change, 1 = generate a new image entirely."
|
|
37
|
+
),
|
|
38
|
+
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import hashlib
|
|
3
3
|
import logging
|
|
4
|
-
from typing import Any,
|
|
4
|
+
from typing import Any, Literal
|
|
5
5
|
|
|
6
6
|
from pydantic import BaseModel, Field
|
|
7
7
|
|
|
@@ -24,7 +24,7 @@ class VeniceImageGenerationBaseTool(VeniceImageBaseTool):
|
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
26
|
# --- Attributes specific to Image Generation ---
|
|
27
|
-
args_schema:
|
|
27
|
+
args_schema: type[BaseModel] = VeniceImageGenerationInput
|
|
28
28
|
|
|
29
29
|
# --- Attributes Subclasses MUST Define ---
|
|
30
30
|
name: str = Field(description="The unique name of the image generation tool/model.")
|
|
@@ -38,15 +38,15 @@ class VeniceImageGenerationBaseTool(VeniceImageBaseTool):
|
|
|
38
38
|
async def _arun(
|
|
39
39
|
self,
|
|
40
40
|
prompt: str,
|
|
41
|
-
seed:
|
|
42
|
-
negative_prompt:
|
|
43
|
-
width:
|
|
44
|
-
height:
|
|
41
|
+
seed: int | None = None,
|
|
42
|
+
negative_prompt: str | None = None,
|
|
43
|
+
width: int | None = 1024,
|
|
44
|
+
height: int | None = 1024,
|
|
45
45
|
format: Literal["png", "jpeg", "webp"] = "png",
|
|
46
|
-
cfg_scale:
|
|
47
|
-
style_preset:
|
|
46
|
+
cfg_scale: float | None = 7.5,
|
|
47
|
+
style_preset: str | None = "Photographic",
|
|
48
48
|
**kwargs,
|
|
49
|
-
) ->
|
|
49
|
+
) -> dict[str, Any]:
|
|
50
50
|
try:
|
|
51
51
|
context = self.get_context()
|
|
52
52
|
skillConfig = self.getSkillConfig(context)
|