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,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching pool data via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import Optional
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_pools
|
|
@@ -21,13 +19,13 @@ Returns data including:
|
|
|
21
19
|
class PredictionData(BaseModel):
|
|
22
20
|
"""Model representing prediction data for a pool."""
|
|
23
21
|
|
|
24
|
-
predictedClass:
|
|
22
|
+
predictedClass: str | None = Field(
|
|
25
23
|
None, description="Predicted direction of APY movement"
|
|
26
24
|
)
|
|
27
|
-
predictedProbability:
|
|
25
|
+
predictedProbability: float | None = Field(
|
|
28
26
|
None, description="Probability of the prediction"
|
|
29
27
|
)
|
|
30
|
-
binnedConfidence:
|
|
28
|
+
binnedConfidence: int | None = Field(None, description="Confidence level bucket")
|
|
31
29
|
|
|
32
30
|
|
|
33
31
|
class PoolData(BaseModel):
|
|
@@ -37,38 +35,36 @@ class PoolData(BaseModel):
|
|
|
37
35
|
project: str = Field(..., description="Protocol or project name")
|
|
38
36
|
symbol: str = Field(..., description="Token or pool symbol")
|
|
39
37
|
tvlUsd: float = Field(..., description="Total Value Locked in USD")
|
|
40
|
-
apyBase:
|
|
41
|
-
apyReward:
|
|
42
|
-
apy:
|
|
43
|
-
rewardTokens:
|
|
38
|
+
apyBase: float | None = Field(None, description="Base APY without rewards")
|
|
39
|
+
apyReward: float | None = Field(None, description="Additional APY from rewards")
|
|
40
|
+
apy: float | None = Field(None, description="Total APY including rewards")
|
|
41
|
+
rewardTokens: list[str] | None = Field(
|
|
44
42
|
None, description="List of reward token addresses"
|
|
45
43
|
)
|
|
46
|
-
pool:
|
|
47
|
-
apyPct1D:
|
|
48
|
-
apyPct7D:
|
|
49
|
-
apyPct30D:
|
|
44
|
+
pool: str | None = Field(None, description="Pool identifier")
|
|
45
|
+
apyPct1D: float | None = Field(None, description="1-day APY percentage change")
|
|
46
|
+
apyPct7D: float | None = Field(None, description="7-day APY percentage change")
|
|
47
|
+
apyPct30D: float | None = Field(None, description="30-day APY percentage change")
|
|
50
48
|
stablecoin: bool = Field(False, description="Whether pool involves stablecoins")
|
|
51
49
|
ilRisk: str = Field("no", description="Impermanent loss risk assessment")
|
|
52
50
|
exposure: str = Field("single", description="Asset exposure type")
|
|
53
|
-
predictions:
|
|
51
|
+
predictions: PredictionData | None = Field(
|
|
54
52
|
None, description="APY movement predictions"
|
|
55
53
|
)
|
|
56
|
-
poolMeta:
|
|
57
|
-
mu:
|
|
58
|
-
sigma:
|
|
59
|
-
count:
|
|
54
|
+
poolMeta: str | None = Field(None, description="Additional pool metadata")
|
|
55
|
+
mu: float | None = Field(None, description="Mean APY value")
|
|
56
|
+
sigma: float | None = Field(None, description="APY standard deviation")
|
|
57
|
+
count: int | None = Field(None, description="Number of data points")
|
|
60
58
|
outlier: bool = Field(False, description="Whether pool is an outlier")
|
|
61
|
-
underlyingTokens:
|
|
59
|
+
underlyingTokens: list[str] | None = Field(
|
|
62
60
|
None, description="List of underlying token addresses"
|
|
63
61
|
)
|
|
64
|
-
il7d:
|
|
65
|
-
apyBase7d:
|
|
66
|
-
apyMean30d:
|
|
67
|
-
volumeUsd1d:
|
|
68
|
-
volumeUsd7d:
|
|
69
|
-
apyBaseInception:
|
|
70
|
-
None, description="Base APY since inception"
|
|
71
|
-
)
|
|
62
|
+
il7d: float | None = Field(None, description="7-day impermanent loss")
|
|
63
|
+
apyBase7d: float | None = Field(None, description="7-day base APY")
|
|
64
|
+
apyMean30d: float | None = Field(None, description="30-day mean APY")
|
|
65
|
+
volumeUsd1d: float | None = Field(None, description="24h volume in USD")
|
|
66
|
+
volumeUsd7d: float | None = Field(None, description="7-day volume in USD")
|
|
67
|
+
apyBaseInception: float | None = Field(None, description="Base APY since inception")
|
|
72
68
|
|
|
73
69
|
|
|
74
70
|
class FetchPoolsResponse(BaseModel):
|
|
@@ -76,7 +72,7 @@ class FetchPoolsResponse(BaseModel):
|
|
|
76
72
|
|
|
77
73
|
status: str = Field("success", description="Response status")
|
|
78
74
|
data: list[PoolData] = Field(default_factory=list, description="List of pool data")
|
|
79
|
-
error:
|
|
75
|
+
error: str | None = Field(None, description="Error message if any")
|
|
80
76
|
|
|
81
77
|
|
|
82
78
|
class DefiLlamaFetchPools(DefiLlamaBaseTool):
|
|
@@ -87,9 +83,9 @@ class DefiLlamaFetchPools(DefiLlamaBaseTool):
|
|
|
87
83
|
|
|
88
84
|
Example:
|
|
89
85
|
pools_tool = DefiLlamaFetchPools(
|
|
90
|
-
|
|
86
|
+
,
|
|
91
87
|
agent_id="agent_123",
|
|
92
|
-
|
|
88
|
+
agent=agent
|
|
93
89
|
)
|
|
94
90
|
result = await pools_tool._arun()
|
|
95
91
|
"""
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# DexScreener Skill
|
|
2
|
+
|
|
3
|
+
The DexScreener skill provides integration with the DexScreener API to search for cryptocurrency token pairs and retrieve market data including prices, volume, liquidity, and other trading metrics.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
DexScreener is a popular platform for tracking decentralized exchange (DEX) trading pairs across multiple blockchain networks. This skill enables your agent to search for token information and provide users with real-time market data.
|
|
8
|
+
|
|
9
|
+
## Skills Available
|
|
10
|
+
|
|
11
|
+
### `search_token`
|
|
12
|
+
|
|
13
|
+
Searches DexScreener for token pairs matching a query string. Supports searching by:
|
|
14
|
+
|
|
15
|
+
- Token symbol (e.g., "WIF", "DOGE")
|
|
16
|
+
- Token name (e.g., "Dogwifhat")
|
|
17
|
+
- Token address (e.g., "0x...")
|
|
18
|
+
- Exact ticker matching with "$" prefix (e.g., "$WIF")
|
|
19
|
+
- Pair address
|
|
20
|
+
|
|
21
|
+
**Parameters:**
|
|
22
|
+
|
|
23
|
+
- `query` (required): The search query string
|
|
24
|
+
- `sort_by` (optional): Sort results by "liquidity" (default) or "volume"
|
|
25
|
+
- `volume_timeframe` (optional): When sorting by volume, use "24_hour" (default), "6_hour", "1_hour", or "5_minutes"
|
|
26
|
+
|
|
27
|
+
### `get_pair_info`
|
|
28
|
+
|
|
29
|
+
Retrieves detailed information about a specific trading pair using chain ID and pair address.
|
|
30
|
+
|
|
31
|
+
**Parameters:**
|
|
32
|
+
|
|
33
|
+
- `chain_id` (required): The blockchain chain ID (e.g., "ethereum", "solana", "bsc", "polygon", "arbitrum", "base", "avalanche")
|
|
34
|
+
- `pair_address` (required): The trading pair contract address
|
|
35
|
+
|
|
36
|
+
### `get_token_pairs`
|
|
37
|
+
|
|
38
|
+
Finds all trading pairs for a specific token using chain ID and token address.
|
|
39
|
+
|
|
40
|
+
**Parameters:**
|
|
41
|
+
|
|
42
|
+
- `chain_id` (required): The blockchain chain ID
|
|
43
|
+
- `token_address` (required): The token contract address
|
|
44
|
+
|
|
45
|
+
### `get_tokens_info`
|
|
46
|
+
|
|
47
|
+
Retrieves detailed trading pair information for multiple tokens at once (up to 30 tokens).
|
|
48
|
+
|
|
49
|
+
**Parameters:**
|
|
50
|
+
|
|
51
|
+
- `chain_id` (required): The blockchain chain ID
|
|
52
|
+
- `token_addresses` (required): List of token contract addresses (maximum 30)
|
|
53
|
+
|
|
54
|
+
## Configuration
|
|
55
|
+
|
|
56
|
+
Add to your agent configuration:
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
skills:
|
|
60
|
+
dexscreener:
|
|
61
|
+
enabled: true
|
|
62
|
+
states:
|
|
63
|
+
search_token: public # or "private" or "disabled"
|
|
64
|
+
get_pair_info: public # or "private" or "disabled"
|
|
65
|
+
get_token_pairs: public # or "private" or "disabled"
|
|
66
|
+
get_tokens_info: public # or "private" or "disabled"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Example Prompts
|
|
70
|
+
|
|
71
|
+
Here are some example prompts that will trigger the DexScreener skill:
|
|
72
|
+
|
|
73
|
+
### Basic Token Search
|
|
74
|
+
|
|
75
|
+
- "What's the current price of WIF?"
|
|
76
|
+
- "Show me information about Dogwifhat token"
|
|
77
|
+
- "Find trading pairs for PEPE"
|
|
78
|
+
- "Search for Solana tokens with high volume"
|
|
79
|
+
|
|
80
|
+
### Address-Based Search
|
|
81
|
+
|
|
82
|
+
- "Get token info for address 0x1234567890abcdef1234567890abcdef12345678"
|
|
83
|
+
- "Look up this token contract: 0xabc123..."
|
|
84
|
+
- "Find pairs for token address 0x..."
|
|
85
|
+
|
|
86
|
+
### Exact Ticker Matching
|
|
87
|
+
|
|
88
|
+
- "Show me all $WIF pairs" (matches only tokens with symbol "WIF")
|
|
89
|
+
- "Find $DOGE trading data"
|
|
90
|
+
- "$SOL price and volume information"
|
|
91
|
+
|
|
92
|
+
### Sorting and Filtering
|
|
93
|
+
|
|
94
|
+
- "Find highest volume tokens in the last hour"
|
|
95
|
+
- "Show me tokens sorted by liquidity"
|
|
96
|
+
- "Get 6-hour volume data for trending tokens"
|
|
97
|
+
|
|
98
|
+
### Market Analysis
|
|
99
|
+
|
|
100
|
+
- "What are the most liquid trading pairs right now?"
|
|
101
|
+
- "Find new token launches with high volume"
|
|
102
|
+
- "Show me tokens with significant price changes in the last 24 hours"
|
|
103
|
+
- "Compare liquidity across different DEXes for a token"
|
|
104
|
+
|
|
105
|
+
### Specific Pair Analysis
|
|
106
|
+
|
|
107
|
+
- "Get detailed info for pair address 0x1234... on Ethereum"
|
|
108
|
+
- "Show me the liquidity and volume for this Uniswap pair"
|
|
109
|
+
- "Analyze this specific trading pair on Solana"
|
|
110
|
+
- "What's the current price and 24h change for pair 0xabc..."
|
|
111
|
+
|
|
112
|
+
### Token Pair Discovery
|
|
113
|
+
|
|
114
|
+
- "Find all trading pairs for token 0x1234... on Ethereum"
|
|
115
|
+
- "Where can I trade this token? Show me all available pairs"
|
|
116
|
+
- "List all DEXes that have liquidity for this token address"
|
|
117
|
+
- "Find the best liquidity pools for token 0xabc..."
|
|
118
|
+
|
|
119
|
+
### Multi-Token Analysis
|
|
120
|
+
|
|
121
|
+
- "Compare these 5 token addresses: [list of addresses]"
|
|
122
|
+
- "Get trading data for my entire portfolio: [token addresses]"
|
|
123
|
+
- "Analyze liquidity across these tokens on Ethereum"
|
|
124
|
+
- "Show me pair information for these 10 tokens at once"
|
|
125
|
+
|
|
126
|
+
### Portfolio Research
|
|
127
|
+
|
|
128
|
+
- "Research this token before I invest: [token name/symbol]"
|
|
129
|
+
- "Is this token legitimate? Check its social links"
|
|
130
|
+
- "What DEXes is this token trading on?"
|
|
131
|
+
- "Show me the trading activity for this pair"
|
|
132
|
+
|
|
133
|
+
## Response Format
|
|
134
|
+
|
|
135
|
+
The skill returns structured JSON data containing:
|
|
136
|
+
|
|
137
|
+
- Token pair information (base/quote tokens)
|
|
138
|
+
- Current prices in USD and native currency
|
|
139
|
+
- Volume data across different timeframes
|
|
140
|
+
- Liquidity information
|
|
141
|
+
- Price change percentages
|
|
142
|
+
- Market cap and fully diluted valuation
|
|
143
|
+
- Social links and website information
|
|
144
|
+
- Trading transaction counts
|
|
145
|
+
|
|
146
|
+
## Rate Limits
|
|
147
|
+
|
|
148
|
+
- 300 requests per minute across all users
|
|
149
|
+
- Built-in rate limiting prevents exceeding API limits
|
|
150
|
+
- Requests are queued and processed efficiently
|
|
151
|
+
|
|
152
|
+
## Data Sources
|
|
153
|
+
|
|
154
|
+
All data is sourced from the official DexScreener API, which aggregates information from major decentralized exchanges across multiple blockchain networks including Ethereum, Solana, Binance Smart Chain, and others.
|
|
@@ -1,93 +1,97 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from typing import
|
|
3
|
-
|
|
4
|
-
from intentkit.
|
|
5
|
-
from intentkit.skills.base import
|
|
6
|
-
from intentkit.skills.dexscreener.
|
|
7
|
-
from intentkit.skills.dexscreener.
|
|
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
|
-
|
|
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
|
-
if
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
1
|
+
import logging
|
|
2
|
+
from typing import TypedDict
|
|
3
|
+
|
|
4
|
+
from intentkit.skills.base import SkillConfig, SkillState
|
|
5
|
+
from intentkit.skills.dexscreener.base import DexScreenerBaseTool
|
|
6
|
+
from intentkit.skills.dexscreener.get_pair_info import GetPairInfo
|
|
7
|
+
from intentkit.skills.dexscreener.get_token_pairs import GetTokenPairs
|
|
8
|
+
from intentkit.skills.dexscreener.get_tokens_info import GetTokensInfo
|
|
9
|
+
from intentkit.skills.dexscreener.search_token import SearchToken
|
|
10
|
+
|
|
11
|
+
# Cache skills at the system level, because they are stateless
|
|
12
|
+
_cache: dict[str, DexScreenerBaseTool] = {}
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SkillStates(TypedDict):
|
|
18
|
+
search_token: SkillState
|
|
19
|
+
get_pair_info: SkillState
|
|
20
|
+
get_token_pairs: SkillState
|
|
21
|
+
get_tokens_info: SkillState
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
_SKILL_NAME_TO_CLASS_MAP: dict[str, type[DexScreenerBaseTool]] = {
|
|
25
|
+
"search_token": SearchToken,
|
|
26
|
+
"get_pair_info": GetPairInfo,
|
|
27
|
+
"get_token_pairs": GetTokenPairs,
|
|
28
|
+
"get_tokens_info": GetTokensInfo,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class Config(SkillConfig):
|
|
33
|
+
"""Configuration for DexScreener skills."""
|
|
34
|
+
|
|
35
|
+
enabled: bool
|
|
36
|
+
states: SkillStates
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
async def get_skills(
|
|
40
|
+
config: "Config",
|
|
41
|
+
is_private: bool,
|
|
42
|
+
**_,
|
|
43
|
+
) -> list[DexScreenerBaseTool]:
|
|
44
|
+
"""Get all DexScreener skills.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
config: The configuration for DexScreener skills.
|
|
48
|
+
is_private: Whether to include private skills.
|
|
49
|
+
|
|
50
|
+
Returns:
|
|
51
|
+
A list of DexScreener skills.
|
|
52
|
+
"""
|
|
53
|
+
|
|
54
|
+
available_skills = []
|
|
55
|
+
|
|
56
|
+
# Include skills based on their state
|
|
57
|
+
for skill_name, state in config["states"].items():
|
|
58
|
+
if state == "disabled":
|
|
59
|
+
continue
|
|
60
|
+
elif state == "public" or (state == "private" and is_private):
|
|
61
|
+
available_skills.append(skill_name)
|
|
62
|
+
|
|
63
|
+
logger.debug(f"Available Skills {available_skills}")
|
|
64
|
+
logger.debug(f"Hardcoded Skills {_SKILL_NAME_TO_CLASS_MAP}")
|
|
65
|
+
|
|
66
|
+
# Get each skill using the cached getter
|
|
67
|
+
result = []
|
|
68
|
+
for name in available_skills:
|
|
69
|
+
skill = get_dexscreener_skills(name)
|
|
70
|
+
if skill:
|
|
71
|
+
result.append(skill)
|
|
72
|
+
return result
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def get_dexscreener_skills(
|
|
76
|
+
name: str,
|
|
77
|
+
) -> DexScreenerBaseTool | None:
|
|
78
|
+
"""Get a DexScreener skill by name.
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
name: The name of the skill to get
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
The requested DexScreener skill
|
|
85
|
+
"""
|
|
86
|
+
|
|
87
|
+
# Return from cache immediately if already exists
|
|
88
|
+
if name in _cache:
|
|
89
|
+
return _cache[name]
|
|
90
|
+
|
|
91
|
+
skill_class = _SKILL_NAME_TO_CLASS_MAP.get(name)
|
|
92
|
+
if not skill_class:
|
|
93
|
+
logger.warning(f"Unknown Dexscreener skill: {name}")
|
|
94
|
+
return None
|
|
95
|
+
|
|
96
|
+
_cache[name] = skill_class()
|
|
97
|
+
return _cache[name]
|