intentkit 0.6.7.dev7__tar.gz → 0.6.7.dev9__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.
Potentially problematic release.
This version of intentkit might be problematic. Click here for more details.
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/PKG-INFO +1 -1
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/__init__.py +1 -1
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/config/config.py +1 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/db.py +8 -4
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/pyproject.toml +1 -1
- intentkit-0.6.7.dev9/skills/elfa/README.md +152 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/elfa/__init__.py +1 -10
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/elfa/base.py +1 -1
- intentkit-0.6.7.dev9/skills/elfa/mention.py +223 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/elfa/schema.json +1 -17
- intentkit-0.6.7.dev9/skills/elfa/stats.py +85 -0
- intentkit-0.6.7.dev9/skills/elfa/tokens.py +122 -0
- intentkit-0.6.7.dev9/skills/elfa/utils.py +129 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/get_mentions.py +1 -1
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/get_timeline.py +1 -1
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/get_user_by_username.py +1 -1
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/get_user_tweets.py +1 -1
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/search_tweets.py +1 -1
- intentkit-0.6.7.dev7/skills/elfa/README.md +0 -100
- intentkit-0.6.7.dev7/skills/elfa/mention.py +0 -504
- intentkit-0.6.7.dev7/skills/elfa/stats.py +0 -118
- intentkit-0.6.7.dev7/skills/elfa/tokens.py +0 -126
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/.gitignore +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/LICENSE +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/MANIFEST.in +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/abstracts/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/abstracts/agent.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/abstracts/api.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/abstracts/engine.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/abstracts/exception.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/abstracts/graph.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/abstracts/skill.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/abstracts/twitter.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/clients/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/clients/cdp.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/clients/twitter.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/config/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/core/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/core/agent.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/core/api.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/core/client.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/core/credit.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/core/engine.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/core/node.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/core/prompt.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/core/skill.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/agent.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/agent_data.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/agent_schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/app_setting.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/chat.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/conversation.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/credit.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/db_mig.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/generator.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/llm.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/redis.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/skill.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/models/user.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/acolyt/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/acolyt/acolyt.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/acolyt/ask.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/acolyt/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/acolyt/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/aixbt/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/aixbt/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/aixbt/aixbt.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/aixbt/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/aixbt/projects.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/aixbt/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/allora/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/allora/allora.jpeg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/allora/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/allora/price.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/allora/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/carv/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/carv/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/carv/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/carv/carv.webp +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/carv/fetch_news.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/carv/onchain_query.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/carv/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/carv/token_info_and_price.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cdp/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cdp/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cdp/cdp.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cdp/get_balance.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cdp/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cdp/swap.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/chainlist/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/chainlist/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/chainlist/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/chainlist/chain_lookup.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/chainlist/chainlist.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/chainlist/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/common/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/common/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/common/common.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/common/current_time.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/common/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/constants.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/cookiefun.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/get_account_details.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/get_account_feed.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/get_account_smart_followers.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/get_sectors.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cookiefun/search_accounts.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/api.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/cryptocompare.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/fetch_news.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/fetch_price.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/fetch_top_exchanges.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/fetch_top_market_cap.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/fetch_top_volume.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/fetch_trading_signals.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptocompare/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptopanic/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptopanic/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptopanic/cryptopanic.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptopanic/fetch_crypto_news.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptopanic/fetch_crypto_sentiment.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/cryptopanic/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dapplooker/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dapplooker/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dapplooker/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dapplooker/dapplooker.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dapplooker/dapplooker_token_data.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dapplooker/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/api.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/coins/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/coins/fetch_batch_historical_prices.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/coins/fetch_block.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/coins/fetch_current_prices.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/coins/fetch_first_price.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/coins/fetch_historical_prices.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/coins/fetch_price_chart.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/coins/fetch_price_percentage.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/config/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/config/chains.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/defillama.jpeg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/fees/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/fees/fetch_fees_overview.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/stablecoins/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/stablecoins/fetch_stablecoin_chains.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/stablecoins/fetch_stablecoin_charts.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/stablecoins/fetch_stablecoin_prices.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/stablecoins/fetch_stablecoins.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tests/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tests/api_integration.test.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tests/api_unit.test.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tvl/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tvl/fetch_chain_historical_tvl.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tvl/fetch_chains.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tvl/fetch_historical_tvl.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tvl/fetch_protocol.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tvl/fetch_protocol_current_tvl.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/tvl/fetch_protocols.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/volumes/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/volumes/fetch_dex_overview.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/volumes/fetch_dex_summary.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/volumes/fetch_options_overview.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/yields/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/yields/fetch_pool_chart.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/defillama/yields/fetch_pools.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dexscreener/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dexscreener/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dexscreener/dexscreener.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dexscreener/model/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dexscreener/model/search_token_response.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dexscreener/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dexscreener/search_token.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dune_analytics/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dune_analytics/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dune_analytics/dune.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dune_analytics/fetch_kol_buys.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dune_analytics/fetch_nation_metrics.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/dune_analytics/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/elfa/elfa.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/abi/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/abi/approval.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/abi/erc20.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/abi/route.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/best_yield.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/enso.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/networks.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/prices.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/route.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/tokens.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/enso/wallet.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/clear.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/crawl.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/firecrawl.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/query.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/scrape.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/firecrawl/utils.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/github/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/github/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/github/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/github/github.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/github/github_search.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/github/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/heurist.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/image_generation_animagine_xl.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/image_generation_arthemy_comics.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/image_generation_arthemy_real.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/image_generation_braindance.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/image_generation_cyber_realistic_xl.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/image_generation_flux_1_dev.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/image_generation_sdxl.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/heurist/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/http/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/http/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/http/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/http/get.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/http/http.svg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/http/post.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/http/put.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/http/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/lifi/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/lifi/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/lifi/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/lifi/lifi.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/lifi/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/lifi/token_execute.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/lifi/token_quote.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/lifi/utils.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/api.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/fetch_chain_portfolio.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/fetch_nft_portfolio.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/fetch_solana_portfolio.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/fetch_wallet_portfolio.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/moralis.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/tests/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/moralis/tests/test_wallet.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/nation/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/nation/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/nation/nation.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/nation/nft_check.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/nation/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/openai/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/openai/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/openai/dalle_image_generation.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/openai/gpt_image_generation.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/openai/gpt_image_to_image.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/openai/image_to_text.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/openai/openai.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/openai/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/constants.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/moralis.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/token_balances.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/wallet_approvals.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/wallet_defi_positions.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/wallet_history.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/wallet_net_worth.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/wallet_nfts.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/wallet_profitability.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/wallet_profitability_summary.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/wallet_stats.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/portfolio/wallet_swaps.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/skills.toml +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/slack/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/slack/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/slack/get_channel.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/slack/get_message.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/slack/schedule_message.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/slack/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/slack/send_message.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/slack/slack.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/delete_data.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/fetch_data.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/insert_data.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/invoke_function.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/supabase.svg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/update_data.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/supabase/upsert_data.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/add_autonomous_task.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/delete_autonomous_task.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/edit_autonomous_task.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/list_autonomous_tasks.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/read_agent_api_key.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/regenerate_agent_api_key.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/system/system.svg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/tavily/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/tavily/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/tavily/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/tavily/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/tavily/tavily.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/tavily/tavily_extract.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/tavily/tavily_search.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/constants.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/erc20_transfers.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/moralis.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/token_analytics.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/token_price.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/token/token_search.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/follow_user.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/like_tweet.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/post_tweet.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/reply_tweet.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/retweet.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/twitter/twitter.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/unrealspeech/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/unrealspeech/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/unrealspeech/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/unrealspeech/text_to_speech.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/unrealspeech/unrealspeech.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_audio/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_audio/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_audio/input.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_audio/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_audio/venice_audio.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_audio/venice_logo.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/api.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/config.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_enhance/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_enhance/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_enhance/image_enhance.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_enhance/image_enhance_base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_enhance/image_enhance_input.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/image_generation_base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/image_generation_fluently_xl.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/image_generation_flux_dev.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/image_generation_input.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/image_generation_pony_realism.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_generation/image_generation_venice_sd35.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_upscale/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_upscale/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_upscale/image_upscale.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_upscale/image_upscale_base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_upscale/image_upscale_input.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_vision/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_vision/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_vision/image_vision.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_vision/image_vision_base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/image_vision/image_vision_input.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/utils.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/venice_image/venice_image.jpg +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/web_scraper/README.md +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/web_scraper/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/web_scraper/base.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/web_scraper/document_indexer.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/web_scraper/langchain.png +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/web_scraper/schema.json +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/web_scraper/scrape_and_index.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/web_scraper/utils.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/skills/web_scraper/website_indexer.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/utils/__init__.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/utils/chain.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/utils/error.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/utils/logging.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/utils/random.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/utils/s3.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/utils/slack_alert.py +0 -0
- {intentkit-0.6.7.dev7 → intentkit-0.6.7.dev9}/utils/tx.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: intentkit
|
|
3
|
-
Version: 0.6.7.
|
|
3
|
+
Version: 0.6.7.dev9
|
|
4
4
|
Summary: Intent-based AI Agent Platform - Core Package
|
|
5
5
|
Project-URL: Homepage, https://github.com/crestal-network/intentkit
|
|
6
6
|
Project-URL: Repository, https://github.com/crestal-network/intentkit
|
|
@@ -59,6 +59,7 @@ class Config:
|
|
|
59
59
|
}
|
|
60
60
|
# ==== this part can be load from env or aws secrets manager
|
|
61
61
|
self.db["auto_migrate"] = self.load("DB_AUTO_MIGRATE", "true") == "true"
|
|
62
|
+
self.db["pool_size"] = int(self.load("DB_POOL_SIZE", "3"))
|
|
62
63
|
self.debug = self.load("DEBUG") == "true"
|
|
63
64
|
self.debug_checkpoint = (
|
|
64
65
|
self.load("DEBUG_CHECKPOINT", "false") == "true"
|
|
@@ -23,6 +23,9 @@ async def init_db(
|
|
|
23
23
|
auto_migrate: Annotated[
|
|
24
24
|
bool, Field(default=True, description="Whether to run migrations automatically")
|
|
25
25
|
],
|
|
26
|
+
pool_size: Annotated[
|
|
27
|
+
int, Field(default=3, description="Database connection pool size")
|
|
28
|
+
] = 3,
|
|
26
29
|
) -> None:
|
|
27
30
|
"""Initialize the database and handle schema updates.
|
|
28
31
|
|
|
@@ -33,6 +36,7 @@ async def init_db(
|
|
|
33
36
|
dbname: Database name
|
|
34
37
|
port: Database port (default: 5432)
|
|
35
38
|
auto_migrate: Whether to run migrations automatically (default: True)
|
|
39
|
+
pool_size: Database connection pool size (default: 3)
|
|
36
40
|
"""
|
|
37
41
|
global engine, _langgraph_checkpointer
|
|
38
42
|
# Initialize psycopg pool and AsyncPostgresSaver if not already initialized
|
|
@@ -43,8 +47,8 @@ async def init_db(
|
|
|
43
47
|
)
|
|
44
48
|
pool = AsyncConnectionPool(
|
|
45
49
|
conninfo=conn_string,
|
|
46
|
-
min_size=
|
|
47
|
-
max_size=
|
|
50
|
+
min_size=pool_size,
|
|
51
|
+
max_size=pool_size * 2,
|
|
48
52
|
timeout=60,
|
|
49
53
|
max_idle=30 * 60,
|
|
50
54
|
)
|
|
@@ -60,8 +64,8 @@ async def init_db(
|
|
|
60
64
|
if host:
|
|
61
65
|
engine = create_async_engine(
|
|
62
66
|
f"postgresql+asyncpg://{username}:{quote_plus(password)}@{host}:{port}/{dbname}",
|
|
63
|
-
pool_size=
|
|
64
|
-
max_overflow=
|
|
67
|
+
pool_size=pool_size,
|
|
68
|
+
max_overflow=pool_size * 2, # Set overflow to 2x pool size
|
|
65
69
|
pool_timeout=60, # Increase timeout
|
|
66
70
|
pool_pre_ping=True, # Enable connection health checks
|
|
67
71
|
pool_recycle=3600, # Recycle connections after 1 hour
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Elfa Skills - Social Media Intelligence
|
|
2
|
+
|
|
3
|
+
Integration with [Elfa AI API v2](https://api.elfa.ai/v2) providing real-time social media data analysis and processing capabilities for crypto and stock market sentiment tracking.
|
|
4
|
+
|
|
5
|
+
**Important: V2 API Changes**
|
|
6
|
+
- **No Raw Content**: V2 API removes raw tweet content for platform compliance
|
|
7
|
+
- **Sanitized Data**: Returns engagement metrics, timestamps, and account metadata only
|
|
8
|
+
- **New Endpoints**: Updated endpoints with consistent response format
|
|
9
|
+
- **Enhanced Pagination**: Different pagination patterns for search vs aggregation endpoints
|
|
10
|
+
|
|
11
|
+
## Setup
|
|
12
|
+
|
|
13
|
+
Add your Elfa API key to your environment:
|
|
14
|
+
```bash
|
|
15
|
+
ELFA_API_KEY=your_elfa_api_key_here
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Available Skills
|
|
19
|
+
|
|
20
|
+
### 1. Get Trending Tokens (`get_trending_tokens`)
|
|
21
|
+
|
|
22
|
+
Ranks the most discussed tokens based on smart mentions count for a given period, updated every 5 minutes.
|
|
23
|
+
|
|
24
|
+
**Endpoint**: `v2/aggregations/trending-tokens` - Direct Migration
|
|
25
|
+
|
|
26
|
+
**Example Prompts:**
|
|
27
|
+
```
|
|
28
|
+
"What are the trending crypto tokens in the last 24 hours?"
|
|
29
|
+
"Get trending tokens with minimum 50 mentions in the past week"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Parameters:**
|
|
33
|
+
- `timeWindow`: "30m", "1h", "4h", "24h", "7d", "30d" (default: "7d")
|
|
34
|
+
- `page`: Page number for pagination (default: 1)
|
|
35
|
+
- `pageSize`: Number of items per page (default: 50)
|
|
36
|
+
- `minMentions`: Minimum mentions required (default: 5)
|
|
37
|
+
|
|
38
|
+
**V2 Changes:**
|
|
39
|
+
- Same functionality and parameters
|
|
40
|
+
- Enhanced response format with metadata
|
|
41
|
+
- Uses page+pageSize pagination for aggregations
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### 2. Get Top Mentions (`get_top_mentions`)
|
|
46
|
+
|
|
47
|
+
Queries tweets mentioning a specific stock/crypto ticker, ranked by view count for market sentiment analysis.
|
|
48
|
+
|
|
49
|
+
**Endpoint**: `v2/data/top-mentions` - Breaking Changes
|
|
50
|
+
|
|
51
|
+
**Example Prompts:**
|
|
52
|
+
```
|
|
53
|
+
"Get the top mentions for Bitcoin in the last 24 hours"
|
|
54
|
+
"Show me engagement metrics for tweets about $ETH today"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Parameters:**
|
|
58
|
+
- `ticker`: Stock/crypto symbol (e.g., "BTC", "$ETH", "AAPL") - required
|
|
59
|
+
- `timeWindow`: "1h", "24h", "7d" (default: "1h")
|
|
60
|
+
- `page`: Page number for pagination (default: 1)
|
|
61
|
+
- `pageSize`: Number of items per page (default: 10)
|
|
62
|
+
|
|
63
|
+
**V2 Changes:**
|
|
64
|
+
- **Removed**: Raw tweet content/text
|
|
65
|
+
- **Removed**: `includeAccountDetails` parameter (always included)
|
|
66
|
+
- **Preserved**: Engagement metrics (view_count, like_count, etc.)
|
|
67
|
+
- **Preserved**: Account information and verification status
|
|
68
|
+
- **Enhanced**: Account tags (e.g., "smart" accounts)
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### 3. Search Mentions (`search_mentions`)
|
|
73
|
+
|
|
74
|
+
Searches tweets mentioning up to 5 keywords or from specific accounts with sanitized engagement data.
|
|
75
|
+
|
|
76
|
+
**Endpoint**: `v2/data/keyword-mentions` - Breaking Changes
|
|
77
|
+
|
|
78
|
+
**Example Prompts:**
|
|
79
|
+
```
|
|
80
|
+
"Search for engagement metrics of tweets mentioning 'DeFi, NFT, blockchain'"
|
|
81
|
+
"Find tweets from account 'elonmusk' about cryptocurrency"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Parameters:**
|
|
85
|
+
- `keywords`: Up to 5 keywords (comma-separated, phrases accepted) - optional if accountName provided
|
|
86
|
+
- `accountName`: Account username to filter by - optional if keywords provided
|
|
87
|
+
- `timeWindow`: Time window for search (default: "7d")
|
|
88
|
+
- `limit`: Number of results to return, max 30 (default: 20)
|
|
89
|
+
- `searchType`: Type of search - "and" or "or" (default: "or")
|
|
90
|
+
- `cursor`: Cursor for pagination (optional)
|
|
91
|
+
|
|
92
|
+
**V2 Changes:**
|
|
93
|
+
- **Removed**: Raw tweet content/text
|
|
94
|
+
- **Preserved**: Engagement metrics and sentiment analysis
|
|
95
|
+
- **Enhanced**: Account filtering with `accountName` parameter
|
|
96
|
+
- **Updated**: Uses limit+cursor pagination for search
|
|
97
|
+
- **Added**: Account tags and metadata
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### 4. Get Smart Stats (`get_smart_stats`)
|
|
102
|
+
|
|
103
|
+
Retrieves key social media metrics for a specific username including engagement ratios and smart following count.
|
|
104
|
+
|
|
105
|
+
**Endpoint**: `v2/account/smart-stats` - Direct Migration
|
|
106
|
+
|
|
107
|
+
**Example Prompts:**
|
|
108
|
+
```
|
|
109
|
+
"Get smart stats for @elonmusk"
|
|
110
|
+
"Analyze the social metrics for username 'VitalikButerin'"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Parameters:**
|
|
114
|
+
- `username`: Twitter username (with or without @) - required
|
|
115
|
+
|
|
116
|
+
**V2 Changes:**
|
|
117
|
+
- Same functionality and parameters
|
|
118
|
+
- Consistent response format with metadata
|
|
119
|
+
|
|
120
|
+
## V2 Response Format
|
|
121
|
+
|
|
122
|
+
All V2 endpoints return a consistent format:
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"success": boolean,
|
|
127
|
+
"data": [...], // Array or object with actual data
|
|
128
|
+
"metadata": { // Pagination and additional info
|
|
129
|
+
"total": number,
|
|
130
|
+
"page": number,
|
|
131
|
+
"pageSize": number,
|
|
132
|
+
"cursor": "string" // For search endpoints
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Migration Notes
|
|
138
|
+
|
|
139
|
+
### What's Removed in V2:
|
|
140
|
+
- Raw tweet content/text (compliance requirement)
|
|
141
|
+
- Direct access to tweet body/message content
|
|
142
|
+
- `includeAccountDetails` parameter (always included)
|
|
143
|
+
- **Deprecated**: `get_mentions` skill (no v2 equivalent)
|
|
144
|
+
|
|
145
|
+
### What's Preserved:
|
|
146
|
+
- Engagement metrics (likes, views, reposts, replies)
|
|
147
|
+
- Account information and verification status
|
|
148
|
+
- Timestamps and metadata
|
|
149
|
+
- Sentiment analysis
|
|
150
|
+
- Core functionality for trend analysis
|
|
151
|
+
|
|
152
|
+
|
|
@@ -7,7 +7,6 @@ from intentkit.abstracts.skill import SkillStoreABC
|
|
|
7
7
|
from intentkit.skills.base import SkillConfig, SkillState
|
|
8
8
|
from intentkit.skills.elfa.base import ElfaBaseTool
|
|
9
9
|
from intentkit.skills.elfa.mention import (
|
|
10
|
-
ElfaGetMentions,
|
|
11
10
|
ElfaGetTopMentions,
|
|
12
11
|
ElfaSearchMentions,
|
|
13
12
|
)
|
|
@@ -21,7 +20,6 @@ logger = logging.getLogger(__name__)
|
|
|
21
20
|
|
|
22
21
|
|
|
23
22
|
class SkillStates(TypedDict):
|
|
24
|
-
get_mentions: SkillState
|
|
25
23
|
get_top_mentions: SkillState
|
|
26
24
|
search_mentions: SkillState
|
|
27
25
|
get_trending_tokens: SkillState
|
|
@@ -83,14 +81,7 @@ def get_elfa_skill(
|
|
|
83
81
|
The requested Elfa skill
|
|
84
82
|
"""
|
|
85
83
|
|
|
86
|
-
if name == "
|
|
87
|
-
if name not in _cache:
|
|
88
|
-
_cache[name] = ElfaGetMentions(
|
|
89
|
-
skill_store=store,
|
|
90
|
-
)
|
|
91
|
-
return _cache[name]
|
|
92
|
-
|
|
93
|
-
elif name == "get_top_mentions":
|
|
84
|
+
if name == "get_top_mentions":
|
|
94
85
|
if name not in _cache:
|
|
95
86
|
_cache[name] = ElfaGetTopMentions(
|
|
96
87
|
skill_store=store,
|
|
@@ -5,7 +5,7 @@ from pydantic import BaseModel, Field
|
|
|
5
5
|
from intentkit.abstracts.skill import SkillStoreABC
|
|
6
6
|
from intentkit.skills.base import IntentKitSkill, SkillContext
|
|
7
7
|
|
|
8
|
-
base_url = "https://api.elfa.ai"
|
|
8
|
+
base_url = "https://api.elfa.ai/v2"
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class ElfaBaseTool(IntentKitSkill):
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"""Mention-related skills for Elfa AI API."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, List, Optional, Type
|
|
4
|
+
|
|
5
|
+
from langchain_core.runnables import RunnableConfig
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from .base import ElfaBaseTool
|
|
9
|
+
from .utils import MentionData, make_elfa_request
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ElfaGetTopMentionsInput(BaseModel):
|
|
13
|
+
"""Input parameters for top mentions."""
|
|
14
|
+
|
|
15
|
+
ticker: str = Field(description="Stock ticker symbol (e.g., ETH, $ETH, BTC, $BTC)")
|
|
16
|
+
timeWindow: Optional[str] = Field(
|
|
17
|
+
"1h", description="Time window (e.g., '1h', '24h', '7d')"
|
|
18
|
+
)
|
|
19
|
+
page: Optional[int] = Field(1, description="Page number for pagination")
|
|
20
|
+
pageSize: Optional[int] = Field(10, description="Number of items per page")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ElfaGetTopMentionsOutput(BaseModel):
|
|
24
|
+
"""Output structure for top mentions response."""
|
|
25
|
+
|
|
26
|
+
success: bool
|
|
27
|
+
data: Optional[List[MentionData]] = Field(None, description="List of top mentions")
|
|
28
|
+
metadata: Optional[Dict[str, Any]] = Field(None, description="Response metadata")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ElfaGetTopMentions(ElfaBaseTool):
|
|
32
|
+
"""
|
|
33
|
+
Get top mentions for a specific ticker.
|
|
34
|
+
|
|
35
|
+
This tool uses the Elfa API to query tweets mentioning a specific stock ticker.
|
|
36
|
+
The tweets are ranked by view count, providing insight into the most visible and
|
|
37
|
+
potentially influential discussions surrounding the stock. Results are updated hourly.
|
|
38
|
+
|
|
39
|
+
Use Cases:
|
|
40
|
+
- Real-time sentiment analysis: Track changes in public opinion about a stock
|
|
41
|
+
- News monitoring: Identify trending news and discussions related to a specific ticker
|
|
42
|
+
- Investor insights: Monitor conversations and opinions of investors and traders
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
name: str = "elfa_get_top_mentions"
|
|
46
|
+
description: str = """Get top mentions for a specific ticker symbol ranked by view count.
|
|
47
|
+
Updated hourly. Returns engagement metrics and account information for market sentiment analysis.
|
|
48
|
+
|
|
49
|
+
Use this to track public opinion, identify trending news, and monitor investor discussions."""
|
|
50
|
+
args_schema: Type[BaseModel] = ElfaGetTopMentionsInput
|
|
51
|
+
|
|
52
|
+
async def _arun(
|
|
53
|
+
self,
|
|
54
|
+
ticker: str,
|
|
55
|
+
timeWindow: str = "1h",
|
|
56
|
+
page: int = 1,
|
|
57
|
+
pageSize: int = 10,
|
|
58
|
+
config: RunnableConfig = None,
|
|
59
|
+
**kwargs,
|
|
60
|
+
) -> ElfaGetTopMentionsOutput:
|
|
61
|
+
"""
|
|
62
|
+
Execute the top mentions request.
|
|
63
|
+
|
|
64
|
+
Args:
|
|
65
|
+
ticker: Stock ticker symbol
|
|
66
|
+
timeWindow: Time window for mentions (default: 1h)
|
|
67
|
+
page: Page number for pagination (default: 1)
|
|
68
|
+
pageSize: Items per page (default: 10)
|
|
69
|
+
config: LangChain runnable configuration
|
|
70
|
+
**kwargs: Additional parameters
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
ElfaGetTopMentionsOutput: Structured response with top mentions
|
|
74
|
+
|
|
75
|
+
Raises:
|
|
76
|
+
ValueError: If API key is not found
|
|
77
|
+
ToolException: If there's an error with the API request
|
|
78
|
+
"""
|
|
79
|
+
context = self.context_from_config(config)
|
|
80
|
+
api_key = self.get_api_key(context)
|
|
81
|
+
|
|
82
|
+
# Prepare parameters according to API spec
|
|
83
|
+
params = {
|
|
84
|
+
"ticker": ticker,
|
|
85
|
+
"timeWindow": timeWindow,
|
|
86
|
+
"page": page,
|
|
87
|
+
"pageSize": pageSize,
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
# Make API request using shared utility
|
|
91
|
+
response = await make_elfa_request(
|
|
92
|
+
endpoint="data/top-mentions", api_key=api_key, params=params
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
# Parse response data into MentionData objects
|
|
96
|
+
mentions = []
|
|
97
|
+
if response.data and isinstance(response.data, list):
|
|
98
|
+
mentions = [MentionData(**item) for item in response.data]
|
|
99
|
+
|
|
100
|
+
return ElfaGetTopMentionsOutput(
|
|
101
|
+
success=response.success, data=mentions, metadata=response.metadata
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class ElfaSearchMentionsInput(BaseModel):
|
|
106
|
+
"""Input parameters for search mentions."""
|
|
107
|
+
|
|
108
|
+
keywords: Optional[str] = Field(
|
|
109
|
+
None,
|
|
110
|
+
description="Up to 5 keywords to search for, separated by commas. Phrases accepted",
|
|
111
|
+
)
|
|
112
|
+
accountName: Optional[str] = Field(
|
|
113
|
+
None,
|
|
114
|
+
description="Account username to filter by (optional if keywords provided)",
|
|
115
|
+
)
|
|
116
|
+
timeWindow: Optional[str] = Field("7d", description="Time window for search")
|
|
117
|
+
limit: Optional[int] = Field(20, description="Number of results to return (max 30)")
|
|
118
|
+
searchType: Optional[str] = Field(
|
|
119
|
+
"or", description="Type of search ('and' or 'or')"
|
|
120
|
+
)
|
|
121
|
+
cursor: Optional[str] = Field(None, description="Cursor for pagination")
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class ElfaSearchMentionsOutput(BaseModel):
|
|
125
|
+
"""Output structure for search mentions response."""
|
|
126
|
+
|
|
127
|
+
success: bool
|
|
128
|
+
data: Optional[List[MentionData]] = Field(
|
|
129
|
+
None, description="List of matching mentions"
|
|
130
|
+
)
|
|
131
|
+
metadata: Optional[Dict[str, Any]] = Field(
|
|
132
|
+
None, description="Response metadata with cursor"
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
class ElfaSearchMentions(ElfaBaseTool):
|
|
137
|
+
"""
|
|
138
|
+
Search mentions by keywords or account name.
|
|
139
|
+
|
|
140
|
+
This tool uses the Elfa API to search tweets mentioning up to five keywords or from specific accounts.
|
|
141
|
+
It can search within the past 30 days of data (updated every 5 minutes) or access historical data.
|
|
142
|
+
Returns sanitized engagement metrics and sentiment data.
|
|
143
|
+
|
|
144
|
+
Use Cases:
|
|
145
|
+
- Market research: Track conversations and sentiment around specific products or industries
|
|
146
|
+
- Brand monitoring: Monitor mentions of your brand and identify potential PR issues
|
|
147
|
+
- Public opinion tracking: Analyze public opinion on various topics
|
|
148
|
+
- Competitive analysis: See what people are saying about your competitors
|
|
149
|
+
"""
|
|
150
|
+
|
|
151
|
+
name: str = "elfa_search_mentions"
|
|
152
|
+
description: str = """Search tweets by keywords or account name with engagement data and sentiment analysis.
|
|
153
|
+
Updated every 5 minutes. Access 30 days of recent data or historical archives.
|
|
154
|
+
|
|
155
|
+
Use this for market research, brand monitoring, opinion tracking, and competitive analysis."""
|
|
156
|
+
args_schema: Type[BaseModel] = ElfaSearchMentionsInput
|
|
157
|
+
|
|
158
|
+
async def _arun(
|
|
159
|
+
self,
|
|
160
|
+
keywords: Optional[str] = None,
|
|
161
|
+
accountName: Optional[str] = None,
|
|
162
|
+
timeWindow: str = "7d",
|
|
163
|
+
limit: int = 20,
|
|
164
|
+
searchType: str = "or",
|
|
165
|
+
cursor: Optional[str] = None,
|
|
166
|
+
config: RunnableConfig = None,
|
|
167
|
+
**kwargs,
|
|
168
|
+
) -> ElfaSearchMentionsOutput:
|
|
169
|
+
"""
|
|
170
|
+
Execute the search mentions request.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
keywords: Keywords to search for (optional if accountName provided)
|
|
174
|
+
accountName: Account username to filter by (optional if keywords provided)
|
|
175
|
+
timeWindow: Time window for search (default: 7d)
|
|
176
|
+
limit: Number of results to return (default: 20, max 30)
|
|
177
|
+
searchType: Type of search - 'and' or 'or' (default: 'or')
|
|
178
|
+
cursor: Pagination cursor (optional)
|
|
179
|
+
config: LangChain runnable configuration
|
|
180
|
+
**kwargs: Additional parameters
|
|
181
|
+
|
|
182
|
+
Returns:
|
|
183
|
+
ElfaSearchMentionsOutput: Structured response with matching mentions
|
|
184
|
+
|
|
185
|
+
Raises:
|
|
186
|
+
ValueError: If API key is not found or neither keywords nor accountName provided
|
|
187
|
+
ToolException: If there's an error with the API request
|
|
188
|
+
"""
|
|
189
|
+
context = self.context_from_config(config)
|
|
190
|
+
api_key = self.get_api_key(context)
|
|
191
|
+
|
|
192
|
+
# Validate that at least one search criteria is provided
|
|
193
|
+
if not keywords and not accountName:
|
|
194
|
+
raise ValueError("Either keywords or accountName must be provided")
|
|
195
|
+
|
|
196
|
+
# Prepare parameters according to API spec
|
|
197
|
+
params = {
|
|
198
|
+
"timeWindow": timeWindow,
|
|
199
|
+
"limit": min(limit, 30), # API max is 30
|
|
200
|
+
"searchType": searchType,
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
# Add optional parameters
|
|
204
|
+
if keywords:
|
|
205
|
+
params["keywords"] = keywords
|
|
206
|
+
if accountName:
|
|
207
|
+
params["accountName"] = accountName
|
|
208
|
+
if cursor:
|
|
209
|
+
params["cursor"] = cursor
|
|
210
|
+
|
|
211
|
+
# Make API request using shared utility
|
|
212
|
+
response = await make_elfa_request(
|
|
213
|
+
endpoint="data/keyword-mentions", api_key=api_key, params=params
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
# Parse response data into MentionData objects
|
|
217
|
+
mentions = []
|
|
218
|
+
if response.data and isinstance(response.data, list):
|
|
219
|
+
mentions = [MentionData(**item) for item in response.data]
|
|
220
|
+
|
|
221
|
+
return ElfaSearchMentionsOutput(
|
|
222
|
+
success=response.success, data=mentions, metadata=response.metadata
|
|
223
|
+
)
|
|
@@ -18,22 +18,6 @@
|
|
|
18
18
|
"states": {
|
|
19
19
|
"type": "object",
|
|
20
20
|
"properties": {
|
|
21
|
-
"get_mentions": {
|
|
22
|
-
"type": "string",
|
|
23
|
-
"title": "Get Mentions",
|
|
24
|
-
"enum": [
|
|
25
|
-
"disabled",
|
|
26
|
-
"public",
|
|
27
|
-
"private"
|
|
28
|
-
],
|
|
29
|
-
"x-enum-title": [
|
|
30
|
-
"Disabled",
|
|
31
|
-
"Agent Owner + All Users",
|
|
32
|
-
"Agent Owner Only"
|
|
33
|
-
],
|
|
34
|
-
"description": "This tool uses the Elfa AI API to query hourly-updated tweets from \"smart accounts\" \u2013 accounts identified as influential or relevant \u2013 that have received at least 10 interactions (comments, retweets, quote tweets).",
|
|
35
|
-
"default": "disabled"
|
|
36
|
-
},
|
|
37
21
|
"get_top_mentions": {
|
|
38
22
|
"type": "string",
|
|
39
23
|
"title": "Get Top Mentions",
|
|
@@ -63,7 +47,7 @@
|
|
|
63
47
|
"Agent Owner + All Users",
|
|
64
48
|
"Agent Owner Only"
|
|
65
49
|
],
|
|
66
|
-
"description": "This tool uses the Elfa API to search tweets mentioning up to five keywords. It can search within the past 30 days of data, which is updated every 5 minutes, or access up to six months of historical tweet data.",
|
|
50
|
+
"description": "This tool uses the Elfa API to search tweets mentioning up to five keywords or from specific accounts. It can search within the past 30 days of data, which is updated every 5 minutes, or access up to six months of historical tweet data.",
|
|
67
51
|
"default": "private"
|
|
68
52
|
},
|
|
69
53
|
"get_trending_tokens": {
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""Smart stats skill for Elfa AI API."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Dict, Optional, Type
|
|
4
|
+
|
|
5
|
+
from langchain_core.runnables import RunnableConfig
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from .base import ElfaBaseTool
|
|
9
|
+
from .utils import SmartStatsData, make_elfa_request
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ElfaGetSmartStatsInput(BaseModel):
|
|
13
|
+
"""Input parameters for smart stats."""
|
|
14
|
+
|
|
15
|
+
username: str = Field(description="Account username to get stats for")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ElfaGetSmartStatsOutput(BaseModel):
|
|
19
|
+
"""Output structure for smart stats response."""
|
|
20
|
+
|
|
21
|
+
success: bool
|
|
22
|
+
data: Optional[SmartStatsData] = Field(None, description="Smart stats data")
|
|
23
|
+
metadata: Optional[Dict[str, Any]] = Field(None, description="Response metadata")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ElfaGetSmartStats(ElfaBaseTool):
|
|
27
|
+
"""
|
|
28
|
+
Get smart stats for a specific username.
|
|
29
|
+
|
|
30
|
+
This tool uses the Elfa API to retrieve key social media metrics for a given username including:
|
|
31
|
+
- Smart Following Count: Number of high-quality or influential followers
|
|
32
|
+
- Average Engagement: Composite score reflecting interaction with user's content
|
|
33
|
+
- Average Reach: Average reach of the user's content
|
|
34
|
+
- Smart Follower Count: Number of smart followers
|
|
35
|
+
- Follower Count: Total follower count
|
|
36
|
+
|
|
37
|
+
Use Cases:
|
|
38
|
+
- Competitor analysis: Compare social media performance to competitors
|
|
39
|
+
- Influencer identification: Identify influential users in your niche
|
|
40
|
+
- Social media audits: Assess overall health and effectiveness of social media presence
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
name: str = "elfa_get_smart_stats"
|
|
44
|
+
description: str = """Get comprehensive social media metrics for a username including smart following count,
|
|
45
|
+
engagement scores, and follower analytics. Use this for competitor analysis, influencer identification,
|
|
46
|
+
and social media performance audits."""
|
|
47
|
+
args_schema: Type[BaseModel] = ElfaGetSmartStatsInput
|
|
48
|
+
|
|
49
|
+
async def _arun(
|
|
50
|
+
self, username: str, config: RunnableConfig = None, **kwargs
|
|
51
|
+
) -> ElfaGetSmartStatsOutput:
|
|
52
|
+
"""
|
|
53
|
+
Execute the smart stats request.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
username: The username to check stats for
|
|
57
|
+
config: LangChain runnable configuration
|
|
58
|
+
**kwargs: Additional parameters
|
|
59
|
+
|
|
60
|
+
Returns:
|
|
61
|
+
ElfaGetSmartStatsOutput: Structured response with smart stats
|
|
62
|
+
|
|
63
|
+
Raises:
|
|
64
|
+
ValueError: If API key is not found
|
|
65
|
+
ToolException: If there's an error with the API request
|
|
66
|
+
"""
|
|
67
|
+
context = self.context_from_config(config)
|
|
68
|
+
api_key = self.get_api_key(context)
|
|
69
|
+
|
|
70
|
+
# Prepare parameters according to API spec
|
|
71
|
+
params = {"username": username}
|
|
72
|
+
|
|
73
|
+
# Make API request using shared utility
|
|
74
|
+
response = await make_elfa_request(
|
|
75
|
+
endpoint="account/smart-stats", api_key=api_key, params=params
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
# Parse response data into SmartStatsData object
|
|
79
|
+
stats_data = None
|
|
80
|
+
if response.data and isinstance(response.data, dict):
|
|
81
|
+
stats_data = SmartStatsData(**response.data)
|
|
82
|
+
|
|
83
|
+
return ElfaGetSmartStatsOutput(
|
|
84
|
+
success=response.success, data=stats_data, metadata=response.metadata
|
|
85
|
+
)
|