intentkit 0.7.5.dev3__py3-none-any.whl → 0.8.34.dev7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- intentkit/MANIFEST.in +14 -0
- intentkit/README.md +88 -0
- intentkit/__init__.py +6 -4
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +15 -8
- intentkit/abstracts/skill.py +6 -144
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/__init__.py +9 -2
- intentkit/clients/cdp.py +129 -153
- intentkit/{utils → clients}/s3.py +109 -34
- intentkit/clients/twitter.py +83 -62
- intentkit/clients/web3.py +4 -7
- intentkit/config/config.py +123 -90
- intentkit/core/account_checking.py +802 -0
- intentkit/core/agent.py +313 -498
- intentkit/core/asset.py +267 -0
- intentkit/core/chat.py +5 -3
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +49 -41
- intentkit/core/draft.py +201 -0
- intentkit/core/draft_chat.py +118 -0
- intentkit/core/engine.py +378 -287
- intentkit/core/manager/__init__.py +25 -0
- intentkit/core/manager/engine.py +220 -0
- intentkit/core/manager/service.py +172 -0
- intentkit/core/manager/skills.py +178 -0
- intentkit/core/middleware.py +231 -0
- intentkit/core/prompt.py +74 -114
- intentkit/core/scheduler.py +143 -0
- intentkit/core/statistics.py +168 -0
- intentkit/models/agent.py +931 -518
- intentkit/models/agent_data.py +165 -106
- intentkit/models/agent_schema.json +38 -251
- intentkit/models/app_setting.py +15 -13
- intentkit/models/chat.py +86 -140
- intentkit/models/credit.py +182 -162
- intentkit/models/db.py +42 -23
- intentkit/models/db_mig.py +120 -3
- intentkit/models/draft.py +222 -0
- intentkit/models/llm.csv +31 -0
- intentkit/models/llm.py +262 -370
- intentkit/models/redis.py +6 -4
- intentkit/models/skill.py +222 -101
- intentkit/models/skills.csv +173 -0
- intentkit/models/team.py +189 -0
- intentkit/models/user.py +103 -31
- 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 +241 -41
- 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 +6 -6
- 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/casino/schema.json +0 -1
- 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 +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/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 +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/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/__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/schema.json +91 -93
- 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/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 +54 -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/__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/schema.json +2 -6
- 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/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 +13 -15
- intentkit/skills/heurist/image_generation_arthemy_comics.py +13 -15
- intentkit/skills/heurist/image_generation_arthemy_real.py +13 -15
- intentkit/skills/heurist/image_generation_braindance.py +13 -15
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +13 -15
- intentkit/skills/heurist/image_generation_flux_1_dev.py +13 -15
- intentkit/skills/heurist/image_generation_sdxl.py +13 -15
- 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 +3 -9
- intentkit/skills/lifi/schema.json +17 -8
- intentkit/skills/lifi/token_execute.py +150 -60
- 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 +30 -0
- intentkit/skills/openai/__init__.py +17 -18
- intentkit/skills/openai/base.py +10 -14
- intentkit/skills/openai/dalle_image_generation.py +4 -9
- intentkit/skills/openai/gpt_avatar_generator.py +102 -0
- intentkit/skills/openai/gpt_image_generation.py +5 -9
- intentkit/skills/openai/gpt_image_mini_generator.py +92 -0
- intentkit/skills/openai/gpt_image_to_image.py +5 -9
- 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 +36 -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 +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/schema.json +2 -3
- intentkit/skills/supabase/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- 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 +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/schema.json +1 -0
- 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/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 +11 -10
- 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 +58 -0
- intentkit/skills/x402/base.py +99 -0
- intentkit/skills/x402/http_request.py +117 -0
- intentkit/skills/x402/schema.json +40 -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 +7 -6
- intentkit/skills/xmtp/schema.json +69 -71
- intentkit/skills/xmtp/swap.py +6 -8
- intentkit/skills/xmtp/transfer.py +4 -6
- intentkit/utils/__init__.py +4 -0
- intentkit/utils/chain.py +198 -96
- intentkit/utils/ens.py +135 -0
- intentkit/utils/error.py +5 -2
- intentkit/utils/logging.py +9 -11
- intentkit/utils/schema.py +100 -0
- intentkit/utils/slack_alert.py +8 -8
- intentkit/utils/tx.py +16 -8
- intentkit/uv.lock +3377 -0
- {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/METADATA +13 -15
- intentkit-0.8.34.dev7.dist-info/RECORD +478 -0
- intentkit-0.8.34.dev7.dist-info/licenses/LICENSE +21 -0
- intentkit/core/node.py +0 -215
- intentkit/models/conversation.py +0 -286
- 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.7.5.dev3.dist-info/RECORD +0 -424
- {intentkit-0.7.5.dev3.dist-info/licenses → intentkit}/LICENSE +0 -0
- {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/WHEEL +0 -0
intentkit/skills/enso/route.py
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
from typing import Type
|
|
2
|
-
|
|
3
1
|
import httpx
|
|
4
|
-
from
|
|
2
|
+
from langchain_core.tools.base import ToolException
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.enso.networks import EnsoGetNetworks
|
|
8
6
|
|
|
9
|
-
from .base import EnsoBaseTool, base_url,
|
|
7
|
+
from .base import EnsoBaseTool, base_url, format_amount_with_decimals
|
|
10
8
|
|
|
11
9
|
|
|
12
10
|
class EnsoRouteShortcutInput(BaseModel):
|
|
@@ -18,9 +16,9 @@ class EnsoRouteShortcutInput(BaseModel):
|
|
|
18
16
|
False,
|
|
19
17
|
description="Whether to broadcast the transaction or not, this is false by default.",
|
|
20
18
|
)
|
|
21
|
-
chainId: int = Field(
|
|
22
|
-
|
|
23
|
-
description="(Optional) Chain ID of the network to execute the transaction on.
|
|
19
|
+
chainId: int | None = Field(
|
|
20
|
+
None,
|
|
21
|
+
description="(Optional) Chain ID of the network to execute the transaction on. Defaults to the agent's configured network.",
|
|
24
22
|
)
|
|
25
23
|
amountIn: list[int] = Field(
|
|
26
24
|
description="Amount of tokenIn to swap in wei, you should multiply user's requested value by token decimals."
|
|
@@ -155,14 +153,14 @@ class EnsoRouteShortcut(EnsoBaseTool):
|
|
|
155
153
|
|
|
156
154
|
name: str = "enso_route_shortcut"
|
|
157
155
|
description: str = "This tool is used specifically for broadcasting a route transaction calldata to the network. It should only be used when the user explicitly requests to broadcast a route transaction with routeId."
|
|
158
|
-
args_schema:
|
|
156
|
+
args_schema: type[BaseModel] = EnsoRouteShortcutInput
|
|
159
157
|
|
|
160
158
|
async def _arun(
|
|
161
159
|
self,
|
|
162
160
|
amountIn: list[int],
|
|
163
161
|
tokenIn: list[str],
|
|
164
162
|
tokenOut: list[str],
|
|
165
|
-
chainId: int =
|
|
163
|
+
chainId: int | None = None,
|
|
166
164
|
broadcast_requested: bool = False,
|
|
167
165
|
**kwargs,
|
|
168
166
|
) -> EnsoRouteShortcutOutput:
|
|
@@ -173,7 +171,7 @@ class EnsoRouteShortcut(EnsoBaseTool):
|
|
|
173
171
|
amountIn (list[int]): Amount of tokenIn to swap in wei, you should multiply user's requested value by token decimals.
|
|
174
172
|
tokenIn (list[str]): Ethereum address of the token to swap or enter into a position from (For ETH, use 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee).
|
|
175
173
|
tokenOut (list[str]): Ethereum address of the token to swap or enter into a position to (For ETH, use 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee).
|
|
176
|
-
chainId (int): The chain id of the network to be used for swap, deposit and routing.
|
|
174
|
+
chainId (int | None): The chain id of the network to be used for swap, deposit and routing. Defaults to the agent's configured network.
|
|
177
175
|
broadcast_requested (bool): User should ask for broadcasting the transaction explicitly, otherwise it is always false.
|
|
178
176
|
|
|
179
177
|
Returns:
|
|
@@ -181,35 +179,36 @@ class EnsoRouteShortcut(EnsoBaseTool):
|
|
|
181
179
|
"""
|
|
182
180
|
|
|
183
181
|
context = self.get_context()
|
|
184
|
-
|
|
182
|
+
resolved_chain_id = self.resolve_chain_id(context, chainId)
|
|
185
183
|
api_token = self.get_api_token(context)
|
|
186
|
-
|
|
184
|
+
# Use the wallet provider to send the transaction
|
|
185
|
+
wallet_provider = await self.get_wallet_provider(context)
|
|
186
|
+
wallet_address = wallet_provider.get_address()
|
|
187
187
|
|
|
188
188
|
async with httpx.AsyncClient() as client:
|
|
189
189
|
try:
|
|
190
190
|
network_name = None
|
|
191
|
-
networks = await self.
|
|
192
|
-
|
|
191
|
+
networks = await self.get_agent_skill_data_raw(
|
|
192
|
+
"enso_get_networks", "networks"
|
|
193
193
|
)
|
|
194
194
|
|
|
195
195
|
if networks:
|
|
196
|
+
resolved_key = str(resolved_chain_id)
|
|
196
197
|
network_name = (
|
|
197
|
-
networks.get(
|
|
198
|
-
if networks.get(
|
|
198
|
+
networks.get(resolved_key).get("name")
|
|
199
|
+
if networks.get(resolved_key)
|
|
199
200
|
else None
|
|
200
201
|
)
|
|
201
202
|
if network_name is None:
|
|
202
|
-
networks = await EnsoGetNetworks(
|
|
203
|
-
skill_store=self.skill_store,
|
|
204
|
-
).arun()
|
|
203
|
+
networks = await EnsoGetNetworks().arun()
|
|
205
204
|
|
|
206
205
|
for network in networks.res:
|
|
207
|
-
if network.id ==
|
|
206
|
+
if network.id == resolved_chain_id:
|
|
208
207
|
network_name = network.name
|
|
209
208
|
|
|
210
209
|
if not network_name:
|
|
211
210
|
raise ToolException(
|
|
212
|
-
f"network name not found for chainId: {
|
|
211
|
+
f"network name not found for chainId: {resolved_chain_id}"
|
|
213
212
|
)
|
|
214
213
|
|
|
215
214
|
headers = {
|
|
@@ -217,8 +216,7 @@ class EnsoRouteShortcut(EnsoBaseTool):
|
|
|
217
216
|
"Authorization": f"Bearer {api_token}",
|
|
218
217
|
}
|
|
219
218
|
|
|
220
|
-
token_decimals = await self.
|
|
221
|
-
agent_id,
|
|
219
|
+
token_decimals = await self.get_agent_skill_data_raw(
|
|
222
220
|
"enso_get_tokens",
|
|
223
221
|
"decimals",
|
|
224
222
|
)
|
|
@@ -242,13 +240,13 @@ class EnsoRouteShortcut(EnsoBaseTool):
|
|
|
242
240
|
|
|
243
241
|
# Prepare query parameters
|
|
244
242
|
params = EnsoRouteShortcutInput(
|
|
245
|
-
chainId=
|
|
243
|
+
chainId=resolved_chain_id,
|
|
246
244
|
amountIn=amountIn,
|
|
247
245
|
tokenIn=tokenIn,
|
|
248
246
|
tokenOut=tokenOut,
|
|
249
247
|
).model_dump(exclude_none=True)
|
|
250
248
|
|
|
251
|
-
params["fromAddress"] =
|
|
249
|
+
params["fromAddress"] = wallet_address
|
|
252
250
|
|
|
253
251
|
response = await client.get(url, headers=headers, params=params)
|
|
254
252
|
response.raise_for_status() # Raise HTTPError for non-2xx responses
|
|
@@ -256,26 +254,24 @@ class EnsoRouteShortcut(EnsoBaseTool):
|
|
|
256
254
|
|
|
257
255
|
res = EnsoRouteShortcutOutput(**json_dict)
|
|
258
256
|
res.network = network_name
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
257
|
+
decimals = token_decimals.get(tokenOut[0])
|
|
258
|
+
amount_out = format_amount_with_decimals(
|
|
259
|
+
json_dict.get("amountOut"), decimals
|
|
262
260
|
)
|
|
261
|
+
if amount_out is not None:
|
|
262
|
+
res.amountOut = amount_out
|
|
263
263
|
|
|
264
264
|
if broadcast_requested:
|
|
265
|
-
# Use the wallet provider to send the transaction
|
|
266
|
-
wallet_provider = await self.get_wallet_provider(context)
|
|
267
|
-
|
|
268
265
|
# Extract transaction data from the Enso API response
|
|
269
266
|
tx_data = json_dict.get("tx", {})
|
|
270
267
|
if tx_data:
|
|
271
268
|
# Send the transaction using the wallet provider
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
)
|
|
269
|
+
tx_params = {
|
|
270
|
+
"to": tx_data.get("to"),
|
|
271
|
+
"data": tx_data.get("data", "0x"),
|
|
272
|
+
"value": tx_data.get("value", 0),
|
|
273
|
+
}
|
|
274
|
+
tx_hash = wallet_provider.send_transaction(tx_params)
|
|
279
275
|
|
|
280
276
|
# Wait for transaction confirmation
|
|
281
277
|
wallet_provider.wait_for_transaction_receipt(tx_hash)
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
"description": "Integration with Enso Finance API providing DeFi trading and portfolio management capabilities across multiple blockchain networks",
|
|
6
6
|
"x-icon": "https://ai.service.crestal.dev/skills/enso/enso.jpg",
|
|
7
7
|
"x-tags": [
|
|
8
|
-
"
|
|
8
|
+
"Analytics",
|
|
9
|
+
"DeFi"
|
|
9
10
|
],
|
|
10
11
|
"properties": {
|
|
11
12
|
"enabled": {
|
|
@@ -209,4 +210,4 @@
|
|
|
209
210
|
}
|
|
210
211
|
},
|
|
211
212
|
"additionalProperties": true
|
|
212
|
-
}
|
|
213
|
+
}
|
intentkit/skills/enso/tokens.py
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
from typing import Type
|
|
2
|
-
|
|
3
1
|
import httpx
|
|
4
|
-
from
|
|
2
|
+
from langchain_core.tools.base import ToolException
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
|
-
from intentkit.skills.enso.base import
|
|
8
|
-
EnsoBaseTool,
|
|
9
|
-
base_url,
|
|
10
|
-
default_chain_id,
|
|
11
|
-
)
|
|
5
|
+
from intentkit.skills.enso.base import EnsoBaseTool, base_url
|
|
12
6
|
|
|
13
7
|
# Actual Enso output types
|
|
14
8
|
# class UnderlyingToken(BaseModel):
|
|
@@ -50,9 +44,9 @@ from intentkit.skills.enso.base import (
|
|
|
50
44
|
|
|
51
45
|
|
|
52
46
|
class EnsoGetTokensInput(BaseModel):
|
|
53
|
-
chainId: int = Field(
|
|
54
|
-
|
|
55
|
-
description="The blockchain chain ID",
|
|
47
|
+
chainId: int | None = Field(
|
|
48
|
+
None,
|
|
49
|
+
description="The blockchain chain ID. Defaults to the agent's configured network.",
|
|
56
50
|
)
|
|
57
51
|
protocolSlug: str | None = Field(
|
|
58
52
|
None,
|
|
@@ -110,7 +104,10 @@ class TokenResponseCompact(BaseModel):
|
|
|
110
104
|
|
|
111
105
|
|
|
112
106
|
class EnsoGetTokensOutput(BaseModel):
|
|
113
|
-
res: list[TokenResponseCompact]
|
|
107
|
+
res: list[TokenResponseCompact] = Field(
|
|
108
|
+
default_factory=list,
|
|
109
|
+
description="List of token information entries",
|
|
110
|
+
)
|
|
114
111
|
|
|
115
112
|
|
|
116
113
|
class EnsoGetTokens(EnsoBaseTool):
|
|
@@ -134,11 +131,11 @@ class EnsoGetTokens(EnsoBaseTool):
|
|
|
134
131
|
"Enso Finance Token Information Tool: Retrieves detailed token information from the Enso Finance API, "
|
|
135
132
|
"including APY, symbol, address, protocol slug, token type, and underlying tokens."
|
|
136
133
|
)
|
|
137
|
-
args_schema:
|
|
134
|
+
args_schema: type[BaseModel] = EnsoGetTokensInput
|
|
138
135
|
|
|
139
136
|
async def _arun(
|
|
140
137
|
self,
|
|
141
|
-
chainId: int =
|
|
138
|
+
chainId: int | None = None,
|
|
142
139
|
protocolSlug: str | None = None,
|
|
143
140
|
**kwargs,
|
|
144
141
|
) -> EnsoGetTokensOutput:
|
|
@@ -155,16 +152,17 @@ class EnsoGetTokens(EnsoBaseTool):
|
|
|
155
152
|
url = f"{base_url}/api/v1/tokens"
|
|
156
153
|
|
|
157
154
|
context = self.get_context()
|
|
158
|
-
|
|
155
|
+
resolved_chain_id = self.resolve_chain_id(context, chainId)
|
|
159
156
|
api_token = self.get_api_token(context)
|
|
160
157
|
main_tokens = self.get_main_tokens(context)
|
|
158
|
+
main_tokens_upper = {token.upper() for token in main_tokens}
|
|
161
159
|
headers = {
|
|
162
160
|
"accept": "application/json",
|
|
163
161
|
"Authorization": f"Bearer {api_token}",
|
|
164
162
|
}
|
|
165
163
|
|
|
166
164
|
params = EnsoGetTokensInput(
|
|
167
|
-
chainId=
|
|
165
|
+
chainId=resolved_chain_id,
|
|
168
166
|
protocolSlug=protocolSlug,
|
|
169
167
|
).model_dump(exclude_none=True)
|
|
170
168
|
|
|
@@ -177,35 +175,28 @@ class EnsoGetTokens(EnsoBaseTool):
|
|
|
177
175
|
response.raise_for_status()
|
|
178
176
|
json_dict = response.json()
|
|
179
177
|
|
|
180
|
-
token_decimals = await self.
|
|
181
|
-
agent_id,
|
|
182
|
-
"enso_get_tokens",
|
|
183
|
-
"decimals",
|
|
184
|
-
)
|
|
178
|
+
token_decimals = await self.get_agent_skill_data("decimals")
|
|
185
179
|
if not token_decimals:
|
|
186
180
|
token_decimals = {}
|
|
187
181
|
|
|
188
182
|
# filter the main tokens from config or the ones that have apy assigned.
|
|
189
|
-
res = EnsoGetTokensOutput(
|
|
190
|
-
for item in json_dict
|
|
191
|
-
|
|
192
|
-
|
|
183
|
+
res = EnsoGetTokensOutput()
|
|
184
|
+
for item in json_dict.get("data", []):
|
|
185
|
+
symbol = item.get("symbol", "").upper()
|
|
186
|
+
has_apy = bool(item.get("apy"))
|
|
187
|
+
if has_apy or symbol in main_tokens_upper:
|
|
193
188
|
token_response = TokenResponseCompact(**item)
|
|
194
189
|
res.res.append(token_response)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
190
|
+
if token_response.address:
|
|
191
|
+
token_decimals[token_response.address] = (
|
|
192
|
+
token_response.decimals
|
|
193
|
+
)
|
|
194
|
+
if token_response.underlyingTokens:
|
|
200
195
|
for u_token in token_response.underlyingTokens:
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
"enso_get_tokens",
|
|
206
|
-
"decimals",
|
|
207
|
-
token_decimals,
|
|
208
|
-
)
|
|
196
|
+
if u_token.address:
|
|
197
|
+
token_decimals[u_token.address] = u_token.decimals
|
|
198
|
+
|
|
199
|
+
await self.save_agent_skill_data("decimals", token_decimals)
|
|
209
200
|
|
|
210
201
|
return res
|
|
211
202
|
except httpx.RequestError as req_err:
|