intentkit 0.5.0__py3-none-any.whl → 0.5.2__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 +17 -0
- intentkit/abstracts/__init__.py +0 -0
- intentkit/abstracts/agent.py +60 -0
- intentkit/abstracts/api.py +4 -0
- intentkit/abstracts/engine.py +38 -0
- intentkit/abstracts/exception.py +9 -0
- intentkit/abstracts/graph.py +25 -0
- intentkit/abstracts/skill.py +129 -0
- intentkit/abstracts/twitter.py +54 -0
- intentkit/clients/__init__.py +14 -0
- intentkit/clients/cdp.py +53 -0
- intentkit/clients/twitter.py +445 -0
- intentkit/config/__init__.py +0 -0
- intentkit/config/config.py +164 -0
- intentkit/core/__init__.py +0 -0
- intentkit/core/agent.py +191 -0
- intentkit/core/api.py +40 -0
- intentkit/core/client.py +45 -0
- intentkit/core/credit.py +1767 -0
- intentkit/core/engine.py +1018 -0
- intentkit/core/node.py +223 -0
- intentkit/core/prompt.py +58 -0
- intentkit/core/skill.py +124 -0
- intentkit/models/agent.py +1689 -0
- intentkit/models/agent_data.py +810 -0
- intentkit/models/agent_schema.json +733 -0
- intentkit/models/app_setting.py +156 -0
- intentkit/models/base.py +9 -0
- intentkit/models/chat.py +581 -0
- intentkit/models/conversation.py +286 -0
- intentkit/models/credit.py +1406 -0
- intentkit/models/db.py +120 -0
- intentkit/models/db_mig.py +102 -0
- intentkit/models/generator.py +347 -0
- intentkit/models/llm.py +746 -0
- intentkit/models/redis.py +132 -0
- intentkit/models/skill.py +466 -0
- intentkit/models/user.py +243 -0
- intentkit/skills/__init__.py +12 -0
- intentkit/skills/acolyt/__init__.py +83 -0
- intentkit/skills/acolyt/acolyt.jpg +0 -0
- intentkit/skills/acolyt/ask.py +128 -0
- intentkit/skills/acolyt/base.py +28 -0
- intentkit/skills/acolyt/schema.json +89 -0
- intentkit/skills/aixbt/README.md +71 -0
- intentkit/skills/aixbt/__init__.py +73 -0
- intentkit/skills/aixbt/aixbt.jpg +0 -0
- intentkit/skills/aixbt/base.py +21 -0
- intentkit/skills/aixbt/projects.py +153 -0
- intentkit/skills/aixbt/schema.json +99 -0
- intentkit/skills/allora/__init__.py +83 -0
- intentkit/skills/allora/allora.jpeg +0 -0
- intentkit/skills/allora/base.py +28 -0
- intentkit/skills/allora/price.py +130 -0
- intentkit/skills/allora/schema.json +89 -0
- intentkit/skills/base.py +174 -0
- intentkit/skills/carv/README.md +95 -0
- intentkit/skills/carv/__init__.py +121 -0
- intentkit/skills/carv/base.py +183 -0
- intentkit/skills/carv/carv.webp +0 -0
- intentkit/skills/carv/fetch_news.py +92 -0
- intentkit/skills/carv/onchain_query.py +164 -0
- intentkit/skills/carv/schema.json +137 -0
- intentkit/skills/carv/token_info_and_price.py +110 -0
- intentkit/skills/cdp/__init__.py +137 -0
- intentkit/skills/cdp/base.py +21 -0
- intentkit/skills/cdp/cdp.png +0 -0
- intentkit/skills/cdp/get_balance.py +81 -0
- intentkit/skills/cdp/schema.json +473 -0
- intentkit/skills/chainlist/README.md +38 -0
- intentkit/skills/chainlist/__init__.py +54 -0
- intentkit/skills/chainlist/base.py +21 -0
- intentkit/skills/chainlist/chain_lookup.py +208 -0
- intentkit/skills/chainlist/chainlist.png +0 -0
- intentkit/skills/chainlist/schema.json +47 -0
- intentkit/skills/common/__init__.py +82 -0
- intentkit/skills/common/base.py +21 -0
- intentkit/skills/common/common.jpg +0 -0
- intentkit/skills/common/current_time.py +84 -0
- intentkit/skills/common/schema.json +57 -0
- intentkit/skills/cookiefun/README.md +121 -0
- intentkit/skills/cookiefun/__init__.py +78 -0
- intentkit/skills/cookiefun/base.py +41 -0
- intentkit/skills/cookiefun/constants.py +18 -0
- intentkit/skills/cookiefun/cookiefun.png +0 -0
- intentkit/skills/cookiefun/get_account_details.py +171 -0
- intentkit/skills/cookiefun/get_account_feed.py +282 -0
- intentkit/skills/cookiefun/get_account_smart_followers.py +181 -0
- intentkit/skills/cookiefun/get_sectors.py +128 -0
- intentkit/skills/cookiefun/schema.json +155 -0
- intentkit/skills/cookiefun/search_accounts.py +225 -0
- intentkit/skills/cryptocompare/__init__.py +130 -0
- intentkit/skills/cryptocompare/api.py +159 -0
- intentkit/skills/cryptocompare/base.py +303 -0
- intentkit/skills/cryptocompare/cryptocompare.png +0 -0
- intentkit/skills/cryptocompare/fetch_news.py +96 -0
- intentkit/skills/cryptocompare/fetch_price.py +99 -0
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +113 -0
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +109 -0
- intentkit/skills/cryptocompare/fetch_top_volume.py +108 -0
- intentkit/skills/cryptocompare/fetch_trading_signals.py +107 -0
- intentkit/skills/cryptocompare/schema.json +168 -0
- intentkit/skills/cryptopanic/__init__.py +108 -0
- intentkit/skills/cryptopanic/base.py +51 -0
- intentkit/skills/cryptopanic/cryptopanic.png +0 -0
- intentkit/skills/cryptopanic/fetch_crypto_news.py +153 -0
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +136 -0
- intentkit/skills/cryptopanic/schema.json +103 -0
- intentkit/skills/dapplooker/README.md +92 -0
- intentkit/skills/dapplooker/__init__.py +83 -0
- intentkit/skills/dapplooker/base.py +26 -0
- intentkit/skills/dapplooker/dapplooker.jpg +0 -0
- intentkit/skills/dapplooker/dapplooker_token_data.py +476 -0
- intentkit/skills/dapplooker/schema.json +91 -0
- intentkit/skills/defillama/__init__.py +323 -0
- intentkit/skills/defillama/api.py +315 -0
- intentkit/skills/defillama/base.py +135 -0
- intentkit/skills/defillama/coins/__init__.py +0 -0
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +116 -0
- intentkit/skills/defillama/coins/fetch_block.py +98 -0
- intentkit/skills/defillama/coins/fetch_current_prices.py +105 -0
- intentkit/skills/defillama/coins/fetch_first_price.py +100 -0
- intentkit/skills/defillama/coins/fetch_historical_prices.py +110 -0
- intentkit/skills/defillama/coins/fetch_price_chart.py +109 -0
- intentkit/skills/defillama/coins/fetch_price_percentage.py +93 -0
- intentkit/skills/defillama/config/__init__.py +0 -0
- intentkit/skills/defillama/config/chains.py +433 -0
- intentkit/skills/defillama/defillama.jpeg +0 -0
- intentkit/skills/defillama/fees/__init__.py +0 -0
- intentkit/skills/defillama/fees/fetch_fees_overview.py +130 -0
- intentkit/skills/defillama/schema.json +383 -0
- intentkit/skills/defillama/stablecoins/__init__.py +0 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +100 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +129 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +83 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +126 -0
- intentkit/skills/defillama/tests/__init__.py +0 -0
- intentkit/skills/defillama/tests/api_integration.test.py +192 -0
- intentkit/skills/defillama/tests/api_unit.test.py +583 -0
- intentkit/skills/defillama/tvl/__init__.py +0 -0
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +106 -0
- intentkit/skills/defillama/tvl/fetch_chains.py +107 -0
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +91 -0
- intentkit/skills/defillama/tvl/fetch_protocol.py +207 -0
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +93 -0
- intentkit/skills/defillama/tvl/fetch_protocols.py +196 -0
- intentkit/skills/defillama/volumes/__init__.py +0 -0
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +157 -0
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +123 -0
- intentkit/skills/defillama/volumes/fetch_options_overview.py +131 -0
- intentkit/skills/defillama/yields/__init__.py +0 -0
- intentkit/skills/defillama/yields/fetch_pool_chart.py +100 -0
- intentkit/skills/defillama/yields/fetch_pools.py +126 -0
- intentkit/skills/dexscreener/__init__.py +93 -0
- intentkit/skills/dexscreener/base.py +133 -0
- intentkit/skills/dexscreener/dexscreener.png +0 -0
- intentkit/skills/dexscreener/model/__init__.py +0 -0
- intentkit/skills/dexscreener/model/search_token_response.py +82 -0
- intentkit/skills/dexscreener/schema.json +48 -0
- intentkit/skills/dexscreener/search_token.py +321 -0
- intentkit/skills/dune_analytics/__init__.py +103 -0
- intentkit/skills/dune_analytics/base.py +46 -0
- intentkit/skills/dune_analytics/dune.png +0 -0
- intentkit/skills/dune_analytics/fetch_kol_buys.py +128 -0
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +237 -0
- intentkit/skills/dune_analytics/schema.json +99 -0
- intentkit/skills/elfa/README.md +100 -0
- intentkit/skills/elfa/__init__.py +123 -0
- intentkit/skills/elfa/base.py +28 -0
- intentkit/skills/elfa/elfa.jpg +0 -0
- intentkit/skills/elfa/mention.py +504 -0
- intentkit/skills/elfa/schema.json +153 -0
- intentkit/skills/elfa/stats.py +118 -0
- intentkit/skills/elfa/tokens.py +126 -0
- intentkit/skills/enso/README.md +75 -0
- intentkit/skills/enso/__init__.py +114 -0
- intentkit/skills/enso/abi/__init__.py +0 -0
- intentkit/skills/enso/abi/approval.py +279 -0
- intentkit/skills/enso/abi/erc20.py +14 -0
- intentkit/skills/enso/abi/route.py +129 -0
- intentkit/skills/enso/base.py +44 -0
- intentkit/skills/enso/best_yield.py +286 -0
- intentkit/skills/enso/enso.jpg +0 -0
- intentkit/skills/enso/networks.py +105 -0
- intentkit/skills/enso/prices.py +93 -0
- intentkit/skills/enso/route.py +300 -0
- intentkit/skills/enso/schema.json +212 -0
- intentkit/skills/enso/tokens.py +223 -0
- intentkit/skills/enso/wallet.py +381 -0
- intentkit/skills/github/README.md +63 -0
- intentkit/skills/github/__init__.py +54 -0
- intentkit/skills/github/base.py +21 -0
- intentkit/skills/github/github.jpg +0 -0
- intentkit/skills/github/github_search.py +183 -0
- intentkit/skills/github/schema.json +59 -0
- intentkit/skills/heurist/__init__.py +143 -0
- intentkit/skills/heurist/base.py +26 -0
- intentkit/skills/heurist/heurist.png +0 -0
- intentkit/skills/heurist/image_generation_animagine_xl.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_comics.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_real.py +162 -0
- intentkit/skills/heurist/image_generation_braindance.py +162 -0
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +162 -0
- intentkit/skills/heurist/image_generation_flux_1_dev.py +162 -0
- intentkit/skills/heurist/image_generation_sdxl.py +161 -0
- intentkit/skills/heurist/schema.json +196 -0
- intentkit/skills/lifi/README.md +294 -0
- intentkit/skills/lifi/__init__.py +141 -0
- intentkit/skills/lifi/base.py +21 -0
- intentkit/skills/lifi/lifi.png +0 -0
- intentkit/skills/lifi/schema.json +89 -0
- intentkit/skills/lifi/token_execute.py +472 -0
- intentkit/skills/lifi/token_quote.py +190 -0
- intentkit/skills/lifi/utils.py +656 -0
- intentkit/skills/moralis/README.md +490 -0
- intentkit/skills/moralis/__init__.py +110 -0
- intentkit/skills/moralis/api.py +281 -0
- intentkit/skills/moralis/base.py +55 -0
- intentkit/skills/moralis/fetch_chain_portfolio.py +191 -0
- intentkit/skills/moralis/fetch_nft_portfolio.py +284 -0
- intentkit/skills/moralis/fetch_solana_portfolio.py +331 -0
- intentkit/skills/moralis/fetch_wallet_portfolio.py +301 -0
- intentkit/skills/moralis/moralis.png +0 -0
- intentkit/skills/moralis/schema.json +156 -0
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +511 -0
- intentkit/skills/nation/__init__.py +62 -0
- intentkit/skills/nation/base.py +31 -0
- intentkit/skills/nation/nation.png +0 -0
- intentkit/skills/nation/nft_check.py +106 -0
- intentkit/skills/nation/schema.json +58 -0
- intentkit/skills/openai/__init__.py +107 -0
- intentkit/skills/openai/base.py +32 -0
- intentkit/skills/openai/dalle_image_generation.py +128 -0
- intentkit/skills/openai/gpt_image_generation.py +152 -0
- intentkit/skills/openai/gpt_image_to_image.py +186 -0
- intentkit/skills/openai/image_to_text.py +126 -0
- intentkit/skills/openai/openai.png +0 -0
- intentkit/skills/openai/schema.json +139 -0
- intentkit/skills/portfolio/README.md +55 -0
- intentkit/skills/portfolio/__init__.py +151 -0
- intentkit/skills/portfolio/base.py +107 -0
- intentkit/skills/portfolio/constants.py +9 -0
- intentkit/skills/portfolio/moralis.png +0 -0
- intentkit/skills/portfolio/schema.json +237 -0
- intentkit/skills/portfolio/token_balances.py +155 -0
- intentkit/skills/portfolio/wallet_approvals.py +102 -0
- intentkit/skills/portfolio/wallet_defi_positions.py +80 -0
- intentkit/skills/portfolio/wallet_history.py +155 -0
- intentkit/skills/portfolio/wallet_net_worth.py +112 -0
- intentkit/skills/portfolio/wallet_nfts.py +139 -0
- intentkit/skills/portfolio/wallet_profitability.py +101 -0
- intentkit/skills/portfolio/wallet_profitability_summary.py +91 -0
- intentkit/skills/portfolio/wallet_stats.py +79 -0
- intentkit/skills/portfolio/wallet_swaps.py +147 -0
- intentkit/skills/skills.toml +103 -0
- intentkit/skills/slack/__init__.py +98 -0
- intentkit/skills/slack/base.py +55 -0
- intentkit/skills/slack/get_channel.py +109 -0
- intentkit/skills/slack/get_message.py +136 -0
- intentkit/skills/slack/schedule_message.py +92 -0
- intentkit/skills/slack/schema.json +135 -0
- intentkit/skills/slack/send_message.py +81 -0
- intentkit/skills/slack/slack.jpg +0 -0
- intentkit/skills/system/__init__.py +90 -0
- intentkit/skills/system/base.py +22 -0
- intentkit/skills/system/read_agent_api_key.py +87 -0
- intentkit/skills/system/regenerate_agent_api_key.py +77 -0
- intentkit/skills/system/schema.json +53 -0
- intentkit/skills/system/system.svg +76 -0
- intentkit/skills/tavily/README.md +86 -0
- intentkit/skills/tavily/__init__.py +91 -0
- intentkit/skills/tavily/base.py +27 -0
- intentkit/skills/tavily/schema.json +119 -0
- intentkit/skills/tavily/tavily.jpg +0 -0
- intentkit/skills/tavily/tavily_extract.py +147 -0
- intentkit/skills/tavily/tavily_search.py +139 -0
- intentkit/skills/token/README.md +89 -0
- intentkit/skills/token/__init__.py +107 -0
- intentkit/skills/token/base.py +154 -0
- intentkit/skills/token/constants.py +9 -0
- intentkit/skills/token/erc20_transfers.py +145 -0
- intentkit/skills/token/moralis.png +0 -0
- intentkit/skills/token/schema.json +141 -0
- intentkit/skills/token/token_analytics.py +81 -0
- intentkit/skills/token/token_price.py +132 -0
- intentkit/skills/token/token_search.py +121 -0
- intentkit/skills/twitter/__init__.py +146 -0
- intentkit/skills/twitter/base.py +68 -0
- intentkit/skills/twitter/follow_user.py +69 -0
- intentkit/skills/twitter/get_mentions.py +124 -0
- intentkit/skills/twitter/get_timeline.py +111 -0
- intentkit/skills/twitter/get_user_by_username.py +84 -0
- intentkit/skills/twitter/get_user_tweets.py +123 -0
- intentkit/skills/twitter/like_tweet.py +65 -0
- intentkit/skills/twitter/post_tweet.py +90 -0
- intentkit/skills/twitter/reply_tweet.py +98 -0
- intentkit/skills/twitter/retweet.py +76 -0
- intentkit/skills/twitter/schema.json +258 -0
- intentkit/skills/twitter/search_tweets.py +115 -0
- intentkit/skills/twitter/twitter.png +0 -0
- intentkit/skills/unrealspeech/__init__.py +55 -0
- intentkit/skills/unrealspeech/base.py +21 -0
- intentkit/skills/unrealspeech/schema.json +100 -0
- intentkit/skills/unrealspeech/text_to_speech.py +177 -0
- intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
- intentkit/skills/venice_audio/__init__.py +106 -0
- intentkit/skills/venice_audio/base.py +119 -0
- intentkit/skills/venice_audio/input.py +41 -0
- intentkit/skills/venice_audio/schema.json +152 -0
- intentkit/skills/venice_audio/venice_audio.py +240 -0
- intentkit/skills/venice_audio/venice_logo.jpg +0 -0
- intentkit/skills/venice_image/README.md +119 -0
- intentkit/skills/venice_image/__init__.py +154 -0
- intentkit/skills/venice_image/api.py +138 -0
- intentkit/skills/venice_image/base.py +188 -0
- intentkit/skills/venice_image/config.py +35 -0
- intentkit/skills/venice_image/image_enhance/README.md +119 -0
- intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
- intentkit/skills/venice_image/image_enhance/image_enhance.py +80 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +23 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +40 -0
- intentkit/skills/venice_image/image_generation/README.md +144 -0
- intentkit/skills/venice_image/image_generation/__init__.py +0 -0
- intentkit/skills/venice_image/image_generation/image_generation_base.py +117 -0
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -0
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -0
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -0
- intentkit/skills/venice_image/image_upscale/README.md +111 -0
- intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
- intentkit/skills/venice_image/image_upscale/image_upscale.py +90 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +23 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -0
- intentkit/skills/venice_image/image_vision/README.md +112 -0
- intentkit/skills/venice_image/image_vision/__init__.py +0 -0
- intentkit/skills/venice_image/image_vision/image_vision.py +100 -0
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -0
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -0
- intentkit/skills/venice_image/schema.json +267 -0
- intentkit/skills/venice_image/utils.py +78 -0
- intentkit/skills/venice_image/venice_image.jpg +0 -0
- intentkit/skills/web_scraper/README.md +82 -0
- intentkit/skills/web_scraper/__init__.py +92 -0
- intentkit/skills/web_scraper/base.py +21 -0
- intentkit/skills/web_scraper/langchain.png +0 -0
- intentkit/skills/web_scraper/schema.json +115 -0
- intentkit/skills/web_scraper/scrape_and_index.py +327 -0
- intentkit/utils/__init__.py +1 -0
- intentkit/utils/chain.py +436 -0
- intentkit/utils/error.py +134 -0
- intentkit/utils/logging.py +70 -0
- intentkit/utils/middleware.py +61 -0
- intentkit/utils/random.py +16 -0
- intentkit/utils/s3.py +267 -0
- intentkit/utils/slack_alert.py +79 -0
- intentkit/utils/tx.py +37 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/METADATA +1 -1
- intentkit-0.5.2.dist-info/RECORD +365 -0
- intentkit-0.5.0.dist-info/RECORD +0 -4
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/WHEEL +0 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"""Tool for fetching fees overview data via DeFi Llama API."""
|
|
2
|
+
|
|
3
|
+
from typing import Dict, List, Optional, Type
|
|
4
|
+
|
|
5
|
+
from langchain.schema.runnable import RunnableConfig
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from intentkit.skills.defillama.api import fetch_fees_overview
|
|
9
|
+
from intentkit.skills.defillama.base import DefiLlamaBaseTool
|
|
10
|
+
|
|
11
|
+
FETCH_FEES_OVERVIEW_PROMPT = """
|
|
12
|
+
This tool fetches comprehensive overview data for protocol fees from DeFi Llama.
|
|
13
|
+
Returns detailed metrics including:
|
|
14
|
+
- Total fees across different timeframes
|
|
15
|
+
- Change percentages
|
|
16
|
+
- Protocol-specific data
|
|
17
|
+
- Chain breakdowns
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ProtocolMethodology(BaseModel):
|
|
22
|
+
"""Model representing protocol methodology data."""
|
|
23
|
+
|
|
24
|
+
UserFees: Optional[str] = Field(None, description="Description of user fees")
|
|
25
|
+
Fees: Optional[str] = Field(None, description="Description of fees")
|
|
26
|
+
Revenue: Optional[str] = Field(None, description="Description of revenue")
|
|
27
|
+
ProtocolRevenue: Optional[str] = Field(
|
|
28
|
+
None, description="Description of protocol revenue"
|
|
29
|
+
)
|
|
30
|
+
HoldersRevenue: Optional[str] = Field(
|
|
31
|
+
None, description="Description of holders revenue"
|
|
32
|
+
)
|
|
33
|
+
SupplySideRevenue: Optional[str] = Field(
|
|
34
|
+
None, description="Description of supply side revenue"
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class Protocol(BaseModel):
|
|
39
|
+
"""Model representing protocol data."""
|
|
40
|
+
|
|
41
|
+
name: str = Field(..., description="Protocol name")
|
|
42
|
+
displayName: str = Field(..., description="Display name of protocol")
|
|
43
|
+
category: str = Field(..., description="Protocol category")
|
|
44
|
+
logo: str = Field(..., description="Logo URL")
|
|
45
|
+
chains: List[str] = Field(..., description="Supported chains")
|
|
46
|
+
module: str = Field(..., description="Protocol module")
|
|
47
|
+
total24h: Optional[float] = Field(None, description="24-hour total fees")
|
|
48
|
+
total7d: Optional[float] = Field(None, description="7-day total fees")
|
|
49
|
+
total30d: Optional[float] = Field(None, description="30-day total fees")
|
|
50
|
+
total1y: Optional[float] = Field(None, description="1-year total fees")
|
|
51
|
+
totalAllTime: Optional[float] = Field(None, description="All-time total fees")
|
|
52
|
+
change_1d: Optional[float] = Field(None, description="24-hour change percentage")
|
|
53
|
+
change_7d: Optional[float] = Field(None, description="7-day change percentage")
|
|
54
|
+
change_1m: Optional[float] = Field(None, description="30-day change percentage")
|
|
55
|
+
methodology: Optional[ProtocolMethodology] = Field(
|
|
56
|
+
None, description="Protocol methodology"
|
|
57
|
+
)
|
|
58
|
+
breakdown24h: Optional[Dict[str, Dict[str, float]]] = Field(
|
|
59
|
+
None, description="24-hour breakdown by chain"
|
|
60
|
+
)
|
|
61
|
+
breakdown30d: Optional[Dict[str, Dict[str, float]]] = Field(
|
|
62
|
+
None, description="30-day breakdown by chain"
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class FetchFeesOverviewResponse(BaseModel):
|
|
67
|
+
"""Response schema for fees overview data."""
|
|
68
|
+
|
|
69
|
+
total24h: float = Field(..., description="Total fees in last 24 hours")
|
|
70
|
+
total7d: float = Field(..., description="Total fees in last 7 days")
|
|
71
|
+
total30d: float = Field(..., description="Total fees in last 30 days")
|
|
72
|
+
total1y: float = Field(..., description="Total fees in last year")
|
|
73
|
+
change_1d: float = Field(..., description="24-hour change percentage")
|
|
74
|
+
change_7d: float = Field(..., description="7-day change percentage")
|
|
75
|
+
change_1m: float = Field(..., description="30-day change percentage")
|
|
76
|
+
allChains: List[str] = Field(..., description="List of all chains")
|
|
77
|
+
protocols: List[Protocol] = Field(..., description="List of protocols")
|
|
78
|
+
error: Optional[str] = Field(None, description="Error message if any")
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class DefiLlamaFetchFeesOverview(DefiLlamaBaseTool):
|
|
82
|
+
"""Tool for fetching fees overview data from DeFi Llama.
|
|
83
|
+
|
|
84
|
+
This tool retrieves comprehensive data about protocol fees,
|
|
85
|
+
including fee metrics, change percentages, and detailed protocol information.
|
|
86
|
+
|
|
87
|
+
Example:
|
|
88
|
+
overview_tool = DefiLlamaFetchFeesOverview(
|
|
89
|
+
skill_store=store,
|
|
90
|
+
agent_id="agent_123",
|
|
91
|
+
agent_store=agent_store
|
|
92
|
+
)
|
|
93
|
+
result = await overview_tool._arun()
|
|
94
|
+
"""
|
|
95
|
+
|
|
96
|
+
name: str = "defillama_fetch_fees_overview"
|
|
97
|
+
description: str = FETCH_FEES_OVERVIEW_PROMPT
|
|
98
|
+
|
|
99
|
+
class EmptyArgsSchema(BaseModel):
|
|
100
|
+
"""Empty schema for no input parameters."""
|
|
101
|
+
|
|
102
|
+
pass
|
|
103
|
+
|
|
104
|
+
args_schema: Type[BaseModel] = EmptyArgsSchema
|
|
105
|
+
|
|
106
|
+
async def _arun(self, config: RunnableConfig) -> FetchFeesOverviewResponse:
|
|
107
|
+
"""Fetch overview data for protocol fees.
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
FetchFeesOverviewResponse containing comprehensive fee data or error
|
|
111
|
+
"""
|
|
112
|
+
try:
|
|
113
|
+
# Check rate limiting
|
|
114
|
+
context = self.context_from_config(config)
|
|
115
|
+
is_rate_limited, error_msg = await self.check_rate_limit(context)
|
|
116
|
+
if is_rate_limited:
|
|
117
|
+
return FetchFeesOverviewResponse(error=error_msg)
|
|
118
|
+
|
|
119
|
+
# Fetch fees data from API
|
|
120
|
+
result = await fetch_fees_overview()
|
|
121
|
+
|
|
122
|
+
# Check for API errors
|
|
123
|
+
if isinstance(result, dict) and "error" in result:
|
|
124
|
+
return FetchFeesOverviewResponse(error=result["error"])
|
|
125
|
+
|
|
126
|
+
# Return the parsed response
|
|
127
|
+
return FetchFeesOverviewResponse(**result)
|
|
128
|
+
|
|
129
|
+
except Exception as e:
|
|
130
|
+
return FetchFeesOverviewResponse(error=str(e))
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"title": "DeFiLlama",
|
|
5
|
+
"x-icon": "https://ai.service.crestal.dev/skills/defillama/defillama.jpeg",
|
|
6
|
+
"description": "Integration with DeFi Llama API providing comprehensive decentralized finance data including token prices, protocol TVL, DEX volumes, and stablecoin metrics",
|
|
7
|
+
"properties": {
|
|
8
|
+
"enabled": {
|
|
9
|
+
"type": "boolean",
|
|
10
|
+
"title": "Enabled",
|
|
11
|
+
"description": "Whether this skill is enabled",
|
|
12
|
+
"default": false
|
|
13
|
+
},
|
|
14
|
+
"states": {
|
|
15
|
+
"type": "object",
|
|
16
|
+
"properties": {
|
|
17
|
+
"fetch_batch_historical_prices": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"enum": [
|
|
20
|
+
"disabled",
|
|
21
|
+
"public",
|
|
22
|
+
"private"
|
|
23
|
+
],
|
|
24
|
+
"x-enum-title": [
|
|
25
|
+
"Disabled",
|
|
26
|
+
"Agent Owner + All Users",
|
|
27
|
+
"Agent Owner Only"
|
|
28
|
+
],
|
|
29
|
+
"description": "Fetch batch historical prices",
|
|
30
|
+
"default": "disabled"
|
|
31
|
+
},
|
|
32
|
+
"fetch_block": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"enum": [
|
|
35
|
+
"disabled",
|
|
36
|
+
"public",
|
|
37
|
+
"private"
|
|
38
|
+
],
|
|
39
|
+
"x-enum-title": [
|
|
40
|
+
"Disabled",
|
|
41
|
+
"Agent Owner + All Users",
|
|
42
|
+
"Agent Owner Only"
|
|
43
|
+
],
|
|
44
|
+
"description": "Fetch block",
|
|
45
|
+
"default": "disabled"
|
|
46
|
+
},
|
|
47
|
+
"fetch_current_prices": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"enum": [
|
|
50
|
+
"disabled",
|
|
51
|
+
"public",
|
|
52
|
+
"private"
|
|
53
|
+
],
|
|
54
|
+
"x-enum-title": [
|
|
55
|
+
"Disabled",
|
|
56
|
+
"Agent Owner + All Users",
|
|
57
|
+
"Agent Owner Only"
|
|
58
|
+
],
|
|
59
|
+
"description": "Fetch current prices",
|
|
60
|
+
"default": "disabled"
|
|
61
|
+
},
|
|
62
|
+
"fetch_first_price": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"enum": [
|
|
65
|
+
"disabled",
|
|
66
|
+
"public",
|
|
67
|
+
"private"
|
|
68
|
+
],
|
|
69
|
+
"x-enum-title": [
|
|
70
|
+
"Disabled",
|
|
71
|
+
"Agent Owner + All Users",
|
|
72
|
+
"Agent Owner Only"
|
|
73
|
+
],
|
|
74
|
+
"description": "Retrieves inaugural trading price data for assets with historical context",
|
|
75
|
+
"default": "disabled"
|
|
76
|
+
},
|
|
77
|
+
"fetch_historical_prices": {
|
|
78
|
+
"type": "string",
|
|
79
|
+
"enum": [
|
|
80
|
+
"disabled",
|
|
81
|
+
"public",
|
|
82
|
+
"private"
|
|
83
|
+
],
|
|
84
|
+
"x-enum-title": [
|
|
85
|
+
"Disabled",
|
|
86
|
+
"Agent Owner + All Users",
|
|
87
|
+
"Agent Owner Only"
|
|
88
|
+
],
|
|
89
|
+
"description": "Fetch historical prices",
|
|
90
|
+
"default": "disabled"
|
|
91
|
+
},
|
|
92
|
+
"fetch_price_chart": {
|
|
93
|
+
"type": "string",
|
|
94
|
+
"enum": [
|
|
95
|
+
"disabled",
|
|
96
|
+
"public",
|
|
97
|
+
"private"
|
|
98
|
+
],
|
|
99
|
+
"x-enum-title": [
|
|
100
|
+
"Disabled",
|
|
101
|
+
"Agent Owner + All Users",
|
|
102
|
+
"Agent Owner Only"
|
|
103
|
+
],
|
|
104
|
+
"description": "Fetch price chart",
|
|
105
|
+
"default": "disabled"
|
|
106
|
+
},
|
|
107
|
+
"fetch_price_percentage": {
|
|
108
|
+
"type": "string",
|
|
109
|
+
"enum": [
|
|
110
|
+
"disabled",
|
|
111
|
+
"public",
|
|
112
|
+
"private"
|
|
113
|
+
],
|
|
114
|
+
"x-enum-title": [
|
|
115
|
+
"Disabled",
|
|
116
|
+
"Agent Owner + All Users",
|
|
117
|
+
"Agent Owner Only"
|
|
118
|
+
],
|
|
119
|
+
"description": "Fetch price percentage",
|
|
120
|
+
"default": "disabled"
|
|
121
|
+
},
|
|
122
|
+
"fetch_fees_overview": {
|
|
123
|
+
"type": "string",
|
|
124
|
+
"title": "Fetch Fees Overview",
|
|
125
|
+
"enum": [
|
|
126
|
+
"disabled",
|
|
127
|
+
"public",
|
|
128
|
+
"private"
|
|
129
|
+
],
|
|
130
|
+
"x-enum-title": [
|
|
131
|
+
"Disabled",
|
|
132
|
+
"Agent Owner + All Users",
|
|
133
|
+
"Agent Owner Only"
|
|
134
|
+
],
|
|
135
|
+
"description": "Provides aggregated fee statistics across DEXs, lending protocols, and other fee-generating DeFi primitives",
|
|
136
|
+
"default": "disabled"
|
|
137
|
+
},
|
|
138
|
+
"fetch_stablecoin_chains": {
|
|
139
|
+
"type": "string",
|
|
140
|
+
"enum": [
|
|
141
|
+
"disabled",
|
|
142
|
+
"public",
|
|
143
|
+
"private"
|
|
144
|
+
],
|
|
145
|
+
"x-enum-title": [
|
|
146
|
+
"Disabled",
|
|
147
|
+
"Agent Owner + All Users",
|
|
148
|
+
"Agent Owner Only"
|
|
149
|
+
],
|
|
150
|
+
"description": "Shows blockchain distribution of stablecoin supply with chain-specific circulation metrics",
|
|
151
|
+
"default": "disabled"
|
|
152
|
+
},
|
|
153
|
+
"fetch_stablecoin_charts": {
|
|
154
|
+
"type": "string",
|
|
155
|
+
"enum": [
|
|
156
|
+
"disabled",
|
|
157
|
+
"public",
|
|
158
|
+
"private"
|
|
159
|
+
],
|
|
160
|
+
"x-enum-title": [
|
|
161
|
+
"Disabled",
|
|
162
|
+
"Agent Owner + All Users",
|
|
163
|
+
"Agent Owner Only"
|
|
164
|
+
],
|
|
165
|
+
"description": "Generates historical charts for stablecoin market cap, supply changes, and chain dominance",
|
|
166
|
+
"default": "disabled"
|
|
167
|
+
},
|
|
168
|
+
"fetch_stablecoin_prices": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"enum": [
|
|
171
|
+
"disabled",
|
|
172
|
+
"public",
|
|
173
|
+
"private"
|
|
174
|
+
],
|
|
175
|
+
"x-enum-title": [
|
|
176
|
+
"Disabled",
|
|
177
|
+
"Agent Owner + All Users",
|
|
178
|
+
"Agent Owner Only"
|
|
179
|
+
],
|
|
180
|
+
"description": "Fetch stablecoin prices",
|
|
181
|
+
"default": "disabled"
|
|
182
|
+
},
|
|
183
|
+
"fetch_stablecoins": {
|
|
184
|
+
"type": "string",
|
|
185
|
+
"enum": [
|
|
186
|
+
"disabled",
|
|
187
|
+
"public",
|
|
188
|
+
"private"
|
|
189
|
+
],
|
|
190
|
+
"x-enum-title": [
|
|
191
|
+
"Disabled",
|
|
192
|
+
"Agent Owner + All Users",
|
|
193
|
+
"Agent Owner Only"
|
|
194
|
+
],
|
|
195
|
+
"description": "Fetch stablecoins",
|
|
196
|
+
"default": "disabled"
|
|
197
|
+
},
|
|
198
|
+
"fetch_chain_historical_tvl": {
|
|
199
|
+
"type": "string",
|
|
200
|
+
"enum": [
|
|
201
|
+
"disabled",
|
|
202
|
+
"public",
|
|
203
|
+
"private"
|
|
204
|
+
],
|
|
205
|
+
"x-enum-title": [
|
|
206
|
+
"Disabled",
|
|
207
|
+
"Agent Owner + All Users",
|
|
208
|
+
"Agent Owner Only"
|
|
209
|
+
],
|
|
210
|
+
"description": "Retrieves historical TVL data for specific blockchain chains with daily granularity",
|
|
211
|
+
"default": "disabled"
|
|
212
|
+
},
|
|
213
|
+
"fetch_chains": {
|
|
214
|
+
"type": "string",
|
|
215
|
+
"enum": [
|
|
216
|
+
"disabled",
|
|
217
|
+
"public",
|
|
218
|
+
"private"
|
|
219
|
+
],
|
|
220
|
+
"x-enum-title": [
|
|
221
|
+
"Disabled",
|
|
222
|
+
"Agent Owner + All Users",
|
|
223
|
+
"Agent Owner Only"
|
|
224
|
+
],
|
|
225
|
+
"description": "Fetch chains",
|
|
226
|
+
"default": "disabled"
|
|
227
|
+
},
|
|
228
|
+
"fetch_historical_tvl": {
|
|
229
|
+
"type": "string",
|
|
230
|
+
"enum": [
|
|
231
|
+
"disabled",
|
|
232
|
+
"public",
|
|
233
|
+
"private"
|
|
234
|
+
],
|
|
235
|
+
"x-enum-title": [
|
|
236
|
+
"Disabled",
|
|
237
|
+
"Agent Owner + All Users",
|
|
238
|
+
"Agent Owner Only"
|
|
239
|
+
],
|
|
240
|
+
"description": "Provides historical TVL trends for the entire DeFi ecosystem or specific protocol categories",
|
|
241
|
+
"default": "disabled"
|
|
242
|
+
},
|
|
243
|
+
"fetch_protocol": {
|
|
244
|
+
"type": "string",
|
|
245
|
+
"enum": [
|
|
246
|
+
"disabled",
|
|
247
|
+
"public",
|
|
248
|
+
"private"
|
|
249
|
+
],
|
|
250
|
+
"x-enum-title": [
|
|
251
|
+
"Disabled",
|
|
252
|
+
"Agent Owner + All Users",
|
|
253
|
+
"Agent Owner Only"
|
|
254
|
+
],
|
|
255
|
+
"description": "Fetch protocol",
|
|
256
|
+
"default": "disabled"
|
|
257
|
+
},
|
|
258
|
+
"fetch_protocol_current_tvl": {
|
|
259
|
+
"type": "string",
|
|
260
|
+
"enum": [
|
|
261
|
+
"disabled",
|
|
262
|
+
"public",
|
|
263
|
+
"private"
|
|
264
|
+
],
|
|
265
|
+
"x-enum-title": [
|
|
266
|
+
"Disabled",
|
|
267
|
+
"Agent Owner + All Users",
|
|
268
|
+
"Agent Owner Only"
|
|
269
|
+
],
|
|
270
|
+
"description": "Fetch protocol current TVL",
|
|
271
|
+
"default": "disabled"
|
|
272
|
+
},
|
|
273
|
+
"fetch_protocols": {
|
|
274
|
+
"type": "string",
|
|
275
|
+
"enum": [
|
|
276
|
+
"disabled",
|
|
277
|
+
"public",
|
|
278
|
+
"private"
|
|
279
|
+
],
|
|
280
|
+
"x-enum-title": [
|
|
281
|
+
"Disabled",
|
|
282
|
+
"Agent Owner + All Users",
|
|
283
|
+
"Agent Owner Only"
|
|
284
|
+
],
|
|
285
|
+
"description": "Retrieves comprehensive list of all tracked DeFi protocols with their category, chain, and TVL data",
|
|
286
|
+
"default": "disabled"
|
|
287
|
+
},
|
|
288
|
+
"fetch_dex_overview": {
|
|
289
|
+
"type": "string",
|
|
290
|
+
"enum": [
|
|
291
|
+
"disabled",
|
|
292
|
+
"public",
|
|
293
|
+
"private"
|
|
294
|
+
],
|
|
295
|
+
"x-enum-title": [
|
|
296
|
+
"Disabled",
|
|
297
|
+
"Agent Owner + All Users",
|
|
298
|
+
"Agent Owner Only"
|
|
299
|
+
],
|
|
300
|
+
"description": "Provides aggregated DEX metrics including total volume, top trading pairs, and liquidity distribution",
|
|
301
|
+
"default": "disabled"
|
|
302
|
+
},
|
|
303
|
+
"fetch_dex_summary": {
|
|
304
|
+
"type": "string",
|
|
305
|
+
"enum": [
|
|
306
|
+
"disabled",
|
|
307
|
+
"public",
|
|
308
|
+
"private"
|
|
309
|
+
],
|
|
310
|
+
"x-enum-title": [
|
|
311
|
+
"Disabled",
|
|
312
|
+
"Agent Owner + All Users",
|
|
313
|
+
"Agent Owner Only"
|
|
314
|
+
],
|
|
315
|
+
"description": "Fetch dex summary",
|
|
316
|
+
"default": "disabled"
|
|
317
|
+
},
|
|
318
|
+
"fetch_options_overview": {
|
|
319
|
+
"type": "string",
|
|
320
|
+
"enum": [
|
|
321
|
+
"disabled",
|
|
322
|
+
"public",
|
|
323
|
+
"private"
|
|
324
|
+
],
|
|
325
|
+
"x-enum-title": [
|
|
326
|
+
"Disabled",
|
|
327
|
+
"Agent Owner + All Users",
|
|
328
|
+
"Agent Owner Only"
|
|
329
|
+
],
|
|
330
|
+
"description": "Fetch options overview",
|
|
331
|
+
"default": "disabled"
|
|
332
|
+
},
|
|
333
|
+
"fetch_pool_chart": {
|
|
334
|
+
"type": "string",
|
|
335
|
+
"enum": [
|
|
336
|
+
"disabled",
|
|
337
|
+
"public",
|
|
338
|
+
"private"
|
|
339
|
+
],
|
|
340
|
+
"x-enum-title": [
|
|
341
|
+
"Disabled",
|
|
342
|
+
"Agent Owner + All Users",
|
|
343
|
+
"Agent Owner Only"
|
|
344
|
+
],
|
|
345
|
+
"description": "Fetch pool chart",
|
|
346
|
+
"default": "disabled"
|
|
347
|
+
},
|
|
348
|
+
"fetch_pools": {
|
|
349
|
+
"type": "string",
|
|
350
|
+
"enum": [
|
|
351
|
+
"disabled",
|
|
352
|
+
"public",
|
|
353
|
+
"private"
|
|
354
|
+
],
|
|
355
|
+
"x-enum-title": [
|
|
356
|
+
"Disabled",
|
|
357
|
+
"Agent Owner + All Users",
|
|
358
|
+
"Agent Owner Only"
|
|
359
|
+
],
|
|
360
|
+
"description": "Fetch pools",
|
|
361
|
+
"default": "disabled"
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
"description": "States for each Defillama skill (disabled, public, or private)"
|
|
365
|
+
},
|
|
366
|
+
"api_key_provider": {
|
|
367
|
+
"type": "string",
|
|
368
|
+
"title": "API Key Provider",
|
|
369
|
+
"description": "Who provides the API key",
|
|
370
|
+
"enum": [
|
|
371
|
+
"platform"
|
|
372
|
+
],
|
|
373
|
+
"x-enum-title": [
|
|
374
|
+
"Nation Hosted"
|
|
375
|
+
],
|
|
376
|
+
"default": "platform"
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
"required": [
|
|
380
|
+
"states",
|
|
381
|
+
"enabled"
|
|
382
|
+
]
|
|
383
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""Tool for fetching stablecoin chains data via DeFi Llama API."""
|
|
2
|
+
|
|
3
|
+
from typing import List, Optional
|
|
4
|
+
|
|
5
|
+
from langchain.schema.runnable import RunnableConfig
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from intentkit.skills.defillama.api import fetch_stablecoin_chains
|
|
9
|
+
from intentkit.skills.defillama.base import DefiLlamaBaseTool
|
|
10
|
+
|
|
11
|
+
FETCH_STABLECOIN_CHAINS_PROMPT = """
|
|
12
|
+
This tool fetches stablecoin distribution data across all chains from DeFi Llama.
|
|
13
|
+
Returns:
|
|
14
|
+
- List of chains with stablecoin circulating amounts
|
|
15
|
+
- Token information for each chain
|
|
16
|
+
- Peg type circulating amounts (USD, EUR, etc.)
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class CirculatingUSD(BaseModel):
|
|
21
|
+
"""Model representing circulating amounts in different pegs."""
|
|
22
|
+
|
|
23
|
+
peggedUSD: Optional[float] = Field(None, description="Amount pegged to USD")
|
|
24
|
+
peggedEUR: Optional[float] = Field(None, description="Amount pegged to EUR")
|
|
25
|
+
peggedVAR: Optional[float] = Field(None, description="Amount in variable pegs")
|
|
26
|
+
peggedJPY: Optional[float] = Field(None, description="Amount pegged to JPY")
|
|
27
|
+
peggedCHF: Optional[float] = Field(None, description="Amount pegged to CHF")
|
|
28
|
+
peggedCAD: Optional[float] = Field(None, description="Amount pegged to CAD")
|
|
29
|
+
peggedGBP: Optional[float] = Field(None, description="Amount pegged to GBP")
|
|
30
|
+
peggedAUD: Optional[float] = Field(None, description="Amount pegged to AUD")
|
|
31
|
+
peggedCNY: Optional[float] = Field(None, description="Amount pegged to CNY")
|
|
32
|
+
peggedREAL: Optional[float] = Field(
|
|
33
|
+
None, description="Amount pegged to Brazilian Real"
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class ChainData(BaseModel):
|
|
38
|
+
"""Model representing stablecoin data for a single chain."""
|
|
39
|
+
|
|
40
|
+
gecko_id: Optional[str] = Field(None, description="CoinGecko ID of the chain")
|
|
41
|
+
totalCirculatingUSD: CirculatingUSD = Field(
|
|
42
|
+
..., description="Total circulating amounts in different pegs"
|
|
43
|
+
)
|
|
44
|
+
tokenSymbol: Optional[str] = Field(None, description="Native token symbol")
|
|
45
|
+
name: str = Field(..., description="Chain name")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class FetchStablecoinChainsResponse(BaseModel):
|
|
49
|
+
"""Response schema for stablecoin chains data."""
|
|
50
|
+
|
|
51
|
+
chains: List[ChainData] = Field(
|
|
52
|
+
default_factory=list, description="List of chains with their stablecoin data"
|
|
53
|
+
)
|
|
54
|
+
error: Optional[str] = Field(None, description="Error message if any")
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class DefiLlamaFetchStablecoinChains(DefiLlamaBaseTool):
|
|
58
|
+
"""Tool for fetching stablecoin distribution across chains from DeFi Llama.
|
|
59
|
+
|
|
60
|
+
This tool retrieves data about how stablecoins are distributed across different
|
|
61
|
+
blockchain networks, including circulation amounts and token information.
|
|
62
|
+
|
|
63
|
+
Example:
|
|
64
|
+
chains_tool = DefiLlamaFetchStablecoinChains(
|
|
65
|
+
skill_store=store,
|
|
66
|
+
agent_id="agent_123",
|
|
67
|
+
agent_store=agent_store
|
|
68
|
+
)
|
|
69
|
+
result = await chains_tool._arun()
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
name: str = "defillama_fetch_stablecoin_chains"
|
|
73
|
+
description: str = FETCH_STABLECOIN_CHAINS_PROMPT
|
|
74
|
+
args_schema: None = None # No input parameters needed
|
|
75
|
+
|
|
76
|
+
async def _arun(self, config: RunnableConfig) -> FetchStablecoinChainsResponse:
|
|
77
|
+
"""Fetch stablecoin distribution data across chains.
|
|
78
|
+
|
|
79
|
+
Returns:
|
|
80
|
+
FetchStablecoinChainsResponse containing chain data or error
|
|
81
|
+
"""
|
|
82
|
+
try:
|
|
83
|
+
# Check rate limiting
|
|
84
|
+
context = self.context_from_config(config)
|
|
85
|
+
is_rate_limited, error_msg = await self.check_rate_limit(context)
|
|
86
|
+
if is_rate_limited:
|
|
87
|
+
return FetchStablecoinChainsResponse(error=error_msg)
|
|
88
|
+
|
|
89
|
+
# Fetch chains data from API
|
|
90
|
+
result = await fetch_stablecoin_chains()
|
|
91
|
+
|
|
92
|
+
# Check for API errors
|
|
93
|
+
if isinstance(result, dict) and "error" in result:
|
|
94
|
+
return FetchStablecoinChainsResponse(error=result["error"])
|
|
95
|
+
|
|
96
|
+
# Return the response matching the API structure
|
|
97
|
+
return FetchStablecoinChainsResponse(chains=result)
|
|
98
|
+
|
|
99
|
+
except Exception as e:
|
|
100
|
+
return FetchStablecoinChainsResponse(error=str(e))
|