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
intentkit/config/config.py
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
|
-
# app/config.py
|
|
2
1
|
import json
|
|
3
2
|
import logging
|
|
4
3
|
import os
|
|
4
|
+
from typing import overload
|
|
5
5
|
|
|
6
6
|
from dotenv import load_dotenv
|
|
7
7
|
|
|
8
8
|
from intentkit.utils.chain import ChainProvider, QuicknodeChainProvider
|
|
9
9
|
from intentkit.utils.logging import setup_logging
|
|
10
|
-
from intentkit.utils.s3 import init_s3
|
|
11
10
|
from intentkit.utils.slack_alert import init_slack
|
|
12
11
|
|
|
12
|
+
SecretsMap = dict[str, str | int]
|
|
13
|
+
DatabaseConfig = dict[str, str | int | bool]
|
|
14
|
+
|
|
13
15
|
# Load environment variables from .env file
|
|
14
|
-
load_dotenv()
|
|
16
|
+
_ = load_dotenv()
|
|
15
17
|
|
|
16
18
|
logger = logging.getLogger(__name__)
|
|
17
19
|
|
|
18
20
|
|
|
19
|
-
def load_from_aws(name):
|
|
21
|
+
def load_from_aws(name: str) -> SecretsMap:
|
|
20
22
|
import botocore.session
|
|
21
23
|
from aws_secretsmanager_caching import SecretCache, SecretCacheConfig
|
|
22
24
|
|
|
@@ -28,25 +30,25 @@ def load_from_aws(name):
|
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
class Config:
|
|
31
|
-
def __init__(self):
|
|
33
|
+
def __init__(self) -> None:
|
|
32
34
|
# ==== this part can only be load from env
|
|
33
|
-
self.env = os.getenv("ENV", "local")
|
|
34
|
-
self.release = os.getenv("RELEASE", "local")
|
|
35
|
-
secret_name = os.getenv("AWS_SECRET_NAME")
|
|
36
|
-
db_secret_name = os.getenv("AWS_DB_SECRET_NAME")
|
|
35
|
+
self.env: str = os.getenv("ENV", "local")
|
|
36
|
+
self.release: str = os.getenv("RELEASE", "local")
|
|
37
|
+
secret_name: str | None = os.getenv("AWS_SECRET_NAME")
|
|
38
|
+
db_secret_name: str | None = os.getenv("AWS_DB_SECRET_NAME")
|
|
37
39
|
# ==== load from aws secrets manager
|
|
40
|
+
self.secrets: SecretsMap = {}
|
|
38
41
|
if secret_name:
|
|
39
42
|
self.secrets = load_from_aws(secret_name)
|
|
40
|
-
|
|
41
|
-
self.secrets = {}
|
|
43
|
+
self.db: DatabaseConfig
|
|
42
44
|
if db_secret_name:
|
|
43
|
-
|
|
45
|
+
secret_db: SecretsMap = load_from_aws(db_secret_name)
|
|
44
46
|
# format the db config
|
|
45
|
-
|
|
47
|
+
secret_db["port"] = str(secret_db["port"])
|
|
46
48
|
# only keep the necessary fields
|
|
47
49
|
self.db = {
|
|
48
50
|
k: v
|
|
49
|
-
for k, v in
|
|
51
|
+
for k, v in secret_db.items()
|
|
50
52
|
if k in ["username", "password", "host", "dbname", "port"]
|
|
51
53
|
}
|
|
52
54
|
else:
|
|
@@ -60,102 +62,123 @@ class Config:
|
|
|
60
62
|
# ==== this part can be load from env or aws secrets manager
|
|
61
63
|
self.db["auto_migrate"] = self.load("DB_AUTO_MIGRATE", "true") == "true"
|
|
62
64
|
self.db["pool_size"] = self.load_int("DB_POOL_SIZE", 3)
|
|
63
|
-
self.debug = self.load("DEBUG") == "true"
|
|
64
|
-
self.debug_checkpoint = (
|
|
65
|
+
self.debug: bool = self.load("DEBUG") == "true"
|
|
66
|
+
self.debug_checkpoint: bool = (
|
|
65
67
|
self.load("DEBUG_CHECKPOINT", "false") == "true"
|
|
66
68
|
) # log with checkpoint
|
|
67
69
|
# Redis
|
|
68
|
-
self.redis_host = self.load("REDIS_HOST")
|
|
69
|
-
self.redis_port = self.load_int("REDIS_PORT", 6379)
|
|
70
|
-
self.redis_db = self.load_int("REDIS_DB", 0)
|
|
71
|
-
# AWS
|
|
72
|
-
self.aws_s3_bucket = self.load("AWS_S3_BUCKET")
|
|
73
|
-
self.aws_s3_cdn_url = self.load("AWS_S3_CDN_URL")
|
|
70
|
+
self.redis_host: str | None = self.load("REDIS_HOST")
|
|
71
|
+
self.redis_port: int = self.load_int("REDIS_PORT", 6379)
|
|
72
|
+
self.redis_db: int = self.load_int("REDIS_DB", 0)
|
|
73
|
+
# AWS S3
|
|
74
|
+
self.aws_s3_bucket: str | None = self.load("AWS_S3_BUCKET")
|
|
75
|
+
self.aws_s3_cdn_url: str | None = self.load("AWS_S3_CDN_URL")
|
|
76
|
+
# If using custom S3 endpoint
|
|
77
|
+
self.aws_s3_endpoint_url: str | None = self.load("AWS_S3_ENDPOINT_URL")
|
|
78
|
+
self.aws_s3_region_name: str | None = self.load("AWS_S3_REGION_NAME")
|
|
79
|
+
self.aws_s3_access_key_id: str | None = self.load("AWS_S3_ACCESS_KEY_ID")
|
|
80
|
+
self.aws_s3_secret_access_key: str | None = self.load(
|
|
81
|
+
"AWS_S3_SECRET_ACCESS_KEY"
|
|
82
|
+
)
|
|
74
83
|
# Internal API
|
|
75
|
-
self.internal_base_url = self.load(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
self.
|
|
79
|
-
|
|
80
|
-
self.debug_password = self.load("DEBUG_PASSWORD")
|
|
81
|
-
self.admin_llm_skill_control = (
|
|
82
|
-
self.load("ADMIN_LLM_SKILL_CONTROL", "false") == "true"
|
|
84
|
+
self.internal_base_url: str = self.load(
|
|
85
|
+
"INTERNAL_BASE_URL", "http://intent-api"
|
|
86
|
+
)
|
|
87
|
+
self.admin_auth_enabled: bool = (
|
|
88
|
+
self.load("ADMIN_AUTH_ENABLED", "false") == "true"
|
|
83
89
|
)
|
|
90
|
+
self.admin_jwt_secret: str | None = self.load("ADMIN_JWT_SECRET")
|
|
91
|
+
self.debug_auth_enabled: bool = (
|
|
92
|
+
self.load("DEBUG_AUTH_ENABLED", "false") == "true"
|
|
93
|
+
)
|
|
94
|
+
self.debug_username: str | None = self.load("DEBUG_USERNAME")
|
|
95
|
+
self.debug_password: str | None = self.load("DEBUG_PASSWORD")
|
|
84
96
|
# Payment
|
|
85
|
-
self.payment_enabled = self.load("PAYMENT_ENABLED", "false") == "true"
|
|
97
|
+
self.payment_enabled: bool = self.load("PAYMENT_ENABLED", "false") == "true"
|
|
86
98
|
# Open API for agent
|
|
87
|
-
self.open_api_base_url = self.load(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
self.
|
|
99
|
+
self.open_api_base_url: str = self.load(
|
|
100
|
+
"OPEN_API_BASE_URL", "http://localhost:8000"
|
|
101
|
+
)
|
|
102
|
+
# CDP - AgentKit 0.7.x Configuration
|
|
103
|
+
self.cdp_api_key_id: str | None = self.load("CDP_API_KEY_ID")
|
|
104
|
+
self.cdp_api_key_secret: str | None = self.load("CDP_API_KEY_SECRET")
|
|
105
|
+
self.cdp_wallet_secret: str | None = self.load("CDP_WALLET_SECRET")
|
|
92
106
|
# LLM providers
|
|
93
|
-
self.openai_api_key = self.load("OPENAI_API_KEY")
|
|
94
|
-
self.deepseek_api_key = self.load("DEEPSEEK_API_KEY")
|
|
95
|
-
self.xai_api_key = self.load("XAI_API_KEY")
|
|
96
|
-
self.eternal_api_key = self.load("ETERNAL_API_KEY")
|
|
97
|
-
self.reigent_api_key = self.load("REIGENT_API_KEY")
|
|
98
|
-
self.venice_api_key = self.load("VENICE_API_KEY")
|
|
107
|
+
self.openai_api_key: str | None = self.load("OPENAI_API_KEY")
|
|
108
|
+
self.deepseek_api_key: str | None = self.load("DEEPSEEK_API_KEY")
|
|
109
|
+
self.xai_api_key: str | None = self.load("XAI_API_KEY")
|
|
110
|
+
self.eternal_api_key: str | None = self.load("ETERNAL_API_KEY")
|
|
111
|
+
self.reigent_api_key: str | None = self.load("REIGENT_API_KEY")
|
|
112
|
+
self.venice_api_key: str | None = self.load("VENICE_API_KEY")
|
|
113
|
+
self.gatewayz_api_key: str | None = self.load("GATEWAYZ_API_KEY")
|
|
99
114
|
# LLM Config
|
|
100
|
-
self.system_prompt = self.load("SYSTEM_PROMPT")
|
|
101
|
-
self.intentkit_prompt = self.load("INTENTKIT_PROMPT")
|
|
102
|
-
self.input_token_limit = self.load_int("INPUT_TOKEN_LIMIT", 60000)
|
|
115
|
+
self.system_prompt: str | None = self.load("SYSTEM_PROMPT")
|
|
116
|
+
self.intentkit_prompt: str | None = self.load("INTENTKIT_PROMPT")
|
|
117
|
+
self.input_token_limit: int = self.load_int("INPUT_TOKEN_LIMIT", 60000)
|
|
103
118
|
# XMTP
|
|
104
|
-
self.xmtp_system_prompt = self.load(
|
|
119
|
+
self.xmtp_system_prompt: str | None = self.load(
|
|
105
120
|
"XMTP_SYSTEM_PROMPT",
|
|
106
121
|
"You are assisting a user who uses an XMTP client that only displays plain-text messages, so do not use Markdown formatting.",
|
|
107
122
|
)
|
|
108
123
|
# Telegram server settings
|
|
109
|
-
self.tg_system_prompt = self.load("TG_SYSTEM_PROMPT")
|
|
110
|
-
self.tg_base_url = self.load("TG_BASE_URL")
|
|
111
|
-
self.tg_server_host = self.load("TG_SERVER_HOST", "127.0.0.1")
|
|
112
|
-
self.tg_server_port = self.load("TG_SERVER_PORT", "8081")
|
|
113
|
-
self.tg_new_agent_poll_interval = self.load(
|
|
124
|
+
self.tg_system_prompt: str | None = self.load("TG_SYSTEM_PROMPT")
|
|
125
|
+
self.tg_base_url: str | None = self.load("TG_BASE_URL")
|
|
126
|
+
self.tg_server_host: str = self.load("TG_SERVER_HOST", "127.0.0.1")
|
|
127
|
+
self.tg_server_port: str = self.load("TG_SERVER_PORT", "8081")
|
|
128
|
+
self.tg_new_agent_poll_interval: str = self.load(
|
|
129
|
+
"TG_NEW_AGENT_POLL_INTERVAL", "60"
|
|
130
|
+
)
|
|
131
|
+
# Discord server settings
|
|
132
|
+
self.discord_new_agent_poll_interval: str = self.load(
|
|
133
|
+
"DISCORD_NEW_AGENT_POLL_INTERVAL", "30"
|
|
134
|
+
)
|
|
114
135
|
# Twitter
|
|
115
|
-
self.twitter_oauth2_client_id = self.load(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
self.
|
|
136
|
+
self.twitter_oauth2_client_id: str | None = self.load(
|
|
137
|
+
"TWITTER_OAUTH2_CLIENT_ID"
|
|
138
|
+
)
|
|
139
|
+
self.twitter_oauth2_client_secret: str | None = self.load(
|
|
140
|
+
"TWITTER_OAUTH2_CLIENT_SECRET"
|
|
141
|
+
)
|
|
142
|
+
self.twitter_oauth2_redirect_uri: str | None = self.load(
|
|
143
|
+
"TWITTER_OAUTH2_REDIRECT_URI"
|
|
144
|
+
)
|
|
145
|
+
self.twitter_entrypoint_interval: int = self.load_int(
|
|
119
146
|
"TWITTER_ENTRYPOINT_INTERVAL", 5
|
|
120
147
|
) # in minutes
|
|
121
148
|
# Slack Alert
|
|
122
|
-
self.slack_alert_token = self.load("SLACK_ALERT_TOKEN")
|
|
123
|
-
self.slack_alert_channel = self.load("SLACK_ALERT_CHANNEL")
|
|
149
|
+
self.slack_alert_token: str | None = self.load("SLACK_ALERT_TOKEN")
|
|
150
|
+
self.slack_alert_channel: str | None = self.load("SLACK_ALERT_CHANNEL")
|
|
124
151
|
# Skills - Platform Hosted Keys
|
|
125
|
-
self.acolyt_api_key = self.load("ACOLYT_API_KEY")
|
|
126
|
-
self.allora_api_key = self.load("ALLORA_API_KEY")
|
|
127
|
-
self.elfa_api_key = self.load("ELFA_API_KEY")
|
|
128
|
-
self.heurist_api_key = self.load("HEURIST_API_KEY")
|
|
129
|
-
self.enso_api_token = self.load("ENSO_API_TOKEN")
|
|
130
|
-
self.dapplooker_api_key = self.load("DAPPLOOKER_API_KEY")
|
|
131
|
-
self.moralis_api_key = self.load("MORALIS_API_KEY")
|
|
132
|
-
self.tavily_api_key = self.load("TAVILY_API_KEY")
|
|
133
|
-
self.cookiefun_api_key = self.load("COOKIEFUN_API_KEY")
|
|
134
|
-
self.firecrawl_api_key = self.load("FIRECRAWL_API_KEY")
|
|
152
|
+
self.acolyt_api_key: str | None = self.load("ACOLYT_API_KEY")
|
|
153
|
+
self.allora_api_key: str | None = self.load("ALLORA_API_KEY")
|
|
154
|
+
self.elfa_api_key: str | None = self.load("ELFA_API_KEY")
|
|
155
|
+
self.heurist_api_key: str | None = self.load("HEURIST_API_KEY")
|
|
156
|
+
self.enso_api_token: str | None = self.load("ENSO_API_TOKEN")
|
|
157
|
+
self.dapplooker_api_key: str | None = self.load("DAPPLOOKER_API_KEY")
|
|
158
|
+
self.moralis_api_key: str | None = self.load("MORALIS_API_KEY")
|
|
159
|
+
self.tavily_api_key: str | None = self.load("TAVILY_API_KEY")
|
|
160
|
+
self.cookiefun_api_key: str | None = self.load("COOKIEFUN_API_KEY")
|
|
161
|
+
self.firecrawl_api_key: str | None = self.load("FIRECRAWL_API_KEY")
|
|
135
162
|
# Sentry
|
|
136
|
-
self.sentry_dsn = self.load("SENTRY_DSN")
|
|
137
|
-
self.sentry_sample_rate = self.load_float("SENTRY_SAMPLE_RATE", 0.1)
|
|
138
|
-
self.sentry_traces_sample_rate = self.load_float(
|
|
163
|
+
self.sentry_dsn: str | None = self.load("SENTRY_DSN")
|
|
164
|
+
self.sentry_sample_rate: float = self.load_float("SENTRY_SAMPLE_RATE", 0.1)
|
|
165
|
+
self.sentry_traces_sample_rate: float = self.load_float(
|
|
139
166
|
"SENTRY_TRACES_SAMPLE_RATE", 0.01
|
|
140
167
|
)
|
|
141
|
-
self.sentry_profiles_sample_rate = self.load_float(
|
|
168
|
+
self.sentry_profiles_sample_rate: float = self.load_float(
|
|
142
169
|
"SENTRY_PROFILES_SAMPLE_RATE", 0.01
|
|
143
170
|
)
|
|
144
171
|
# RPC Providers
|
|
145
|
-
self.quicknode_api_key = self.load("QUICKNODE_API_KEY")
|
|
172
|
+
self.quicknode_api_key: str | None = self.load("QUICKNODE_API_KEY")
|
|
173
|
+
self.chain_provider: ChainProvider | None = None
|
|
146
174
|
if self.quicknode_api_key:
|
|
147
|
-
self.chain_provider
|
|
148
|
-
|
|
149
|
-
)
|
|
150
|
-
if hasattr(self, "chain_provider"):
|
|
175
|
+
self.chain_provider = QuicknodeChainProvider(self.quicknode_api_key)
|
|
176
|
+
if self.chain_provider:
|
|
151
177
|
self.chain_provider.init_chain_configs()
|
|
152
|
-
self.rpc_networks = self.load(
|
|
153
|
-
"RPC_NETWORKS", "base-mainnet,base-sepolia,ethereum-sepolia,solana-mainnet"
|
|
154
|
-
)
|
|
155
178
|
|
|
156
179
|
# Nation
|
|
157
|
-
self.nation_api_key = self.load("NATION_API_KEY")
|
|
158
|
-
self.nation_api_url = self.load("NATION_API_URL", "")
|
|
180
|
+
self.nation_api_key: str | None = self.load("NATION_API_KEY")
|
|
181
|
+
self.nation_api_url: str = self.load("NATION_API_URL", "")
|
|
159
182
|
|
|
160
183
|
# ===== config loaded
|
|
161
184
|
# Now we know the env, set up logging
|
|
@@ -165,13 +188,23 @@ class Config:
|
|
|
165
188
|
# If the slack alert token exists, init it
|
|
166
189
|
if self.slack_alert_token and self.slack_alert_channel:
|
|
167
190
|
init_slack(self.slack_alert_token, self.slack_alert_channel)
|
|
168
|
-
# If the AWS S3 bucket and CDN URL exist, init it
|
|
169
|
-
if self.aws_s3_bucket and self.aws_s3_cdn_url:
|
|
170
|
-
init_s3(self.aws_s3_bucket, self.aws_s3_cdn_url, self.env)
|
|
171
191
|
|
|
172
|
-
|
|
192
|
+
@overload
|
|
193
|
+
def load(self, key: str) -> str | None: ... # noqa: F811
|
|
194
|
+
|
|
195
|
+
@overload
|
|
196
|
+
def load(self, key: str, default: str) -> str: ... # noqa: F811
|
|
197
|
+
|
|
198
|
+
def load(self, key: str, default: str | None = None) -> str | None:
|
|
173
199
|
"""Load a secret from the secrets map or env"""
|
|
174
|
-
|
|
200
|
+
env_value = os.getenv(key, default)
|
|
201
|
+
raw_value = self.secrets.get(key, env_value)
|
|
202
|
+
if raw_value is None:
|
|
203
|
+
value: str | None = default
|
|
204
|
+
elif isinstance(raw_value, str):
|
|
205
|
+
value = raw_value
|
|
206
|
+
else:
|
|
207
|
+
value = str(raw_value)
|
|
175
208
|
|
|
176
209
|
# If value is empty string, use default instead
|
|
177
210
|
if value == "":
|
|
@@ -183,10 +216,10 @@ class Config:
|
|
|
183
216
|
value = value[1:-1]
|
|
184
217
|
return value
|
|
185
218
|
|
|
186
|
-
def load_int(self, key, default=0):
|
|
219
|
+
def load_int(self, key: str, default: int = 0) -> int:
|
|
187
220
|
"""Load an integer value from env, handling empty strings gracefully"""
|
|
188
221
|
value = self.load(key, str(default))
|
|
189
|
-
if
|
|
222
|
+
if not value:
|
|
190
223
|
return default
|
|
191
224
|
try:
|
|
192
225
|
return int(value)
|
|
@@ -194,10 +227,10 @@ class Config:
|
|
|
194
227
|
logger.warning(f"Invalid integer value for {key}, using default: {default}")
|
|
195
228
|
return default
|
|
196
229
|
|
|
197
|
-
def load_float(self, key, default=0.0):
|
|
230
|
+
def load_float(self, key: str, default: float = 0.0) -> float:
|
|
198
231
|
"""Load a float value from env, handling empty strings gracefully"""
|
|
199
232
|
value = self.load(key, str(default))
|
|
200
|
-
if
|
|
233
|
+
if not value:
|
|
201
234
|
return default
|
|
202
235
|
try:
|
|
203
236
|
return float(value)
|