intentkit 0.7.5.dev3__py3-none-any.whl → 0.8.34.dev7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- intentkit/MANIFEST.in +14 -0
- intentkit/README.md +88 -0
- intentkit/__init__.py +6 -4
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +15 -8
- intentkit/abstracts/skill.py +6 -144
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/__init__.py +9 -2
- intentkit/clients/cdp.py +129 -153
- intentkit/{utils → clients}/s3.py +109 -34
- intentkit/clients/twitter.py +83 -62
- intentkit/clients/web3.py +4 -7
- intentkit/config/config.py +123 -90
- intentkit/core/account_checking.py +802 -0
- intentkit/core/agent.py +313 -498
- intentkit/core/asset.py +267 -0
- intentkit/core/chat.py +5 -3
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +49 -41
- intentkit/core/draft.py +201 -0
- intentkit/core/draft_chat.py +118 -0
- intentkit/core/engine.py +378 -287
- intentkit/core/manager/__init__.py +25 -0
- intentkit/core/manager/engine.py +220 -0
- intentkit/core/manager/service.py +172 -0
- intentkit/core/manager/skills.py +178 -0
- intentkit/core/middleware.py +231 -0
- intentkit/core/prompt.py +74 -114
- intentkit/core/scheduler.py +143 -0
- intentkit/core/statistics.py +168 -0
- intentkit/models/agent.py +931 -518
- intentkit/models/agent_data.py +165 -106
- intentkit/models/agent_schema.json +38 -251
- intentkit/models/app_setting.py +15 -13
- intentkit/models/chat.py +86 -140
- intentkit/models/credit.py +182 -162
- intentkit/models/db.py +42 -23
- intentkit/models/db_mig.py +120 -3
- intentkit/models/draft.py +222 -0
- intentkit/models/llm.csv +31 -0
- intentkit/models/llm.py +262 -370
- intentkit/models/redis.py +6 -4
- intentkit/models/skill.py +222 -101
- intentkit/models/skills.csv +173 -0
- intentkit/models/team.py +189 -0
- intentkit/models/user.py +103 -31
- intentkit/skills/acolyt/__init__.py +2 -9
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +4 -9
- intentkit/skills/acolyt/schema.json +4 -3
- intentkit/skills/aixbt/__init__.py +2 -13
- intentkit/skills/aixbt/base.py +1 -7
- intentkit/skills/aixbt/projects.py +14 -15
- intentkit/skills/aixbt/schema.json +4 -4
- intentkit/skills/allora/__init__.py +2 -9
- intentkit/skills/allora/base.py +4 -9
- intentkit/skills/allora/price.py +3 -4
- intentkit/skills/allora/schema.json +3 -2
- intentkit/skills/base.py +241 -41
- intentkit/skills/basename/__init__.py +51 -0
- intentkit/skills/basename/base.py +11 -0
- intentkit/skills/basename/basename.svg +11 -0
- intentkit/skills/basename/schema.json +58 -0
- intentkit/skills/carv/__init__.py +115 -121
- intentkit/skills/carv/base.py +184 -185
- intentkit/skills/carv/fetch_news.py +3 -3
- intentkit/skills/carv/onchain_query.py +4 -4
- intentkit/skills/carv/schema.json +134 -137
- intentkit/skills/carv/token_info_and_price.py +6 -6
- intentkit/skills/casino/__init__.py +4 -15
- intentkit/skills/casino/base.py +1 -7
- intentkit/skills/casino/deck_draw.py +5 -8
- intentkit/skills/casino/deck_shuffle.py +6 -6
- intentkit/skills/casino/dice_roll.py +2 -4
- intentkit/skills/casino/schema.json +0 -1
- intentkit/skills/cdp/__init__.py +22 -84
- intentkit/skills/cdp/base.py +1 -7
- intentkit/skills/cdp/schema.json +11 -314
- intentkit/skills/chainlist/__init__.py +2 -7
- intentkit/skills/chainlist/base.py +1 -7
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/chainlist/schema.json +3 -5
- intentkit/skills/common/__init__.py +2 -9
- intentkit/skills/common/base.py +1 -7
- intentkit/skills/common/current_time.py +1 -2
- intentkit/skills/common/schema.json +2 -2
- intentkit/skills/cookiefun/__init__.py +6 -9
- intentkit/skills/cookiefun/base.py +2 -7
- intentkit/skills/cookiefun/get_account_details.py +7 -7
- intentkit/skills/cookiefun/get_account_feed.py +19 -19
- intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
- intentkit/skills/cookiefun/get_sectors.py +3 -3
- intentkit/skills/cookiefun/schema.json +1 -3
- intentkit/skills/cookiefun/search_accounts.py +9 -9
- intentkit/skills/cryptocompare/__init__.py +7 -24
- intentkit/skills/cryptocompare/api.py +2 -3
- intentkit/skills/cryptocompare/base.py +10 -24
- intentkit/skills/cryptocompare/fetch_news.py +4 -5
- intentkit/skills/cryptocompare/fetch_price.py +6 -7
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
- intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
- intentkit/skills/cryptocompare/schema.json +3 -3
- intentkit/skills/cryptopanic/__init__.py +7 -10
- intentkit/skills/cryptopanic/base.py +51 -55
- intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
- intentkit/skills/cryptopanic/schema.json +105 -103
- intentkit/skills/dapplooker/__init__.py +2 -9
- intentkit/skills/dapplooker/base.py +4 -9
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- intentkit/skills/dapplooker/schema.json +3 -5
- intentkit/skills/defillama/__init__.py +24 -74
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +8 -19
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_block.py +6 -8
- intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
- intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
- intentkit/skills/defillama/config/chains.py +1 -3
- intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
- intentkit/skills/defillama/schema.json +5 -1
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
- intentkit/skills/defillama/tests/api_integration.test.py +1 -1
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
- intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
- intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
- intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
- intentkit/skills/defillama/yields/fetch_pools.py +26 -30
- intentkit/skills/dexscreener/__init__.py +97 -102
- intentkit/skills/dexscreener/base.py +125 -130
- intentkit/skills/dexscreener/get_pair_info.py +4 -5
- intentkit/skills/dexscreener/get_token_pairs.py +4 -5
- intentkit/skills/dexscreener/get_tokens_info.py +7 -8
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/schema.json +91 -93
- intentkit/skills/dexscreener/search_token.py +182 -184
- intentkit/skills/dexscreener/utils.py +15 -14
- intentkit/skills/dune_analytics/__init__.py +7 -9
- intentkit/skills/dune_analytics/base.py +48 -52
- intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
- intentkit/skills/dune_analytics/schema.json +104 -99
- intentkit/skills/elfa/__init__.py +5 -18
- intentkit/skills/elfa/base.py +10 -14
- intentkit/skills/elfa/mention.py +19 -21
- intentkit/skills/elfa/schema.json +3 -2
- intentkit/skills/elfa/stats.py +4 -4
- intentkit/skills/elfa/tokens.py +12 -12
- intentkit/skills/elfa/utils.py +26 -28
- intentkit/skills/enso/__init__.py +11 -31
- intentkit/skills/enso/base.py +54 -35
- intentkit/skills/enso/best_yield.py +16 -24
- intentkit/skills/enso/networks.py +6 -11
- intentkit/skills/enso/prices.py +11 -13
- intentkit/skills/enso/route.py +34 -38
- intentkit/skills/enso/schema.json +3 -2
- intentkit/skills/enso/tokens.py +29 -38
- intentkit/skills/enso/wallet.py +76 -191
- intentkit/skills/erc20/__init__.py +50 -0
- intentkit/skills/erc20/base.py +11 -0
- intentkit/skills/erc20/erc20.svg +5 -0
- intentkit/skills/erc20/schema.json +74 -0
- intentkit/skills/erc721/__init__.py +53 -0
- intentkit/skills/erc721/base.py +11 -0
- intentkit/skills/erc721/erc721.svg +5 -0
- intentkit/skills/erc721/schema.json +90 -0
- intentkit/skills/firecrawl/__init__.py +5 -18
- intentkit/skills/firecrawl/base.py +4 -9
- intentkit/skills/firecrawl/clear.py +4 -8
- intentkit/skills/firecrawl/crawl.py +19 -19
- intentkit/skills/firecrawl/query.py +4 -3
- intentkit/skills/firecrawl/schema.json +2 -6
- intentkit/skills/firecrawl/scrape.py +17 -22
- intentkit/skills/firecrawl/utils.py +50 -42
- intentkit/skills/github/__init__.py +2 -7
- intentkit/skills/github/base.py +1 -7
- intentkit/skills/github/github_search.py +1 -2
- intentkit/skills/github/schema.json +3 -4
- intentkit/skills/heurist/__init__.py +8 -27
- intentkit/skills/heurist/base.py +4 -9
- intentkit/skills/heurist/image_generation_animagine_xl.py +13 -15
- intentkit/skills/heurist/image_generation_arthemy_comics.py +13 -15
- intentkit/skills/heurist/image_generation_arthemy_real.py +13 -15
- intentkit/skills/heurist/image_generation_braindance.py +13 -15
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +13 -15
- intentkit/skills/heurist/image_generation_flux_1_dev.py +13 -15
- intentkit/skills/heurist/image_generation_sdxl.py +13 -15
- intentkit/skills/heurist/schema.json +2 -2
- intentkit/skills/http/__init__.py +4 -15
- intentkit/skills/http/base.py +1 -7
- intentkit/skills/http/get.py +21 -16
- intentkit/skills/http/post.py +23 -18
- intentkit/skills/http/put.py +23 -18
- intentkit/skills/http/schema.json +4 -5
- intentkit/skills/lifi/__init__.py +8 -13
- intentkit/skills/lifi/base.py +3 -9
- intentkit/skills/lifi/schema.json +17 -8
- intentkit/skills/lifi/token_execute.py +150 -60
- intentkit/skills/lifi/token_quote.py +8 -10
- intentkit/skills/lifi/utils.py +104 -51
- intentkit/skills/moralis/__init__.py +6 -10
- intentkit/skills/moralis/api.py +6 -7
- intentkit/skills/moralis/base.py +5 -10
- intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
- intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
- intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
- intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
- intentkit/skills/moralis/schema.json +7 -2
- intentkit/skills/morpho/__init__.py +52 -0
- intentkit/skills/morpho/base.py +11 -0
- intentkit/skills/morpho/morpho.svg +12 -0
- intentkit/skills/morpho/schema.json +73 -0
- intentkit/skills/nation/__init__.py +4 -9
- intentkit/skills/nation/base.py +5 -10
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/nation/schema.json +4 -3
- intentkit/skills/onchain.py +30 -0
- intentkit/skills/openai/__init__.py +17 -18
- intentkit/skills/openai/base.py +10 -14
- intentkit/skills/openai/dalle_image_generation.py +4 -9
- intentkit/skills/openai/gpt_avatar_generator.py +102 -0
- intentkit/skills/openai/gpt_image_generation.py +5 -9
- intentkit/skills/openai/gpt_image_mini_generator.py +92 -0
- intentkit/skills/openai/gpt_image_to_image.py +5 -9
- intentkit/skills/openai/image_to_text.py +3 -7
- intentkit/skills/openai/schema.json +34 -3
- intentkit/skills/portfolio/__init__.py +11 -35
- intentkit/skills/portfolio/base.py +33 -19
- intentkit/skills/portfolio/schema.json +3 -5
- intentkit/skills/portfolio/token_balances.py +21 -21
- intentkit/skills/portfolio/wallet_approvals.py +17 -18
- intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
- intentkit/skills/portfolio/wallet_history.py +31 -31
- intentkit/skills/portfolio/wallet_net_worth.py +13 -13
- intentkit/skills/portfolio/wallet_nfts.py +19 -19
- intentkit/skills/portfolio/wallet_profitability.py +18 -18
- intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
- intentkit/skills/portfolio/wallet_stats.py +3 -3
- intentkit/skills/portfolio/wallet_swaps.py +19 -19
- intentkit/skills/pyth/__init__.py +50 -0
- intentkit/skills/pyth/base.py +11 -0
- intentkit/skills/pyth/pyth.svg +6 -0
- intentkit/skills/pyth/schema.json +75 -0
- intentkit/skills/skills.toml +36 -0
- intentkit/skills/slack/__init__.py +5 -17
- intentkit/skills/slack/base.py +3 -9
- intentkit/skills/slack/get_channel.py +8 -8
- intentkit/skills/slack/get_message.py +9 -9
- intentkit/skills/slack/schedule_message.py +5 -5
- intentkit/skills/slack/schema.json +2 -2
- intentkit/skills/slack/send_message.py +3 -5
- intentkit/skills/supabase/__init__.py +7 -23
- intentkit/skills/supabase/base.py +1 -7
- intentkit/skills/supabase/delete_data.py +4 -4
- intentkit/skills/supabase/fetch_data.py +12 -12
- intentkit/skills/supabase/insert_data.py +4 -4
- intentkit/skills/supabase/invoke_function.py +6 -6
- intentkit/skills/supabase/schema.json +2 -3
- intentkit/skills/supabase/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- intentkit/skills/superfluid/__init__.py +53 -0
- intentkit/skills/superfluid/base.py +11 -0
- intentkit/skills/superfluid/schema.json +89 -0
- intentkit/skills/superfluid/superfluid.svg +6 -0
- intentkit/skills/system/__init__.py +7 -24
- intentkit/skills/system/add_autonomous_task.py +10 -12
- intentkit/skills/system/delete_autonomous_task.py +2 -2
- intentkit/skills/system/edit_autonomous_task.py +14 -18
- intentkit/skills/system/list_autonomous_tasks.py +3 -5
- intentkit/skills/system/read_agent_api_key.py +6 -4
- intentkit/skills/system/regenerate_agent_api_key.py +6 -4
- intentkit/skills/system/schema.json +6 -8
- intentkit/skills/tavily/__init__.py +3 -12
- intentkit/skills/tavily/base.py +4 -9
- intentkit/skills/tavily/schema.json +3 -5
- intentkit/skills/tavily/tavily_extract.py +2 -4
- intentkit/skills/tavily/tavily_search.py +4 -6
- intentkit/skills/token/__init__.py +5 -10
- intentkit/skills/token/base.py +7 -11
- intentkit/skills/token/erc20_transfers.py +19 -19
- intentkit/skills/token/schema.json +3 -6
- intentkit/skills/token/token_analytics.py +3 -3
- intentkit/skills/token/token_price.py +13 -13
- intentkit/skills/token/token_search.py +9 -9
- intentkit/skills/twitter/__init__.py +11 -35
- intentkit/skills/twitter/base.py +22 -34
- intentkit/skills/twitter/follow_user.py +2 -6
- intentkit/skills/twitter/get_mentions.py +5 -12
- intentkit/skills/twitter/get_timeline.py +4 -12
- intentkit/skills/twitter/get_user_by_username.py +2 -6
- intentkit/skills/twitter/get_user_tweets.py +5 -13
- intentkit/skills/twitter/like_tweet.py +2 -6
- intentkit/skills/twitter/post_tweet.py +6 -9
- intentkit/skills/twitter/reply_tweet.py +6 -9
- intentkit/skills/twitter/retweet.py +2 -6
- intentkit/skills/twitter/schema.json +1 -0
- intentkit/skills/twitter/search_tweets.py +4 -12
- intentkit/skills/unrealspeech/__init__.py +2 -7
- intentkit/skills/unrealspeech/base.py +2 -8
- intentkit/skills/unrealspeech/schema.json +2 -5
- intentkit/skills/unrealspeech/text_to_speech.py +8 -8
- intentkit/skills/venice_audio/__init__.py +98 -106
- intentkit/skills/venice_audio/base.py +117 -121
- intentkit/skills/venice_audio/input.py +41 -41
- intentkit/skills/venice_audio/schema.json +151 -152
- intentkit/skills/venice_audio/venice_audio.py +38 -21
- intentkit/skills/venice_image/__init__.py +147 -154
- intentkit/skills/venice_image/api.py +138 -138
- intentkit/skills/venice_image/base.py +185 -192
- intentkit/skills/venice_image/config.py +33 -35
- intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- intentkit/skills/venice_image/image_generation/image_generation_base.py +11 -10
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
- intentkit/skills/venice_image/schema.json +267 -267
- intentkit/skills/venice_image/utils.py +77 -78
- intentkit/skills/web_scraper/__init__.py +5 -18
- intentkit/skills/web_scraper/base.py +21 -7
- intentkit/skills/web_scraper/document_indexer.py +7 -6
- intentkit/skills/web_scraper/schema.json +2 -6
- intentkit/skills/web_scraper/scrape_and_index.py +15 -15
- intentkit/skills/web_scraper/utils.py +62 -63
- intentkit/skills/web_scraper/website_indexer.py +17 -19
- intentkit/skills/weth/__init__.py +49 -0
- intentkit/skills/weth/base.py +11 -0
- intentkit/skills/weth/schema.json +58 -0
- intentkit/skills/weth/weth.svg +6 -0
- intentkit/skills/wow/__init__.py +51 -0
- intentkit/skills/wow/base.py +11 -0
- intentkit/skills/wow/schema.json +89 -0
- intentkit/skills/wow/wow.svg +7 -0
- intentkit/skills/x402/__init__.py +58 -0
- intentkit/skills/x402/base.py +99 -0
- intentkit/skills/x402/http_request.py +117 -0
- intentkit/skills/x402/schema.json +40 -0
- intentkit/skills/x402/x402.webp +0 -0
- intentkit/skills/xmtp/__init__.py +4 -15
- intentkit/skills/xmtp/base.py +5 -5
- intentkit/skills/xmtp/price.py +7 -6
- intentkit/skills/xmtp/schema.json +69 -71
- intentkit/skills/xmtp/swap.py +6 -8
- intentkit/skills/xmtp/transfer.py +4 -6
- intentkit/utils/__init__.py +4 -0
- intentkit/utils/chain.py +198 -96
- intentkit/utils/ens.py +135 -0
- intentkit/utils/error.py +5 -2
- intentkit/utils/logging.py +9 -11
- intentkit/utils/schema.py +100 -0
- intentkit/utils/slack_alert.py +8 -8
- intentkit/utils/tx.py +16 -8
- intentkit/uv.lock +3377 -0
- {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/METADATA +13 -15
- intentkit-0.8.34.dev7.dist-info/RECORD +478 -0
- intentkit-0.8.34.dev7.dist-info/licenses/LICENSE +21 -0
- intentkit/core/node.py +0 -215
- intentkit/models/conversation.py +0 -286
- intentkit/models/generator.py +0 -347
- intentkit/skills/cdp/get_balance.py +0 -110
- intentkit/skills/cdp/swap.py +0 -121
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +0 -511
- intentkit-0.7.5.dev3.dist-info/RECORD +0 -424
- {intentkit-0.7.5.dev3.dist-info/licenses → intentkit}/LICENSE +0 -0
- {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/WHEEL +0 -0
|
@@ -1,103 +1,105 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"type": "object",
|
|
4
|
-
"title": "CryptoPanic",
|
|
5
|
-
"description": "CryptoPanic is a news aggregator platform indicating impact on price and market for traders and cryptocurrency enthusiasts.",
|
|
6
|
-
"x-icon": "https://ai.service.crestal.dev/skills/cryptopanic/cryptopanic.png",
|
|
7
|
-
"x-tags": [
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
"
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
"
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"title": "CryptoPanic",
|
|
5
|
+
"description": "CryptoPanic is a news aggregator platform indicating impact on price and market for traders and cryptocurrency enthusiasts.",
|
|
6
|
+
"x-icon": "https://ai.service.crestal.dev/skills/cryptopanic/cryptopanic.png",
|
|
7
|
+
"x-tags": [
|
|
8
|
+
"Analytics",
|
|
9
|
+
"Crypto",
|
|
10
|
+
"Knowledge Base"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"enabled": {
|
|
14
|
+
"type": "boolean",
|
|
15
|
+
"title": "Enabled",
|
|
16
|
+
"description": "Whether this skill is enabled",
|
|
17
|
+
"default": false
|
|
18
|
+
},
|
|
19
|
+
"states": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"properties": {
|
|
22
|
+
"fetch_crypto_sentiment": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"title": "Fetch Crypto Sentiment",
|
|
25
|
+
"enum": [
|
|
26
|
+
"disabled",
|
|
27
|
+
"public",
|
|
28
|
+
"private"
|
|
29
|
+
],
|
|
30
|
+
"x-enum-title": [
|
|
31
|
+
"Disabled",
|
|
32
|
+
"Agent Owner + All Users",
|
|
33
|
+
"Agent Owner Only"
|
|
34
|
+
],
|
|
35
|
+
"default": "disabled",
|
|
36
|
+
"description": "Fetches recent CryptoPanic posts and defines market sentiment via LLM analysis."
|
|
37
|
+
},
|
|
38
|
+
"fetch_crypto_news": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"title": "Fetch Crypto News",
|
|
41
|
+
"enum": [
|
|
42
|
+
"disabled",
|
|
43
|
+
"public",
|
|
44
|
+
"private"
|
|
45
|
+
],
|
|
46
|
+
"x-enum-title": [
|
|
47
|
+
"Disabled",
|
|
48
|
+
"Agent Owner + All Users",
|
|
49
|
+
"Agent Owner Only"
|
|
50
|
+
],
|
|
51
|
+
"default": "disabled",
|
|
52
|
+
"description": "Fetches latest crypto market news from CryptoPanic across all filters."
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"description": "States for each CryptoPanic skill (disabled, public, or private)"
|
|
56
|
+
},
|
|
57
|
+
"api_key_provider": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"title": "API Key Provider",
|
|
60
|
+
"description": "Provider of the API key for AIXBT API service",
|
|
61
|
+
"enum": [
|
|
62
|
+
"agent_owner"
|
|
63
|
+
],
|
|
64
|
+
"x-enum-title": [
|
|
65
|
+
"Owner Provided"
|
|
66
|
+
],
|
|
67
|
+
"default": "agent_owner"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"required": [
|
|
71
|
+
"states",
|
|
72
|
+
"enabled"
|
|
73
|
+
],
|
|
74
|
+
"if": {
|
|
75
|
+
"properties": {
|
|
76
|
+
"api_key_provider": {
|
|
77
|
+
"const": "agent_owner"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"then": {
|
|
82
|
+
"properties": {
|
|
83
|
+
"api_key": {
|
|
84
|
+
"type": "string",
|
|
85
|
+
"title": "CryptoPanic API Key",
|
|
86
|
+
"x-link": "[Get your API key](https://cryptopanic.com/developers/api/keys)",
|
|
87
|
+
"x-sensitive": true,
|
|
88
|
+
"description": "API key for accessing CryptoPanic API"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"if": {
|
|
92
|
+
"properties": {
|
|
93
|
+
"enabled": {
|
|
94
|
+
"const": true
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"then": {
|
|
99
|
+
"required": [
|
|
100
|
+
"api_key"
|
|
101
|
+
]
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"additionalProperties": true
|
|
105
|
+
}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import NotRequired, TypedDict
|
|
5
5
|
|
|
6
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
7
6
|
from intentkit.skills.base import SkillConfig, SkillState
|
|
8
7
|
from intentkit.skills.dapplooker.base import DappLookerBaseTool
|
|
9
8
|
from intentkit.skills.dapplooker.dapplooker_token_data import DappLookerTokenData
|
|
@@ -28,7 +27,6 @@ class Config(SkillConfig):
|
|
|
28
27
|
async def get_skills(
|
|
29
28
|
config: "Config",
|
|
30
29
|
is_private: bool,
|
|
31
|
-
store: SkillStoreABC,
|
|
32
30
|
**_,
|
|
33
31
|
) -> list[DappLookerBaseTool]:
|
|
34
32
|
"""Get all DappLooker skills.
|
|
@@ -36,7 +34,6 @@ async def get_skills(
|
|
|
36
34
|
Args:
|
|
37
35
|
config: The configuration for DappLooker skills.
|
|
38
36
|
is_private: Whether to include private skills.
|
|
39
|
-
store: The skill store for persisting data.
|
|
40
37
|
|
|
41
38
|
Returns:
|
|
42
39
|
A list of DappLooker skills.
|
|
@@ -53,7 +50,7 @@ async def get_skills(
|
|
|
53
50
|
# Get each skill using the cached getter
|
|
54
51
|
result = []
|
|
55
52
|
for name in available_skills:
|
|
56
|
-
skill = get_dapplooker_skill(name
|
|
53
|
+
skill = get_dapplooker_skill(name)
|
|
57
54
|
if skill:
|
|
58
55
|
result.append(skill)
|
|
59
56
|
return result
|
|
@@ -61,22 +58,18 @@ async def get_skills(
|
|
|
61
58
|
|
|
62
59
|
def get_dapplooker_skill(
|
|
63
60
|
name: str,
|
|
64
|
-
store: SkillStoreABC,
|
|
65
61
|
) -> DappLookerBaseTool:
|
|
66
62
|
"""Get a DappLooker skill by name.
|
|
67
63
|
|
|
68
64
|
Args:
|
|
69
65
|
name: The name of the skill to get
|
|
70
|
-
store: The skill store for persisting data
|
|
71
66
|
|
|
72
67
|
Returns:
|
|
73
68
|
The requested DappLooker skill
|
|
74
69
|
"""
|
|
75
70
|
if name == "dapplooker_token_data":
|
|
76
71
|
if name not in _cache:
|
|
77
|
-
_cache[name] = DappLookerTokenData(
|
|
78
|
-
skill_store=store,
|
|
79
|
-
)
|
|
72
|
+
_cache[name] = DappLookerTokenData()
|
|
80
73
|
return _cache[name]
|
|
81
74
|
else:
|
|
82
75
|
logger.warning(f"Unknown DappLooker skill: {name}")
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
from langchain.tools.base import ToolException
|
|
1
|
+
from langchain_core.tools.base import ToolException
|
|
4
2
|
from pydantic import BaseModel, Field
|
|
5
3
|
|
|
6
|
-
from intentkit.
|
|
4
|
+
from intentkit.config.config import config
|
|
7
5
|
from intentkit.skills.base import IntentKitSkill
|
|
8
6
|
|
|
9
7
|
|
|
@@ -12,17 +10,14 @@ class DappLookerBaseTool(IntentKitSkill):
|
|
|
12
10
|
|
|
13
11
|
name: str = Field(description="The name of the tool")
|
|
14
12
|
description: str = Field(description="A description of what the tool does")
|
|
15
|
-
args_schema:
|
|
16
|
-
skill_store: SkillStoreABC = Field(
|
|
17
|
-
description="The skill store for persisting data"
|
|
18
|
-
)
|
|
13
|
+
args_schema: type[BaseModel]
|
|
19
14
|
|
|
20
15
|
def get_api_key(self) -> str:
|
|
21
16
|
context = self.get_context()
|
|
22
17
|
skill_config = context.agent.skill_config(self.category)
|
|
23
18
|
api_key_provider = skill_config.get("api_key_provider")
|
|
24
19
|
if api_key_provider == "platform":
|
|
25
|
-
return
|
|
20
|
+
return config.dapplooker_api_key
|
|
26
21
|
# for backward compatibility, may only have api_key in skill_config
|
|
27
22
|
elif skill_config.get("api_key"):
|
|
28
23
|
return skill_config.get("api_key")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
|
-
from typing import Any
|
|
3
|
+
from typing import Any
|
|
4
4
|
|
|
5
5
|
import httpx
|
|
6
6
|
from pydantic import BaseModel, Field
|
|
@@ -13,12 +13,12 @@ logger = logging.getLogger(__name__)
|
|
|
13
13
|
class DappLookerTokenDataInput(BaseModel):
|
|
14
14
|
"""Input for DappLooker token data tool."""
|
|
15
15
|
|
|
16
|
-
token_tickers:
|
|
16
|
+
token_tickers: str | None = Field(
|
|
17
17
|
description="Comma-separated list of AI agent token tickers (e.g., 'aixbt,vader'). "
|
|
18
18
|
"Either token_tickers or token_addresses must be provided.",
|
|
19
19
|
default=None,
|
|
20
20
|
)
|
|
21
|
-
token_addresses:
|
|
21
|
+
token_addresses: str | None = Field(
|
|
22
22
|
description="Comma-separated list of AI agent token contract addresses (e.g., '0x4F9Fd6Be4a90f2620860d680c0d4d5Fb53d1A825'). "
|
|
23
23
|
"Either token_tickers or token_addresses must be provided.",
|
|
24
24
|
default=None,
|
|
@@ -50,12 +50,12 @@ class DappLookerTokenData(DappLookerBaseTool):
|
|
|
50
50
|
"Note that this tool is specialized for AI agent tokens and may not return data for general cryptocurrencies like ETH, BTC, or SOL.\n"
|
|
51
51
|
"Either token_tickers or token_addresses must be provided."
|
|
52
52
|
)
|
|
53
|
-
args_schema:
|
|
53
|
+
args_schema: type[BaseModel] = DappLookerTokenDataInput
|
|
54
54
|
|
|
55
55
|
async def _arun(
|
|
56
56
|
self,
|
|
57
|
-
token_tickers:
|
|
58
|
-
token_addresses:
|
|
57
|
+
token_tickers: str | None = None,
|
|
58
|
+
token_addresses: str | None = None,
|
|
59
59
|
chain: str = "base",
|
|
60
60
|
**kwargs,
|
|
61
61
|
) -> str:
|
|
@@ -205,7 +205,7 @@ class DappLookerTokenData(DappLookerBaseTool):
|
|
|
205
205
|
"An error occurred while retrieving token data. Please try again later."
|
|
206
206
|
)
|
|
207
207
|
|
|
208
|
-
def _format_token_data(self, data:
|
|
208
|
+
def _format_token_data(self, data: list[dict[str, Any]]) -> str:
|
|
209
209
|
"""Format the token data for display.
|
|
210
210
|
|
|
211
211
|
Args:
|
|
@@ -5,17 +5,15 @@
|
|
|
5
5
|
"description": "Retrieve comprehensive market data and analytics for AI agent tokens using DappLooker. This API specializes in AI-focused crypto projects and may not provide data for general cryptocurrencies like BTC or ETH.",
|
|
6
6
|
"x-icon": "https://ai.service.crestal.dev/skills/dapplooker/dapplooker.jpg",
|
|
7
7
|
"x-tags": [
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
"Token Metrics",
|
|
11
|
-
"AI Agents"
|
|
8
|
+
"Analytics",
|
|
9
|
+
"Crypto"
|
|
12
10
|
],
|
|
13
11
|
"properties": {
|
|
14
12
|
"enabled": {
|
|
15
13
|
"type": "boolean",
|
|
16
14
|
"title": "Enabled",
|
|
17
15
|
"description": "Whether this skill is enabled",
|
|
18
|
-
"default":
|
|
16
|
+
"default": false
|
|
19
17
|
},
|
|
20
18
|
"states": {
|
|
21
19
|
"type": "object",
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import TypedDict
|
|
5
5
|
|
|
6
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
7
6
|
from intentkit.skills.base import SkillConfig, SkillState
|
|
8
7
|
from intentkit.skills.defillama.base import DefiLlamaBaseTool
|
|
9
8
|
from intentkit.skills.defillama.coins.fetch_batch_historical_prices import (
|
|
@@ -124,7 +123,6 @@ class Config(SkillConfig):
|
|
|
124
123
|
async def get_skills(
|
|
125
124
|
config: "Config",
|
|
126
125
|
is_private: bool,
|
|
127
|
-
store: SkillStoreABC,
|
|
128
126
|
**_,
|
|
129
127
|
) -> list[DefiLlamaBaseTool]:
|
|
130
128
|
"""Get all DeFi Llama skills."""
|
|
@@ -140,7 +138,7 @@ async def get_skills(
|
|
|
140
138
|
# Get each skill using the cached getter
|
|
141
139
|
result = []
|
|
142
140
|
for name in available_skills:
|
|
143
|
-
skill = get_defillama_skill(name
|
|
141
|
+
skill = get_defillama_skill(name)
|
|
144
142
|
if skill:
|
|
145
143
|
result.append(skill)
|
|
146
144
|
return result
|
|
@@ -148,13 +146,11 @@ async def get_skills(
|
|
|
148
146
|
|
|
149
147
|
def get_defillama_skill(
|
|
150
148
|
name: str,
|
|
151
|
-
store: SkillStoreABC,
|
|
152
149
|
) -> DefiLlamaBaseTool:
|
|
153
150
|
"""Get a DeFi Llama skill by name.
|
|
154
151
|
|
|
155
152
|
Args:
|
|
156
153
|
name: The name of the skill to get
|
|
157
|
-
store: The skill store for persisting data
|
|
158
154
|
|
|
159
155
|
Returns:
|
|
160
156
|
The requested DeFi Llama skill
|
|
@@ -167,145 +163,101 @@ def get_defillama_skill(
|
|
|
167
163
|
# TVL Skills
|
|
168
164
|
if name == "fetch_protocols":
|
|
169
165
|
if name not in _cache:
|
|
170
|
-
_cache[name] = DefiLlamaFetchProtocols(
|
|
171
|
-
skill_store=store,
|
|
172
|
-
)
|
|
166
|
+
_cache[name] = DefiLlamaFetchProtocols()
|
|
173
167
|
return _cache[name]
|
|
174
168
|
elif name == "fetch_protocol":
|
|
175
169
|
if name not in _cache:
|
|
176
|
-
_cache[name] = DefiLlamaFetchProtocol(
|
|
177
|
-
skill_store=store,
|
|
178
|
-
)
|
|
170
|
+
_cache[name] = DefiLlamaFetchProtocol()
|
|
179
171
|
return _cache[name]
|
|
180
172
|
elif name == "fetch_historical_tvl":
|
|
181
173
|
if name not in _cache:
|
|
182
|
-
_cache[name] = DefiLlamaFetchHistoricalTvl(
|
|
183
|
-
skill_store=store,
|
|
184
|
-
)
|
|
174
|
+
_cache[name] = DefiLlamaFetchHistoricalTvl()
|
|
185
175
|
return _cache[name]
|
|
186
176
|
elif name == "fetch_chain_historical_tvl":
|
|
187
177
|
if name not in _cache:
|
|
188
|
-
_cache[name] = DefiLlamaFetchChainHistoricalTvl(
|
|
189
|
-
skill_store=store,
|
|
190
|
-
)
|
|
178
|
+
_cache[name] = DefiLlamaFetchChainHistoricalTvl()
|
|
191
179
|
return _cache[name]
|
|
192
180
|
elif name == "fetch_protocol_current_tvl":
|
|
193
181
|
if name not in _cache:
|
|
194
|
-
_cache[name] = DefiLlamaFetchProtocolCurrentTvl(
|
|
195
|
-
skill_store=store,
|
|
196
|
-
)
|
|
182
|
+
_cache[name] = DefiLlamaFetchProtocolCurrentTvl()
|
|
197
183
|
return _cache[name]
|
|
198
184
|
elif name == "fetch_chains":
|
|
199
185
|
if name not in _cache:
|
|
200
|
-
_cache[name] = DefiLlamaFetchChains(
|
|
201
|
-
skill_store=store,
|
|
202
|
-
)
|
|
186
|
+
_cache[name] = DefiLlamaFetchChains()
|
|
203
187
|
return _cache[name]
|
|
204
188
|
|
|
205
189
|
# Coins Skills
|
|
206
190
|
elif name == "fetch_current_prices":
|
|
207
191
|
if name not in _cache:
|
|
208
|
-
_cache[name] = DefiLlamaFetchCurrentPrices(
|
|
209
|
-
skill_store=store,
|
|
210
|
-
)
|
|
192
|
+
_cache[name] = DefiLlamaFetchCurrentPrices()
|
|
211
193
|
return _cache[name]
|
|
212
194
|
elif name == "fetch_historical_prices":
|
|
213
195
|
if name not in _cache:
|
|
214
|
-
_cache[name] = DefiLlamaFetchHistoricalPrices(
|
|
215
|
-
skill_store=store,
|
|
216
|
-
)
|
|
196
|
+
_cache[name] = DefiLlamaFetchHistoricalPrices()
|
|
217
197
|
return _cache[name]
|
|
218
198
|
elif name == "fetch_batch_historical_prices":
|
|
219
199
|
if name not in _cache:
|
|
220
|
-
_cache[name] = DefiLlamaFetchBatchHistoricalPrices(
|
|
221
|
-
skill_store=store,
|
|
222
|
-
)
|
|
200
|
+
_cache[name] = DefiLlamaFetchBatchHistoricalPrices()
|
|
223
201
|
return _cache[name]
|
|
224
202
|
elif name == "fetch_price_chart":
|
|
225
203
|
if name not in _cache:
|
|
226
|
-
_cache[name] = DefiLlamaFetchPriceChart(
|
|
227
|
-
skill_store=store,
|
|
228
|
-
)
|
|
204
|
+
_cache[name] = DefiLlamaFetchPriceChart()
|
|
229
205
|
return _cache[name]
|
|
230
206
|
elif name == "fetch_price_percentage":
|
|
231
207
|
if name not in _cache:
|
|
232
|
-
_cache[name] = DefiLlamaFetchPricePercentage(
|
|
233
|
-
skill_store=store,
|
|
234
|
-
)
|
|
208
|
+
_cache[name] = DefiLlamaFetchPricePercentage()
|
|
235
209
|
return _cache[name]
|
|
236
210
|
elif name == "fetch_first_price":
|
|
237
211
|
if name not in _cache:
|
|
238
|
-
_cache[name] = DefiLlamaFetchFirstPrice(
|
|
239
|
-
skill_store=store,
|
|
240
|
-
)
|
|
212
|
+
_cache[name] = DefiLlamaFetchFirstPrice()
|
|
241
213
|
return _cache[name]
|
|
242
214
|
elif name == "fetch_block":
|
|
243
215
|
if name not in _cache:
|
|
244
|
-
_cache[name] = DefiLlamaFetchBlock(
|
|
245
|
-
skill_store=store,
|
|
246
|
-
)
|
|
216
|
+
_cache[name] = DefiLlamaFetchBlock()
|
|
247
217
|
return _cache[name]
|
|
248
218
|
|
|
249
219
|
# Stablecoins Skills
|
|
250
220
|
elif name == "fetch_stablecoins":
|
|
251
221
|
if name not in _cache:
|
|
252
|
-
_cache[name] = DefiLlamaFetchStablecoins(
|
|
253
|
-
skill_store=store,
|
|
254
|
-
)
|
|
222
|
+
_cache[name] = DefiLlamaFetchStablecoins()
|
|
255
223
|
return _cache[name]
|
|
256
224
|
elif name == "fetch_stablecoin_charts":
|
|
257
225
|
if name not in _cache:
|
|
258
|
-
_cache[name] = DefiLlamaFetchStablecoinCharts(
|
|
259
|
-
skill_store=store,
|
|
260
|
-
)
|
|
226
|
+
_cache[name] = DefiLlamaFetchStablecoinCharts()
|
|
261
227
|
return _cache[name]
|
|
262
228
|
elif name == "fetch_stablecoin_chains":
|
|
263
229
|
if name not in _cache:
|
|
264
|
-
_cache[name] = DefiLlamaFetchStablecoinChains(
|
|
265
|
-
skill_store=store,
|
|
266
|
-
)
|
|
230
|
+
_cache[name] = DefiLlamaFetchStablecoinChains()
|
|
267
231
|
return _cache[name]
|
|
268
232
|
elif name == "fetch_stablecoin_prices":
|
|
269
233
|
if name not in _cache:
|
|
270
|
-
_cache[name] = DefiLlamaFetchStablecoinPrices(
|
|
271
|
-
skill_store=store,
|
|
272
|
-
)
|
|
234
|
+
_cache[name] = DefiLlamaFetchStablecoinPrices()
|
|
273
235
|
return _cache[name]
|
|
274
236
|
|
|
275
237
|
# Yields Skills
|
|
276
238
|
elif name == "fetch_pools":
|
|
277
239
|
if name not in _cache:
|
|
278
|
-
_cache[name] = DefiLlamaFetchPools(
|
|
279
|
-
skill_store=store,
|
|
280
|
-
)
|
|
240
|
+
_cache[name] = DefiLlamaFetchPools()
|
|
281
241
|
return _cache[name]
|
|
282
242
|
elif name == "fetch_pool_chart":
|
|
283
243
|
if name not in _cache:
|
|
284
|
-
_cache[name] = DefiLlamaFetchPoolChart(
|
|
285
|
-
skill_store=store,
|
|
286
|
-
)
|
|
244
|
+
_cache[name] = DefiLlamaFetchPoolChart()
|
|
287
245
|
return _cache[name]
|
|
288
246
|
|
|
289
247
|
# Volumes Skills
|
|
290
248
|
elif name == "fetch_dex_overview": # Handles both base and chain-specific overviews
|
|
291
249
|
if name not in _cache:
|
|
292
|
-
_cache[name] = DefiLlamaFetchDexOverview(
|
|
293
|
-
skill_store=store,
|
|
294
|
-
)
|
|
250
|
+
_cache[name] = DefiLlamaFetchDexOverview()
|
|
295
251
|
return _cache[name]
|
|
296
252
|
elif name == "fetch_dex_summary":
|
|
297
253
|
if name not in _cache:
|
|
298
|
-
_cache[name] = DefiLlamaFetchDexSummary(
|
|
299
|
-
skill_store=store,
|
|
300
|
-
)
|
|
254
|
+
_cache[name] = DefiLlamaFetchDexSummary()
|
|
301
255
|
return _cache[name]
|
|
302
256
|
elif (
|
|
303
257
|
name == "fetch_options_overview"
|
|
304
258
|
): # Handles both base and chain-specific overviews
|
|
305
259
|
if name not in _cache:
|
|
306
|
-
_cache[name] = DefiLlamaFetchOptionsOverview(
|
|
307
|
-
skill_store=store,
|
|
308
|
-
)
|
|
260
|
+
_cache[name] = DefiLlamaFetchOptionsOverview()
|
|
309
261
|
return _cache[name]
|
|
310
262
|
|
|
311
263
|
# Fees Skills
|
|
@@ -313,9 +265,7 @@ def get_defillama_skill(
|
|
|
313
265
|
name == "fetch_fees_overview"
|
|
314
266
|
): # Handles both base and chain-specific overviews
|
|
315
267
|
if name not in _cache:
|
|
316
|
-
_cache[name] = DefiLlamaFetchFeesOverview(
|
|
317
|
-
skill_store=store,
|
|
318
|
-
)
|
|
268
|
+
_cache[name] = DefiLlamaFetchFeesOverview()
|
|
319
269
|
return _cache[name]
|
|
320
270
|
|
|
321
271
|
else:
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"""DeFi Llama API implementation and shared schemas."""
|
|
2
2
|
|
|
3
3
|
from datetime import datetime
|
|
4
|
-
from typing import List, Optional
|
|
5
4
|
|
|
6
5
|
import httpx
|
|
7
6
|
|
|
@@ -75,7 +74,7 @@ async def fetch_chains() -> dict:
|
|
|
75
74
|
|
|
76
75
|
|
|
77
76
|
# Coins API Functions
|
|
78
|
-
async def fetch_current_prices(coins:
|
|
77
|
+
async def fetch_current_prices(coins: list[str]) -> dict:
|
|
79
78
|
"""Get current prices of tokens by contract address using a 4-hour search window."""
|
|
80
79
|
coins_str = ",".join(coins)
|
|
81
80
|
url = f"{DEFILLAMA_COINS_BASE_URL}/prices/current/{coins_str}?searchWidth=4h"
|
|
@@ -87,7 +86,7 @@ async def fetch_current_prices(coins: List[str]) -> dict:
|
|
|
87
86
|
return response.json()
|
|
88
87
|
|
|
89
88
|
|
|
90
|
-
async def fetch_historical_prices(timestamp: int, coins:
|
|
89
|
+
async def fetch_historical_prices(timestamp: int, coins: list[str]) -> dict:
|
|
91
90
|
"""Get historical prices of tokens by contract address using a 4-hour search window."""
|
|
92
91
|
coins_str = ",".join(coins)
|
|
93
92
|
url = f"{DEFILLAMA_COINS_BASE_URL}/prices/historical/{timestamp}/{coins_str}?searchWidth=4h"
|
|
@@ -112,7 +111,7 @@ async def fetch_batch_historical_prices(coins_timestamps: dict) -> dict:
|
|
|
112
111
|
return response.json()
|
|
113
112
|
|
|
114
113
|
|
|
115
|
-
async def fetch_price_chart(coins:
|
|
114
|
+
async def fetch_price_chart(coins: list[str]) -> dict:
|
|
116
115
|
"""Get historical price chart data from the past day for multiple tokens."""
|
|
117
116
|
coins_str = ",".join(coins)
|
|
118
117
|
start_time = int(datetime.now().timestamp()) - 86400 # now - 1 day
|
|
@@ -127,7 +126,7 @@ async def fetch_price_chart(coins: List[str]) -> dict:
|
|
|
127
126
|
return response.json()
|
|
128
127
|
|
|
129
128
|
|
|
130
|
-
async def fetch_price_percentage(coins:
|
|
129
|
+
async def fetch_price_percentage(coins: list[str]) -> dict:
|
|
131
130
|
"""Get price percentage changes for multiple tokens over a 24h period."""
|
|
132
131
|
coins_str = ",".join(coins)
|
|
133
132
|
current_timestamp = int(datetime.now().timestamp())
|
|
@@ -142,7 +141,7 @@ async def fetch_price_percentage(coins: List[str]) -> dict:
|
|
|
142
141
|
return response.json()
|
|
143
142
|
|
|
144
143
|
|
|
145
|
-
async def fetch_first_price(coins:
|
|
144
|
+
async def fetch_first_price(coins: list[str]) -> dict:
|
|
146
145
|
"""Get first recorded price data for multiple tokens."""
|
|
147
146
|
coins_str = ",".join(coins)
|
|
148
147
|
url = f"{DEFILLAMA_COINS_BASE_URL}/prices/first/{coins_str}"
|
|
@@ -179,9 +178,7 @@ async def fetch_stablecoins() -> dict:
|
|
|
179
178
|
return response.json()
|
|
180
179
|
|
|
181
180
|
|
|
182
|
-
async def fetch_stablecoin_charts(
|
|
183
|
-
stablecoin_id: str, chain: Optional[str] = None
|
|
184
|
-
) -> dict:
|
|
181
|
+
async def fetch_stablecoin_charts(stablecoin_id: str, chain: str | None = None) -> dict:
|
|
185
182
|
"""Get historical circulating supply data for a stablecoin."""
|
|
186
183
|
base_url = f"{DEFILLAMA_STABLECOINS_BASE_URL}/stablecoincharts"
|
|
187
184
|
|