intentkit 0.8.16.dev1__py3-none-any.whl → 0.8.17.dev2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of intentkit might be problematic. Click here for more details.
- intentkit/__init__.py +1 -1
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +6 -5
- intentkit/abstracts/skill.py +5 -5
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/cdp.py +19 -77
- intentkit/clients/twitter.py +26 -34
- intentkit/clients/web3.py +1 -3
- intentkit/config/config.py +4 -0
- intentkit/core/agent.py +15 -15
- intentkit/core/asset.py +1 -2
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +19 -20
- intentkit/core/engine.py +2 -4
- intentkit/core/node.py +2 -1
- intentkit/core/prompt.py +3 -4
- intentkit/core/scheduler.py +1 -1
- intentkit/core/statistics.py +6 -7
- intentkit/models/agent.py +125 -92
- intentkit/models/agent_data.py +62 -36
- intentkit/models/app_setting.py +6 -6
- intentkit/models/chat.py +27 -24
- intentkit/models/conversation.py +8 -8
- intentkit/models/credit.py +62 -64
- intentkit/models/db.py +8 -7
- intentkit/models/db_mig.py +2 -2
- intentkit/models/llm.py +12 -14
- intentkit/models/redis.py +2 -3
- intentkit/models/skill.py +25 -27
- intentkit/models/skills.csv +29 -28
- intentkit/models/user.py +21 -22
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +1 -3
- intentkit/skills/aixbt/base.py +1 -3
- intentkit/skills/aixbt/projects.py +13 -13
- intentkit/skills/allora/base.py +1 -3
- intentkit/skills/allora/price.py +2 -3
- intentkit/skills/base.py +15 -22
- intentkit/skills/basename/__init__.py +3 -5
- intentkit/skills/carv/__init__.py +7 -8
- intentkit/skills/carv/base.py +6 -6
- intentkit/skills/carv/fetch_news.py +3 -3
- intentkit/skills/carv/onchain_query.py +4 -4
- intentkit/skills/carv/token_info_and_price.py +5 -5
- intentkit/skills/casino/base.py +1 -3
- intentkit/skills/casino/deck_draw.py +1 -2
- intentkit/skills/casino/deck_shuffle.py +1 -2
- intentkit/skills/casino/dice_roll.py +1 -2
- intentkit/skills/cdp/__init__.py +3 -5
- intentkit/skills/cdp/base.py +1 -3
- intentkit/skills/chainlist/base.py +1 -3
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/common/base.py +1 -3
- intentkit/skills/common/current_time.py +1 -2
- intentkit/skills/cookiefun/base.py +1 -2
- intentkit/skills/cookiefun/get_account_details.py +7 -7
- intentkit/skills/cookiefun/get_account_feed.py +19 -19
- intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
- intentkit/skills/cookiefun/get_sectors.py +3 -3
- intentkit/skills/cookiefun/search_accounts.py +9 -9
- intentkit/skills/cryptocompare/api.py +2 -3
- intentkit/skills/cryptocompare/base.py +6 -6
- intentkit/skills/cryptocompare/fetch_news.py +3 -4
- intentkit/skills/cryptocompare/fetch_price.py +5 -6
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +3 -4
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +3 -4
- intentkit/skills/cryptocompare/fetch_top_volume.py +3 -4
- intentkit/skills/cryptocompare/fetch_trading_signals.py +4 -5
- intentkit/skills/cryptopanic/__init__.py +4 -4
- intentkit/skills/cryptopanic/base.py +1 -3
- intentkit/skills/cryptopanic/fetch_crypto_news.py +3 -5
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +3 -3
- intentkit/skills/dapplooker/base.py +1 -3
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +5 -6
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +6 -8
- intentkit/skills/defillama/coins/fetch_block.py +4 -6
- intentkit/skills/defillama/coins/fetch_current_prices.py +6 -8
- intentkit/skills/defillama/coins/fetch_first_price.py +5 -7
- intentkit/skills/defillama/coins/fetch_historical_prices.py +7 -9
- intentkit/skills/defillama/coins/fetch_price_chart.py +7 -9
- intentkit/skills/defillama/coins/fetch_price_percentage.py +5 -7
- intentkit/skills/defillama/config/chains.py +1 -3
- intentkit/skills/defillama/fees/fetch_fees_overview.py +22 -24
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +14 -16
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +6 -8
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +3 -5
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +5 -7
- intentkit/skills/defillama/tests/api_integration.test.py +1 -1
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +2 -4
- intentkit/skills/defillama/tvl/fetch_chains.py +7 -9
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +2 -4
- intentkit/skills/defillama/tvl/fetch_protocol.py +30 -36
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +1 -3
- intentkit/skills/defillama/tvl/fetch_protocols.py +35 -43
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +40 -46
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +33 -35
- intentkit/skills/defillama/volumes/fetch_options_overview.py +22 -26
- intentkit/skills/defillama/yields/fetch_pool_chart.py +8 -10
- intentkit/skills/defillama/yields/fetch_pools.py +24 -28
- intentkit/skills/dexscreener/__init__.py +2 -2
- intentkit/skills/dexscreener/base.py +3 -3
- intentkit/skills/dexscreener/get_pair_info.py +2 -2
- intentkit/skills/dexscreener/get_token_pairs.py +2 -2
- intentkit/skills/dexscreener/get_tokens_info.py +5 -5
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/search_token.py +182 -182
- intentkit/skills/dexscreener/utils.py +15 -14
- intentkit/skills/dune_analytics/__init__.py +4 -4
- intentkit/skills/dune_analytics/base.py +1 -3
- intentkit/skills/dune_analytics/fetch_kol_buys.py +4 -4
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +5 -5
- intentkit/skills/elfa/base.py +1 -3
- intentkit/skills/elfa/mention.py +19 -21
- intentkit/skills/elfa/stats.py +4 -4
- intentkit/skills/elfa/tokens.py +12 -12
- intentkit/skills/elfa/utils.py +25 -27
- intentkit/skills/enso/__init__.py +2 -2
- intentkit/skills/enso/base.py +5 -8
- intentkit/skills/enso/best_yield.py +4 -6
- intentkit/skills/enso/networks.py +1 -2
- intentkit/skills/enso/prices.py +1 -3
- intentkit/skills/enso/route.py +1 -3
- intentkit/skills/enso/tokens.py +1 -3
- intentkit/skills/enso/wallet.py +5 -5
- intentkit/skills/erc20/__init__.py +4 -6
- intentkit/skills/erc721/__init__.py +4 -6
- intentkit/skills/firecrawl/base.py +1 -3
- intentkit/skills/firecrawl/clear.py +1 -2
- intentkit/skills/firecrawl/crawl.py +9 -10
- intentkit/skills/firecrawl/query.py +1 -2
- intentkit/skills/firecrawl/scrape.py +7 -8
- intentkit/skills/firecrawl/utils.py +13 -13
- intentkit/skills/github/base.py +1 -3
- intentkit/skills/github/github_search.py +1 -2
- intentkit/skills/heurist/base.py +1 -3
- intentkit/skills/heurist/image_generation_animagine_xl.py +7 -8
- intentkit/skills/heurist/image_generation_arthemy_comics.py +7 -8
- intentkit/skills/heurist/image_generation_arthemy_real.py +7 -8
- intentkit/skills/heurist/image_generation_braindance.py +7 -8
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +7 -8
- intentkit/skills/heurist/image_generation_flux_1_dev.py +7 -8
- intentkit/skills/heurist/image_generation_sdxl.py +7 -8
- intentkit/skills/http/base.py +1 -3
- intentkit/skills/http/get.py +7 -7
- intentkit/skills/http/post.py +9 -9
- intentkit/skills/http/put.py +9 -9
- intentkit/skills/lifi/__init__.py +4 -4
- intentkit/skills/lifi/base.py +1 -3
- intentkit/skills/lifi/token_execute.py +13 -13
- intentkit/skills/lifi/token_quote.py +6 -6
- intentkit/skills/lifi/utils.py +16 -16
- intentkit/skills/moralis/__init__.py +3 -3
- intentkit/skills/moralis/api.py +6 -7
- intentkit/skills/moralis/base.py +2 -4
- intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
- intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
- intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
- intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
- intentkit/skills/morpho/__init__.py +4 -6
- intentkit/skills/nation/__init__.py +2 -2
- intentkit/skills/nation/base.py +1 -3
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/onchain.py +2 -6
- intentkit/skills/openai/base.py +1 -3
- intentkit/skills/openai/dalle_image_generation.py +1 -3
- intentkit/skills/openai/gpt_image_generation.py +2 -3
- intentkit/skills/openai/gpt_image_to_image.py +2 -3
- intentkit/skills/openai/image_to_text.py +1 -2
- intentkit/skills/portfolio/base.py +6 -6
- intentkit/skills/portfolio/token_balances.py +21 -21
- intentkit/skills/portfolio/wallet_approvals.py +7 -7
- intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
- intentkit/skills/portfolio/wallet_history.py +21 -21
- intentkit/skills/portfolio/wallet_net_worth.py +13 -13
- intentkit/skills/portfolio/wallet_nfts.py +19 -19
- intentkit/skills/portfolio/wallet_profitability.py +7 -7
- 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 +3 -5
- intentkit/skills/slack/base.py +2 -4
- intentkit/skills/slack/get_channel.py +8 -8
- intentkit/skills/slack/get_message.py +9 -9
- intentkit/skills/slack/schedule_message.py +5 -5
- intentkit/skills/slack/send_message.py +3 -5
- intentkit/skills/supabase/base.py +1 -3
- intentkit/skills/supabase/delete_data.py +4 -4
- intentkit/skills/supabase/fetch_data.py +12 -12
- intentkit/skills/supabase/insert_data.py +4 -4
- intentkit/skills/supabase/invoke_function.py +6 -6
- intentkit/skills/supabase/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- intentkit/skills/superfluid/__init__.py +4 -6
- intentkit/skills/system/add_autonomous_task.py +8 -10
- intentkit/skills/system/edit_autonomous_task.py +12 -14
- intentkit/skills/system/list_autonomous_tasks.py +1 -3
- intentkit/skills/tavily/base.py +1 -3
- intentkit/skills/tavily/tavily_extract.py +1 -2
- intentkit/skills/tavily/tavily_search.py +1 -3
- intentkit/skills/token/base.py +5 -5
- intentkit/skills/token/erc20_transfers.py +19 -19
- intentkit/skills/token/token_analytics.py +3 -3
- intentkit/skills/token/token_price.py +13 -13
- intentkit/skills/token/token_search.py +9 -9
- intentkit/skills/twitter/base.py +3 -4
- intentkit/skills/twitter/follow_user.py +1 -2
- intentkit/skills/twitter/get_mentions.py +3 -4
- intentkit/skills/twitter/get_timeline.py +1 -2
- intentkit/skills/twitter/get_user_by_username.py +1 -2
- intentkit/skills/twitter/get_user_tweets.py +2 -3
- intentkit/skills/twitter/like_tweet.py +1 -2
- intentkit/skills/twitter/post_tweet.py +3 -4
- intentkit/skills/twitter/reply_tweet.py +3 -4
- intentkit/skills/twitter/retweet.py +1 -2
- intentkit/skills/twitter/search_tweets.py +1 -2
- intentkit/skills/unrealspeech/base.py +1 -3
- intentkit/skills/unrealspeech/text_to_speech.py +8 -8
- intentkit/skills/venice_audio/__init__.py +8 -9
- intentkit/skills/venice_audio/base.py +3 -4
- intentkit/skills/venice_audio/input.py +41 -41
- intentkit/skills/venice_audio/venice_audio.py +6 -6
- intentkit/skills/venice_image/__init__.py +5 -5
- intentkit/skills/venice_image/api.py +138 -138
- intentkit/skills/venice_image/base.py +3 -3
- intentkit/skills/venice_image/config.py +33 -35
- intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
- intentkit/skills/venice_image/utils.py +77 -78
- intentkit/skills/web_scraper/base.py +1 -3
- intentkit/skills/web_scraper/document_indexer.py +1 -2
- intentkit/skills/web_scraper/scrape_and_index.py +4 -5
- intentkit/skills/web_scraper/utils.py +25 -26
- intentkit/skills/web_scraper/website_indexer.py +10 -11
- intentkit/skills/weth/__init__.py +4 -6
- intentkit/skills/wow/__init__.py +4 -6
- intentkit/skills/x402/__init__.py +11 -3
- intentkit/skills/x402/ask_agent.py +12 -78
- intentkit/skills/x402/base.py +90 -0
- intentkit/skills/x402/http_request.py +117 -0
- intentkit/skills/x402/schema.json +15 -10
- intentkit/skills/xmtp/base.py +3 -3
- intentkit/skills/xmtp/price.py +2 -2
- intentkit/skills/xmtp/swap.py +2 -4
- intentkit/skills/xmtp/transfer.py +4 -6
- intentkit/utils/error.py +2 -2
- intentkit/utils/logging.py +2 -4
- intentkit/utils/s3.py +8 -9
- intentkit/utils/schema.py +5 -5
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.8.16.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/METADATA +3 -4
- intentkit-0.8.17.dev2.dist-info/RECORD +464 -0
- intentkit/models/generator.py +0 -347
- intentkit-0.8.16.dev1.dist-info/RECORD +0 -464
- {intentkit-0.8.16.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/WHEEL +0 -0
- {intentkit-0.8.16.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/licenses/LICENSE +0 -0
intentkit/models/agent_data.py
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
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
8
|
from intentkit.models.base import Base
|
|
7
9
|
from intentkit.models.db import get_session
|
|
@@ -60,6 +62,9 @@ class AgentDataTable(Base):
|
|
|
60
62
|
telegram_id = Column(String, nullable=True, comment="Telegram user ID")
|
|
61
63
|
telegram_username = Column(String, nullable=True, comment="Telegram username")
|
|
62
64
|
telegram_name = Column(String, nullable=True, comment="Telegram display name")
|
|
65
|
+
discord_id = Column(String, nullable=True, comment="Discord user ID")
|
|
66
|
+
discord_username = Column(String, nullable=True, comment="Discord username")
|
|
67
|
+
discord_name = Column(String, nullable=True, comment="Discord display name")
|
|
63
68
|
error_message = Column(String, nullable=True, comment="Last error message")
|
|
64
69
|
api_key = Column(
|
|
65
70
|
String, nullable=True, unique=True, comment="API key for the agent"
|
|
@@ -77,7 +82,7 @@ class AgentDataTable(Base):
|
|
|
77
82
|
DateTime(timezone=True),
|
|
78
83
|
nullable=False,
|
|
79
84
|
server_default=func.now(),
|
|
80
|
-
onupdate=lambda: datetime.now(
|
|
85
|
+
onupdate=lambda: datetime.now(UTC),
|
|
81
86
|
comment="Timestamp when the agent data was last updated",
|
|
82
87
|
)
|
|
83
88
|
|
|
@@ -94,70 +99,70 @@ class AgentData(BaseModel):
|
|
|
94
99
|
),
|
|
95
100
|
]
|
|
96
101
|
evm_wallet_address: Annotated[
|
|
97
|
-
|
|
102
|
+
str | None,
|
|
98
103
|
PydanticField(
|
|
99
104
|
default=None,
|
|
100
105
|
description="EVM wallet address",
|
|
101
106
|
),
|
|
102
107
|
] = None
|
|
103
108
|
solana_wallet_address: Annotated[
|
|
104
|
-
|
|
109
|
+
str | None,
|
|
105
110
|
PydanticField(
|
|
106
111
|
default=None,
|
|
107
112
|
description="Solana wallet address",
|
|
108
113
|
),
|
|
109
114
|
] = None
|
|
110
115
|
cdp_wallet_data: Annotated[
|
|
111
|
-
|
|
116
|
+
str | None,
|
|
112
117
|
PydanticField(
|
|
113
118
|
default=None,
|
|
114
119
|
description="CDP wallet data",
|
|
115
120
|
),
|
|
116
121
|
] = None
|
|
117
122
|
twitter_id: Annotated[
|
|
118
|
-
|
|
123
|
+
str | None,
|
|
119
124
|
PydanticField(
|
|
120
125
|
default=None,
|
|
121
126
|
description="Twitter user ID",
|
|
122
127
|
),
|
|
123
128
|
] = None
|
|
124
129
|
twitter_username: Annotated[
|
|
125
|
-
|
|
130
|
+
str | None,
|
|
126
131
|
PydanticField(
|
|
127
132
|
default=None,
|
|
128
133
|
description="Twitter username",
|
|
129
134
|
),
|
|
130
135
|
] = None
|
|
131
136
|
twitter_name: Annotated[
|
|
132
|
-
|
|
137
|
+
str | None,
|
|
133
138
|
PydanticField(
|
|
134
139
|
default=None,
|
|
135
140
|
description="Twitter display name",
|
|
136
141
|
),
|
|
137
142
|
] = None
|
|
138
143
|
twitter_access_token: Annotated[
|
|
139
|
-
|
|
144
|
+
str | None,
|
|
140
145
|
PydanticField(
|
|
141
146
|
default=None,
|
|
142
147
|
description="Twitter access token",
|
|
143
148
|
),
|
|
144
149
|
] = None
|
|
145
150
|
twitter_access_token_expires_at: Annotated[
|
|
146
|
-
|
|
151
|
+
datetime | None,
|
|
147
152
|
PydanticField(
|
|
148
153
|
default=None,
|
|
149
154
|
description="Twitter access token expiration time",
|
|
150
155
|
),
|
|
151
156
|
] = None
|
|
152
157
|
twitter_refresh_token: Annotated[
|
|
153
|
-
|
|
158
|
+
str | None,
|
|
154
159
|
PydanticField(
|
|
155
160
|
default=None,
|
|
156
161
|
description="Twitter refresh token",
|
|
157
162
|
),
|
|
158
163
|
] = None
|
|
159
164
|
twitter_self_key_refreshed_at: Annotated[
|
|
160
|
-
|
|
165
|
+
datetime | None,
|
|
161
166
|
PydanticField(
|
|
162
167
|
default=None,
|
|
163
168
|
description="Twitter self-key userinfo last refresh time",
|
|
@@ -171,42 +176,63 @@ class AgentData(BaseModel):
|
|
|
171
176
|
),
|
|
172
177
|
] = None
|
|
173
178
|
telegram_id: Annotated[
|
|
174
|
-
|
|
179
|
+
str | None,
|
|
175
180
|
PydanticField(
|
|
176
181
|
default=None,
|
|
177
182
|
description="Telegram user ID",
|
|
178
183
|
),
|
|
179
184
|
] = None
|
|
180
185
|
telegram_username: Annotated[
|
|
181
|
-
|
|
186
|
+
str | None,
|
|
182
187
|
PydanticField(
|
|
183
188
|
default=None,
|
|
184
189
|
description="Telegram username",
|
|
185
190
|
),
|
|
186
191
|
] = None
|
|
187
192
|
telegram_name: Annotated[
|
|
188
|
-
|
|
193
|
+
str | None,
|
|
189
194
|
PydanticField(
|
|
190
195
|
default=None,
|
|
191
196
|
description="Telegram display name",
|
|
192
197
|
),
|
|
193
198
|
] = None
|
|
199
|
+
discord_id: Annotated[
|
|
200
|
+
str | None,
|
|
201
|
+
PydanticField(
|
|
202
|
+
default=None,
|
|
203
|
+
description="Discord user ID",
|
|
204
|
+
),
|
|
205
|
+
] = None
|
|
206
|
+
discord_username: Annotated[
|
|
207
|
+
str | None,
|
|
208
|
+
PydanticField(
|
|
209
|
+
default=None,
|
|
210
|
+
description="Discord username",
|
|
211
|
+
),
|
|
212
|
+
] = None
|
|
213
|
+
discord_name: Annotated[
|
|
214
|
+
str | None,
|
|
215
|
+
PydanticField(
|
|
216
|
+
default=None,
|
|
217
|
+
description="Discord display name",
|
|
218
|
+
),
|
|
219
|
+
] = None
|
|
194
220
|
error_message: Annotated[
|
|
195
|
-
|
|
221
|
+
str | None,
|
|
196
222
|
PydanticField(
|
|
197
223
|
default=None,
|
|
198
224
|
description="Last error message",
|
|
199
225
|
),
|
|
200
226
|
] = None
|
|
201
227
|
api_key: Annotated[
|
|
202
|
-
|
|
228
|
+
str | None,
|
|
203
229
|
PydanticField(
|
|
204
230
|
default=None,
|
|
205
231
|
description="API key for the agent",
|
|
206
232
|
),
|
|
207
233
|
] = None
|
|
208
234
|
api_key_public: Annotated[
|
|
209
|
-
|
|
235
|
+
str | None,
|
|
210
236
|
PydanticField(
|
|
211
237
|
default=None,
|
|
212
238
|
description="Public API key for the agent",
|
|
@@ -215,14 +241,14 @@ class AgentData(BaseModel):
|
|
|
215
241
|
created_at: Annotated[
|
|
216
242
|
datetime,
|
|
217
243
|
PydanticField(
|
|
218
|
-
default_factory=lambda: datetime.now(
|
|
244
|
+
default_factory=lambda: datetime.now(UTC),
|
|
219
245
|
description="Timestamp when the agent data was created",
|
|
220
246
|
),
|
|
221
247
|
]
|
|
222
248
|
updated_at: Annotated[
|
|
223
249
|
datetime,
|
|
224
250
|
PydanticField(
|
|
225
|
-
default_factory=lambda: datetime.now(
|
|
251
|
+
default_factory=lambda: datetime.now(UTC),
|
|
226
252
|
description="Timestamp when the agent data was last updated",
|
|
227
253
|
),
|
|
228
254
|
]
|
|
@@ -247,7 +273,7 @@ class AgentData(BaseModel):
|
|
|
247
273
|
return cls.model_construct(id=agent_id)
|
|
248
274
|
|
|
249
275
|
@classmethod
|
|
250
|
-
async def get_by_api_key(cls, api_key: str) ->
|
|
276
|
+
async def get_by_api_key(cls, api_key: str) -> AgentData | None:
|
|
251
277
|
"""Get agent data by API key.
|
|
252
278
|
|
|
253
279
|
Args:
|
|
@@ -356,7 +382,7 @@ class AgentPluginDataTable(Base):
|
|
|
356
382
|
DateTime(timezone=True),
|
|
357
383
|
nullable=False,
|
|
358
384
|
server_default=func.now(),
|
|
359
|
-
onupdate=lambda: datetime.now(
|
|
385
|
+
onupdate=lambda: datetime.now(UTC),
|
|
360
386
|
)
|
|
361
387
|
|
|
362
388
|
|
|
@@ -388,28 +414,28 @@ class AgentPluginData(BaseModel):
|
|
|
388
414
|
PydanticField(description="Key for this specific piece of data"),
|
|
389
415
|
]
|
|
390
416
|
data: Annotated[
|
|
391
|
-
|
|
417
|
+
dict[str, Any],
|
|
392
418
|
PydanticField(default=None, description="JSON data stored for this key"),
|
|
393
419
|
]
|
|
394
420
|
created_at: Annotated[
|
|
395
421
|
datetime,
|
|
396
422
|
PydanticField(
|
|
397
423
|
description="Timestamp when this data was created",
|
|
398
|
-
default_factory=lambda: datetime.now(
|
|
424
|
+
default_factory=lambda: datetime.now(UTC),
|
|
399
425
|
),
|
|
400
426
|
]
|
|
401
427
|
updated_at: Annotated[
|
|
402
428
|
datetime,
|
|
403
429
|
PydanticField(
|
|
404
430
|
description="Timestamp when this data was last updated",
|
|
405
|
-
default_factory=lambda: datetime.now(
|
|
431
|
+
default_factory=lambda: datetime.now(UTC),
|
|
406
432
|
),
|
|
407
433
|
]
|
|
408
434
|
|
|
409
435
|
@classmethod
|
|
410
436
|
async def get(
|
|
411
437
|
cls, agent_id: str, plugin: str, key: str
|
|
412
|
-
) ->
|
|
438
|
+
) -> "AgentPluginData" | None:
|
|
413
439
|
"""Get plugin data for an agent.
|
|
414
440
|
|
|
415
441
|
Args:
|
|
@@ -513,7 +539,7 @@ class AgentQuotaTable(Base):
|
|
|
513
539
|
DateTime(timezone=True),
|
|
514
540
|
nullable=False,
|
|
515
541
|
server_default=func.now(),
|
|
516
|
-
onupdate=lambda: datetime.now(
|
|
542
|
+
onupdate=lambda: datetime.now(UTC),
|
|
517
543
|
)
|
|
518
544
|
|
|
519
545
|
|
|
@@ -547,7 +573,7 @@ class AgentQuota(BaseModel):
|
|
|
547
573
|
int, PydanticField(default=99999999, description="Daily message limit")
|
|
548
574
|
]
|
|
549
575
|
last_message_time: Annotated[
|
|
550
|
-
|
|
576
|
+
datetime | None,
|
|
551
577
|
PydanticField(default=None, description="Last message timestamp"),
|
|
552
578
|
]
|
|
553
579
|
autonomous_count_total: Annotated[
|
|
@@ -578,7 +604,7 @@ class AgentQuota(BaseModel):
|
|
|
578
604
|
),
|
|
579
605
|
]
|
|
580
606
|
last_autonomous_time: Annotated[
|
|
581
|
-
|
|
607
|
+
datetime | None,
|
|
582
608
|
PydanticField(default=None, description="Last autonomous operation timestamp"),
|
|
583
609
|
]
|
|
584
610
|
twitter_count_total: Annotated[
|
|
@@ -603,7 +629,7 @@ class AgentQuota(BaseModel):
|
|
|
603
629
|
PydanticField(default=99999999, description="Daily Twitter operations limit"),
|
|
604
630
|
]
|
|
605
631
|
last_twitter_time: Annotated[
|
|
606
|
-
|
|
632
|
+
datetime | None,
|
|
607
633
|
PydanticField(default=None, description="Last Twitter operation timestamp"),
|
|
608
634
|
]
|
|
609
635
|
free_income_daily: Annotated[
|
|
@@ -638,14 +664,14 @@ class AgentQuota(BaseModel):
|
|
|
638
664
|
datetime,
|
|
639
665
|
PydanticField(
|
|
640
666
|
description="Timestamp when this quota was created",
|
|
641
|
-
default_factory=lambda: datetime.now(
|
|
667
|
+
default_factory=lambda: datetime.now(UTC),
|
|
642
668
|
),
|
|
643
669
|
]
|
|
644
670
|
updated_at: Annotated[
|
|
645
671
|
datetime,
|
|
646
672
|
PydanticField(
|
|
647
673
|
description="Timestamp when this quota was last updated",
|
|
648
|
-
default_factory=lambda: datetime.now(
|
|
674
|
+
default_factory=lambda: datetime.now(UTC),
|
|
649
675
|
),
|
|
650
676
|
]
|
|
651
677
|
|
|
@@ -770,7 +796,7 @@ class AgentQuota(BaseModel):
|
|
|
770
796
|
quota_record.message_count_total += 1
|
|
771
797
|
quota_record.message_count_monthly += 1
|
|
772
798
|
quota_record.message_count_daily += 1
|
|
773
|
-
quota_record.last_message_time = datetime.now(
|
|
799
|
+
quota_record.last_message_time = datetime.now(UTC)
|
|
774
800
|
db.add(quota_record)
|
|
775
801
|
await db.commit()
|
|
776
802
|
|
|
@@ -790,7 +816,7 @@ class AgentQuota(BaseModel):
|
|
|
790
816
|
# Update record
|
|
791
817
|
quota_record.autonomous_count_total += 1
|
|
792
818
|
quota_record.autonomous_count_monthly += 1
|
|
793
|
-
quota_record.last_autonomous_time = datetime.now(
|
|
819
|
+
quota_record.last_autonomous_time = datetime.now(UTC)
|
|
794
820
|
db.add(quota_record)
|
|
795
821
|
await db.commit()
|
|
796
822
|
|
|
@@ -811,7 +837,7 @@ class AgentQuota(BaseModel):
|
|
|
811
837
|
# Update record
|
|
812
838
|
quota_record.twitter_count_total += 1
|
|
813
839
|
quota_record.twitter_count_daily += 1
|
|
814
|
-
quota_record.last_twitter_time = datetime.now(
|
|
840
|
+
quota_record.last_twitter_time = datetime.now(UTC)
|
|
815
841
|
db.add(quota_record)
|
|
816
842
|
await db.commit()
|
|
817
843
|
|
intentkit/models/app_setting.py
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import time
|
|
2
|
-
from datetime import
|
|
2
|
+
from datetime import UTC, datetime
|
|
3
3
|
from decimal import ROUND_HALF_UP, Decimal
|
|
4
4
|
from enum import Enum
|
|
5
|
-
from typing import Annotated, Any
|
|
5
|
+
from typing import Annotated, Any
|
|
6
6
|
|
|
7
7
|
from intentkit.models.base import Base
|
|
8
8
|
from intentkit.models.db import get_session
|
|
@@ -33,7 +33,7 @@ DEFAULT_SYSTEM_MESSAGES = {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
# In-memory cache for app settings
|
|
36
|
-
_cache:
|
|
36
|
+
_cache: dict[str, dict[str, Any]] = {}
|
|
37
37
|
_cache_ttl = 180 # 3 minutes in seconds
|
|
38
38
|
|
|
39
39
|
|
|
@@ -59,7 +59,7 @@ class AppSettingTable(Base):
|
|
|
59
59
|
DateTime(timezone=True),
|
|
60
60
|
nullable=False,
|
|
61
61
|
server_default=func.now(),
|
|
62
|
-
onupdate=lambda: datetime.now(
|
|
62
|
+
onupdate=lambda: datetime.now(UTC),
|
|
63
63
|
)
|
|
64
64
|
|
|
65
65
|
|
|
@@ -117,7 +117,7 @@ class PaymentSettings(BaseModel):
|
|
|
117
117
|
Field(default=False, description="Whether agent whitelist is enabled"),
|
|
118
118
|
]
|
|
119
119
|
agent_whitelist: Annotated[
|
|
120
|
-
|
|
120
|
+
list[str],
|
|
121
121
|
Field(default_factory=list, description="List of whitelisted agent IDs"),
|
|
122
122
|
]
|
|
123
123
|
|
|
@@ -133,7 +133,7 @@ class PaymentSettings(BaseModel):
|
|
|
133
133
|
"""Round decimal values to 4 decimal places."""
|
|
134
134
|
if isinstance(v, Decimal):
|
|
135
135
|
return v.quantize(Decimal("0.0001"), rounding=ROUND_HALF_UP)
|
|
136
|
-
elif isinstance(v,
|
|
136
|
+
elif isinstance(v, int | float):
|
|
137
137
|
return Decimal(str(v)).quantize(Decimal("0.0001"), rounding=ROUND_HALF_UP)
|
|
138
138
|
return v
|
|
139
139
|
|
intentkit/models/chat.py
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
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, NotRequired, TypedDict
|
|
5
7
|
|
|
6
8
|
from epyxid import XID
|
|
7
9
|
from intentkit.models.app_setting import AppSetting, SystemMessageType
|
|
@@ -43,6 +45,7 @@ class AuthorType(str, Enum):
|
|
|
43
45
|
SKILL = "skill"
|
|
44
46
|
TELEGRAM = "telegram"
|
|
45
47
|
TWITTER = "twitter"
|
|
48
|
+
DISCORD = "discord"
|
|
46
49
|
WEB = "web"
|
|
47
50
|
SYSTEM = "system"
|
|
48
51
|
API = "api"
|
|
@@ -65,7 +68,7 @@ class ChatMessageAttachment(TypedDict):
|
|
|
65
68
|
),
|
|
66
69
|
]
|
|
67
70
|
url: Annotated[
|
|
68
|
-
|
|
71
|
+
str | None,
|
|
69
72
|
Field(
|
|
70
73
|
...,
|
|
71
74
|
description="URL of the attachment",
|
|
@@ -73,7 +76,7 @@ class ChatMessageAttachment(TypedDict):
|
|
|
73
76
|
),
|
|
74
77
|
]
|
|
75
78
|
json: Annotated[
|
|
76
|
-
|
|
79
|
+
dict | None,
|
|
77
80
|
Field(
|
|
78
81
|
None,
|
|
79
82
|
description="JSON data of the attachment",
|
|
@@ -114,7 +117,7 @@ class ChatMessageRequest(BaseModel):
|
|
|
114
117
|
),
|
|
115
118
|
]
|
|
116
119
|
app_id: Annotated[
|
|
117
|
-
|
|
120
|
+
str | None,
|
|
118
121
|
Field(
|
|
119
122
|
None,
|
|
120
123
|
description="Optional application identifier",
|
|
@@ -141,21 +144,21 @@ class ChatMessageRequest(BaseModel):
|
|
|
141
144
|
),
|
|
142
145
|
]
|
|
143
146
|
search_mode: Annotated[
|
|
144
|
-
|
|
147
|
+
bool | None,
|
|
145
148
|
Field(
|
|
146
149
|
None,
|
|
147
150
|
description="Optional flag to enable search mode",
|
|
148
151
|
),
|
|
149
152
|
]
|
|
150
153
|
super_mode: Annotated[
|
|
151
|
-
|
|
154
|
+
bool | None,
|
|
152
155
|
Field(
|
|
153
156
|
None,
|
|
154
157
|
description="Optional flag to enable super mode",
|
|
155
158
|
),
|
|
156
159
|
]
|
|
157
160
|
attachments: Annotated[
|
|
158
|
-
|
|
161
|
+
list[ChatMessageAttachment] | None,
|
|
159
162
|
Field(
|
|
160
163
|
None,
|
|
161
164
|
description="Optional list of attachments (links, images, or files)",
|
|
@@ -309,29 +312,29 @@ class ChatMessageCreate(BaseModel):
|
|
|
309
312
|
]
|
|
310
313
|
chat_id: Annotated[str, Field(description="ID of the chat this message belongs to")]
|
|
311
314
|
user_id: Annotated[
|
|
312
|
-
|
|
315
|
+
str | None,
|
|
313
316
|
Field(description="ID of the user this message belongs to or reply to"),
|
|
314
317
|
]
|
|
315
318
|
author_id: Annotated[str, Field(description="ID of the message author")]
|
|
316
319
|
author_type: Annotated[AuthorType, Field(description="Type of the message author")]
|
|
317
320
|
model: Annotated[
|
|
318
|
-
|
|
321
|
+
str | None, Field(None, description="LLM model used if applicable")
|
|
319
322
|
]
|
|
320
323
|
thread_type: Annotated[
|
|
321
|
-
|
|
324
|
+
AuthorType | None,
|
|
322
325
|
Field(None, description="Author Type of the message thread start"),
|
|
323
326
|
]
|
|
324
327
|
reply_to: Annotated[
|
|
325
|
-
|
|
328
|
+
str | None,
|
|
326
329
|
Field(None, description="ID of the message this message is a reply to"),
|
|
327
330
|
]
|
|
328
331
|
message: Annotated[str, Field(description="Content of the message")]
|
|
329
332
|
attachments: Annotated[
|
|
330
|
-
|
|
333
|
+
list[ChatMessageAttachment] | None,
|
|
331
334
|
Field(None, description="List of attachments in the message"),
|
|
332
335
|
]
|
|
333
336
|
skill_calls: Annotated[
|
|
334
|
-
|
|
337
|
+
list[ChatMessageSkillCall] | None,
|
|
335
338
|
Field(None, description="Skill call details"),
|
|
336
339
|
]
|
|
337
340
|
input_tokens: Annotated[
|
|
@@ -344,11 +347,11 @@ class ChatMessageCreate(BaseModel):
|
|
|
344
347
|
float, Field(0.0, description="Time cost for the message in seconds")
|
|
345
348
|
]
|
|
346
349
|
credit_event_id: Annotated[
|
|
347
|
-
|
|
350
|
+
str | None,
|
|
348
351
|
Field(None, description="ID of the credit event for this message"),
|
|
349
352
|
]
|
|
350
353
|
credit_cost: Annotated[
|
|
351
|
-
|
|
354
|
+
Decimal | None,
|
|
352
355
|
Field(None, description="Credit cost for the message in credits"),
|
|
353
356
|
]
|
|
354
357
|
cold_start_cost: Annotated[
|
|
@@ -356,19 +359,19 @@ class ChatMessageCreate(BaseModel):
|
|
|
356
359
|
Field(0.0, description="Cost for the cold start of the message in seconds"),
|
|
357
360
|
]
|
|
358
361
|
app_id: Annotated[
|
|
359
|
-
|
|
362
|
+
str | None,
|
|
360
363
|
Field(None, description="Optional application identifier"),
|
|
361
364
|
]
|
|
362
365
|
search_mode: Annotated[
|
|
363
|
-
|
|
366
|
+
bool | None,
|
|
364
367
|
Field(None, description="Optional flag to enable search mode"),
|
|
365
368
|
]
|
|
366
369
|
super_mode: Annotated[
|
|
367
|
-
|
|
370
|
+
bool | None,
|
|
368
371
|
Field(None, description="Optional flag to enable super mode"),
|
|
369
372
|
]
|
|
370
373
|
error_type: Annotated[
|
|
371
|
-
|
|
374
|
+
SystemMessageType | None,
|
|
372
375
|
Field(None, description="Optional error type, used when author_type is system"),
|
|
373
376
|
]
|
|
374
377
|
|
|
@@ -527,7 +530,7 @@ class ChatMessage(ChatMessageCreate):
|
|
|
527
530
|
return ChatMessage.model_validate(sanitized_data)
|
|
528
531
|
|
|
529
532
|
@classmethod
|
|
530
|
-
async def get(cls, message_id: str) ->
|
|
533
|
+
async def get(cls, message_id: str) -> ChatMessage | None:
|
|
531
534
|
async with get_session() as db:
|
|
532
535
|
raw = await db.get(ChatMessageTable, message_id)
|
|
533
536
|
if raw:
|
|
@@ -570,7 +573,7 @@ class ChatTable(Base):
|
|
|
570
573
|
DateTime(timezone=True),
|
|
571
574
|
nullable=False,
|
|
572
575
|
server_default=func.now(),
|
|
573
|
-
onupdate=lambda: datetime.now(
|
|
576
|
+
onupdate=lambda: datetime.now(UTC),
|
|
574
577
|
)
|
|
575
578
|
|
|
576
579
|
|
|
@@ -625,7 +628,7 @@ class Chat(ChatCreate):
|
|
|
625
628
|
]
|
|
626
629
|
|
|
627
630
|
@classmethod
|
|
628
|
-
async def get(cls, id: str) ->
|
|
631
|
+
async def get(cls, id: str) -> "Chat" | None:
|
|
629
632
|
"""Get a chat by its ID.
|
|
630
633
|
|
|
631
634
|
Args:
|
|
@@ -689,7 +692,7 @@ class Chat(ChatCreate):
|
|
|
689
692
|
return self
|
|
690
693
|
|
|
691
694
|
@classmethod
|
|
692
|
-
async def get_by_agent_user(cls, agent_id: str, user_id: str) ->
|
|
695
|
+
async def get_by_agent_user(cls, agent_id: str, user_id: str) -> list["Chat"]:
|
|
693
696
|
"""Get all chats for a specific agent and user.
|
|
694
697
|
|
|
695
698
|
Args:
|
intentkit/models/conversation.py
CHANGED
|
@@ -5,7 +5,7 @@ related to agent generation sessions.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from datetime import datetime
|
|
8
|
-
from typing import Annotated
|
|
8
|
+
from typing import Annotated
|
|
9
9
|
|
|
10
10
|
from epyxid import XID
|
|
11
11
|
from intentkit.models.base import Base
|
|
@@ -103,7 +103,7 @@ class ConversationProjectCreate(BaseModel):
|
|
|
103
103
|
),
|
|
104
104
|
]
|
|
105
105
|
user_id: Annotated[
|
|
106
|
-
|
|
106
|
+
str | None,
|
|
107
107
|
Field(None, description="User ID associated with this project"),
|
|
108
108
|
]
|
|
109
109
|
|
|
@@ -144,7 +144,7 @@ class ConversationProject(ConversationProjectCreate):
|
|
|
144
144
|
]
|
|
145
145
|
|
|
146
146
|
@classmethod
|
|
147
|
-
async def get(cls, project_id: str) ->
|
|
147
|
+
async def get(cls, project_id: str) -> "ConversationProject" | None:
|
|
148
148
|
"""Get a conversation project by ID."""
|
|
149
149
|
async with get_session() as db:
|
|
150
150
|
result = await db.execute(
|
|
@@ -179,8 +179,8 @@ class ConversationProject(ConversationProjectCreate):
|
|
|
179
179
|
|
|
180
180
|
@classmethod
|
|
181
181
|
async def get_by_user(
|
|
182
|
-
cls, user_id:
|
|
183
|
-
) ->
|
|
182
|
+
cls, user_id: str | None = None, limit: int = 50
|
|
183
|
+
) -> list["ConversationProject"]:
|
|
184
184
|
"""Get conversation projects by user ID."""
|
|
185
185
|
async with get_session() as db:
|
|
186
186
|
query = select(ConversationProjectTable).order_by(
|
|
@@ -213,7 +213,7 @@ class ConversationMessageCreate(BaseModel):
|
|
|
213
213
|
role: Annotated[str, Field(description="Role of the message sender")]
|
|
214
214
|
content: Annotated[str, Field(description="Content of the message")]
|
|
215
215
|
message_metadata: Annotated[
|
|
216
|
-
|
|
216
|
+
dict | None,
|
|
217
217
|
Field(None, description="Additional metadata for the message"),
|
|
218
218
|
]
|
|
219
219
|
|
|
@@ -255,8 +255,8 @@ class ConversationMessage(ConversationMessageCreate):
|
|
|
255
255
|
|
|
256
256
|
@classmethod
|
|
257
257
|
async def get_by_project(
|
|
258
|
-
cls, project_id: str, user_id:
|
|
259
|
-
) ->
|
|
258
|
+
cls, project_id: str, user_id: str | None = None
|
|
259
|
+
) -> list["ConversationMessage"]:
|
|
260
260
|
"""Get conversation messages for a project."""
|
|
261
261
|
async with get_session() as db:
|
|
262
262
|
# First check if project exists and user has access
|