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,12 +1,11 @@
|
|
|
1
1
|
"""Base class for all DeFi Llama tools."""
|
|
2
2
|
|
|
3
|
-
from datetime import datetime, timedelta
|
|
4
|
-
from typing import Type
|
|
3
|
+
from datetime import UTC, datetime, timedelta
|
|
5
4
|
|
|
6
5
|
from pydantic import BaseModel, Field
|
|
7
6
|
|
|
8
|
-
from intentkit.abstracts.
|
|
9
|
-
from intentkit.skills.base import IntentKitSkill
|
|
7
|
+
from intentkit.abstracts.graph import AgentContext
|
|
8
|
+
from intentkit.skills.base import IntentKitSkill
|
|
10
9
|
from intentkit.skills.defillama.config.chains import (
|
|
11
10
|
get_chain_from_alias,
|
|
12
11
|
)
|
|
@@ -26,10 +25,7 @@ class DefiLlamaBaseTool(IntentKitSkill):
|
|
|
26
25
|
|
|
27
26
|
name: str = Field(description="The name of the tool")
|
|
28
27
|
description: str = Field(description="A description of what the tool does")
|
|
29
|
-
args_schema:
|
|
30
|
-
skill_store: SkillStoreABC = Field(
|
|
31
|
-
description="The skill store for persisting data"
|
|
32
|
-
)
|
|
28
|
+
args_schema: type[BaseModel]
|
|
33
29
|
base_url: str = Field(
|
|
34
30
|
default=DEFILLAMA_BASE_URL, description="Base URL for DeFi Llama API"
|
|
35
31
|
)
|
|
@@ -39,7 +35,7 @@ class DefiLlamaBaseTool(IntentKitSkill):
|
|
|
39
35
|
return "defillama"
|
|
40
36
|
|
|
41
37
|
async def check_rate_limit(
|
|
42
|
-
self, context:
|
|
38
|
+
self, context: AgentContext, max_requests: int = 30, interval: int = 5
|
|
43
39
|
) -> tuple[bool, str | None]:
|
|
44
40
|
"""Check if the rate limit has been exceeded.
|
|
45
41
|
|
|
@@ -51,10 +47,8 @@ class DefiLlamaBaseTool(IntentKitSkill):
|
|
|
51
47
|
Returns:
|
|
52
48
|
Rate limit status and error message if limited
|
|
53
49
|
"""
|
|
54
|
-
rate_limit = await self.
|
|
55
|
-
|
|
56
|
-
)
|
|
57
|
-
current_time = datetime.now(tz=timezone.utc)
|
|
50
|
+
rate_limit = await self.get_agent_skill_data("rate_limit")
|
|
51
|
+
current_time = datetime.now(tz=UTC)
|
|
58
52
|
|
|
59
53
|
if (
|
|
60
54
|
rate_limit
|
|
@@ -66,18 +60,14 @@ class DefiLlamaBaseTool(IntentKitSkill):
|
|
|
66
60
|
return True, "Rate limit exceeded"
|
|
67
61
|
|
|
68
62
|
rate_limit["count"] += 1
|
|
69
|
-
await self.
|
|
70
|
-
context.agent_id, self.name, "rate_limit", rate_limit
|
|
71
|
-
)
|
|
63
|
+
await self.save_agent_skill_data("rate_limit", rate_limit)
|
|
72
64
|
return False, None
|
|
73
65
|
|
|
74
66
|
new_rate_limit = {
|
|
75
67
|
"count": 1,
|
|
76
68
|
"reset_time": (current_time + timedelta(minutes=interval)).isoformat(),
|
|
77
69
|
}
|
|
78
|
-
await self.
|
|
79
|
-
context.agent_id, self.name, "rate_limit", new_rate_limit
|
|
80
|
-
)
|
|
70
|
+
await self.save_agent_skill_data("rate_limit", new_rate_limit)
|
|
81
71
|
return False, None
|
|
82
72
|
|
|
83
73
|
async def validate_chain(self, chain: str | None) -> tuple[bool, str | None]:
|
|
@@ -123,7 +113,7 @@ class DefiLlamaBaseTool(IntentKitSkill):
|
|
|
123
113
|
"error": True,
|
|
124
114
|
"status_code": status_code,
|
|
125
115
|
"message": message,
|
|
126
|
-
"timestamp": datetime.now(tz=
|
|
116
|
+
"timestamp": datetime.now(tz=UTC).isoformat(),
|
|
127
117
|
}
|
|
128
118
|
|
|
129
119
|
def get_current_timestamp(self) -> int:
|
|
@@ -132,4 +122,4 @@ class DefiLlamaBaseTool(IntentKitSkill):
|
|
|
132
122
|
Returns:
|
|
133
123
|
Current Unix timestamp
|
|
134
124
|
"""
|
|
135
|
-
return int(datetime.now(tz=
|
|
125
|
+
return int(datetime.now(tz=UTC).timestamp())
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching batch historical token prices via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import Dict, List, Optional, Type
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_batch_historical_prices
|
|
@@ -33,7 +31,7 @@ class TokenPriceHistory(BaseModel):
|
|
|
33
31
|
"""Model representing historical price data for a single token."""
|
|
34
32
|
|
|
35
33
|
symbol: str = Field(..., description="Token symbol")
|
|
36
|
-
prices:
|
|
34
|
+
prices: list[HistoricalPricePoint] = Field(
|
|
37
35
|
..., description="List of historical price points"
|
|
38
36
|
)
|
|
39
37
|
|
|
@@ -41,7 +39,7 @@ class TokenPriceHistory(BaseModel):
|
|
|
41
39
|
class FetchBatchHistoricalPricesInput(BaseModel):
|
|
42
40
|
"""Input schema for fetching batch historical token prices."""
|
|
43
41
|
|
|
44
|
-
coins_timestamps:
|
|
42
|
+
coins_timestamps: dict[str, list[int]] = Field(
|
|
45
43
|
..., description="Dictionary mapping token identifiers to lists of timestamps"
|
|
46
44
|
)
|
|
47
45
|
|
|
@@ -49,11 +47,11 @@ class FetchBatchHistoricalPricesInput(BaseModel):
|
|
|
49
47
|
class FetchBatchHistoricalPricesResponse(BaseModel):
|
|
50
48
|
"""Response schema for batch historical token prices."""
|
|
51
49
|
|
|
52
|
-
coins:
|
|
50
|
+
coins: dict[str, TokenPriceHistory] = Field(
|
|
53
51
|
default_factory=dict,
|
|
54
52
|
description="Historical token prices keyed by token identifier",
|
|
55
53
|
)
|
|
56
|
-
error:
|
|
54
|
+
error: str | None = Field(None, description="Error message if any")
|
|
57
55
|
|
|
58
56
|
|
|
59
57
|
class DefiLlamaFetchBatchHistoricalPrices(DefiLlamaBaseTool):
|
|
@@ -64,9 +62,9 @@ class DefiLlamaFetchBatchHistoricalPrices(DefiLlamaBaseTool):
|
|
|
64
62
|
|
|
65
63
|
Example:
|
|
66
64
|
prices_tool = DefiLlamaFetchBatchHistoricalPrices(
|
|
67
|
-
|
|
65
|
+
,
|
|
68
66
|
agent_id="agent_123",
|
|
69
|
-
|
|
67
|
+
agent=agent
|
|
70
68
|
)
|
|
71
69
|
result = await prices_tool._arun(
|
|
72
70
|
coins_timestamps={
|
|
@@ -78,10 +76,10 @@ class DefiLlamaFetchBatchHistoricalPrices(DefiLlamaBaseTool):
|
|
|
78
76
|
|
|
79
77
|
name: str = "defillama_fetch_batch_historical_prices"
|
|
80
78
|
description: str = FETCH_BATCH_HISTORICAL_PRICES_PROMPT
|
|
81
|
-
args_schema:
|
|
79
|
+
args_schema: type[BaseModel] = FetchBatchHistoricalPricesInput
|
|
82
80
|
|
|
83
81
|
async def _arun(
|
|
84
|
-
self, coins_timestamps:
|
|
82
|
+
self, coins_timestamps: dict[str, list[int]]
|
|
85
83
|
) -> FetchBatchHistoricalPricesResponse:
|
|
86
84
|
"""Fetch historical prices for the given tokens at specified timestamps.
|
|
87
85
|
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching current block data via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import Optional, Type
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_block
|
|
@@ -34,9 +32,9 @@ class FetchBlockResponse(BaseModel):
|
|
|
34
32
|
"""Response schema for block data."""
|
|
35
33
|
|
|
36
34
|
chain: str = Field(..., description="Normalized chain name")
|
|
37
|
-
height:
|
|
38
|
-
timestamp:
|
|
39
|
-
error:
|
|
35
|
+
height: int | None = Field(None, description="Block height number")
|
|
36
|
+
timestamp: int | None = Field(None, description="Unix timestamp of the block")
|
|
37
|
+
error: str | None = Field(None, description="Error message if any")
|
|
40
38
|
|
|
41
39
|
|
|
42
40
|
class DefiLlamaFetchBlock(DefiLlamaBaseTool):
|
|
@@ -46,16 +44,16 @@ class DefiLlamaFetchBlock(DefiLlamaBaseTool):
|
|
|
46
44
|
|
|
47
45
|
Example:
|
|
48
46
|
block_tool = DefiLlamaFetchBlock(
|
|
49
|
-
|
|
47
|
+
,
|
|
50
48
|
agent_id="agent_123",
|
|
51
|
-
|
|
49
|
+
agent=agent
|
|
52
50
|
)
|
|
53
51
|
result = await block_tool._arun(chain="ethereum")
|
|
54
52
|
"""
|
|
55
53
|
|
|
56
54
|
name: str = "defillama_fetch_block"
|
|
57
55
|
description: str = FETCH_BLOCK_PROMPT
|
|
58
|
-
args_schema:
|
|
56
|
+
args_schema: type[BaseModel] = FetchBlockInput
|
|
59
57
|
|
|
60
58
|
async def _arun(self, chain: str) -> FetchBlockResponse:
|
|
61
59
|
"""Fetch current block data for the given chain.
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching token prices via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import Dict, List, Optional, Type
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_current_prices
|
|
@@ -29,13 +27,13 @@ class TokenPrice(BaseModel):
|
|
|
29
27
|
symbol: str = Field(..., description="Token symbol")
|
|
30
28
|
timestamp: int = Field(..., description="Unix timestamp of last price update")
|
|
31
29
|
confidence: float = Field(..., description="Confidence score for the price data")
|
|
32
|
-
decimals:
|
|
30
|
+
decimals: int | None = Field(None, description="Token decimals, if available")
|
|
33
31
|
|
|
34
32
|
|
|
35
33
|
class FetchCurrentPricesInput(BaseModel):
|
|
36
34
|
"""Input schema for fetching current token prices with a 4-hour search window."""
|
|
37
35
|
|
|
38
|
-
coins:
|
|
36
|
+
coins: list[str] = Field(
|
|
39
37
|
...,
|
|
40
38
|
description="List of token identifiers (e.g. 'ethereum:0x...', 'coingecko:ethereum')",
|
|
41
39
|
)
|
|
@@ -44,10 +42,10 @@ class FetchCurrentPricesInput(BaseModel):
|
|
|
44
42
|
class FetchCurrentPricesResponse(BaseModel):
|
|
45
43
|
"""Response schema for current token prices."""
|
|
46
44
|
|
|
47
|
-
coins:
|
|
45
|
+
coins: dict[str, TokenPrice] = Field(
|
|
48
46
|
default_factory=dict, description="Token prices keyed by token identifier"
|
|
49
47
|
)
|
|
50
|
-
error:
|
|
48
|
+
error: str | None = Field(None, description="Error message if any")
|
|
51
49
|
|
|
52
50
|
|
|
53
51
|
class DefiLlamaFetchCurrentPrices(DefiLlamaBaseTool):
|
|
@@ -58,9 +56,9 @@ class DefiLlamaFetchCurrentPrices(DefiLlamaBaseTool):
|
|
|
58
56
|
|
|
59
57
|
Example:
|
|
60
58
|
prices_tool = DefiLlamaFetchCurrentPrices(
|
|
61
|
-
|
|
59
|
+
,
|
|
62
60
|
agent_id="agent_123",
|
|
63
|
-
|
|
61
|
+
agent=agent
|
|
64
62
|
)
|
|
65
63
|
result = await prices_tool._arun(
|
|
66
64
|
coins=["ethereum:0x...", "coingecko:bitcoin"]
|
|
@@ -69,9 +67,9 @@ class DefiLlamaFetchCurrentPrices(DefiLlamaBaseTool):
|
|
|
69
67
|
|
|
70
68
|
name: str = "defillama_fetch_current_prices"
|
|
71
69
|
description: str = FETCH_PRICES_PROMPT
|
|
72
|
-
args_schema:
|
|
70
|
+
args_schema: type[BaseModel] = FetchCurrentPricesInput
|
|
73
71
|
|
|
74
|
-
async def _arun(self, coins:
|
|
72
|
+
async def _arun(self, coins: list[str]) -> FetchCurrentPricesResponse:
|
|
75
73
|
"""Fetch current prices for the given tokens.
|
|
76
74
|
|
|
77
75
|
Args:
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching first recorded token prices via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import Dict, List, Optional, Type
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_first_price
|
|
@@ -31,7 +29,7 @@ class FirstPriceData(BaseModel):
|
|
|
31
29
|
class FetchFirstPriceInput(BaseModel):
|
|
32
30
|
"""Input schema for fetching first token prices."""
|
|
33
31
|
|
|
34
|
-
coins:
|
|
32
|
+
coins: list[str] = Field(
|
|
35
33
|
..., description="List of token identifiers to fetch first prices for"
|
|
36
34
|
)
|
|
37
35
|
|
|
@@ -39,10 +37,10 @@ class FetchFirstPriceInput(BaseModel):
|
|
|
39
37
|
class FetchFirstPriceResponse(BaseModel):
|
|
40
38
|
"""Response schema for first token prices."""
|
|
41
39
|
|
|
42
|
-
coins:
|
|
40
|
+
coins: dict[str, FirstPriceData] = Field(
|
|
43
41
|
default_factory=dict, description="First price data keyed by token identifier"
|
|
44
42
|
)
|
|
45
|
-
error:
|
|
43
|
+
error: str | None = Field(None, description="Error message if any")
|
|
46
44
|
|
|
47
45
|
|
|
48
46
|
class DefiLlamaFetchFirstPrice(DefiLlamaBaseTool):
|
|
@@ -53,9 +51,9 @@ class DefiLlamaFetchFirstPrice(DefiLlamaBaseTool):
|
|
|
53
51
|
|
|
54
52
|
Example:
|
|
55
53
|
first_price_tool = DefiLlamaFetchFirstPrice(
|
|
56
|
-
|
|
54
|
+
,
|
|
57
55
|
agent_id="agent_123",
|
|
58
|
-
|
|
56
|
+
agent=agent
|
|
59
57
|
)
|
|
60
58
|
result = await first_price_tool._arun(
|
|
61
59
|
coins=["ethereum:0x...", "coingecko:ethereum"]
|
|
@@ -64,9 +62,9 @@ class DefiLlamaFetchFirstPrice(DefiLlamaBaseTool):
|
|
|
64
62
|
|
|
65
63
|
name: str = "defillama_fetch_first_price"
|
|
66
64
|
description: str = FETCH_FIRST_PRICE_PROMPT
|
|
67
|
-
args_schema:
|
|
65
|
+
args_schema: type[BaseModel] = FetchFirstPriceInput
|
|
68
66
|
|
|
69
|
-
async def _arun(self, coins:
|
|
67
|
+
async def _arun(self, coins: list[str]) -> FetchFirstPriceResponse:
|
|
70
68
|
"""Fetch first recorded prices for the given tokens.
|
|
71
69
|
|
|
72
70
|
Args:
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching historical token prices via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import Dict, List, Optional, Type
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_historical_prices
|
|
@@ -26,9 +24,9 @@ class HistoricalTokenPrice(BaseModel):
|
|
|
26
24
|
"""Model representing historical token price data."""
|
|
27
25
|
|
|
28
26
|
price: float = Field(..., description="Token price in USD at the specified time")
|
|
29
|
-
symbol:
|
|
27
|
+
symbol: str | None = Field(None, description="Token symbol")
|
|
30
28
|
timestamp: int = Field(..., description="Unix timestamp of the price data")
|
|
31
|
-
decimals:
|
|
29
|
+
decimals: int | None = Field(None, description="Token decimals, if available")
|
|
32
30
|
|
|
33
31
|
|
|
34
32
|
class FetchHistoricalPricesInput(BaseModel):
|
|
@@ -37,7 +35,7 @@ class FetchHistoricalPricesInput(BaseModel):
|
|
|
37
35
|
timestamp: int = Field(
|
|
38
36
|
..., description="Unix timestamp for historical price lookup"
|
|
39
37
|
)
|
|
40
|
-
coins:
|
|
38
|
+
coins: list[str] = Field(
|
|
41
39
|
...,
|
|
42
40
|
description="List of token identifiers (e.g. 'ethereum:0x...', 'coingecko:ethereum')",
|
|
43
41
|
)
|
|
@@ -46,11 +44,11 @@ class FetchHistoricalPricesInput(BaseModel):
|
|
|
46
44
|
class FetchHistoricalPricesResponse(BaseModel):
|
|
47
45
|
"""Response schema for historical token prices."""
|
|
48
46
|
|
|
49
|
-
coins:
|
|
47
|
+
coins: dict[str, HistoricalTokenPrice] = Field(
|
|
50
48
|
default_factory=dict,
|
|
51
49
|
description="Historical token prices keyed by token identifier",
|
|
52
50
|
)
|
|
53
|
-
error:
|
|
51
|
+
error: str | None = Field(None, description="Error message if any")
|
|
54
52
|
|
|
55
53
|
|
|
56
54
|
class DefiLlamaFetchHistoricalPrices(DefiLlamaBaseTool):
|
|
@@ -61,9 +59,9 @@ class DefiLlamaFetchHistoricalPrices(DefiLlamaBaseTool):
|
|
|
61
59
|
|
|
62
60
|
Example:
|
|
63
61
|
prices_tool = DefiLlamaFetchHistoricalPrices(
|
|
64
|
-
|
|
62
|
+
,
|
|
65
63
|
agent_id="agent_123",
|
|
66
|
-
|
|
64
|
+
agent=agent
|
|
67
65
|
)
|
|
68
66
|
result = await prices_tool._arun(
|
|
69
67
|
timestamp=1640995200, # Jan 1, 2022
|
|
@@ -73,10 +71,10 @@ class DefiLlamaFetchHistoricalPrices(DefiLlamaBaseTool):
|
|
|
73
71
|
|
|
74
72
|
name: str = "defillama_fetch_historical_prices"
|
|
75
73
|
description: str = FETCH_HISTORICAL_PRICES_PROMPT
|
|
76
|
-
args_schema:
|
|
74
|
+
args_schema: type[BaseModel] = FetchHistoricalPricesInput
|
|
77
75
|
|
|
78
76
|
async def _arun(
|
|
79
|
-
self, timestamp: int, coins:
|
|
77
|
+
self, timestamp: int, coins: list[str]
|
|
80
78
|
) -> FetchHistoricalPricesResponse:
|
|
81
79
|
"""Fetch historical prices for the given tokens at the specified time.
|
|
82
80
|
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching token price charts via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import Dict, List, Optional, Type
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_price_chart
|
|
@@ -33,14 +31,14 @@ class TokenPriceChart(BaseModel):
|
|
|
33
31
|
|
|
34
32
|
symbol: str = Field(..., description="Token symbol")
|
|
35
33
|
confidence: float = Field(..., description="Confidence score for the price data")
|
|
36
|
-
decimals:
|
|
37
|
-
prices:
|
|
34
|
+
decimals: int | None = Field(None, description="Token decimals")
|
|
35
|
+
prices: list[PricePoint] = Field(..., description="List of historical price points")
|
|
38
36
|
|
|
39
37
|
|
|
40
38
|
class FetchPriceChartInput(BaseModel):
|
|
41
39
|
"""Input schema for fetching token price charts."""
|
|
42
40
|
|
|
43
|
-
coins:
|
|
41
|
+
coins: list[str] = Field(
|
|
44
42
|
..., description="List of token identifiers to fetch price charts for"
|
|
45
43
|
)
|
|
46
44
|
|
|
@@ -48,10 +46,10 @@ class FetchPriceChartInput(BaseModel):
|
|
|
48
46
|
class FetchPriceChartResponse(BaseModel):
|
|
49
47
|
"""Response schema for token price charts."""
|
|
50
48
|
|
|
51
|
-
coins:
|
|
49
|
+
coins: dict[str, TokenPriceChart] = Field(
|
|
52
50
|
default_factory=dict, description="Price chart data keyed by token identifier"
|
|
53
51
|
)
|
|
54
|
-
error:
|
|
52
|
+
error: str | None = Field(None, description="Error message if any")
|
|
55
53
|
|
|
56
54
|
|
|
57
55
|
class DefiLlamaFetchPriceChart(DefiLlamaBaseTool):
|
|
@@ -62,9 +60,9 @@ class DefiLlamaFetchPriceChart(DefiLlamaBaseTool):
|
|
|
62
60
|
|
|
63
61
|
Example:
|
|
64
62
|
chart_tool = DefiLlamaFetchPriceChart(
|
|
65
|
-
|
|
63
|
+
,
|
|
66
64
|
agent_id="agent_123",
|
|
67
|
-
|
|
65
|
+
agent=agent
|
|
68
66
|
)
|
|
69
67
|
result = await chart_tool._arun(
|
|
70
68
|
coins=["ethereum:0x...", "coingecko:ethereum"]
|
|
@@ -73,9 +71,9 @@ class DefiLlamaFetchPriceChart(DefiLlamaBaseTool):
|
|
|
73
71
|
|
|
74
72
|
name: str = "defillama_fetch_price_chart"
|
|
75
73
|
description: str = FETCH_PRICE_CHART_PROMPT
|
|
76
|
-
args_schema:
|
|
74
|
+
args_schema: type[BaseModel] = FetchPriceChartInput
|
|
77
75
|
|
|
78
|
-
async def _arun(self, coins:
|
|
76
|
+
async def _arun(self, coins: list[str]) -> FetchPriceChartResponse:
|
|
79
77
|
"""Fetch price charts for the given tokens.
|
|
80
78
|
|
|
81
79
|
Args:
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching token price percentage changes via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import Dict, List, Optional, Type
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_price_percentage
|
|
@@ -23,7 +21,7 @@ Returns price percentage changes:
|
|
|
23
21
|
class FetchPricePercentageInput(BaseModel):
|
|
24
22
|
"""Input schema for fetching token price percentage changes."""
|
|
25
23
|
|
|
26
|
-
coins:
|
|
24
|
+
coins: list[str] = Field(
|
|
27
25
|
..., description="List of token identifiers to fetch price changes for"
|
|
28
26
|
)
|
|
29
27
|
|
|
@@ -31,11 +29,11 @@ class FetchPricePercentageInput(BaseModel):
|
|
|
31
29
|
class FetchPricePercentageResponse(BaseModel):
|
|
32
30
|
"""Response schema for token price percentage changes."""
|
|
33
31
|
|
|
34
|
-
coins:
|
|
32
|
+
coins: dict[str, float] = Field(
|
|
35
33
|
default_factory=dict,
|
|
36
34
|
description="Price percentage changes keyed by token identifier",
|
|
37
35
|
)
|
|
38
|
-
error:
|
|
36
|
+
error: str | None = Field(None, description="Error message if any")
|
|
39
37
|
|
|
40
38
|
|
|
41
39
|
class DefiLlamaFetchPricePercentage(DefiLlamaBaseTool):
|
|
@@ -46,9 +44,9 @@ class DefiLlamaFetchPricePercentage(DefiLlamaBaseTool):
|
|
|
46
44
|
|
|
47
45
|
Example:
|
|
48
46
|
percentage_tool = DefiLlamaFetchPricePercentage(
|
|
49
|
-
|
|
47
|
+
,
|
|
50
48
|
agent_id="agent_123",
|
|
51
|
-
|
|
49
|
+
agent=agent
|
|
52
50
|
)
|
|
53
51
|
result = await percentage_tool._arun(
|
|
54
52
|
coins=["ethereum:0x...", "coingecko:ethereum"]
|
|
@@ -57,9 +55,9 @@ class DefiLlamaFetchPricePercentage(DefiLlamaBaseTool):
|
|
|
57
55
|
|
|
58
56
|
name: str = "defillama_fetch_price_percentage"
|
|
59
57
|
description: str = FETCH_PRICE_PERCENTAGE_PROMPT
|
|
60
|
-
args_schema:
|
|
58
|
+
args_schema: type[BaseModel] = FetchPricePercentageInput
|
|
61
59
|
|
|
62
|
-
async def _arun(self, coins:
|
|
60
|
+
async def _arun(self, coins: list[str]) -> FetchPricePercentageResponse:
|
|
63
61
|
"""Fetch price percentage changes for the given tokens.
|
|
64
62
|
|
|
65
63
|
Args:
|
|
@@ -4,10 +4,8 @@ This module contains the valid chains and their aliases for use with the DeFi Ll
|
|
|
4
4
|
The VALID_CHAINS dictionary maps primary chain identifiers to their known aliases.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from typing import Dict, List
|
|
8
|
-
|
|
9
7
|
# Chain configuration with aliases
|
|
10
|
-
VALID_CHAINS:
|
|
8
|
+
VALID_CHAINS: dict[str, list[str]] = {
|
|
11
9
|
"ethereum": ["eth", "eth1", "eth2"],
|
|
12
10
|
"solana": ["sol"],
|
|
13
11
|
"bitcoin": ["btc"],
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching fees overview data via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import Dict, List, Optional, Type
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_fees_overview
|
|
@@ -20,16 +18,16 @@ Returns detailed metrics including:
|
|
|
20
18
|
class ProtocolMethodology(BaseModel):
|
|
21
19
|
"""Model representing protocol methodology data."""
|
|
22
20
|
|
|
23
|
-
UserFees:
|
|
24
|
-
Fees:
|
|
25
|
-
Revenue:
|
|
26
|
-
ProtocolRevenue:
|
|
21
|
+
UserFees: str | None = Field(None, description="Description of user fees")
|
|
22
|
+
Fees: str | None = Field(None, description="Description of fees")
|
|
23
|
+
Revenue: str | None = Field(None, description="Description of revenue")
|
|
24
|
+
ProtocolRevenue: str | None = Field(
|
|
27
25
|
None, description="Description of protocol revenue"
|
|
28
26
|
)
|
|
29
|
-
HoldersRevenue:
|
|
27
|
+
HoldersRevenue: str | None = Field(
|
|
30
28
|
None, description="Description of holders revenue"
|
|
31
29
|
)
|
|
32
|
-
SupplySideRevenue:
|
|
30
|
+
SupplySideRevenue: str | None = Field(
|
|
33
31
|
None, description="Description of supply side revenue"
|
|
34
32
|
)
|
|
35
33
|
|
|
@@ -41,23 +39,23 @@ class Protocol(BaseModel):
|
|
|
41
39
|
displayName: str = Field(..., description="Display name of protocol")
|
|
42
40
|
category: str = Field(..., description="Protocol category")
|
|
43
41
|
logo: str = Field(..., description="Logo URL")
|
|
44
|
-
chains:
|
|
42
|
+
chains: list[str] = Field(..., description="Supported chains")
|
|
45
43
|
module: str = Field(..., description="Protocol module")
|
|
46
|
-
total24h:
|
|
47
|
-
total7d:
|
|
48
|
-
total30d:
|
|
49
|
-
total1y:
|
|
50
|
-
totalAllTime:
|
|
51
|
-
change_1d:
|
|
52
|
-
change_7d:
|
|
53
|
-
change_1m:
|
|
54
|
-
methodology:
|
|
44
|
+
total24h: float | None = Field(None, description="24-hour total fees")
|
|
45
|
+
total7d: float | None = Field(None, description="7-day total fees")
|
|
46
|
+
total30d: float | None = Field(None, description="30-day total fees")
|
|
47
|
+
total1y: float | None = Field(None, description="1-year total fees")
|
|
48
|
+
totalAllTime: float | None = Field(None, description="All-time total fees")
|
|
49
|
+
change_1d: float | None = Field(None, description="24-hour change percentage")
|
|
50
|
+
change_7d: float | None = Field(None, description="7-day change percentage")
|
|
51
|
+
change_1m: float | None = Field(None, description="30-day change percentage")
|
|
52
|
+
methodology: ProtocolMethodology | None = Field(
|
|
55
53
|
None, description="Protocol methodology"
|
|
56
54
|
)
|
|
57
|
-
breakdown24h:
|
|
55
|
+
breakdown24h: dict[str, dict[str, float]] | None = Field(
|
|
58
56
|
None, description="24-hour breakdown by chain"
|
|
59
57
|
)
|
|
60
|
-
breakdown30d:
|
|
58
|
+
breakdown30d: dict[str, dict[str, float]] | None = Field(
|
|
61
59
|
None, description="30-day breakdown by chain"
|
|
62
60
|
)
|
|
63
61
|
|
|
@@ -72,9 +70,9 @@ class FetchFeesOverviewResponse(BaseModel):
|
|
|
72
70
|
change_1d: float = Field(..., description="24-hour change percentage")
|
|
73
71
|
change_7d: float = Field(..., description="7-day change percentage")
|
|
74
72
|
change_1m: float = Field(..., description="30-day change percentage")
|
|
75
|
-
allChains:
|
|
76
|
-
protocols:
|
|
77
|
-
error:
|
|
73
|
+
allChains: list[str] = Field(..., description="List of all chains")
|
|
74
|
+
protocols: list[Protocol] = Field(..., description="List of protocols")
|
|
75
|
+
error: str | None = Field(None, description="Error message if any")
|
|
78
76
|
|
|
79
77
|
|
|
80
78
|
class DefiLlamaFetchFeesOverview(DefiLlamaBaseTool):
|
|
@@ -85,9 +83,9 @@ class DefiLlamaFetchFeesOverview(DefiLlamaBaseTool):
|
|
|
85
83
|
|
|
86
84
|
Example:
|
|
87
85
|
overview_tool = DefiLlamaFetchFeesOverview(
|
|
88
|
-
|
|
86
|
+
,
|
|
89
87
|
agent_id="agent_123",
|
|
90
|
-
|
|
88
|
+
agent=agent
|
|
91
89
|
)
|
|
92
90
|
result = await overview_tool._arun()
|
|
93
91
|
"""
|
|
@@ -100,7 +98,7 @@ class DefiLlamaFetchFeesOverview(DefiLlamaBaseTool):
|
|
|
100
98
|
|
|
101
99
|
pass
|
|
102
100
|
|
|
103
|
-
args_schema:
|
|
101
|
+
args_schema: type[BaseModel] = EmptyArgsSchema
|
|
104
102
|
|
|
105
103
|
async def _arun(self, **kwargs) -> FetchFeesOverviewResponse:
|
|
106
104
|
"""Fetch overview data for protocol fees.
|