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/models/agent_data.py
CHANGED
|
@@ -1,24 +1,19 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import logging
|
|
2
|
-
from datetime import
|
|
4
|
+
from datetime import UTC, datetime
|
|
3
5
|
from decimal import Decimal
|
|
4
|
-
from typing import Annotated, Any
|
|
6
|
+
from typing import Annotated, Any
|
|
5
7
|
|
|
6
|
-
from fastapi import HTTPException
|
|
7
|
-
from intentkit.models.base import Base
|
|
8
|
-
from intentkit.models.db import get_session
|
|
9
8
|
from pydantic import BaseModel, ConfigDict
|
|
10
9
|
from pydantic import Field as PydanticField
|
|
11
|
-
from sqlalchemy import
|
|
12
|
-
BigInteger,
|
|
13
|
-
Boolean,
|
|
14
|
-
Column,
|
|
15
|
-
DateTime,
|
|
16
|
-
Numeric,
|
|
17
|
-
String,
|
|
18
|
-
func,
|
|
19
|
-
select,
|
|
20
|
-
)
|
|
10
|
+
from sqlalchemy import BigInteger, Boolean, DateTime, Numeric, String, func, select
|
|
21
11
|
from sqlalchemy.dialects.postgresql import JSON, JSONB
|
|
12
|
+
from sqlalchemy.orm import Mapped, mapped_column
|
|
13
|
+
|
|
14
|
+
from intentkit.models.base import Base
|
|
15
|
+
from intentkit.models.db import get_session
|
|
16
|
+
from intentkit.utils.error import IntentKitAPIError
|
|
22
17
|
|
|
23
18
|
logger = logging.getLogger(__name__)
|
|
24
19
|
|
|
@@ -28,56 +23,87 @@ class AgentDataTable(Base):
|
|
|
28
23
|
|
|
29
24
|
__tablename__ = "agent_data"
|
|
30
25
|
|
|
31
|
-
id =
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
id: Mapped[str] = mapped_column(
|
|
27
|
+
String, primary_key=True, comment="Same as Agent.id"
|
|
28
|
+
)
|
|
29
|
+
evm_wallet_address: Mapped[str | None] = mapped_column(
|
|
30
|
+
String, nullable=True, comment="EVM wallet address"
|
|
31
|
+
)
|
|
32
|
+
solana_wallet_address: Mapped[str | None] = mapped_column(
|
|
34
33
|
String, nullable=True, comment="Solana wallet address"
|
|
35
34
|
)
|
|
36
|
-
cdp_wallet_data
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
cdp_wallet_data: Mapped[str | None] = mapped_column(
|
|
36
|
+
String, nullable=True, comment="CDP wallet data"
|
|
37
|
+
)
|
|
38
|
+
twitter_id: Mapped[str | None] = mapped_column(
|
|
39
|
+
String, nullable=True, comment="Twitter user ID"
|
|
40
|
+
)
|
|
41
|
+
twitter_username: Mapped[str | None] = mapped_column(
|
|
42
|
+
String, nullable=True, comment="Twitter username"
|
|
43
|
+
)
|
|
44
|
+
twitter_name: Mapped[str | None] = mapped_column(
|
|
45
|
+
String, nullable=True, comment="Twitter display name"
|
|
46
|
+
)
|
|
47
|
+
twitter_access_token: Mapped[str | None] = mapped_column(
|
|
48
|
+
String, nullable=True, comment="Twitter access token"
|
|
49
|
+
)
|
|
50
|
+
twitter_access_token_expires_at: Mapped[datetime | None] = mapped_column(
|
|
42
51
|
DateTime(timezone=True),
|
|
43
52
|
nullable=True,
|
|
44
53
|
comment="Twitter access token expiration time",
|
|
45
54
|
)
|
|
46
|
-
twitter_refresh_token =
|
|
55
|
+
twitter_refresh_token: Mapped[str | None] = mapped_column(
|
|
47
56
|
String, nullable=True, comment="Twitter refresh token"
|
|
48
57
|
)
|
|
49
|
-
twitter_self_key_refreshed_at =
|
|
58
|
+
twitter_self_key_refreshed_at: Mapped[datetime | None] = mapped_column(
|
|
50
59
|
DateTime(timezone=True),
|
|
51
60
|
nullable=True,
|
|
52
61
|
comment="Twitter self-key userinfo last refresh time",
|
|
53
62
|
)
|
|
54
|
-
twitter_is_verified =
|
|
63
|
+
twitter_is_verified: Mapped[bool] = mapped_column(
|
|
55
64
|
Boolean,
|
|
56
65
|
nullable=False,
|
|
57
66
|
default=False,
|
|
58
67
|
comment="Whether the Twitter account is verified",
|
|
59
68
|
)
|
|
60
|
-
telegram_id
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
telegram_id: Mapped[str | None] = mapped_column(
|
|
70
|
+
String, nullable=True, comment="Telegram user ID"
|
|
71
|
+
)
|
|
72
|
+
telegram_username: Mapped[str | None] = mapped_column(
|
|
73
|
+
String, nullable=True, comment="Telegram username"
|
|
74
|
+
)
|
|
75
|
+
telegram_name: Mapped[str | None] = mapped_column(
|
|
76
|
+
String, nullable=True, comment="Telegram display name"
|
|
77
|
+
)
|
|
78
|
+
discord_id: Mapped[str | None] = mapped_column(
|
|
79
|
+
String, nullable=True, comment="Discord user ID"
|
|
80
|
+
)
|
|
81
|
+
discord_username: Mapped[str | None] = mapped_column(
|
|
82
|
+
String, nullable=True, comment="Discord username"
|
|
83
|
+
)
|
|
84
|
+
discord_name: Mapped[str | None] = mapped_column(
|
|
85
|
+
String, nullable=True, comment="Discord display name"
|
|
86
|
+
)
|
|
87
|
+
error_message: Mapped[str | None] = mapped_column(
|
|
88
|
+
String, nullable=True, comment="Last error message"
|
|
89
|
+
)
|
|
90
|
+
api_key: Mapped[str | None] = mapped_column(
|
|
65
91
|
String, nullable=True, unique=True, comment="API key for the agent"
|
|
66
92
|
)
|
|
67
|
-
api_key_public =
|
|
93
|
+
api_key_public: Mapped[str | None] = mapped_column(
|
|
68
94
|
String, nullable=True, unique=True, comment="Public API key for the agent"
|
|
69
95
|
)
|
|
70
|
-
created_at =
|
|
96
|
+
created_at: Mapped[datetime] = mapped_column(
|
|
71
97
|
DateTime(timezone=True),
|
|
72
98
|
nullable=False,
|
|
73
99
|
server_default=func.now(),
|
|
74
100
|
comment="Timestamp when the agent data was created",
|
|
75
101
|
)
|
|
76
|
-
updated_at =
|
|
102
|
+
updated_at: Mapped[datetime] = mapped_column(
|
|
77
103
|
DateTime(timezone=True),
|
|
78
104
|
nullable=False,
|
|
79
105
|
server_default=func.now(),
|
|
80
|
-
onupdate=lambda: datetime.now(
|
|
106
|
+
onupdate=lambda: datetime.now(UTC),
|
|
81
107
|
comment="Timestamp when the agent data was last updated",
|
|
82
108
|
)
|
|
83
109
|
|
|
@@ -94,70 +120,70 @@ class AgentData(BaseModel):
|
|
|
94
120
|
),
|
|
95
121
|
]
|
|
96
122
|
evm_wallet_address: Annotated[
|
|
97
|
-
|
|
123
|
+
str | None,
|
|
98
124
|
PydanticField(
|
|
99
125
|
default=None,
|
|
100
126
|
description="EVM wallet address",
|
|
101
127
|
),
|
|
102
128
|
] = None
|
|
103
129
|
solana_wallet_address: Annotated[
|
|
104
|
-
|
|
130
|
+
str | None,
|
|
105
131
|
PydanticField(
|
|
106
132
|
default=None,
|
|
107
133
|
description="Solana wallet address",
|
|
108
134
|
),
|
|
109
135
|
] = None
|
|
110
136
|
cdp_wallet_data: Annotated[
|
|
111
|
-
|
|
137
|
+
str | None,
|
|
112
138
|
PydanticField(
|
|
113
139
|
default=None,
|
|
114
140
|
description="CDP wallet data",
|
|
115
141
|
),
|
|
116
142
|
] = None
|
|
117
143
|
twitter_id: Annotated[
|
|
118
|
-
|
|
144
|
+
str | None,
|
|
119
145
|
PydanticField(
|
|
120
146
|
default=None,
|
|
121
147
|
description="Twitter user ID",
|
|
122
148
|
),
|
|
123
149
|
] = None
|
|
124
150
|
twitter_username: Annotated[
|
|
125
|
-
|
|
151
|
+
str | None,
|
|
126
152
|
PydanticField(
|
|
127
153
|
default=None,
|
|
128
154
|
description="Twitter username",
|
|
129
155
|
),
|
|
130
156
|
] = None
|
|
131
157
|
twitter_name: Annotated[
|
|
132
|
-
|
|
158
|
+
str | None,
|
|
133
159
|
PydanticField(
|
|
134
160
|
default=None,
|
|
135
161
|
description="Twitter display name",
|
|
136
162
|
),
|
|
137
163
|
] = None
|
|
138
164
|
twitter_access_token: Annotated[
|
|
139
|
-
|
|
165
|
+
str | None,
|
|
140
166
|
PydanticField(
|
|
141
167
|
default=None,
|
|
142
168
|
description="Twitter access token",
|
|
143
169
|
),
|
|
144
170
|
] = None
|
|
145
171
|
twitter_access_token_expires_at: Annotated[
|
|
146
|
-
|
|
172
|
+
datetime | None,
|
|
147
173
|
PydanticField(
|
|
148
174
|
default=None,
|
|
149
175
|
description="Twitter access token expiration time",
|
|
150
176
|
),
|
|
151
177
|
] = None
|
|
152
178
|
twitter_refresh_token: Annotated[
|
|
153
|
-
|
|
179
|
+
str | None,
|
|
154
180
|
PydanticField(
|
|
155
181
|
default=None,
|
|
156
182
|
description="Twitter refresh token",
|
|
157
183
|
),
|
|
158
184
|
] = None
|
|
159
185
|
twitter_self_key_refreshed_at: Annotated[
|
|
160
|
-
|
|
186
|
+
datetime | None,
|
|
161
187
|
PydanticField(
|
|
162
188
|
default=None,
|
|
163
189
|
description="Twitter self-key userinfo last refresh time",
|
|
@@ -171,42 +197,63 @@ class AgentData(BaseModel):
|
|
|
171
197
|
),
|
|
172
198
|
] = None
|
|
173
199
|
telegram_id: Annotated[
|
|
174
|
-
|
|
200
|
+
str | None,
|
|
175
201
|
PydanticField(
|
|
176
202
|
default=None,
|
|
177
203
|
description="Telegram user ID",
|
|
178
204
|
),
|
|
179
205
|
] = None
|
|
180
206
|
telegram_username: Annotated[
|
|
181
|
-
|
|
207
|
+
str | None,
|
|
182
208
|
PydanticField(
|
|
183
209
|
default=None,
|
|
184
210
|
description="Telegram username",
|
|
185
211
|
),
|
|
186
212
|
] = None
|
|
187
213
|
telegram_name: Annotated[
|
|
188
|
-
|
|
214
|
+
str | None,
|
|
189
215
|
PydanticField(
|
|
190
216
|
default=None,
|
|
191
217
|
description="Telegram display name",
|
|
192
218
|
),
|
|
193
219
|
] = None
|
|
220
|
+
discord_id: Annotated[
|
|
221
|
+
str | None,
|
|
222
|
+
PydanticField(
|
|
223
|
+
default=None,
|
|
224
|
+
description="Discord user ID",
|
|
225
|
+
),
|
|
226
|
+
] = None
|
|
227
|
+
discord_username: Annotated[
|
|
228
|
+
str | None,
|
|
229
|
+
PydanticField(
|
|
230
|
+
default=None,
|
|
231
|
+
description="Discord username",
|
|
232
|
+
),
|
|
233
|
+
] = None
|
|
234
|
+
discord_name: Annotated[
|
|
235
|
+
str | None,
|
|
236
|
+
PydanticField(
|
|
237
|
+
default=None,
|
|
238
|
+
description="Discord display name",
|
|
239
|
+
),
|
|
240
|
+
] = None
|
|
194
241
|
error_message: Annotated[
|
|
195
|
-
|
|
242
|
+
str | None,
|
|
196
243
|
PydanticField(
|
|
197
244
|
default=None,
|
|
198
245
|
description="Last error message",
|
|
199
246
|
),
|
|
200
247
|
] = None
|
|
201
248
|
api_key: Annotated[
|
|
202
|
-
|
|
249
|
+
str | None,
|
|
203
250
|
PydanticField(
|
|
204
251
|
default=None,
|
|
205
252
|
description="API key for the agent",
|
|
206
253
|
),
|
|
207
254
|
] = None
|
|
208
255
|
api_key_public: Annotated[
|
|
209
|
-
|
|
256
|
+
str | None,
|
|
210
257
|
PydanticField(
|
|
211
258
|
default=None,
|
|
212
259
|
description="Public API key for the agent",
|
|
@@ -215,14 +262,14 @@ class AgentData(BaseModel):
|
|
|
215
262
|
created_at: Annotated[
|
|
216
263
|
datetime,
|
|
217
264
|
PydanticField(
|
|
218
|
-
default_factory=lambda: datetime.now(
|
|
265
|
+
default_factory=lambda: datetime.now(UTC),
|
|
219
266
|
description="Timestamp when the agent data was created",
|
|
220
267
|
),
|
|
221
268
|
]
|
|
222
269
|
updated_at: Annotated[
|
|
223
270
|
datetime,
|
|
224
271
|
PydanticField(
|
|
225
|
-
default_factory=lambda: datetime.now(
|
|
272
|
+
default_factory=lambda: datetime.now(UTC),
|
|
226
273
|
description="Timestamp when the agent data was last updated",
|
|
227
274
|
),
|
|
228
275
|
]
|
|
@@ -247,7 +294,7 @@ class AgentData(BaseModel):
|
|
|
247
294
|
return cls.model_construct(id=agent_id)
|
|
248
295
|
|
|
249
296
|
@classmethod
|
|
250
|
-
async def get_by_api_key(cls, api_key: str) ->
|
|
297
|
+
async def get_by_api_key(cls, api_key: str) -> AgentData | None:
|
|
251
298
|
"""Get agent data by API key.
|
|
252
299
|
|
|
253
300
|
Args:
|
|
@@ -343,20 +390,22 @@ class AgentPluginDataTable(Base):
|
|
|
343
390
|
|
|
344
391
|
__tablename__ = "agent_plugin_data"
|
|
345
392
|
|
|
346
|
-
agent_id =
|
|
347
|
-
plugin =
|
|
348
|
-
key =
|
|
349
|
-
data
|
|
350
|
-
|
|
393
|
+
agent_id: Mapped[str] = mapped_column(String, primary_key=True)
|
|
394
|
+
plugin: Mapped[str] = mapped_column(String, primary_key=True)
|
|
395
|
+
key: Mapped[str] = mapped_column(String, primary_key=True)
|
|
396
|
+
data: Mapped[dict[str, Any] | None] = mapped_column(
|
|
397
|
+
JSON().with_variant(JSONB(), "postgresql"), nullable=True
|
|
398
|
+
)
|
|
399
|
+
created_at: Mapped[datetime] = mapped_column(
|
|
351
400
|
DateTime(timezone=True),
|
|
352
401
|
nullable=False,
|
|
353
402
|
server_default=func.now(),
|
|
354
403
|
)
|
|
355
|
-
updated_at =
|
|
404
|
+
updated_at: Mapped[datetime] = mapped_column(
|
|
356
405
|
DateTime(timezone=True),
|
|
357
406
|
nullable=False,
|
|
358
407
|
server_default=func.now(),
|
|
359
|
-
onupdate=lambda: datetime.now(
|
|
408
|
+
onupdate=lambda: datetime.now(UTC),
|
|
360
409
|
)
|
|
361
410
|
|
|
362
411
|
|
|
@@ -388,28 +437,28 @@ class AgentPluginData(BaseModel):
|
|
|
388
437
|
PydanticField(description="Key for this specific piece of data"),
|
|
389
438
|
]
|
|
390
439
|
data: Annotated[
|
|
391
|
-
|
|
440
|
+
dict[str, Any],
|
|
392
441
|
PydanticField(default=None, description="JSON data stored for this key"),
|
|
393
442
|
]
|
|
394
443
|
created_at: Annotated[
|
|
395
444
|
datetime,
|
|
396
445
|
PydanticField(
|
|
397
446
|
description="Timestamp when this data was created",
|
|
398
|
-
default_factory=lambda: datetime.now(
|
|
447
|
+
default_factory=lambda: datetime.now(UTC),
|
|
399
448
|
),
|
|
400
449
|
]
|
|
401
450
|
updated_at: Annotated[
|
|
402
451
|
datetime,
|
|
403
452
|
PydanticField(
|
|
404
453
|
description="Timestamp when this data was last updated",
|
|
405
|
-
default_factory=lambda: datetime.now(
|
|
454
|
+
default_factory=lambda: datetime.now(UTC),
|
|
406
455
|
),
|
|
407
456
|
]
|
|
408
457
|
|
|
409
458
|
@classmethod
|
|
410
459
|
async def get(
|
|
411
460
|
cls, agent_id: str, plugin: str, key: str
|
|
412
|
-
) ->
|
|
461
|
+
) -> "AgentPluginData" | None:
|
|
413
462
|
"""Get plugin data for an agent.
|
|
414
463
|
|
|
415
464
|
Args:
|
|
@@ -476,44 +525,50 @@ class AgentQuotaTable(Base):
|
|
|
476
525
|
|
|
477
526
|
__tablename__ = "agent_quotas"
|
|
478
527
|
|
|
479
|
-
id =
|
|
480
|
-
plan =
|
|
481
|
-
message_count_total =
|
|
482
|
-
message_limit_total =
|
|
483
|
-
message_count_monthly =
|
|
484
|
-
message_limit_monthly =
|
|
485
|
-
message_count_daily =
|
|
486
|
-
message_limit_daily =
|
|
487
|
-
last_message_time
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
528
|
+
id: Mapped[str] = mapped_column(String, primary_key=True)
|
|
529
|
+
plan: Mapped[str] = mapped_column(String, default="self-hosted")
|
|
530
|
+
message_count_total: Mapped[int] = mapped_column(BigInteger, default=0)
|
|
531
|
+
message_limit_total: Mapped[int] = mapped_column(BigInteger, default=99999999)
|
|
532
|
+
message_count_monthly: Mapped[int] = mapped_column(BigInteger, default=0)
|
|
533
|
+
message_limit_monthly: Mapped[int] = mapped_column(BigInteger, default=99999999)
|
|
534
|
+
message_count_daily: Mapped[int] = mapped_column(BigInteger, default=0)
|
|
535
|
+
message_limit_daily: Mapped[int] = mapped_column(BigInteger, default=99999999)
|
|
536
|
+
last_message_time: Mapped[datetime | None] = mapped_column(
|
|
537
|
+
DateTime(timezone=True), default=None, nullable=True
|
|
538
|
+
)
|
|
539
|
+
autonomous_count_total: Mapped[int] = mapped_column(BigInteger, default=0)
|
|
540
|
+
autonomous_limit_total: Mapped[int] = mapped_column(BigInteger, default=99999999)
|
|
541
|
+
autonomous_count_monthly: Mapped[int] = mapped_column(BigInteger, default=0)
|
|
542
|
+
autonomous_limit_monthly: Mapped[int] = mapped_column(BigInteger, default=99999999)
|
|
543
|
+
last_autonomous_time: Mapped[datetime | None] = mapped_column(
|
|
544
|
+
DateTime(timezone=True), default=None, nullable=True
|
|
545
|
+
)
|
|
546
|
+
twitter_count_total: Mapped[int] = mapped_column(BigInteger, default=0)
|
|
547
|
+
twitter_limit_total: Mapped[int] = mapped_column(BigInteger, default=99999999)
|
|
548
|
+
twitter_count_monthly: Mapped[int] = mapped_column(BigInteger, default=0)
|
|
549
|
+
twitter_limit_monthly: Mapped[int] = mapped_column(BigInteger, default=99999999)
|
|
550
|
+
twitter_count_daily: Mapped[int] = mapped_column(BigInteger, default=0)
|
|
551
|
+
twitter_limit_daily: Mapped[int] = mapped_column(BigInteger, default=99999999)
|
|
552
|
+
last_twitter_time: Mapped[datetime | None] = mapped_column(
|
|
553
|
+
DateTime(timezone=True), default=None, nullable=True
|
|
554
|
+
)
|
|
555
|
+
free_income_daily: Mapped[Decimal] = mapped_column(Numeric(22, 4), default=0)
|
|
556
|
+
avg_action_cost: Mapped[Decimal] = mapped_column(Numeric(22, 4), default=0)
|
|
557
|
+
min_action_cost: Mapped[Decimal] = mapped_column(Numeric(22, 4), default=0)
|
|
558
|
+
max_action_cost: Mapped[Decimal] = mapped_column(Numeric(22, 4), default=0)
|
|
559
|
+
low_action_cost: Mapped[Decimal] = mapped_column(Numeric(22, 4), default=0)
|
|
560
|
+
medium_action_cost: Mapped[Decimal] = mapped_column(Numeric(22, 4), default=0)
|
|
561
|
+
high_action_cost: Mapped[Decimal] = mapped_column(Numeric(22, 4), default=0)
|
|
562
|
+
created_at: Mapped[datetime] = mapped_column(
|
|
508
563
|
DateTime(timezone=True),
|
|
509
564
|
nullable=False,
|
|
510
565
|
server_default=func.now(),
|
|
511
566
|
)
|
|
512
|
-
updated_at =
|
|
567
|
+
updated_at: Mapped[datetime] = mapped_column(
|
|
513
568
|
DateTime(timezone=True),
|
|
514
569
|
nullable=False,
|
|
515
570
|
server_default=func.now(),
|
|
516
|
-
onupdate=lambda: datetime.now(
|
|
571
|
+
onupdate=lambda: datetime.now(UTC),
|
|
517
572
|
)
|
|
518
573
|
|
|
519
574
|
|
|
@@ -547,7 +602,7 @@ class AgentQuota(BaseModel):
|
|
|
547
602
|
int, PydanticField(default=99999999, description="Daily message limit")
|
|
548
603
|
]
|
|
549
604
|
last_message_time: Annotated[
|
|
550
|
-
|
|
605
|
+
datetime | None,
|
|
551
606
|
PydanticField(default=None, description="Last message timestamp"),
|
|
552
607
|
]
|
|
553
608
|
autonomous_count_total: Annotated[
|
|
@@ -578,7 +633,7 @@ class AgentQuota(BaseModel):
|
|
|
578
633
|
),
|
|
579
634
|
]
|
|
580
635
|
last_autonomous_time: Annotated[
|
|
581
|
-
|
|
636
|
+
datetime | None,
|
|
582
637
|
PydanticField(default=None, description="Last autonomous operation timestamp"),
|
|
583
638
|
]
|
|
584
639
|
twitter_count_total: Annotated[
|
|
@@ -603,7 +658,7 @@ class AgentQuota(BaseModel):
|
|
|
603
658
|
PydanticField(default=99999999, description="Daily Twitter operations limit"),
|
|
604
659
|
]
|
|
605
660
|
last_twitter_time: Annotated[
|
|
606
|
-
|
|
661
|
+
datetime | None,
|
|
607
662
|
PydanticField(default=None, description="Last Twitter operation timestamp"),
|
|
608
663
|
]
|
|
609
664
|
free_income_daily: Annotated[
|
|
@@ -638,14 +693,14 @@ class AgentQuota(BaseModel):
|
|
|
638
693
|
datetime,
|
|
639
694
|
PydanticField(
|
|
640
695
|
description="Timestamp when this quota was created",
|
|
641
|
-
default_factory=lambda: datetime.now(
|
|
696
|
+
default_factory=lambda: datetime.now(UTC),
|
|
642
697
|
),
|
|
643
698
|
]
|
|
644
699
|
updated_at: Annotated[
|
|
645
700
|
datetime,
|
|
646
701
|
PydanticField(
|
|
647
702
|
description="Timestamp when this quota was last updated",
|
|
648
|
-
default_factory=lambda: datetime.now(
|
|
703
|
+
default_factory=lambda: datetime.now(UTC),
|
|
649
704
|
),
|
|
650
705
|
]
|
|
651
706
|
|
|
@@ -754,7 +809,11 @@ class AgentQuota(BaseModel):
|
|
|
754
809
|
await session.execute(stmt)
|
|
755
810
|
except Exception as e:
|
|
756
811
|
logger.error(f"Error adding free income: {str(e)}")
|
|
757
|
-
raise
|
|
812
|
+
raise IntentKitAPIError(
|
|
813
|
+
status_code=500,
|
|
814
|
+
key="DatabaseError",
|
|
815
|
+
message=f"Database error: {str(e)}",
|
|
816
|
+
)
|
|
758
817
|
|
|
759
818
|
async def add_message(self) -> None:
|
|
760
819
|
"""Add a message to the agent's message count."""
|
|
@@ -766,7 +825,7 @@ class AgentQuota(BaseModel):
|
|
|
766
825
|
quota_record.message_count_total += 1
|
|
767
826
|
quota_record.message_count_monthly += 1
|
|
768
827
|
quota_record.message_count_daily += 1
|
|
769
|
-
quota_record.last_message_time = datetime.now(
|
|
828
|
+
quota_record.last_message_time = datetime.now(UTC)
|
|
770
829
|
db.add(quota_record)
|
|
771
830
|
await db.commit()
|
|
772
831
|
|
|
@@ -786,7 +845,7 @@ class AgentQuota(BaseModel):
|
|
|
786
845
|
# Update record
|
|
787
846
|
quota_record.autonomous_count_total += 1
|
|
788
847
|
quota_record.autonomous_count_monthly += 1
|
|
789
|
-
quota_record.last_autonomous_time = datetime.now(
|
|
848
|
+
quota_record.last_autonomous_time = datetime.now(UTC)
|
|
790
849
|
db.add(quota_record)
|
|
791
850
|
await db.commit()
|
|
792
851
|
|
|
@@ -807,7 +866,7 @@ class AgentQuota(BaseModel):
|
|
|
807
866
|
# Update record
|
|
808
867
|
quota_record.twitter_count_total += 1
|
|
809
868
|
quota_record.twitter_count_daily += 1
|
|
810
|
-
quota_record.last_twitter_time = datetime.now(
|
|
869
|
+
quota_record.last_twitter_time = datetime.now(UTC)
|
|
811
870
|
db.add(quota_record)
|
|
812
871
|
await db.commit()
|
|
813
872
|
|