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/chat.py
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from datetime import UTC, datetime
|
|
2
4
|
from decimal import Decimal
|
|
3
5
|
from enum import Enum
|
|
4
|
-
from typing import Annotated,
|
|
6
|
+
from typing import Annotated, ClassVar, NotRequired, TypedDict, final
|
|
5
7
|
|
|
6
8
|
from epyxid import XID
|
|
7
|
-
from intentkit.models.app_setting import AppSetting, SystemMessageType
|
|
8
|
-
from intentkit.models.base import Base
|
|
9
|
-
from intentkit.models.db import get_session
|
|
10
9
|
from pydantic import BaseModel, ConfigDict, Field
|
|
11
10
|
from sqlalchemy import (
|
|
12
11
|
Boolean,
|
|
13
|
-
Column,
|
|
14
12
|
DateTime,
|
|
15
13
|
Float,
|
|
16
14
|
Index,
|
|
@@ -24,6 +22,11 @@ from sqlalchemy import (
|
|
|
24
22
|
)
|
|
25
23
|
from sqlalchemy.dialects.postgresql import JSON, JSONB
|
|
26
24
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
25
|
+
from sqlalchemy.orm import Mapped, mapped_column
|
|
26
|
+
|
|
27
|
+
from intentkit.models.app_setting import AppSetting, SystemMessageType
|
|
28
|
+
from intentkit.models.base import Base
|
|
29
|
+
from intentkit.models.db import get_session
|
|
27
30
|
|
|
28
31
|
|
|
29
32
|
class ChatMessageAttachmentType(str, Enum):
|
|
@@ -43,10 +46,12 @@ class AuthorType(str, Enum):
|
|
|
43
46
|
SKILL = "skill"
|
|
44
47
|
TELEGRAM = "telegram"
|
|
45
48
|
TWITTER = "twitter"
|
|
49
|
+
DISCORD = "discord"
|
|
46
50
|
WEB = "web"
|
|
47
51
|
SYSTEM = "system"
|
|
48
52
|
API = "api"
|
|
49
53
|
XMTP = "xmtp"
|
|
54
|
+
X402 = "x402"
|
|
50
55
|
|
|
51
56
|
|
|
52
57
|
class ChatMessageAttachment(TypedDict):
|
|
@@ -64,7 +69,7 @@ class ChatMessageAttachment(TypedDict):
|
|
|
64
69
|
),
|
|
65
70
|
]
|
|
66
71
|
url: Annotated[
|
|
67
|
-
|
|
72
|
+
str | None,
|
|
68
73
|
Field(
|
|
69
74
|
...,
|
|
70
75
|
description="URL of the attachment",
|
|
@@ -72,7 +77,7 @@ class ChatMessageAttachment(TypedDict):
|
|
|
72
77
|
),
|
|
73
78
|
]
|
|
74
79
|
json: Annotated[
|
|
75
|
-
|
|
80
|
+
dict[str, object] | None,
|
|
76
81
|
Field(
|
|
77
82
|
None,
|
|
78
83
|
description="JSON data of the attachment",
|
|
@@ -85,7 +90,7 @@ class ChatMessageSkillCall(TypedDict):
|
|
|
85
90
|
|
|
86
91
|
id: NotRequired[str]
|
|
87
92
|
name: str
|
|
88
|
-
parameters: dict
|
|
93
|
+
parameters: dict[str, object]
|
|
89
94
|
success: bool
|
|
90
95
|
response: NotRequired[
|
|
91
96
|
str
|
|
@@ -113,7 +118,7 @@ class ChatMessageRequest(BaseModel):
|
|
|
113
118
|
),
|
|
114
119
|
]
|
|
115
120
|
app_id: Annotated[
|
|
116
|
-
|
|
121
|
+
str | None,
|
|
117
122
|
Field(
|
|
118
123
|
None,
|
|
119
124
|
description="Optional application identifier",
|
|
@@ -140,21 +145,21 @@ class ChatMessageRequest(BaseModel):
|
|
|
140
145
|
),
|
|
141
146
|
]
|
|
142
147
|
search_mode: Annotated[
|
|
143
|
-
|
|
148
|
+
bool | None,
|
|
144
149
|
Field(
|
|
145
150
|
None,
|
|
146
151
|
description="Optional flag to enable search mode",
|
|
147
152
|
),
|
|
148
153
|
]
|
|
149
154
|
super_mode: Annotated[
|
|
150
|
-
|
|
155
|
+
bool | None,
|
|
151
156
|
Field(
|
|
152
157
|
None,
|
|
153
158
|
description="Optional flag to enable super mode",
|
|
154
159
|
),
|
|
155
160
|
]
|
|
156
161
|
attachments: Annotated[
|
|
157
|
-
|
|
162
|
+
list[ChatMessageAttachment] | None,
|
|
158
163
|
Field(
|
|
159
164
|
None,
|
|
160
165
|
description="Optional list of attachments (links, images, or files)",
|
|
@@ -162,126 +167,67 @@ class ChatMessageRequest(BaseModel):
|
|
|
162
167
|
),
|
|
163
168
|
]
|
|
164
169
|
|
|
165
|
-
model_config = ConfigDict(
|
|
170
|
+
model_config: ClassVar[ConfigDict] = ConfigDict(
|
|
166
171
|
use_enum_values=True,
|
|
167
172
|
json_schema_extra={
|
|
168
173
|
"example": {
|
|
169
174
|
"chat_id": "chat-123",
|
|
170
175
|
"app_id": "app-789",
|
|
171
176
|
"user_id": "user-456",
|
|
172
|
-
"message": "Hello,
|
|
173
|
-
"search_mode":
|
|
177
|
+
"message": "Hello, what can you do?",
|
|
178
|
+
"search_mode": False,
|
|
174
179
|
"super_mode": False,
|
|
175
|
-
"attachments": [
|
|
176
|
-
{
|
|
177
|
-
"type": "link",
|
|
178
|
-
"url": "https://example.com",
|
|
179
|
-
}
|
|
180
|
-
],
|
|
181
180
|
}
|
|
182
181
|
},
|
|
183
182
|
)
|
|
184
183
|
|
|
185
184
|
|
|
185
|
+
@final
|
|
186
186
|
class ChatMessageTable(Base):
|
|
187
187
|
"""Chat message database table model."""
|
|
188
188
|
|
|
189
189
|
__tablename__ = "chat_messages"
|
|
190
|
-
__table_args__ = (
|
|
190
|
+
__table_args__ = ( # pyright: ignore[reportAny]
|
|
191
191
|
Index("ix_chat_messages_chat_id", "chat_id"),
|
|
192
192
|
Index("ix_chat_messages_agent_id_author_type", "agent_id", "author_type"),
|
|
193
193
|
Index("ix_chat_messages_agent_id_chat_id", "agent_id", "chat_id"),
|
|
194
194
|
)
|
|
195
195
|
|
|
196
|
-
id =
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
)
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
)
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
)
|
|
208
|
-
user_id = Column(
|
|
209
|
-
String,
|
|
210
|
-
nullable=True,
|
|
211
|
-
)
|
|
212
|
-
author_id = Column(
|
|
213
|
-
String,
|
|
214
|
-
nullable=False,
|
|
215
|
-
)
|
|
216
|
-
author_type = Column(
|
|
217
|
-
String,
|
|
218
|
-
nullable=False,
|
|
219
|
-
)
|
|
220
|
-
model = Column(
|
|
221
|
-
String,
|
|
222
|
-
nullable=True,
|
|
223
|
-
)
|
|
224
|
-
thread_type = Column(
|
|
225
|
-
String,
|
|
226
|
-
nullable=True,
|
|
227
|
-
)
|
|
228
|
-
reply_to = Column(
|
|
229
|
-
String,
|
|
230
|
-
nullable=True,
|
|
231
|
-
)
|
|
232
|
-
message = Column(
|
|
233
|
-
String,
|
|
234
|
-
nullable=False,
|
|
235
|
-
)
|
|
236
|
-
attachments = Column(
|
|
196
|
+
id: Mapped[str] = mapped_column(String, primary_key=True)
|
|
197
|
+
agent_id: Mapped[str] = mapped_column(String, nullable=False)
|
|
198
|
+
chat_id: Mapped[str] = mapped_column(String, nullable=False)
|
|
199
|
+
user_id: Mapped[str | None] = mapped_column(String, nullable=True)
|
|
200
|
+
author_id: Mapped[str] = mapped_column(String, nullable=False)
|
|
201
|
+
author_type: Mapped[str] = mapped_column(String, nullable=False)
|
|
202
|
+
model: Mapped[str | None] = mapped_column(String, nullable=True)
|
|
203
|
+
thread_type: Mapped[AuthorType | None] = mapped_column(String, nullable=True)
|
|
204
|
+
reply_to: Mapped[str | None] = mapped_column(String, nullable=True)
|
|
205
|
+
message: Mapped[str] = mapped_column(String, nullable=False)
|
|
206
|
+
attachments: Mapped[list[ChatMessageAttachment] | None] = mapped_column(
|
|
237
207
|
JSON().with_variant(JSONB(), "postgresql"),
|
|
238
208
|
nullable=True,
|
|
239
209
|
)
|
|
240
|
-
skill_calls =
|
|
210
|
+
skill_calls: Mapped[list[ChatMessageSkillCall] | None] = mapped_column(
|
|
241
211
|
JSON().with_variant(JSONB(), "postgresql"),
|
|
242
212
|
nullable=True,
|
|
243
213
|
)
|
|
244
|
-
input_tokens =
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
)
|
|
248
|
-
|
|
249
|
-
Integer,
|
|
250
|
-
default=0,
|
|
251
|
-
)
|
|
252
|
-
time_cost = Column(
|
|
253
|
-
Float,
|
|
254
|
-
default=0,
|
|
255
|
-
)
|
|
256
|
-
credit_event_id = Column(
|
|
257
|
-
String,
|
|
258
|
-
nullable=True,
|
|
259
|
-
)
|
|
260
|
-
credit_cost = Column(
|
|
214
|
+
input_tokens: Mapped[int] = mapped_column(Integer, default=0)
|
|
215
|
+
output_tokens: Mapped[int] = mapped_column(Integer, default=0)
|
|
216
|
+
time_cost: Mapped[float] = mapped_column(Float, default=0)
|
|
217
|
+
credit_event_id: Mapped[str | None] = mapped_column(String, nullable=True)
|
|
218
|
+
credit_cost: Mapped[Decimal | None] = mapped_column(
|
|
261
219
|
Numeric(22, 4),
|
|
262
220
|
nullable=True,
|
|
263
221
|
)
|
|
264
|
-
cold_start_cost =
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
)
|
|
268
|
-
|
|
269
|
-
String,
|
|
270
|
-
nullable=True,
|
|
271
|
-
)
|
|
272
|
-
search_mode = Column(
|
|
273
|
-
Boolean,
|
|
274
|
-
nullable=True,
|
|
275
|
-
)
|
|
276
|
-
super_mode = Column(
|
|
277
|
-
Boolean,
|
|
278
|
-
nullable=True,
|
|
279
|
-
)
|
|
280
|
-
error_type = Column(
|
|
222
|
+
cold_start_cost: Mapped[float] = mapped_column(Float, default=0)
|
|
223
|
+
app_id: Mapped[str | None] = mapped_column(String, nullable=True)
|
|
224
|
+
search_mode: Mapped[bool | None] = mapped_column(Boolean, nullable=True)
|
|
225
|
+
super_mode: Mapped[bool | None] = mapped_column(Boolean, nullable=True)
|
|
226
|
+
error_type: Mapped[SystemMessageType | None] = mapped_column(
|
|
281
227
|
String,
|
|
282
228
|
nullable=True,
|
|
283
229
|
)
|
|
284
|
-
created_at =
|
|
230
|
+
created_at: Mapped[datetime] = mapped_column(
|
|
285
231
|
DateTime(timezone=True),
|
|
286
232
|
nullable=False,
|
|
287
233
|
server_default=func.now(),
|
|
@@ -291,7 +237,7 @@ class ChatMessageTable(Base):
|
|
|
291
237
|
class ChatMessageCreate(BaseModel):
|
|
292
238
|
"""Base model for creating chat messages with fields needed for creation."""
|
|
293
239
|
|
|
294
|
-
model_config = ConfigDict(
|
|
240
|
+
model_config: ClassVar[ConfigDict] = ConfigDict(
|
|
295
241
|
use_enum_values=True,
|
|
296
242
|
from_attributes=True,
|
|
297
243
|
)
|
|
@@ -308,68 +254,68 @@ class ChatMessageCreate(BaseModel):
|
|
|
308
254
|
]
|
|
309
255
|
chat_id: Annotated[str, Field(description="ID of the chat this message belongs to")]
|
|
310
256
|
user_id: Annotated[
|
|
311
|
-
|
|
257
|
+
str | None,
|
|
312
258
|
Field(description="ID of the user this message belongs to or reply to"),
|
|
313
259
|
]
|
|
314
260
|
author_id: Annotated[str, Field(description="ID of the message author")]
|
|
315
261
|
author_type: Annotated[AuthorType, Field(description="Type of the message author")]
|
|
316
262
|
model: Annotated[
|
|
317
|
-
|
|
318
|
-
]
|
|
263
|
+
str | None, Field(None, description="LLM model used if applicable")
|
|
264
|
+
] = None
|
|
319
265
|
thread_type: Annotated[
|
|
320
|
-
|
|
266
|
+
AuthorType | None,
|
|
321
267
|
Field(None, description="Author Type of the message thread start"),
|
|
322
|
-
]
|
|
268
|
+
] = None
|
|
323
269
|
reply_to: Annotated[
|
|
324
|
-
|
|
270
|
+
str | None,
|
|
325
271
|
Field(None, description="ID of the message this message is a reply to"),
|
|
326
|
-
]
|
|
272
|
+
] = None
|
|
327
273
|
message: Annotated[str, Field(description="Content of the message")]
|
|
328
274
|
attachments: Annotated[
|
|
329
|
-
|
|
275
|
+
list[ChatMessageAttachment] | None,
|
|
330
276
|
Field(None, description="List of attachments in the message"),
|
|
331
|
-
]
|
|
277
|
+
] = None
|
|
332
278
|
skill_calls: Annotated[
|
|
333
|
-
|
|
279
|
+
list[ChatMessageSkillCall] | None,
|
|
334
280
|
Field(None, description="Skill call details"),
|
|
335
|
-
]
|
|
281
|
+
] = None
|
|
336
282
|
input_tokens: Annotated[
|
|
337
283
|
int, Field(0, description="Number of tokens in the input message")
|
|
338
|
-
]
|
|
284
|
+
] = 0
|
|
339
285
|
output_tokens: Annotated[
|
|
340
286
|
int, Field(0, description="Number of tokens in the output message")
|
|
341
|
-
]
|
|
287
|
+
] = 0
|
|
342
288
|
time_cost: Annotated[
|
|
343
289
|
float, Field(0.0, description="Time cost for the message in seconds")
|
|
344
|
-
]
|
|
290
|
+
] = 0.0
|
|
345
291
|
credit_event_id: Annotated[
|
|
346
|
-
|
|
292
|
+
str | None,
|
|
347
293
|
Field(None, description="ID of the credit event for this message"),
|
|
348
|
-
]
|
|
294
|
+
] = None
|
|
349
295
|
credit_cost: Annotated[
|
|
350
|
-
|
|
296
|
+
Decimal | None,
|
|
351
297
|
Field(None, description="Credit cost for the message in credits"),
|
|
352
|
-
]
|
|
298
|
+
] = None
|
|
353
299
|
cold_start_cost: Annotated[
|
|
354
300
|
float,
|
|
355
301
|
Field(0.0, description="Cost for the cold start of the message in seconds"),
|
|
356
|
-
]
|
|
302
|
+
] = 0.0
|
|
357
303
|
app_id: Annotated[
|
|
358
|
-
|
|
304
|
+
str | None,
|
|
359
305
|
Field(None, description="Optional application identifier"),
|
|
360
|
-
]
|
|
306
|
+
] = None
|
|
361
307
|
search_mode: Annotated[
|
|
362
|
-
|
|
308
|
+
bool | None,
|
|
363
309
|
Field(None, description="Optional flag to enable search mode"),
|
|
364
|
-
]
|
|
310
|
+
] = None
|
|
365
311
|
super_mode: Annotated[
|
|
366
|
-
|
|
312
|
+
bool | None,
|
|
367
313
|
Field(None, description="Optional flag to enable super mode"),
|
|
368
|
-
]
|
|
314
|
+
] = None
|
|
369
315
|
error_type: Annotated[
|
|
370
|
-
|
|
316
|
+
SystemMessageType | None,
|
|
371
317
|
Field(None, description="Optional error type, used when author_type is system"),
|
|
372
|
-
]
|
|
318
|
+
] = None
|
|
373
319
|
|
|
374
320
|
async def save_in_session(self, db: AsyncSession) -> "ChatMessage":
|
|
375
321
|
"""Save the chat message to the database.
|
|
@@ -433,7 +379,7 @@ class ChatMessageCreate(BaseModel):
|
|
|
433
379
|
class ChatMessage(ChatMessageCreate):
|
|
434
380
|
"""Chat message model with all fields including server-generated ones."""
|
|
435
381
|
|
|
436
|
-
model_config = ConfigDict(
|
|
382
|
+
model_config: ClassVar[ConfigDict] = ConfigDict(
|
|
437
383
|
use_enum_values=True,
|
|
438
384
|
json_encoders={
|
|
439
385
|
datetime: lambda v: v.isoformat(timespec="milliseconds"),
|
|
@@ -526,7 +472,7 @@ class ChatMessage(ChatMessageCreate):
|
|
|
526
472
|
return ChatMessage.model_validate(sanitized_data)
|
|
527
473
|
|
|
528
474
|
@classmethod
|
|
529
|
-
async def get(cls, message_id: str) ->
|
|
475
|
+
async def get(cls, message_id: str) -> ChatMessage | None:
|
|
530
476
|
async with get_session() as db:
|
|
531
477
|
raw = await db.get(ChatMessageTable, message_id)
|
|
532
478
|
if raw:
|
|
@@ -540,36 +486,36 @@ class ChatTable(Base):
|
|
|
540
486
|
__tablename__ = "chats"
|
|
541
487
|
__table_args__ = (Index("ix_chats_agent_user", "agent_id", "user_id"),)
|
|
542
488
|
|
|
543
|
-
id =
|
|
489
|
+
id: Mapped[str] = mapped_column(
|
|
544
490
|
String,
|
|
545
491
|
primary_key=True,
|
|
546
492
|
)
|
|
547
|
-
agent_id =
|
|
493
|
+
agent_id: Mapped[str] = mapped_column(
|
|
548
494
|
String,
|
|
549
495
|
nullable=False,
|
|
550
496
|
)
|
|
551
|
-
user_id =
|
|
497
|
+
user_id: Mapped[str] = mapped_column(
|
|
552
498
|
String,
|
|
553
499
|
nullable=False,
|
|
554
500
|
)
|
|
555
|
-
summary =
|
|
501
|
+
summary: Mapped[str] = mapped_column(
|
|
556
502
|
String,
|
|
557
503
|
default="",
|
|
558
504
|
)
|
|
559
|
-
rounds =
|
|
505
|
+
rounds: Mapped[int] = mapped_column(
|
|
560
506
|
Integer,
|
|
561
507
|
default=0,
|
|
562
508
|
)
|
|
563
|
-
created_at =
|
|
509
|
+
created_at: Mapped[datetime] = mapped_column(
|
|
564
510
|
DateTime(timezone=True),
|
|
565
511
|
nullable=False,
|
|
566
512
|
server_default=func.now(),
|
|
567
513
|
)
|
|
568
|
-
updated_at =
|
|
514
|
+
updated_at: Mapped[datetime] = mapped_column(
|
|
569
515
|
DateTime(timezone=True),
|
|
570
516
|
nullable=False,
|
|
571
517
|
server_default=func.now(),
|
|
572
|
-
onupdate=lambda: datetime.now(
|
|
518
|
+
onupdate=lambda: datetime.now(UTC),
|
|
573
519
|
)
|
|
574
520
|
|
|
575
521
|
|
|
@@ -624,7 +570,7 @@ class Chat(ChatCreate):
|
|
|
624
570
|
]
|
|
625
571
|
|
|
626
572
|
@classmethod
|
|
627
|
-
async def get(cls, id: str) ->
|
|
573
|
+
async def get(cls, id: str) -> "Chat" | None:
|
|
628
574
|
"""Get a chat by its ID.
|
|
629
575
|
|
|
630
576
|
Args:
|
|
@@ -688,7 +634,7 @@ class Chat(ChatCreate):
|
|
|
688
634
|
return self
|
|
689
635
|
|
|
690
636
|
@classmethod
|
|
691
|
-
async def get_by_agent_user(cls, agent_id: str, user_id: str) ->
|
|
637
|
+
async def get_by_agent_user(cls, agent_id: str, user_id: str) -> list["Chat"]:
|
|
692
638
|
"""Get all chats for a specific agent and user.
|
|
693
639
|
|
|
694
640
|
Args:
|