intentkit 0.8.6.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 +10 -5
- intentkit/abstracts/skill.py +6 -144
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/__init__.py +3 -2
- intentkit/clients/cdp.py +53 -92
- intentkit/clients/twitter.py +56 -57
- intentkit/clients/web3.py +1 -3
- intentkit/config/config.py +5 -0
- intentkit/core/agent.py +16 -388
- intentkit/core/asset.py +64 -18
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +19 -20
- intentkit/core/engine.py +26 -11
- intentkit/core/node.py +2 -1
- intentkit/core/prompt.py +53 -15
- intentkit/core/scheduler.py +9 -9
- intentkit/core/statistics.py +6 -7
- intentkit/models/agent.py +256 -176
- intentkit/models/agent_data.py +62 -36
- intentkit/models/agent_schema.json +6 -9
- intentkit/models/app_setting.py +6 -6
- intentkit/models/chat.py +28 -24
- intentkit/models/conversation.py +8 -8
- intentkit/models/credit.py +62 -64
- intentkit/models/db.py +8 -7
- intentkit/models/db_mig.py +2 -2
- intentkit/models/llm.csv +15 -12
- intentkit/models/llm.py +18 -16
- intentkit/models/redis.py +2 -3
- intentkit/models/skill.py +62 -66
- intentkit/models/skills.csv +30 -26
- intentkit/models/user.py +46 -21
- intentkit/skills/acolyt/__init__.py +2 -9
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +4 -9
- intentkit/skills/aixbt/__init__.py +2 -13
- intentkit/skills/aixbt/base.py +1 -7
- intentkit/skills/aixbt/projects.py +14 -15
- intentkit/skills/allora/__init__.py +2 -9
- intentkit/skills/allora/base.py +4 -9
- intentkit/skills/allora/price.py +3 -4
- intentkit/skills/base.py +175 -52
- intentkit/skills/basename/__init__.py +4 -8
- 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/token_info_and_price.py +5 -5
- intentkit/skills/casino/__init__.py +4 -15
- intentkit/skills/casino/base.py +1 -7
- intentkit/skills/casino/deck_draw.py +5 -8
- intentkit/skills/casino/deck_shuffle.py +6 -6
- intentkit/skills/casino/dice_roll.py +2 -4
- intentkit/skills/cdp/__init__.py +3 -10
- intentkit/skills/cdp/base.py +1 -7
- intentkit/skills/cdp/schema.json +1 -17
- intentkit/skills/chainlist/__init__.py +2 -7
- intentkit/skills/chainlist/base.py +1 -7
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/common/__init__.py +2 -9
- intentkit/skills/common/base.py +1 -7
- intentkit/skills/common/current_time.py +1 -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/search_accounts.py +9 -9
- intentkit/skills/cryptocompare/__init__.py +7 -24
- intentkit/skills/cryptocompare/api.py +2 -3
- intentkit/skills/cryptocompare/base.py +10 -24
- intentkit/skills/cryptocompare/fetch_news.py +4 -5
- intentkit/skills/cryptocompare/fetch_price.py +6 -7
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
- intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
- intentkit/skills/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/dapplooker/__init__.py +2 -9
- intentkit/skills/dapplooker/base.py +4 -9
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- intentkit/skills/defillama/__init__.py +24 -74
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +8 -19
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_block.py +6 -8
- intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
- intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
- intentkit/skills/defillama/config/chains.py +1 -3
- intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
- intentkit/skills/defillama/tests/api_integration.test.py +1 -1
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
- intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
- intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
- intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
- intentkit/skills/defillama/yields/fetch_pools.py +26 -30
- intentkit/skills/dexscreener/__init__.py +97 -102
- intentkit/skills/dexscreener/base.py +125 -130
- intentkit/skills/dexscreener/get_pair_info.py +4 -5
- intentkit/skills/dexscreener/get_token_pairs.py +4 -5
- intentkit/skills/dexscreener/get_tokens_info.py +7 -8
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/search_token.py +182 -184
- intentkit/skills/dexscreener/utils.py +15 -14
- intentkit/skills/dune_analytics/__init__.py +7 -9
- intentkit/skills/dune_analytics/base.py +48 -52
- intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
- intentkit/skills/elfa/__init__.py +5 -18
- intentkit/skills/elfa/base.py +10 -14
- intentkit/skills/elfa/mention.py +19 -21
- 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 +9 -15
- intentkit/skills/enso/best_yield.py +5 -7
- intentkit/skills/enso/networks.py +3 -9
- intentkit/skills/enso/prices.py +2 -4
- intentkit/skills/enso/route.py +6 -12
- intentkit/skills/enso/tokens.py +4 -16
- intentkit/skills/enso/wallet.py +6 -6
- intentkit/skills/erc20/__init__.py +5 -11
- intentkit/skills/erc721/__init__.py +5 -9
- intentkit/skills/firecrawl/__init__.py +5 -18
- intentkit/skills/firecrawl/base.py +4 -9
- intentkit/skills/firecrawl/clear.py +4 -8
- intentkit/skills/firecrawl/crawl.py +19 -19
- intentkit/skills/firecrawl/query.py +4 -3
- intentkit/skills/firecrawl/scrape.py +17 -22
- intentkit/skills/firecrawl/utils.py +50 -42
- intentkit/skills/github/__init__.py +2 -7
- intentkit/skills/github/base.py +1 -7
- intentkit/skills/github/github_search.py +1 -2
- intentkit/skills/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/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/lifi/__init__.py +5 -10
- intentkit/skills/lifi/base.py +1 -7
- intentkit/skills/lifi/token_execute.py +14 -17
- intentkit/skills/lifi/token_quote.py +7 -9
- intentkit/skills/lifi/utils.py +16 -16
- 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/morpho/__init__.py +5 -9
- intentkit/skills/nation/__init__.py +4 -9
- intentkit/skills/nation/base.py +5 -10
- intentkit/skills/nation/nft_check.py +3 -4
- 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 +32 -0
- intentkit/skills/portfolio/__init__.py +11 -35
- intentkit/skills/portfolio/base.py +33 -19
- 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 +4 -10
- intentkit/skills/skills.toml +4 -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/send_message.py +3 -5
- intentkit/skills/supabase/__init__.py +7 -23
- intentkit/skills/supabase/base.py +1 -7
- intentkit/skills/supabase/delete_data.py +4 -4
- intentkit/skills/supabase/fetch_data.py +12 -12
- intentkit/skills/supabase/insert_data.py +4 -4
- intentkit/skills/supabase/invoke_function.py +6 -6
- intentkit/skills/supabase/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- intentkit/skills/superfluid/__init__.py +5 -9
- 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/tavily/__init__.py +3 -12
- intentkit/skills/tavily/base.py +4 -9
- 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/token_analytics.py +3 -3
- intentkit/skills/token/token_price.py +13 -13
- intentkit/skills/token/token_search.py +9 -9
- intentkit/skills/twitter/__init__.py +11 -35
- intentkit/skills/twitter/base.py +22 -34
- intentkit/skills/twitter/follow_user.py +2 -6
- intentkit/skills/twitter/get_mentions.py +5 -12
- intentkit/skills/twitter/get_timeline.py +4 -12
- intentkit/skills/twitter/get_user_by_username.py +2 -6
- intentkit/skills/twitter/get_user_tweets.py +5 -13
- intentkit/skills/twitter/like_tweet.py +2 -6
- intentkit/skills/twitter/post_tweet.py +6 -9
- intentkit/skills/twitter/reply_tweet.py +6 -9
- intentkit/skills/twitter/retweet.py +2 -6
- intentkit/skills/twitter/search_tweets.py +4 -12
- intentkit/skills/unrealspeech/__init__.py +2 -7
- intentkit/skills/unrealspeech/base.py +2 -8
- 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/venice_audio.py +7 -11
- 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/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/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 +5 -11
- intentkit/skills/wow/__init__.py +5 -11
- 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 +5 -5
- intentkit/skills/xmtp/price.py +6 -6
- intentkit/skills/xmtp/swap.py +6 -8
- intentkit/skills/xmtp/transfer.py +4 -6
- intentkit/utils/error.py +2 -2
- intentkit/utils/logging.py +2 -4
- intentkit/utils/s3.py +8 -9
- intentkit/utils/schema.py +100 -0
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +3 -4
- intentkit-0.8.17.dist-info/RECORD +466 -0
- intentkit/models/generator.py +0 -347
- intentkit-0.8.6.dev2.dist-info/RECORD +0 -457
- {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
- {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching options 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_options_overview
|
|
@@ -20,16 +18,14 @@ 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="User fees description")
|
|
22
|
+
Fees: str | None = Field(None, description="Fees description")
|
|
23
|
+
Revenue: str | None = Field(None, description="Revenue description")
|
|
24
|
+
ProtocolRevenue: str | None = Field(
|
|
27
25
|
None, description="Protocol revenue description"
|
|
28
26
|
)
|
|
29
|
-
HoldersRevenue:
|
|
30
|
-
|
|
31
|
-
)
|
|
32
|
-
SupplySideRevenue: Optional[str] = Field(
|
|
27
|
+
HoldersRevenue: str | None = Field(None, description="Holders revenue description")
|
|
28
|
+
SupplySideRevenue: str | None = Field(
|
|
33
29
|
None, description="Supply side revenue description"
|
|
34
30
|
)
|
|
35
31
|
|
|
@@ -42,23 +38,23 @@ class Protocol(BaseModel):
|
|
|
42
38
|
defillamaId: str = Field(..., description="DeFi Llama ID")
|
|
43
39
|
category: str = Field(..., description="Protocol category")
|
|
44
40
|
logo: str = Field(..., description="Logo URL")
|
|
45
|
-
chains:
|
|
41
|
+
chains: list[str] = Field(..., description="Supported chains")
|
|
46
42
|
module: str = Field(..., description="Protocol module")
|
|
47
|
-
total24h:
|
|
48
|
-
total7d:
|
|
49
|
-
total30d:
|
|
50
|
-
total1y:
|
|
51
|
-
totalAllTime:
|
|
52
|
-
change_1d:
|
|
53
|
-
change_7d:
|
|
54
|
-
change_1m:
|
|
55
|
-
methodology:
|
|
43
|
+
total24h: float | None = Field(None, description="24-hour total")
|
|
44
|
+
total7d: float | None = Field(None, description="7-day total")
|
|
45
|
+
total30d: float | None = Field(None, description="30-day total")
|
|
46
|
+
total1y: float | None = Field(None, description="1-year total")
|
|
47
|
+
totalAllTime: float | None = Field(None, description="All-time total")
|
|
48
|
+
change_1d: float | None = Field(None, description="24-hour change percentage")
|
|
49
|
+
change_7d: float | None = Field(None, description="7-day change percentage")
|
|
50
|
+
change_1m: float | None = Field(None, description="30-day change percentage")
|
|
51
|
+
methodology: ProtocolMethodology | None = Field(
|
|
56
52
|
None, description="Protocol methodology"
|
|
57
53
|
)
|
|
58
|
-
breakdown24h:
|
|
54
|
+
breakdown24h: dict[str, dict[str, float]] | None = Field(
|
|
59
55
|
None, description="24-hour breakdown by chain"
|
|
60
56
|
)
|
|
61
|
-
breakdown30d:
|
|
57
|
+
breakdown30d: dict[str, dict[str, float]] | None = Field(
|
|
62
58
|
None, description="30-day breakdown by chain"
|
|
63
59
|
)
|
|
64
60
|
|
|
@@ -73,9 +69,9 @@ class FetchOptionsOverviewResponse(BaseModel):
|
|
|
73
69
|
change_1d: float = Field(..., description="24-hour change percentage")
|
|
74
70
|
change_7d: float = Field(..., description="7-day change percentage")
|
|
75
71
|
change_1m: float = Field(..., description="30-day change percentage")
|
|
76
|
-
allChains:
|
|
77
|
-
protocols:
|
|
78
|
-
error:
|
|
72
|
+
allChains: list[str] = Field(..., description="List of all chains")
|
|
73
|
+
protocols: list[Protocol] = Field(..., description="List of protocols")
|
|
74
|
+
error: str | None = Field(None, description="Error message if any")
|
|
79
75
|
|
|
80
76
|
|
|
81
77
|
class DefiLlamaFetchOptionsOverview(DefiLlamaBaseTool):
|
|
@@ -86,9 +82,9 @@ class DefiLlamaFetchOptionsOverview(DefiLlamaBaseTool):
|
|
|
86
82
|
|
|
87
83
|
Example:
|
|
88
84
|
overview_tool = DefiLlamaFetchOptionsOverview(
|
|
89
|
-
|
|
85
|
+
,
|
|
90
86
|
agent_id="agent_123",
|
|
91
|
-
|
|
87
|
+
agent=agent
|
|
92
88
|
)
|
|
93
89
|
result = await overview_tool._arun()
|
|
94
90
|
"""
|
|
@@ -101,7 +97,7 @@ class DefiLlamaFetchOptionsOverview(DefiLlamaBaseTool):
|
|
|
101
97
|
|
|
102
98
|
pass
|
|
103
99
|
|
|
104
|
-
args_schema:
|
|
100
|
+
args_schema: type[BaseModel] = EmptyArgsSchema
|
|
105
101
|
|
|
106
102
|
async def _arun(self, **kwargs) -> FetchOptionsOverviewResponse:
|
|
107
103
|
"""Fetch overview data for all options protocols.
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"""Tool for fetching pool chart data via DeFi Llama API."""
|
|
2
2
|
|
|
3
|
-
from typing import List, Optional, Type
|
|
4
|
-
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
6
4
|
|
|
7
5
|
from intentkit.skills.defillama.api import fetch_pool_chart
|
|
@@ -23,11 +21,11 @@ class PoolDataPoint(BaseModel):
|
|
|
23
21
|
|
|
24
22
|
timestamp: str = Field(..., description="ISO formatted timestamp of the data point")
|
|
25
23
|
tvlUsd: float = Field(..., description="Total Value Locked in USD")
|
|
26
|
-
apy:
|
|
27
|
-
apyBase:
|
|
28
|
-
apyReward:
|
|
29
|
-
il7d:
|
|
30
|
-
apyBase7d:
|
|
24
|
+
apy: float | None = Field(None, description="Total APY including rewards")
|
|
25
|
+
apyBase: float | None = Field(None, description="Base APY without rewards")
|
|
26
|
+
apyReward: float | None = Field(None, description="Additional APY from rewards")
|
|
27
|
+
il7d: float | None = Field(None, description="7-day impermanent loss")
|
|
28
|
+
apyBase7d: float | None = Field(None, description="7-day base APY")
|
|
31
29
|
|
|
32
30
|
|
|
33
31
|
class FetchPoolChartInput(BaseModel):
|
|
@@ -40,10 +38,10 @@ class FetchPoolChartResponse(BaseModel):
|
|
|
40
38
|
"""Response schema for pool chart data."""
|
|
41
39
|
|
|
42
40
|
status: str = Field("success", description="Response status")
|
|
43
|
-
data:
|
|
41
|
+
data: list[PoolDataPoint] = Field(
|
|
44
42
|
default_factory=list, description="List of historical data points"
|
|
45
43
|
)
|
|
46
|
-
error:
|
|
44
|
+
error: str | None = Field(None, description="Error message if any")
|
|
47
45
|
|
|
48
46
|
|
|
49
47
|
class DefiLlamaFetchPoolChart(DefiLlamaBaseTool):
|
|
@@ -54,9 +52,9 @@ class DefiLlamaFetchPoolChart(DefiLlamaBaseTool):
|
|
|
54
52
|
|
|
55
53
|
Example:
|
|
56
54
|
chart_tool = DefiLlamaFetchPoolChart(
|
|
57
|
-
|
|
55
|
+
,
|
|
58
56
|
agent_id="agent_123",
|
|
59
|
-
|
|
57
|
+
agent=agent
|
|
60
58
|
)
|
|
61
59
|
result = await chart_tool._arun(
|
|
62
60
|
pool_id="747c1d2a-c668-4682-b9f9-296708a3dd90"
|
|
@@ -65,7 +63,7 @@ class DefiLlamaFetchPoolChart(DefiLlamaBaseTool):
|
|
|
65
63
|
|
|
66
64
|
name: str = "defillama_fetch_pool_chart"
|
|
67
65
|
description: str = FETCH_POOL_CHART_PROMPT
|
|
68
|
-
args_schema:
|
|
66
|
+
args_schema: type[BaseModel] = FetchPoolChartInput
|
|
69
67
|
|
|
70
68
|
async def _arun(self, pool_id: str) -> FetchPoolChartResponse:
|
|
71
69
|
"""Fetch historical chart data for the given pool.
|
|
@@ -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
|
"""
|
|
@@ -1,102 +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
|
-
from intentkit.skills.dexscreener.
|
|
9
|
-
from intentkit.skills.dexscreener.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
logger.warning(f"Unknown Dexscreener skill: {name}")
|
|
99
|
-
return None
|
|
100
|
-
|
|
101
|
-
_cache[name] = skill_class(skill_store=store)
|
|
102
|
-
return _cache[name]
|
|
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]
|