intentkit 0.6.13.dev2__py3-none-any.whl → 0.8.17__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 +14 -7
- intentkit/abstracts/skill.py +6 -144
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/__init__.py +5 -2
- intentkit/clients/cdp.py +101 -141
- intentkit/clients/twitter.py +83 -62
- intentkit/clients/web3.py +29 -0
- intentkit/config/config.py +8 -5
- intentkit/core/agent.py +472 -195
- intentkit/core/asset.py +253 -0
- intentkit/core/chat.py +51 -0
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +460 -130
- intentkit/core/engine.py +262 -233
- intentkit/core/node.py +15 -16
- intentkit/core/prompt.py +62 -28
- intentkit/core/scheduler.py +92 -0
- intentkit/core/statistics.py +168 -0
- intentkit/models/agent.py +1096 -949
- intentkit/models/agent_data.py +68 -38
- intentkit/models/agent_public.json +98 -0
- intentkit/models/agent_schema.json +54 -439
- intentkit/models/app_setting.py +96 -33
- intentkit/models/chat.py +74 -27
- intentkit/models/conversation.py +8 -8
- intentkit/models/credit.py +362 -74
- intentkit/models/db.py +26 -8
- intentkit/models/db_mig.py +2 -2
- intentkit/models/llm.csv +28 -0
- intentkit/models/llm.py +185 -350
- intentkit/models/redis.py +6 -4
- intentkit/models/skill.py +186 -72
- intentkit/models/skills.csv +174 -0
- intentkit/models/user.py +82 -24
- 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 +248 -85
- 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 +5 -5
- intentkit/skills/casino/README.md +254 -0
- intentkit/skills/casino/__init__.py +86 -0
- intentkit/skills/casino/base.py +17 -0
- intentkit/skills/casino/casino.png +0 -0
- intentkit/skills/casino/deck_draw.py +127 -0
- intentkit/skills/casino/deck_shuffle.py +118 -0
- intentkit/skills/casino/dice_roll.py +100 -0
- intentkit/skills/casino/schema.json +77 -0
- intentkit/skills/casino/utils.py +107 -0
- 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 +11 -25
- 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 +11 -21
- 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/README.md +154 -0
- intentkit/skills/dexscreener/__init__.py +97 -93
- intentkit/skills/dexscreener/base.py +125 -133
- intentkit/skills/dexscreener/get_pair_info.py +158 -0
- intentkit/skills/dexscreener/get_token_pairs.py +165 -0
- intentkit/skills/dexscreener/get_tokens_info.py +212 -0
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/schema.json +91 -48
- intentkit/skills/dexscreener/search_token.py +182 -321
- intentkit/skills/dexscreener/utils.py +420 -0
- 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 +50 -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/README.md +11 -5
- intentkit/skills/firecrawl/__init__.py +5 -18
- intentkit/skills/firecrawl/base.py +4 -11
- 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 +6 -8
- intentkit/skills/firecrawl/scrape.py +150 -40
- 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 +12 -13
- intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
- intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
- intentkit/skills/heurist/image_generation_braindance.py +12 -13
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
- intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
- intentkit/skills/heurist/image_generation_sdxl.py +12 -13
- 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 +1 -7
- intentkit/skills/lifi/schema.json +17 -8
- intentkit/skills/lifi/token_execute.py +36 -30
- 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 +23 -0
- intentkit/skills/openai/__init__.py +17 -18
- intentkit/skills/openai/base.py +10 -14
- intentkit/skills/openai/dalle_image_generation.py +3 -8
- intentkit/skills/openai/gpt_avatar_generator.py +102 -0
- intentkit/skills/openai/gpt_image_generation.py +4 -8
- intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
- intentkit/skills/openai/gpt_image_to_image.py +4 -8
- 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 +40 -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 +9 -13
- intentkit/skills/supabase/delete_data.py +5 -6
- intentkit/skills/supabase/fetch_data.py +13 -14
- intentkit/skills/supabase/insert_data.py +5 -6
- intentkit/skills/supabase/invoke_function.py +7 -8
- intentkit/skills/supabase/schema.json +2 -3
- intentkit/skills/supabase/update_data.py +7 -8
- intentkit/skills/supabase/upsert_data.py +5 -6
- 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 +23 -35
- intentkit/skills/twitter/follow_user.py +3 -7
- intentkit/skills/twitter/get_mentions.py +6 -13
- intentkit/skills/twitter/get_timeline.py +5 -13
- intentkit/skills/twitter/get_user_by_username.py +3 -7
- intentkit/skills/twitter/get_user_tweets.py +6 -14
- intentkit/skills/twitter/like_tweet.py +3 -7
- intentkit/skills/twitter/post_tweet.py +23 -12
- intentkit/skills/twitter/reply_tweet.py +21 -12
- intentkit/skills/twitter/retweet.py +3 -7
- intentkit/skills/twitter/schema.json +1 -0
- intentkit/skills/twitter/search_tweets.py +5 -13
- 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 +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/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 +61 -0
- intentkit/skills/x402/ask_agent.py +98 -0
- intentkit/skills/x402/base.py +99 -0
- intentkit/skills/x402/http_request.py +117 -0
- intentkit/skills/x402/schema.json +45 -0
- intentkit/skills/x402/x402.webp +0 -0
- intentkit/skills/xmtp/__init__.py +4 -15
- intentkit/skills/xmtp/base.py +61 -2
- intentkit/skills/xmtp/price.py +18 -13
- intentkit/skills/xmtp/schema.json +69 -71
- intentkit/skills/xmtp/swap.py +22 -25
- intentkit/skills/xmtp/transfer.py +71 -32
- intentkit/utils/chain.py +3 -3
- intentkit/utils/error.py +14 -1
- intentkit/utils/logging.py +2 -4
- intentkit/utils/s3.py +59 -7
- intentkit/utils/schema.py +100 -0
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +14 -16
- intentkit-0.8.17.dist-info/RECORD +466 -0
- intentkit/abstracts/exception.py +0 -9
- intentkit/core/skill.py +0 -200
- 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.6.13.dev2.dist-info/RECORD +0 -409
- {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
- {intentkit-0.6.13.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
intentkit/core/skill.py
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
from typing import Any, Dict, List, Optional
|
|
2
|
-
|
|
3
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
4
|
-
from intentkit.config.config import config
|
|
5
|
-
from intentkit.core.agent import (
|
|
6
|
-
add_autonomous_task as _add_autonomous_task,
|
|
7
|
-
)
|
|
8
|
-
from intentkit.core.agent import (
|
|
9
|
-
delete_autonomous_task as _delete_autonomous_task,
|
|
10
|
-
)
|
|
11
|
-
from intentkit.core.agent import (
|
|
12
|
-
list_autonomous_tasks as _list_autonomous_tasks,
|
|
13
|
-
)
|
|
14
|
-
from intentkit.core.agent import (
|
|
15
|
-
update_autonomous_task as _update_autonomous_task,
|
|
16
|
-
)
|
|
17
|
-
from intentkit.models.agent import Agent, AgentAutonomous
|
|
18
|
-
from intentkit.models.agent_data import AgentData, AgentQuota
|
|
19
|
-
from intentkit.models.skill import (
|
|
20
|
-
AgentSkillData,
|
|
21
|
-
AgentSkillDataCreate,
|
|
22
|
-
ThreadSkillData,
|
|
23
|
-
ThreadSkillDataCreate,
|
|
24
|
-
)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class SkillStore(SkillStoreABC):
|
|
28
|
-
"""Implementation of skill data storage operations.
|
|
29
|
-
|
|
30
|
-
This class provides concrete implementations for storing and retrieving
|
|
31
|
-
skill-related data for both agents and threads.
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
@staticmethod
|
|
35
|
-
def get_system_config(key: str) -> Any:
|
|
36
|
-
# TODO: maybe need a whitelist here
|
|
37
|
-
if hasattr(config, key):
|
|
38
|
-
return getattr(config, key)
|
|
39
|
-
return None
|
|
40
|
-
|
|
41
|
-
@staticmethod
|
|
42
|
-
async def get_agent_config(agent_id: str) -> Optional[Agent]:
|
|
43
|
-
return await Agent.get(agent_id)
|
|
44
|
-
|
|
45
|
-
@staticmethod
|
|
46
|
-
async def get_agent_data(agent_id: str) -> AgentData:
|
|
47
|
-
return await AgentData.get(agent_id)
|
|
48
|
-
|
|
49
|
-
@staticmethod
|
|
50
|
-
async def set_agent_data(agent_id: str, data: Dict) -> AgentData:
|
|
51
|
-
return await AgentData.patch(agent_id, data)
|
|
52
|
-
|
|
53
|
-
@staticmethod
|
|
54
|
-
async def get_agent_quota(agent_id: str) -> AgentQuota:
|
|
55
|
-
return await AgentQuota.get(agent_id)
|
|
56
|
-
|
|
57
|
-
@staticmethod
|
|
58
|
-
async def get_agent_skill_data(
|
|
59
|
-
agent_id: str, skill: str, key: str
|
|
60
|
-
) -> Optional[Dict[str, Any]]:
|
|
61
|
-
"""Get skill data for an agent.
|
|
62
|
-
|
|
63
|
-
Args:
|
|
64
|
-
agent_id: ID of the agent
|
|
65
|
-
skill: Name of the skill
|
|
66
|
-
key: Data key
|
|
67
|
-
|
|
68
|
-
Returns:
|
|
69
|
-
Dictionary containing the skill data if found, None otherwise
|
|
70
|
-
"""
|
|
71
|
-
return await AgentSkillData.get(agent_id, skill, key)
|
|
72
|
-
|
|
73
|
-
@staticmethod
|
|
74
|
-
async def save_agent_skill_data(
|
|
75
|
-
agent_id: str, skill: str, key: str, data: Dict[str, Any]
|
|
76
|
-
) -> None:
|
|
77
|
-
"""Save or update skill data for an agent.
|
|
78
|
-
|
|
79
|
-
Args:
|
|
80
|
-
agent_id: ID of the agent
|
|
81
|
-
skill: Name of the skill
|
|
82
|
-
key: Data key
|
|
83
|
-
data: JSON data to store
|
|
84
|
-
"""
|
|
85
|
-
skill_data = AgentSkillDataCreate(
|
|
86
|
-
agent_id=agent_id,
|
|
87
|
-
skill=skill,
|
|
88
|
-
key=key,
|
|
89
|
-
data=data,
|
|
90
|
-
)
|
|
91
|
-
await skill_data.save()
|
|
92
|
-
|
|
93
|
-
@staticmethod
|
|
94
|
-
async def delete_agent_skill_data(agent_id: str, skill: str, key: str) -> None:
|
|
95
|
-
"""Delete skill data for an agent.
|
|
96
|
-
|
|
97
|
-
Args:
|
|
98
|
-
agent_id: ID of the agent
|
|
99
|
-
skill: Name of the skill
|
|
100
|
-
key: Data key
|
|
101
|
-
"""
|
|
102
|
-
await AgentSkillData.delete(agent_id, skill, key)
|
|
103
|
-
|
|
104
|
-
@staticmethod
|
|
105
|
-
async def get_thread_skill_data(
|
|
106
|
-
thread_id: str, skill: str, key: str
|
|
107
|
-
) -> Optional[Dict[str, Any]]:
|
|
108
|
-
"""Get skill data for a thread.
|
|
109
|
-
|
|
110
|
-
Args:
|
|
111
|
-
thread_id: ID of the thread
|
|
112
|
-
skill: Name of the skill
|
|
113
|
-
key: Data key
|
|
114
|
-
|
|
115
|
-
Returns:
|
|
116
|
-
Dictionary containing the skill data if found, None otherwise
|
|
117
|
-
"""
|
|
118
|
-
return await ThreadSkillData.get(thread_id, skill, key)
|
|
119
|
-
|
|
120
|
-
@staticmethod
|
|
121
|
-
async def save_thread_skill_data(
|
|
122
|
-
thread_id: str,
|
|
123
|
-
agent_id: str,
|
|
124
|
-
skill: str,
|
|
125
|
-
key: str,
|
|
126
|
-
data: Dict[str, Any],
|
|
127
|
-
) -> None:
|
|
128
|
-
"""Save or update skill data for a thread.
|
|
129
|
-
|
|
130
|
-
Args:
|
|
131
|
-
thread_id: ID of the thread
|
|
132
|
-
agent_id: ID of the agent that owns this thread
|
|
133
|
-
skill: Name of the skill
|
|
134
|
-
key: Data key
|
|
135
|
-
data: JSON data to store
|
|
136
|
-
"""
|
|
137
|
-
skill_data = ThreadSkillDataCreate(
|
|
138
|
-
thread_id=thread_id,
|
|
139
|
-
agent_id=agent_id,
|
|
140
|
-
skill=skill,
|
|
141
|
-
key=key,
|
|
142
|
-
data=data,
|
|
143
|
-
)
|
|
144
|
-
await skill_data.save()
|
|
145
|
-
|
|
146
|
-
@staticmethod
|
|
147
|
-
async def list_autonomous_tasks(agent_id: str) -> List[AgentAutonomous]:
|
|
148
|
-
"""List all autonomous tasks for an agent.
|
|
149
|
-
|
|
150
|
-
Args:
|
|
151
|
-
agent_id: ID of the agent
|
|
152
|
-
|
|
153
|
-
Returns:
|
|
154
|
-
List[AgentAutonomous]: List of autonomous task configurations
|
|
155
|
-
"""
|
|
156
|
-
return await _list_autonomous_tasks(agent_id)
|
|
157
|
-
|
|
158
|
-
@staticmethod
|
|
159
|
-
async def add_autonomous_task(
|
|
160
|
-
agent_id: str, task: AgentAutonomous
|
|
161
|
-
) -> AgentAutonomous:
|
|
162
|
-
"""Add a new autonomous task to an agent.
|
|
163
|
-
|
|
164
|
-
Args:
|
|
165
|
-
agent_id: ID of the agent
|
|
166
|
-
task: Autonomous task configuration
|
|
167
|
-
|
|
168
|
-
Returns:
|
|
169
|
-
AgentAutonomous: The created task
|
|
170
|
-
"""
|
|
171
|
-
return await _add_autonomous_task(agent_id, task)
|
|
172
|
-
|
|
173
|
-
@staticmethod
|
|
174
|
-
async def delete_autonomous_task(agent_id: str, task_id: str) -> None:
|
|
175
|
-
"""Delete an autonomous task from an agent.
|
|
176
|
-
|
|
177
|
-
Args:
|
|
178
|
-
agent_id: ID of the agent
|
|
179
|
-
task_id: ID of the task to delete
|
|
180
|
-
"""
|
|
181
|
-
await _delete_autonomous_task(agent_id, task_id)
|
|
182
|
-
|
|
183
|
-
@staticmethod
|
|
184
|
-
async def update_autonomous_task(
|
|
185
|
-
agent_id: str, task_id: str, task_updates: dict
|
|
186
|
-
) -> AgentAutonomous:
|
|
187
|
-
"""Update an autonomous task for an agent.
|
|
188
|
-
|
|
189
|
-
Args:
|
|
190
|
-
agent_id: ID of the agent
|
|
191
|
-
task_id: ID of the task to update
|
|
192
|
-
task_updates: Dictionary containing fields to update
|
|
193
|
-
|
|
194
|
-
Returns:
|
|
195
|
-
AgentAutonomous: The updated task
|
|
196
|
-
"""
|
|
197
|
-
return await _update_autonomous_task(agent_id, task_id, task_updates)
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
skill_store = SkillStore()
|
intentkit/models/generator.py
DELETED
|
@@ -1,347 +0,0 @@
|
|
|
1
|
-
"""Agent Generation Log Model.
|
|
2
|
-
|
|
3
|
-
This module defines the database models for logging agent generation operations,
|
|
4
|
-
including token usage, prompts, AI responses, and generation metadata.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
from datetime import datetime, timezone
|
|
8
|
-
from typing import Annotated, Optional
|
|
9
|
-
|
|
10
|
-
from epyxid import XID
|
|
11
|
-
from intentkit.models.base import Base
|
|
12
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
13
|
-
from sqlalchemy import (
|
|
14
|
-
Boolean,
|
|
15
|
-
Column,
|
|
16
|
-
DateTime,
|
|
17
|
-
Integer,
|
|
18
|
-
String,
|
|
19
|
-
Text,
|
|
20
|
-
func,
|
|
21
|
-
select,
|
|
22
|
-
)
|
|
23
|
-
from sqlalchemy.dialects.postgresql import JSON, JSONB
|
|
24
|
-
from sqlalchemy.ext.asyncio import AsyncSession
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class AgentGenerationLogTable(Base):
|
|
28
|
-
"""Agent generation log database table model."""
|
|
29
|
-
|
|
30
|
-
__tablename__ = "agent_generation_logs"
|
|
31
|
-
|
|
32
|
-
id = Column(
|
|
33
|
-
String,
|
|
34
|
-
primary_key=True,
|
|
35
|
-
)
|
|
36
|
-
user_id = Column(
|
|
37
|
-
String,
|
|
38
|
-
nullable=True,
|
|
39
|
-
)
|
|
40
|
-
prompt = Column(
|
|
41
|
-
Text,
|
|
42
|
-
nullable=False,
|
|
43
|
-
)
|
|
44
|
-
existing_agent_id = Column(
|
|
45
|
-
String,
|
|
46
|
-
nullable=True,
|
|
47
|
-
)
|
|
48
|
-
is_update = Column(
|
|
49
|
-
Boolean,
|
|
50
|
-
default=False,
|
|
51
|
-
nullable=False,
|
|
52
|
-
)
|
|
53
|
-
generated_agent_schema = Column(
|
|
54
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
55
|
-
nullable=True,
|
|
56
|
-
)
|
|
57
|
-
identified_skills = Column(
|
|
58
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
59
|
-
nullable=True,
|
|
60
|
-
)
|
|
61
|
-
# LLM API response data
|
|
62
|
-
llm_model = Column(
|
|
63
|
-
String,
|
|
64
|
-
nullable=True,
|
|
65
|
-
)
|
|
66
|
-
total_tokens = Column(
|
|
67
|
-
Integer,
|
|
68
|
-
default=0,
|
|
69
|
-
)
|
|
70
|
-
input_tokens = Column(
|
|
71
|
-
Integer,
|
|
72
|
-
default=0,
|
|
73
|
-
)
|
|
74
|
-
cached_input_tokens = Column(
|
|
75
|
-
Integer,
|
|
76
|
-
default=0,
|
|
77
|
-
)
|
|
78
|
-
output_tokens = Column(
|
|
79
|
-
Integer,
|
|
80
|
-
default=0,
|
|
81
|
-
)
|
|
82
|
-
input_tokens_details = Column(
|
|
83
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
84
|
-
nullable=True,
|
|
85
|
-
)
|
|
86
|
-
completion_tokens_details = Column(
|
|
87
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
88
|
-
nullable=True,
|
|
89
|
-
)
|
|
90
|
-
# Performance metrics
|
|
91
|
-
generation_time_ms = Column(
|
|
92
|
-
Integer,
|
|
93
|
-
nullable=True,
|
|
94
|
-
)
|
|
95
|
-
retry_count = Column(
|
|
96
|
-
Integer,
|
|
97
|
-
default=0,
|
|
98
|
-
)
|
|
99
|
-
validation_errors = Column(
|
|
100
|
-
JSON().with_variant(JSONB(), "postgresql"),
|
|
101
|
-
nullable=True,
|
|
102
|
-
)
|
|
103
|
-
# Status and results
|
|
104
|
-
success = Column(
|
|
105
|
-
Boolean,
|
|
106
|
-
default=False,
|
|
107
|
-
nullable=False,
|
|
108
|
-
)
|
|
109
|
-
error_message = Column(
|
|
110
|
-
Text,
|
|
111
|
-
nullable=True,
|
|
112
|
-
)
|
|
113
|
-
# Timestamps
|
|
114
|
-
created_at = Column(
|
|
115
|
-
DateTime(timezone=True),
|
|
116
|
-
nullable=False,
|
|
117
|
-
server_default=func.now(),
|
|
118
|
-
)
|
|
119
|
-
completed_at = Column(
|
|
120
|
-
DateTime(timezone=True),
|
|
121
|
-
nullable=True,
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
class AgentGenerationLogCreate(BaseModel):
|
|
126
|
-
"""Model for creating agent generation log entries."""
|
|
127
|
-
|
|
128
|
-
model_config = ConfigDict(
|
|
129
|
-
use_enum_values=True,
|
|
130
|
-
from_attributes=True,
|
|
131
|
-
)
|
|
132
|
-
|
|
133
|
-
id: Annotated[
|
|
134
|
-
str,
|
|
135
|
-
Field(
|
|
136
|
-
default_factory=lambda: str(XID()),
|
|
137
|
-
description="Unique identifier for the generation log",
|
|
138
|
-
),
|
|
139
|
-
]
|
|
140
|
-
user_id: Optional[str] = Field(
|
|
141
|
-
None,
|
|
142
|
-
description="User ID who initiated the generation",
|
|
143
|
-
)
|
|
144
|
-
prompt: str = Field(
|
|
145
|
-
...,
|
|
146
|
-
description="The original prompt used for generation",
|
|
147
|
-
)
|
|
148
|
-
existing_agent_id: Optional[str] = Field(
|
|
149
|
-
None,
|
|
150
|
-
description="ID of existing agent if this is an update operation",
|
|
151
|
-
)
|
|
152
|
-
is_update: bool = Field(
|
|
153
|
-
False,
|
|
154
|
-
description="Whether this is an update to existing agent",
|
|
155
|
-
)
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
class AgentGenerationLog(BaseModel):
|
|
159
|
-
"""Agent generation log model."""
|
|
160
|
-
|
|
161
|
-
model_config = ConfigDict(
|
|
162
|
-
use_enum_values=True,
|
|
163
|
-
from_attributes=True,
|
|
164
|
-
)
|
|
165
|
-
|
|
166
|
-
id: str
|
|
167
|
-
user_id: Optional[str] = None
|
|
168
|
-
prompt: str
|
|
169
|
-
existing_agent_id: Optional[str] = None
|
|
170
|
-
is_update: bool = False
|
|
171
|
-
generated_agent_schema: Optional[dict] = None
|
|
172
|
-
identified_skills: Optional[dict] = None
|
|
173
|
-
llm_model: Optional[str] = None
|
|
174
|
-
total_tokens: int = 0
|
|
175
|
-
input_tokens: int = 0
|
|
176
|
-
cached_input_tokens: int = 0
|
|
177
|
-
output_tokens: int = 0
|
|
178
|
-
input_tokens_details: Optional[dict] = None
|
|
179
|
-
completion_tokens_details: Optional[dict] = None
|
|
180
|
-
generation_time_ms: Optional[int] = None
|
|
181
|
-
retry_count: int = 0
|
|
182
|
-
validation_errors: Optional[dict] = None
|
|
183
|
-
success: bool = False
|
|
184
|
-
error_message: Optional[str] = None
|
|
185
|
-
created_at: datetime
|
|
186
|
-
completed_at: Optional[datetime] = None
|
|
187
|
-
|
|
188
|
-
@classmethod
|
|
189
|
-
async def create(
|
|
190
|
-
cls,
|
|
191
|
-
session: AsyncSession,
|
|
192
|
-
log_data: AgentGenerationLogCreate,
|
|
193
|
-
) -> "AgentGenerationLog":
|
|
194
|
-
"""Create a new agent generation log entry.
|
|
195
|
-
|
|
196
|
-
Args:
|
|
197
|
-
session: Database session
|
|
198
|
-
log_data: Log data to create
|
|
199
|
-
|
|
200
|
-
Returns:
|
|
201
|
-
Created log instance
|
|
202
|
-
"""
|
|
203
|
-
# Create database record
|
|
204
|
-
log_record = AgentGenerationLogTable(
|
|
205
|
-
id=log_data.id,
|
|
206
|
-
user_id=log_data.user_id,
|
|
207
|
-
prompt=log_data.prompt,
|
|
208
|
-
existing_agent_id=log_data.existing_agent_id,
|
|
209
|
-
is_update=log_data.is_update,
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
session.add(log_record)
|
|
213
|
-
await session.commit()
|
|
214
|
-
await session.refresh(log_record)
|
|
215
|
-
|
|
216
|
-
return cls.model_validate(log_record)
|
|
217
|
-
|
|
218
|
-
async def update_completion(
|
|
219
|
-
self,
|
|
220
|
-
session: AsyncSession,
|
|
221
|
-
generated_agent_schema: Optional[dict] = None,
|
|
222
|
-
identified_skills: Optional[dict] = None,
|
|
223
|
-
llm_model: Optional[str] = None,
|
|
224
|
-
total_tokens: int = 0,
|
|
225
|
-
input_tokens: int = 0,
|
|
226
|
-
cached_input_tokens: int = 0,
|
|
227
|
-
output_tokens: int = 0,
|
|
228
|
-
input_tokens_details: Optional[dict] = None,
|
|
229
|
-
completion_tokens_details: Optional[dict] = None,
|
|
230
|
-
generation_time_ms: Optional[int] = None,
|
|
231
|
-
retry_count: int = 0,
|
|
232
|
-
validation_errors: Optional[dict] = None,
|
|
233
|
-
success: bool = False,
|
|
234
|
-
error_message: Optional[str] = None,
|
|
235
|
-
) -> None:
|
|
236
|
-
"""Update the log entry with completion data.
|
|
237
|
-
|
|
238
|
-
Args:
|
|
239
|
-
session: Database session
|
|
240
|
-
generated_agent_schema: The generated agent schema
|
|
241
|
-
identified_skills: Skills identified during generation
|
|
242
|
-
llm_model: LLM model used
|
|
243
|
-
total_tokens: Total tokens used
|
|
244
|
-
input_tokens: Input tokens used
|
|
245
|
-
cached_input_tokens: Cached input tokens used (for cost calculation)
|
|
246
|
-
output_tokens: Output tokens used
|
|
247
|
-
input_tokens_details: Detailed input token breakdown
|
|
248
|
-
completion_tokens_details: Detailed completion token breakdown
|
|
249
|
-
generation_time_ms: Generation time in milliseconds
|
|
250
|
-
retry_count: Number of retries attempted
|
|
251
|
-
validation_errors: Any validation errors encountered
|
|
252
|
-
success: Whether generation was successful
|
|
253
|
-
error_message: Error message if generation failed
|
|
254
|
-
"""
|
|
255
|
-
# Get the database record
|
|
256
|
-
log_record = await session.get(AgentGenerationLogTable, self.id)
|
|
257
|
-
if not log_record:
|
|
258
|
-
return
|
|
259
|
-
|
|
260
|
-
# Update fields
|
|
261
|
-
log_record.generated_agent_schema = generated_agent_schema
|
|
262
|
-
log_record.identified_skills = identified_skills
|
|
263
|
-
log_record.llm_model = llm_model
|
|
264
|
-
log_record.total_tokens = total_tokens
|
|
265
|
-
log_record.input_tokens = input_tokens
|
|
266
|
-
log_record.cached_input_tokens = cached_input_tokens
|
|
267
|
-
log_record.output_tokens = output_tokens
|
|
268
|
-
log_record.input_tokens_details = input_tokens_details
|
|
269
|
-
log_record.completion_tokens_details = completion_tokens_details
|
|
270
|
-
log_record.generation_time_ms = generation_time_ms
|
|
271
|
-
log_record.retry_count = retry_count
|
|
272
|
-
log_record.validation_errors = validation_errors
|
|
273
|
-
log_record.success = success
|
|
274
|
-
log_record.error_message = error_message
|
|
275
|
-
log_record.completed_at = datetime.now(timezone.utc)
|
|
276
|
-
|
|
277
|
-
session.add(log_record)
|
|
278
|
-
await session.commit()
|
|
279
|
-
await session.refresh(log_record)
|
|
280
|
-
|
|
281
|
-
# Update this instance
|
|
282
|
-
self.generated_agent_schema = log_record.generated_agent_schema
|
|
283
|
-
self.identified_skills = log_record.identified_skills
|
|
284
|
-
self.llm_model = log_record.llm_model
|
|
285
|
-
self.total_tokens = log_record.total_tokens
|
|
286
|
-
self.input_tokens = log_record.input_tokens
|
|
287
|
-
self.cached_input_tokens = log_record.cached_input_tokens
|
|
288
|
-
self.output_tokens = log_record.output_tokens
|
|
289
|
-
self.input_tokens_details = log_record.input_tokens_details
|
|
290
|
-
self.completion_tokens_details = log_record.completion_tokens_details
|
|
291
|
-
self.generation_time_ms = log_record.generation_time_ms
|
|
292
|
-
self.retry_count = log_record.retry_count
|
|
293
|
-
self.validation_errors = log_record.validation_errors
|
|
294
|
-
self.success = log_record.success
|
|
295
|
-
self.error_message = log_record.error_message
|
|
296
|
-
self.completed_at = log_record.completed_at
|
|
297
|
-
|
|
298
|
-
@classmethod
|
|
299
|
-
async def get_by_id(
|
|
300
|
-
cls,
|
|
301
|
-
session: AsyncSession,
|
|
302
|
-
log_id: str,
|
|
303
|
-
) -> Optional["AgentGenerationLog"]:
|
|
304
|
-
"""Get an agent generation log by ID.
|
|
305
|
-
|
|
306
|
-
Args:
|
|
307
|
-
session: Database session
|
|
308
|
-
log_id: Log ID
|
|
309
|
-
|
|
310
|
-
Returns:
|
|
311
|
-
Log instance if found, None otherwise
|
|
312
|
-
"""
|
|
313
|
-
result = await session.execute(
|
|
314
|
-
select(AgentGenerationLogTable).where(AgentGenerationLogTable.id == log_id)
|
|
315
|
-
)
|
|
316
|
-
log_record = result.scalar_one_or_none()
|
|
317
|
-
|
|
318
|
-
if log_record:
|
|
319
|
-
return cls.model_validate(log_record)
|
|
320
|
-
return None
|
|
321
|
-
|
|
322
|
-
@classmethod
|
|
323
|
-
async def get_by_user(
|
|
324
|
-
cls,
|
|
325
|
-
session: AsyncSession,
|
|
326
|
-
user_id: str,
|
|
327
|
-
limit: int = 50,
|
|
328
|
-
) -> list["AgentGenerationLog"]:
|
|
329
|
-
"""Get agent generation logs for a user.
|
|
330
|
-
|
|
331
|
-
Args:
|
|
332
|
-
session: Database session
|
|
333
|
-
user_id: User ID
|
|
334
|
-
limit: Maximum number of logs to return
|
|
335
|
-
|
|
336
|
-
Returns:
|
|
337
|
-
List of log instances
|
|
338
|
-
"""
|
|
339
|
-
result = await session.execute(
|
|
340
|
-
select(AgentGenerationLogTable)
|
|
341
|
-
.where(AgentGenerationLogTable.user_id == user_id)
|
|
342
|
-
.order_by(AgentGenerationLogTable.created_at.desc())
|
|
343
|
-
.limit(limit)
|
|
344
|
-
)
|
|
345
|
-
log_records = result.scalars().all()
|
|
346
|
-
|
|
347
|
-
return [cls.model_validate(record) for record in log_records]
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
|
-
|
|
3
|
-
from pydantic import BaseModel, Field
|
|
4
|
-
|
|
5
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
6
|
-
from intentkit.clients import get_cdp_client
|
|
7
|
-
from intentkit.skills.cdp.base import CDPBaseTool
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class GetBalanceInput(BaseModel):
|
|
11
|
-
"""Input for GetBalance tool."""
|
|
12
|
-
|
|
13
|
-
asset_id: Optional[str] = Field(
|
|
14
|
-
default=None,
|
|
15
|
-
description="The asset ID to get the balance for (e.g., 'eth', 'usdc', or a valid contract address). If not provided, returns all token balances.",
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class GetBalance(CDPBaseTool):
|
|
20
|
-
"""Tool for getting balance from CDP wallet.
|
|
21
|
-
|
|
22
|
-
This tool uses the CDP API to get balance for all addresses in a wallet for a given asset.
|
|
23
|
-
|
|
24
|
-
Attributes:
|
|
25
|
-
name: The name of the tool.
|
|
26
|
-
description: A description of what the tool does.
|
|
27
|
-
args_schema: The schema for the tool's input arguments.
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
agent_id: str
|
|
31
|
-
skill_store: SkillStoreABC
|
|
32
|
-
|
|
33
|
-
name: str = "cdp_get_balance"
|
|
34
|
-
description: str = (
|
|
35
|
-
"This tool will get the balance of all the addresses in the wallet. If asset_id is provided, it returns the balance for that specific asset. "
|
|
36
|
-
"If no asset_id is provided, it returns all token balances. "
|
|
37
|
-
"Always use 'eth' for the native asset ETH and 'usdc' for USDC. "
|
|
38
|
-
"Other valid asset IDs are: weth,dai,reth,brett,w,cbeth,axl,iotx,prime,aero,rsr,mog,tbtc,npc,yfi"
|
|
39
|
-
)
|
|
40
|
-
args_schema: Type[BaseModel] = GetBalanceInput
|
|
41
|
-
|
|
42
|
-
async def _arun(self, asset_id: Optional[str] = None) -> str:
|
|
43
|
-
"""Async implementation of the tool to get balance.
|
|
44
|
-
|
|
45
|
-
Args:
|
|
46
|
-
asset_id (Optional[str]): The asset ID to get the balance for. If None, returns all token balances.
|
|
47
|
-
|
|
48
|
-
Returns:
|
|
49
|
-
str: A message containing the balance information or error message.
|
|
50
|
-
"""
|
|
51
|
-
# Get network information from CDP client
|
|
52
|
-
cdp_client = await get_cdp_client(self.agent_id, self.skill_store)
|
|
53
|
-
provider = await cdp_client.get_wallet_provider()
|
|
54
|
-
provider_config = await cdp_client.get_provider_config()
|
|
55
|
-
network_id = provider_config.network_id
|
|
56
|
-
|
|
57
|
-
# Map network_id to the format expected by the API
|
|
58
|
-
network_mapping = {
|
|
59
|
-
"base-mainnet": "base",
|
|
60
|
-
"ethereum-mainnet": "ethereum",
|
|
61
|
-
}
|
|
62
|
-
api_network = network_mapping.get(network_id, network_id)
|
|
63
|
-
|
|
64
|
-
# For native ETH balance, use the account's balance directly
|
|
65
|
-
if asset_id and asset_id.lower() == "eth":
|
|
66
|
-
try:
|
|
67
|
-
# Get native balance using Web3
|
|
68
|
-
balance_wei = provider.get_balance()
|
|
69
|
-
balance_eth = balance_wei / (10**18) # Convert from wei to ETH
|
|
70
|
-
return f"ETH balance: {balance_eth} ETH"
|
|
71
|
-
except Exception as e:
|
|
72
|
-
return f"Error getting ETH balance: {e!s}"
|
|
73
|
-
|
|
74
|
-
client = provider.get_client()
|
|
75
|
-
async with client:
|
|
76
|
-
account = await client.evm.get_account(provider.get_address())
|
|
77
|
-
# If no asset_id provided, return all token balances
|
|
78
|
-
if asset_id is None:
|
|
79
|
-
# Get native ETH balance
|
|
80
|
-
balance_wei = provider.get_balance()
|
|
81
|
-
balance_eth = balance_wei / (10**18) # Convert from wei to ETH
|
|
82
|
-
|
|
83
|
-
# Get all token balances
|
|
84
|
-
token_balances = await account.list_token_balances(api_network)
|
|
85
|
-
|
|
86
|
-
result = [f"ETH balance: {balance_eth} ETH"]
|
|
87
|
-
|
|
88
|
-
for balance in token_balances.balances:
|
|
89
|
-
result.append(
|
|
90
|
-
f"{balance.token.symbol} balance: {balance.amount.decimals} {balance.token.name}"
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
return f"All balances for account {account.address}:\n" + "\n".join(
|
|
94
|
-
result
|
|
95
|
-
)
|
|
96
|
-
|
|
97
|
-
# For other tokens, try the list_token_balances API
|
|
98
|
-
token_balances = await account.list_token_balances(api_network)
|
|
99
|
-
|
|
100
|
-
# Find the balance for the specific asset
|
|
101
|
-
target_balance = None
|
|
102
|
-
for balance in token_balances.balances:
|
|
103
|
-
if balance.token.symbol.lower() == asset_id.lower():
|
|
104
|
-
target_balance = balance
|
|
105
|
-
break
|
|
106
|
-
|
|
107
|
-
if target_balance:
|
|
108
|
-
return f"Balance for {asset_id} in account {account.address}: {target_balance.amount.decimals} {target_balance.token.name}"
|
|
109
|
-
else:
|
|
110
|
-
return f"No balance found for asset {asset_id} in account {account.address}"
|