intentkit 0.8.34__tar.gz → 0.8.34.dev2__tar.gz
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-0.8.34 → intentkit-0.8.34.dev2}/PKG-INFO +1 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/__init__.py +1 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/config/config.py +6 -8
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/chat.py +2 -2
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/engine.py +3 -11
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/scheduler.py +4 -7
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/db.py +76 -26
- intentkit-0.8.34.dev2/intentkit/models/db_mig.py +103 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/skills.csv +1 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_animagine_xl.py +2 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_arthemy_comics.py +2 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_arthemy_real.py +2 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_braindance.py +2 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +2 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_flux_1_dev.py +2 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_sdxl.py +2 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/dalle_image_generation.py +1 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/gpt_avatar_generator.py +1 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/gpt_image_generation.py +1 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/gpt_image_mini_generator.py +1 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/gpt_image_to_image.py +1 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_audio/venice_audio.py +1 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/api.py +1 -1
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/image_generation_base.py +1 -2
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/x402/__init__.py +3 -0
- intentkit-0.8.34.dev2/intentkit/skills/x402/ask_agent.py +98 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/x402/schema.json +15 -10
- {intentkit-0.8.34/intentkit/clients → intentkit-0.8.34.dev2/intentkit/utils}/s3.py +29 -51
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/pyproject.toml +1 -1
- intentkit-0.8.34/intentkit/core/cleanup.py +0 -80
- intentkit-0.8.34/intentkit/models/db_mig.py +0 -219
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/.gitignore +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/LICENSE +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/LICENSE +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/MANIFEST.in +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/abstracts/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/abstracts/agent.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/abstracts/api.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/abstracts/engine.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/abstracts/graph.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/abstracts/skill.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/abstracts/twitter.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/clients/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/clients/cdp.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/clients/twitter.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/clients/web3.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/config/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/account_checking.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/agent.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/api.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/asset.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/client.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/credit.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/draft.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/draft_chat.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/manager/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/manager/engine.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/manager/service.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/manager/skills.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/middleware.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/prompt.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/core/statistics.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/agent.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/agent_data.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/agent_public.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/agent_schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/app_setting.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/chat.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/credit.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/draft.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/llm.csv +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/llm.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/redis.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/skill.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/team.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/models/user.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/acolyt/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/acolyt/acolyt.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/acolyt/ask.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/acolyt/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/acolyt/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/aixbt/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/aixbt/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/aixbt/aixbt.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/aixbt/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/aixbt/projects.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/aixbt/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/allora/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/allora/allora.jpeg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/allora/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/allora/price.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/allora/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/basename/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/basename/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/basename/basename.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/basename/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/carv/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/carv/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/carv/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/carv/carv.webp +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/carv/fetch_news.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/carv/onchain_query.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/carv/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/carv/token_info_and_price.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/casino/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/casino/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/casino/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/casino/casino.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/casino/deck_draw.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/casino/deck_shuffle.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/casino/dice_roll.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/casino/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/casino/utils.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cdp/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cdp/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cdp/cdp.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cdp/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/chainlist/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/chainlist/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/chainlist/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/chainlist/chain_lookup.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/chainlist/chainlist.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/chainlist/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/common/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/common/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/common/common.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/common/current_time.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/common/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/constants.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/cookiefun.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/get_account_details.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/get_account_feed.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/get_account_smart_followers.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/get_sectors.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cookiefun/search_accounts.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/api.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/cryptocompare.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/fetch_news.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/fetch_price.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/fetch_top_exchanges.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/fetch_top_market_cap.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/fetch_top_volume.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/fetch_trading_signals.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptocompare/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptopanic/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptopanic/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptopanic/cryptopanic.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptopanic/fetch_crypto_news.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/cryptopanic/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dapplooker/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dapplooker/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dapplooker/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dapplooker/dapplooker.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dapplooker/dapplooker_token_data.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dapplooker/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/api.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/coins/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/coins/fetch_block.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/coins/fetch_current_prices.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/coins/fetch_first_price.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/coins/fetch_historical_prices.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/coins/fetch_price_chart.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/coins/fetch_price_percentage.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/config/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/config/chains.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/defillama.jpeg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/fees/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/fees/fetch_fees_overview.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/stablecoins/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tests/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tests/api_integration.test.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tests/api_unit.test.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tvl/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tvl/fetch_chains.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tvl/fetch_protocol.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/tvl/fetch_protocols.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/volumes/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/volumes/fetch_dex_overview.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/volumes/fetch_dex_summary.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/volumes/fetch_options_overview.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/yields/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/yields/fetch_pool_chart.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/defillama/yields/fetch_pools.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/dexscreener.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/get_pair_info.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/get_token_pairs.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/get_tokens_info.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/model/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/model/search_token_response.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/search_token.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dexscreener/utils.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dune_analytics/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dune_analytics/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dune_analytics/dune.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dune_analytics/fetch_kol_buys.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dune_analytics/fetch_nation_metrics.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/dune_analytics/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/elfa/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/elfa/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/elfa/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/elfa/elfa.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/elfa/mention.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/elfa/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/elfa/stats.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/elfa/tokens.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/elfa/utils.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/abi/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/abi/approval.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/abi/erc20.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/abi/route.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/best_yield.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/enso.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/networks.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/prices.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/route.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/tokens.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/enso/wallet.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/erc20/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/erc20/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/erc20/erc20.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/erc20/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/erc721/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/erc721/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/erc721/erc721.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/erc721/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/clear.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/crawl.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/firecrawl.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/query.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/scrape.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/firecrawl/utils.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/github/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/github/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/github/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/github/github.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/github/github_search.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/github/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/heurist.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/http/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/http/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/http/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/http/get.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/http/http.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/http/post.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/http/put.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/http/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/lifi/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/lifi/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/lifi/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/lifi/lifi.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/lifi/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/lifi/token_execute.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/lifi/token_quote.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/lifi/utils.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/api.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/fetch_chain_portfolio.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/fetch_nft_portfolio.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/fetch_solana_portfolio.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/fetch_wallet_portfolio.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/moralis.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/moralis/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/morpho/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/morpho/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/morpho/morpho.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/morpho/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/nation/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/nation/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/nation/nation.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/nation/nft_check.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/nation/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/onchain.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/image_to_text.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/openai.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/constants.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/moralis.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/token_balances.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/wallet_approvals.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/wallet_defi_positions.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/wallet_history.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/wallet_net_worth.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/wallet_nfts.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/wallet_profitability.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/wallet_profitability_summary.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/wallet_stats.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/portfolio/wallet_swaps.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/pyth/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/pyth/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/pyth/pyth.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/pyth/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/skills.toml +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/slack/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/slack/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/slack/get_channel.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/slack/get_message.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/slack/schedule_message.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/slack/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/slack/send_message.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/slack/slack.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/delete_data.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/fetch_data.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/insert_data.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/invoke_function.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/supabase.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/update_data.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/supabase/upsert_data.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/superfluid/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/superfluid/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/superfluid/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/superfluid/superfluid.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/add_autonomous_task.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/delete_autonomous_task.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/edit_autonomous_task.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/list_autonomous_tasks.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/read_agent_api_key.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/regenerate_agent_api_key.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/system/system.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/tavily/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/tavily/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/tavily/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/tavily/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/tavily/tavily.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/tavily/tavily_extract.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/tavily/tavily_search.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/constants.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/erc20_transfers.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/moralis.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/token_analytics.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/token_price.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/token/token_search.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/follow_user.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/get_mentions.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/get_timeline.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/get_user_by_username.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/get_user_tweets.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/like_tweet.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/post_tweet.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/reply_tweet.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/retweet.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/search_tweets.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/twitter/twitter.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/unrealspeech/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/unrealspeech/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/unrealspeech/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/unrealspeech/text_to_speech.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_audio/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_audio/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_audio/input.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_audio/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_audio/venice_logo.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/config.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_enhance/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_enhance/image_enhance.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/image_generation_input.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_upscale/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_upscale/image_upscale.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_vision/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_vision/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_vision/image_vision.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_vision/image_vision_base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/image_vision/image_vision_input.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/utils.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/venice_image/venice_image.jpg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/web_scraper/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/web_scraper/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/web_scraper/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/web_scraper/document_indexer.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/web_scraper/langchain.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/web_scraper/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/web_scraper/scrape_and_index.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/web_scraper/utils.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/web_scraper/website_indexer.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/weth/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/weth/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/weth/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/weth/weth.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/wow/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/wow/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/wow/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/wow/wow.svg +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/x402/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/x402/http_request.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/x402/x402.webp +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/xmtp/README.md +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/xmtp/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/xmtp/base.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/xmtp/price.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/xmtp/schema.json +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/xmtp/swap.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/xmtp/transfer.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/xmtp/xmtp.png +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/utils/__init__.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/utils/chain.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/utils/ens.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/utils/error.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/utils/logging.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/utils/random.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/utils/schema.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/utils/slack_alert.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/utils/tx.py +0 -0
- {intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: intentkit
|
|
3
|
-
Version: 0.8.34
|
|
3
|
+
Version: 0.8.34.dev2
|
|
4
4
|
Summary: Intent-based AI Agent Platform - Core Package
|
|
5
5
|
Project-URL: Homepage, https://github.com/crestalnetwork/intentkit
|
|
6
6
|
Project-URL: Repository, https://github.com/crestalnetwork/intentkit
|
|
@@ -7,6 +7,7 @@ from dotenv import load_dotenv
|
|
|
7
7
|
|
|
8
8
|
from intentkit.utils.chain import ChainProvider, QuicknodeChainProvider
|
|
9
9
|
from intentkit.utils.logging import setup_logging
|
|
10
|
+
from intentkit.utils.s3 import init_s3
|
|
10
11
|
from intentkit.utils.slack_alert import init_slack
|
|
11
12
|
|
|
12
13
|
SecretsMap = dict[str, str | int]
|
|
@@ -70,16 +71,9 @@ class Config:
|
|
|
70
71
|
self.redis_host: str | None = self.load("REDIS_HOST")
|
|
71
72
|
self.redis_port: int = self.load_int("REDIS_PORT", 6379)
|
|
72
73
|
self.redis_db: int = self.load_int("REDIS_DB", 0)
|
|
73
|
-
# AWS
|
|
74
|
+
# AWS
|
|
74
75
|
self.aws_s3_bucket: str | None = self.load("AWS_S3_BUCKET")
|
|
75
76
|
self.aws_s3_cdn_url: str | None = self.load("AWS_S3_CDN_URL")
|
|
76
|
-
# If using custom S3 endpoint
|
|
77
|
-
self.aws_s3_endpoint_url: str | None = self.load("AWS_S3_ENDPOINT_URL")
|
|
78
|
-
self.aws_s3_region_name: str | None = self.load("AWS_S3_REGION_NAME")
|
|
79
|
-
self.aws_s3_access_key_id: str | None = self.load("AWS_S3_ACCESS_KEY_ID")
|
|
80
|
-
self.aws_s3_secret_access_key: str | None = self.load(
|
|
81
|
-
"AWS_S3_SECRET_ACCESS_KEY"
|
|
82
|
-
)
|
|
83
77
|
# Internal API
|
|
84
78
|
self.internal_base_url: str = self.load(
|
|
85
79
|
"INTERNAL_BASE_URL", "http://intent-api"
|
|
@@ -95,6 +89,7 @@ class Config:
|
|
|
95
89
|
self.debug_password: str | None = self.load("DEBUG_PASSWORD")
|
|
96
90
|
# Payment
|
|
97
91
|
self.payment_enabled: bool = self.load("PAYMENT_ENABLED", "false") == "true"
|
|
92
|
+
self.x402_fee_address: str | None = self.load("X402_FEE_ADDRESS")
|
|
98
93
|
# Open API for agent
|
|
99
94
|
self.open_api_base_url: str = self.load(
|
|
100
95
|
"OPEN_API_BASE_URL", "http://localhost:8000"
|
|
@@ -188,6 +183,9 @@ class Config:
|
|
|
188
183
|
# If the slack alert token exists, init it
|
|
189
184
|
if self.slack_alert_token and self.slack_alert_channel:
|
|
190
185
|
init_slack(self.slack_alert_token, self.slack_alert_channel)
|
|
186
|
+
# If the AWS S3 bucket and CDN URL exist, init it
|
|
187
|
+
if self.aws_s3_bucket and self.aws_s3_cdn_url:
|
|
188
|
+
init_s3(self.aws_s3_bucket, self.aws_s3_cdn_url, self.env)
|
|
191
189
|
|
|
192
190
|
@overload
|
|
193
191
|
def load(self, key: str) -> str | None: ... # noqa: F811
|
|
@@ -6,7 +6,7 @@ including clearing thread history using LangGraph's checkpointer.
|
|
|
6
6
|
|
|
7
7
|
import logging
|
|
8
8
|
|
|
9
|
-
from intentkit.models.db import
|
|
9
|
+
from intentkit.models.db import get_langgraph_checkpointer
|
|
10
10
|
from intentkit.utils.error import IntentKitAPIError
|
|
11
11
|
|
|
12
12
|
logger = logging.getLogger(__name__)
|
|
@@ -34,7 +34,7 @@ async def clear_thread_memory(agent_id: str, chat_id: str) -> bool:
|
|
|
34
34
|
thread_id = f"{agent_id}-{chat_id}"
|
|
35
35
|
|
|
36
36
|
# Get the LangGraph checkpointer instance
|
|
37
|
-
checkpointer =
|
|
37
|
+
checkpointer = get_langgraph_checkpointer()
|
|
38
38
|
|
|
39
39
|
# Use the official LangGraph method to delete all thread content
|
|
40
40
|
await checkpointer.adelete_thread(thread_id)
|
|
@@ -26,7 +26,6 @@ from langchain_core.messages import (
|
|
|
26
26
|
HumanMessage,
|
|
27
27
|
)
|
|
28
28
|
from langchain_core.tools import BaseTool
|
|
29
|
-
from langgraph.checkpoint.memory import InMemorySaver
|
|
30
29
|
from langgraph.errors import GraphRecursionError
|
|
31
30
|
from langgraph.graph.state import CompiledStateGraph
|
|
32
31
|
from sqlalchemy import func, update
|
|
@@ -54,10 +53,7 @@ from intentkit.models.chat import (
|
|
|
54
53
|
ChatMessageSkillCall,
|
|
55
54
|
)
|
|
56
55
|
from intentkit.models.credit import CreditAccount, OwnerType
|
|
57
|
-
from intentkit.models.db import
|
|
58
|
-
get_checkpointer,
|
|
59
|
-
get_session,
|
|
60
|
-
)
|
|
56
|
+
from intentkit.models.db import get_langgraph_checkpointer, get_session
|
|
61
57
|
from intentkit.models.llm import LLMModelInfo, create_llm_model
|
|
62
58
|
from intentkit.models.skill import AgentSkillData, ChatSkillData, Skill
|
|
63
59
|
from intentkit.models.user import User
|
|
@@ -125,10 +121,7 @@ async def build_agent(
|
|
|
125
121
|
)
|
|
126
122
|
|
|
127
123
|
# ==== Store buffered conversation history in memory.
|
|
128
|
-
|
|
129
|
-
checkpointer = get_checkpointer()
|
|
130
|
-
except RuntimeError:
|
|
131
|
-
checkpointer = InMemorySaver()
|
|
124
|
+
memory = get_langgraph_checkpointer()
|
|
132
125
|
|
|
133
126
|
# ==== Load skills
|
|
134
127
|
tools: list[BaseTool | dict] = []
|
|
@@ -199,7 +192,7 @@ async def build_agent(
|
|
|
199
192
|
middleware=middleware,
|
|
200
193
|
state_schema=AgentState,
|
|
201
194
|
context_schema=AgentContext,
|
|
202
|
-
checkpointer=
|
|
195
|
+
checkpointer=memory,
|
|
203
196
|
debug=config.debug_checkpoint,
|
|
204
197
|
name=agent.id,
|
|
205
198
|
)
|
|
@@ -374,7 +367,6 @@ async def stream_agent_raw(
|
|
|
374
367
|
payer = user_message.user_id
|
|
375
368
|
if user_message.author_type in [
|
|
376
369
|
AuthorType.TELEGRAM,
|
|
377
|
-
AuthorType.DISCORD,
|
|
378
370
|
AuthorType.TWITTER,
|
|
379
371
|
AuthorType.API,
|
|
380
372
|
AuthorType.X402,
|
|
@@ -13,9 +13,9 @@ from intentkit.core.agent import (
|
|
|
13
13
|
update_agents_account_snapshot,
|
|
14
14
|
update_agents_statistics,
|
|
15
15
|
)
|
|
16
|
-
from intentkit.core.cleanup import cleanup_checkpoints
|
|
17
16
|
from intentkit.core.credit import refill_all_free_credits
|
|
18
17
|
from intentkit.models.agent_data import AgentQuota
|
|
18
|
+
from intentkit.models.db import cleanup_checkpoints
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
def create_scheduler(
|
|
@@ -141,15 +141,12 @@ def create_scheduler(
|
|
|
141
141
|
replace_existing=True,
|
|
142
142
|
)
|
|
143
143
|
|
|
144
|
-
#
|
|
145
|
-
# Cleanup old checkpoints daily at UTC 2:20
|
|
146
|
-
|
|
144
|
+
# Clean up old LangGraph checkpoints daily at UTC 2:30
|
|
147
145
|
scheduler.add_job(
|
|
148
146
|
cleanup_checkpoints,
|
|
149
|
-
trigger=CronTrigger(hour=2, minute=
|
|
147
|
+
trigger=CronTrigger(hour=2, minute=30, timezone="UTC"),
|
|
150
148
|
id="cleanup_checkpoints",
|
|
151
|
-
name="
|
|
152
|
-
kwargs={"days": 90, "dry_run": False},
|
|
149
|
+
name="Clean up old checkpoints",
|
|
153
150
|
replace_existing=True,
|
|
154
151
|
)
|
|
155
152
|
|
|
@@ -3,17 +3,19 @@ from contextlib import asynccontextmanager
|
|
|
3
3
|
from typing import Annotated
|
|
4
4
|
from urllib.parse import quote_plus
|
|
5
5
|
|
|
6
|
-
from langgraph.checkpoint.
|
|
6
|
+
from langgraph.checkpoint.memory import InMemorySaver
|
|
7
|
+
from langgraph.checkpoint.postgres.aio import AsyncPostgresSaver
|
|
8
|
+
from langgraph.types import Checkpointer
|
|
7
9
|
from psycopg import OperationalError
|
|
8
10
|
from psycopg_pool import AsyncConnectionPool
|
|
9
11
|
from pydantic import Field
|
|
12
|
+
from sqlalchemy import text
|
|
10
13
|
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, create_async_engine
|
|
11
14
|
|
|
12
15
|
from intentkit.models.db_mig import safe_migrate
|
|
13
16
|
|
|
14
17
|
engine: AsyncEngine | None = None
|
|
15
|
-
|
|
16
|
-
_checkpointer: AsyncShallowPostgresSaver | None = None
|
|
18
|
+
_langgraph_checkpointer: Checkpointer | None = None
|
|
17
19
|
|
|
18
20
|
|
|
19
21
|
async def check_connection(conn):
|
|
@@ -52,9 +54,9 @@ async def init_db(
|
|
|
52
54
|
auto_migrate: Whether to run migrations automatically (default: True)
|
|
53
55
|
pool_size: Database connection pool size (default: 3)
|
|
54
56
|
"""
|
|
55
|
-
global engine,
|
|
56
|
-
# Initialize psycopg pool and
|
|
57
|
-
if
|
|
57
|
+
global engine, _langgraph_checkpointer
|
|
58
|
+
# Initialize psycopg pool and AsyncPostgresSaver if not already initialized
|
|
59
|
+
if _langgraph_checkpointer is None:
|
|
58
60
|
if host:
|
|
59
61
|
conn_string = (
|
|
60
62
|
f"postgresql://{username}:{quote_plus(password)}@{host}:{port}/{dbname}"
|
|
@@ -70,17 +72,13 @@ async def init_db(
|
|
|
70
72
|
# Set connection max lifetime to prevent stale connections
|
|
71
73
|
max_lifetime=3600, # 1 hour
|
|
72
74
|
)
|
|
73
|
-
|
|
74
|
-
_checkpointer = AsyncShallowPostgresSaver(pool)
|
|
75
|
+
_langgraph_checkpointer = AsyncPostgresSaver(pool)
|
|
75
76
|
if auto_migrate:
|
|
76
77
|
# Migrate can not use pool, so we start from scratch
|
|
77
|
-
async with
|
|
78
|
-
conn_string
|
|
79
|
-
) as saver:
|
|
78
|
+
async with AsyncPostgresSaver.from_conn_string(conn_string) as saver:
|
|
80
79
|
await saver.setup()
|
|
81
80
|
else:
|
|
82
|
-
|
|
83
|
-
pass
|
|
81
|
+
_langgraph_checkpointer = InMemorySaver()
|
|
84
82
|
# Initialize SQLAlchemy engine with pool settings
|
|
85
83
|
if engine is None:
|
|
86
84
|
if host:
|
|
@@ -143,23 +141,75 @@ def get_engine() -> AsyncEngine:
|
|
|
143
141
|
return engine
|
|
144
142
|
|
|
145
143
|
|
|
146
|
-
def
|
|
147
|
-
"""Get the
|
|
144
|
+
def get_langgraph_checkpointer() -> Checkpointer:
|
|
145
|
+
"""Get the AsyncPostgresSaver instance for langgraph.
|
|
148
146
|
|
|
149
147
|
Returns:
|
|
150
|
-
|
|
148
|
+
AsyncPostgresSaver: The AsyncPostgresSaver instance
|
|
151
149
|
"""
|
|
152
|
-
if
|
|
150
|
+
if _langgraph_checkpointer is None:
|
|
153
151
|
raise RuntimeError("Database pool not initialized. Call init_db first.")
|
|
154
|
-
return
|
|
152
|
+
return _langgraph_checkpointer
|
|
155
153
|
|
|
156
154
|
|
|
157
|
-
def
|
|
158
|
-
"""Get the AsyncShallowPostgresSaver instance.
|
|
159
|
-
|
|
160
|
-
Returns:
|
|
161
|
-
AsyncShallowPostgresSaver: The AsyncShallowPostgresSaver instance
|
|
155
|
+
async def cleanup_checkpoints() -> None:
|
|
162
156
|
"""
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
157
|
+
Clean up old checkpoints, writes, and blobs, keeping only the latest one for each thread.
|
|
158
|
+
This helps reduce database size while maintaining the current state of agents.
|
|
159
|
+
"""
|
|
160
|
+
assert engine is not None, "Database engine not initialized. Call init_db first."
|
|
161
|
+
|
|
162
|
+
# SQL to keep only the latest checkpoint for each thread
|
|
163
|
+
# We assume checkpoint_id is sortable (ULID/UUIDv7 style which LangGraph uses)
|
|
164
|
+
cleanup_checkpoints_sql = text("""
|
|
165
|
+
DELETE FROM checkpoints
|
|
166
|
+
WHERE (thread_id, checkpoint_ns, checkpoint_id) NOT IN (
|
|
167
|
+
SELECT DISTINCT ON (thread_id, checkpoint_ns)
|
|
168
|
+
thread_id, checkpoint_ns, checkpoint_id
|
|
169
|
+
FROM checkpoints
|
|
170
|
+
ORDER BY thread_id, checkpoint_ns, checkpoint_id DESC
|
|
171
|
+
);
|
|
172
|
+
""")
|
|
173
|
+
|
|
174
|
+
# SQL to clean up writes that reference deleted checkpoints
|
|
175
|
+
cleanup_writes_sql = text("""
|
|
176
|
+
DELETE FROM checkpoint_writes
|
|
177
|
+
WHERE (thread_id, checkpoint_ns, checkpoint_id) NOT IN (
|
|
178
|
+
SELECT thread_id, checkpoint_ns, checkpoint_id
|
|
179
|
+
FROM checkpoints
|
|
180
|
+
);
|
|
181
|
+
""")
|
|
182
|
+
|
|
183
|
+
# SQL to clean up blobs that are not referenced by any remaining checkpoint
|
|
184
|
+
# Optimized using NOT EXISTS instead of NOT IN for better performance
|
|
185
|
+
# Using CTE to materialize active channel versions first
|
|
186
|
+
cleanup_blobs_sql = text("""
|
|
187
|
+
WITH active_versions AS (
|
|
188
|
+
SELECT DISTINCT
|
|
189
|
+
thread_id,
|
|
190
|
+
checkpoint_ns,
|
|
191
|
+
key as channel,
|
|
192
|
+
value as version
|
|
193
|
+
FROM checkpoints,
|
|
194
|
+
jsonb_each_text(checkpoint -> 'channel_versions')
|
|
195
|
+
)
|
|
196
|
+
DELETE FROM checkpoint_blobs cb
|
|
197
|
+
WHERE NOT EXISTS (
|
|
198
|
+
SELECT 1
|
|
199
|
+
FROM active_versions av
|
|
200
|
+
WHERE av.thread_id = cb.thread_id
|
|
201
|
+
AND av.checkpoint_ns = cb.checkpoint_ns
|
|
202
|
+
AND av.channel = cb.channel
|
|
203
|
+
AND av.version = cb.version
|
|
204
|
+
);
|
|
205
|
+
""")
|
|
206
|
+
|
|
207
|
+
async with AsyncSession(engine) as session:
|
|
208
|
+
try:
|
|
209
|
+
await session.execute(cleanup_checkpoints_sql)
|
|
210
|
+
await session.execute(cleanup_writes_sql)
|
|
211
|
+
await session.execute(cleanup_blobs_sql)
|
|
212
|
+
await session.commit()
|
|
213
|
+
except Exception as e:
|
|
214
|
+
await session.rollback()
|
|
215
|
+
raise e
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"""Database migration utilities."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from collections.abc import Callable
|
|
5
|
+
|
|
6
|
+
from sqlalchemy import Column, MetaData, inspect, text
|
|
7
|
+
|
|
8
|
+
from intentkit.models.base import Base
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
async def add_column_if_not_exists(
|
|
14
|
+
conn, dialect, table_name: str, column: Column
|
|
15
|
+
) -> None:
|
|
16
|
+
"""Add a column to a table if it doesn't exist.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
conn: SQLAlchemy conn
|
|
20
|
+
table_name: Name of the table
|
|
21
|
+
column: Column to add
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
# Use run_sync to perform inspection on the connection
|
|
25
|
+
def _get_columns(connection):
|
|
26
|
+
inspector = inspect(connection)
|
|
27
|
+
return [c["name"] for c in inspector.get_columns(table_name)]
|
|
28
|
+
|
|
29
|
+
columns = await conn.run_sync(_get_columns)
|
|
30
|
+
|
|
31
|
+
if column.name not in columns:
|
|
32
|
+
# Build column definition
|
|
33
|
+
column_def = f"{column.name} {column.type.compile(dialect)}"
|
|
34
|
+
|
|
35
|
+
# Add DEFAULT if specified
|
|
36
|
+
if column.default is not None:
|
|
37
|
+
if hasattr(column.default, "arg"):
|
|
38
|
+
default_value = column.default.arg
|
|
39
|
+
if not isinstance(default_value, Callable):
|
|
40
|
+
if isinstance(default_value, bool):
|
|
41
|
+
default_value = str(default_value).lower()
|
|
42
|
+
elif isinstance(default_value, str):
|
|
43
|
+
default_value = f"'{default_value}'"
|
|
44
|
+
elif isinstance(default_value, list | dict):
|
|
45
|
+
default_value = "'{}'"
|
|
46
|
+
column_def += f" DEFAULT {default_value}"
|
|
47
|
+
|
|
48
|
+
# Execute ALTER TABLE
|
|
49
|
+
await conn.execute(text(f"ALTER TABLE {table_name} ADD COLUMN {column_def}"))
|
|
50
|
+
logger.info(f"Added column {column.name} to table {table_name}")
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
async def update_table_schema(conn, dialect, model_cls) -> None:
|
|
54
|
+
"""Update table schema by adding missing columns from the model.
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
conn: SQLAlchemy conn
|
|
58
|
+
dialect: SQLAlchemy dialect
|
|
59
|
+
model_cls: SQLAlchemy model class to check for new columns
|
|
60
|
+
"""
|
|
61
|
+
if not hasattr(model_cls, "__table__"):
|
|
62
|
+
return
|
|
63
|
+
|
|
64
|
+
table_name = model_cls.__tablename__
|
|
65
|
+
for name, column in model_cls.__table__.columns.items():
|
|
66
|
+
if name != "id": # Skip primary key
|
|
67
|
+
await add_column_if_not_exists(conn, dialect, table_name, column)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
async def safe_migrate(engine) -> None:
|
|
71
|
+
"""Safely migrate all SQLAlchemy models by adding new columns.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
engine: SQLAlchemy engine
|
|
75
|
+
"""
|
|
76
|
+
logger.info("Starting database schema migration")
|
|
77
|
+
dialect = engine.dialect
|
|
78
|
+
|
|
79
|
+
async with engine.begin() as conn:
|
|
80
|
+
try:
|
|
81
|
+
# Create tables if they don't exist
|
|
82
|
+
await conn.run_sync(Base.metadata.create_all)
|
|
83
|
+
|
|
84
|
+
# Get existing table metadata
|
|
85
|
+
metadata = MetaData()
|
|
86
|
+
await conn.run_sync(metadata.reflect)
|
|
87
|
+
|
|
88
|
+
# Update schema for all model classes
|
|
89
|
+
for mapper in Base.registry.mappers:
|
|
90
|
+
model_cls = mapper.class_
|
|
91
|
+
if hasattr(model_cls, "__tablename__"):
|
|
92
|
+
table_name = model_cls.__tablename__
|
|
93
|
+
if table_name in metadata.tables:
|
|
94
|
+
# We need a sync wrapper for the async update_table_schema
|
|
95
|
+
async def update_table_wrapper():
|
|
96
|
+
await update_table_schema(conn, dialect, model_cls)
|
|
97
|
+
|
|
98
|
+
await update_table_wrapper()
|
|
99
|
+
except Exception as e:
|
|
100
|
+
logger.error(f"Error updating database schema: {str(e)}")
|
|
101
|
+
raise
|
|
102
|
+
|
|
103
|
+
logger.info("Database schema updated successfully")
|
|
@@ -167,6 +167,7 @@ firecrawl,firecrawl_clear_indexed_content,firecrawl_clear_indexed_content,TRUE,1
|
|
|
167
167
|
xmtp,xmtp_transfer,xmtp_transfer,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
|
|
168
168
|
xmtp,xmtp_swap,xmtp_swap,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
|
|
169
169
|
xmtp,xmtp_get_swap_price,xmtp_get_swap_price,TRUE,1,5,5,,,0x445750026A4a1906b61302442E085f9cbAfe206a
|
|
170
|
+
x402,x402_ask_agent,x402_ask_agent,TRUE,1,1,1,,,0x445750026A4a1906b61302442E085f9cbAfe206a
|
|
170
171
|
x402,x402_http_request,x402_http_request,TRUE,1,1,1,,,0x445750026A4a1906b61302442E085f9cbAfe206a
|
|
171
172
|
casino,deck_shuffle,casino_deck_shuffle,true,1,5,5,,,0x3cdd051eec909f94965f9c1c657f5b70a172b2c0
|
|
172
173
|
casino,deck_draw,casino_deck_draw,true,1,5,5,,,0x3cdd051eec909f94965f9c1c657f5b70a172b2c0
|
{intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_animagine_xl.py
RENAMED
|
@@ -4,9 +4,9 @@ import httpx
|
|
|
4
4
|
from epyxid import XID
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
7
|
-
from intentkit.clients.s3 import store_image
|
|
8
7
|
from intentkit.config.config import config
|
|
9
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
|
+
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
@@ -77,6 +77,7 @@ class ImageGenerationAnimagineXL(HeuristBaseTool):
|
|
|
77
77
|
"""
|
|
78
78
|
context = self.get_context()
|
|
79
79
|
skill_config = context.agent.skill_config(self.category)
|
|
80
|
+
skill_config = skill_config
|
|
80
81
|
|
|
81
82
|
# Get the Heurist API key from configuration
|
|
82
83
|
if "api_key" in skill_config and skill_config["api_key"]:
|
|
@@ -4,9 +4,9 @@ import httpx
|
|
|
4
4
|
from epyxid import XID
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
7
|
-
from intentkit.clients.s3 import store_image
|
|
8
7
|
from intentkit.config.config import config
|
|
9
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
|
+
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
@@ -76,6 +76,7 @@ class ImageGenerationArthemyComics(HeuristBaseTool):
|
|
|
76
76
|
"""
|
|
77
77
|
context = self.get_context()
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
|
+
skill_config = skill_config
|
|
79
80
|
|
|
80
81
|
# Get the Heurist API key from configuration
|
|
81
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
{intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_arthemy_real.py
RENAMED
|
@@ -4,9 +4,9 @@ import httpx
|
|
|
4
4
|
from epyxid import XID
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
7
|
-
from intentkit.clients.s3 import store_image
|
|
8
7
|
from intentkit.config.config import config
|
|
9
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
|
+
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
@@ -76,6 +76,7 @@ class ImageGenerationArthemyReal(HeuristBaseTool):
|
|
|
76
76
|
"""
|
|
77
77
|
context = self.get_context()
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
|
+
skill_config = skill_config
|
|
79
80
|
|
|
80
81
|
# Get the Heurist API key from configuration
|
|
81
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
{intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_braindance.py
RENAMED
|
@@ -4,9 +4,9 @@ import httpx
|
|
|
4
4
|
from epyxid import XID
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
7
|
-
from intentkit.clients.s3 import store_image
|
|
8
7
|
from intentkit.config.config import config
|
|
9
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
|
+
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
@@ -76,6 +76,7 @@ class ImageGenerationBrainDance(HeuristBaseTool):
|
|
|
76
76
|
"""
|
|
77
77
|
context = self.get_context()
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
|
+
skill_config = skill_config
|
|
79
80
|
|
|
80
81
|
# Get the Heurist API key from configuration
|
|
81
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
|
@@ -4,9 +4,9 @@ import httpx
|
|
|
4
4
|
from epyxid import XID
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
7
|
-
from intentkit.clients.s3 import store_image
|
|
8
7
|
from intentkit.config.config import config
|
|
9
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
|
+
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
@@ -76,6 +76,7 @@ class ImageGenerationCyberRealisticXL(HeuristBaseTool):
|
|
|
76
76
|
"""
|
|
77
77
|
context = self.get_context()
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
|
+
skill_config = skill_config
|
|
79
80
|
|
|
80
81
|
# Get the Heurist API key from configuration
|
|
81
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
{intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_flux_1_dev.py
RENAMED
|
@@ -4,9 +4,9 @@ import httpx
|
|
|
4
4
|
from epyxid import XID
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
7
|
-
from intentkit.clients.s3 import store_image
|
|
8
7
|
from intentkit.config.config import config
|
|
9
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
|
+
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
@@ -76,6 +76,7 @@ class ImageGenerationFlux1Dev(HeuristBaseTool):
|
|
|
76
76
|
"""
|
|
77
77
|
context = self.get_context()
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
|
+
skill_config = skill_config
|
|
79
80
|
|
|
80
81
|
# Get the Heurist API key from configuration
|
|
81
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
{intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/heurist/image_generation_sdxl.py
RENAMED
|
@@ -4,9 +4,9 @@ import httpx
|
|
|
4
4
|
from epyxid import XID
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
7
|
-
from intentkit.clients.s3 import store_image
|
|
8
7
|
from intentkit.config.config import config
|
|
9
8
|
from intentkit.skills.heurist.base import HeuristBaseTool
|
|
9
|
+
from intentkit.utils.s3 import store_image
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
@@ -76,6 +76,7 @@ class ImageGenerationSDXL(HeuristBaseTool):
|
|
|
76
76
|
"""
|
|
77
77
|
context = self.get_context()
|
|
78
78
|
skill_config = context.agent.skill_config(self.category)
|
|
79
|
+
skill_config = skill_config
|
|
79
80
|
|
|
80
81
|
# Get the Heurist API key from configuration
|
|
81
82
|
if "api_key" in skill_config and skill_config["api_key"]:
|
{intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/dalle_image_generation.py
RENAMED
|
@@ -6,8 +6,8 @@ import openai
|
|
|
6
6
|
from epyxid import XID
|
|
7
7
|
from pydantic import BaseModel, Field
|
|
8
8
|
|
|
9
|
-
from intentkit.clients.s3 import store_image
|
|
10
9
|
from intentkit.skills.openai.base import OpenAIBaseTool
|
|
10
|
+
from intentkit.utils.s3 import store_image
|
|
11
11
|
|
|
12
12
|
logger = logging.getLogger(__name__)
|
|
13
13
|
|
|
@@ -7,8 +7,8 @@ import openai
|
|
|
7
7
|
from epyxid import XID
|
|
8
8
|
from pydantic import BaseModel, Field
|
|
9
9
|
|
|
10
|
-
from intentkit.clients.s3 import store_image_bytes
|
|
11
10
|
from intentkit.skills.openai.base import OpenAIBaseTool
|
|
11
|
+
from intentkit.utils.s3 import store_image_bytes
|
|
12
12
|
|
|
13
13
|
logger = logging.getLogger(__name__)
|
|
14
14
|
|
|
@@ -8,8 +8,8 @@ import openai
|
|
|
8
8
|
from epyxid import XID
|
|
9
9
|
from pydantic import BaseModel, Field
|
|
10
10
|
|
|
11
|
-
from intentkit.clients.s3 import store_image_bytes
|
|
12
11
|
from intentkit.skills.openai.base import OpenAIBaseTool
|
|
12
|
+
from intentkit.utils.s3 import store_image_bytes
|
|
13
13
|
|
|
14
14
|
logger = logging.getLogger(__name__)
|
|
15
15
|
|
{intentkit-0.8.34 → intentkit-0.8.34.dev2}/intentkit/skills/openai/gpt_image_mini_generator.py
RENAMED
|
@@ -8,9 +8,9 @@ import openai
|
|
|
8
8
|
from epyxid import XID
|
|
9
9
|
from pydantic import BaseModel
|
|
10
10
|
|
|
11
|
-
from intentkit.clients.s3 import store_image_bytes
|
|
12
11
|
from intentkit.skills.openai.base import OpenAIBaseTool
|
|
13
12
|
from intentkit.skills.openai.gpt_image_generation import GPTImageGenerationInput
|
|
13
|
+
from intentkit.utils.s3 import store_image_bytes
|
|
14
14
|
|
|
15
15
|
logger = logging.getLogger(__name__)
|
|
16
16
|
|
|
@@ -10,8 +10,8 @@ import openai
|
|
|
10
10
|
from epyxid import XID
|
|
11
11
|
from pydantic import BaseModel, Field
|
|
12
12
|
|
|
13
|
-
from intentkit.clients.s3 import store_image_bytes
|
|
14
13
|
from intentkit.skills.openai.base import OpenAIBaseTool
|
|
14
|
+
from intentkit.utils.s3 import store_image_bytes
|
|
15
15
|
|
|
16
16
|
logger = logging.getLogger(__name__)
|
|
17
17
|
|
|
@@ -6,9 +6,9 @@ from typing import Any
|
|
|
6
6
|
import httpx
|
|
7
7
|
from pydantic import BaseModel
|
|
8
8
|
|
|
9
|
-
from intentkit.clients.s3 import store_file
|
|
10
9
|
from intentkit.skills.venice_audio.base import VeniceAudioBaseTool
|
|
11
10
|
from intentkit.skills.venice_audio.input import AllowedAudioFormat, VeniceAudioInput
|
|
11
|
+
from intentkit.utils.s3 import store_file
|
|
12
12
|
|
|
13
13
|
logger = logging.getLogger(__name__)
|
|
14
14
|
|
|
@@ -5,14 +5,13 @@ from typing import Any, Literal
|
|
|
5
5
|
|
|
6
6
|
from pydantic import BaseModel, Field
|
|
7
7
|
|
|
8
|
-
from intentkit.clients.s3 import store_image_bytes
|
|
9
|
-
|
|
10
8
|
# Import the generic base
|
|
11
9
|
from intentkit.skills.base import ToolException
|
|
12
10
|
from intentkit.skills.venice_image.base import VeniceImageBaseTool
|
|
13
11
|
from intentkit.skills.venice_image.image_generation.image_generation_input import (
|
|
14
12
|
VeniceImageGenerationInput,
|
|
15
13
|
)
|
|
14
|
+
from intentkit.utils.s3 import store_image_bytes
|
|
16
15
|
|
|
17
16
|
logger = logging.getLogger(__name__)
|
|
18
17
|
|