intentkit 0.7.5.dev3__py3-none-any.whl → 0.8.34.dev7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- intentkit/MANIFEST.in +14 -0
- intentkit/README.md +88 -0
- intentkit/__init__.py +6 -4
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +15 -8
- intentkit/abstracts/skill.py +6 -144
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/__init__.py +9 -2
- intentkit/clients/cdp.py +129 -153
- intentkit/{utils → clients}/s3.py +109 -34
- intentkit/clients/twitter.py +83 -62
- intentkit/clients/web3.py +4 -7
- intentkit/config/config.py +123 -90
- intentkit/core/account_checking.py +802 -0
- intentkit/core/agent.py +313 -498
- intentkit/core/asset.py +267 -0
- intentkit/core/chat.py +5 -3
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +49 -41
- intentkit/core/draft.py +201 -0
- intentkit/core/draft_chat.py +118 -0
- intentkit/core/engine.py +378 -287
- intentkit/core/manager/__init__.py +25 -0
- intentkit/core/manager/engine.py +220 -0
- intentkit/core/manager/service.py +172 -0
- intentkit/core/manager/skills.py +178 -0
- intentkit/core/middleware.py +231 -0
- intentkit/core/prompt.py +74 -114
- intentkit/core/scheduler.py +143 -0
- intentkit/core/statistics.py +168 -0
- intentkit/models/agent.py +931 -518
- intentkit/models/agent_data.py +165 -106
- intentkit/models/agent_schema.json +38 -251
- intentkit/models/app_setting.py +15 -13
- intentkit/models/chat.py +86 -140
- intentkit/models/credit.py +182 -162
- intentkit/models/db.py +42 -23
- intentkit/models/db_mig.py +120 -3
- intentkit/models/draft.py +222 -0
- intentkit/models/llm.csv +31 -0
- intentkit/models/llm.py +262 -370
- intentkit/models/redis.py +6 -4
- intentkit/models/skill.py +222 -101
- intentkit/models/skills.csv +173 -0
- intentkit/models/team.py +189 -0
- intentkit/models/user.py +103 -31
- intentkit/skills/acolyt/__init__.py +2 -9
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +4 -9
- intentkit/skills/acolyt/schema.json +4 -3
- intentkit/skills/aixbt/__init__.py +2 -13
- intentkit/skills/aixbt/base.py +1 -7
- intentkit/skills/aixbt/projects.py +14 -15
- intentkit/skills/aixbt/schema.json +4 -4
- intentkit/skills/allora/__init__.py +2 -9
- intentkit/skills/allora/base.py +4 -9
- intentkit/skills/allora/price.py +3 -4
- intentkit/skills/allora/schema.json +3 -2
- intentkit/skills/base.py +241 -41
- intentkit/skills/basename/__init__.py +51 -0
- intentkit/skills/basename/base.py +11 -0
- intentkit/skills/basename/basename.svg +11 -0
- intentkit/skills/basename/schema.json +58 -0
- intentkit/skills/carv/__init__.py +115 -121
- intentkit/skills/carv/base.py +184 -185
- intentkit/skills/carv/fetch_news.py +3 -3
- intentkit/skills/carv/onchain_query.py +4 -4
- intentkit/skills/carv/schema.json +134 -137
- intentkit/skills/carv/token_info_and_price.py +6 -6
- intentkit/skills/casino/__init__.py +4 -15
- intentkit/skills/casino/base.py +1 -7
- intentkit/skills/casino/deck_draw.py +5 -8
- intentkit/skills/casino/deck_shuffle.py +6 -6
- intentkit/skills/casino/dice_roll.py +2 -4
- intentkit/skills/casino/schema.json +0 -1
- intentkit/skills/cdp/__init__.py +22 -84
- intentkit/skills/cdp/base.py +1 -7
- intentkit/skills/cdp/schema.json +11 -314
- intentkit/skills/chainlist/__init__.py +2 -7
- intentkit/skills/chainlist/base.py +1 -7
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/chainlist/schema.json +3 -5
- intentkit/skills/common/__init__.py +2 -9
- intentkit/skills/common/base.py +1 -7
- intentkit/skills/common/current_time.py +1 -2
- intentkit/skills/common/schema.json +2 -2
- intentkit/skills/cookiefun/__init__.py +6 -9
- intentkit/skills/cookiefun/base.py +2 -7
- intentkit/skills/cookiefun/get_account_details.py +7 -7
- intentkit/skills/cookiefun/get_account_feed.py +19 -19
- intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
- intentkit/skills/cookiefun/get_sectors.py +3 -3
- intentkit/skills/cookiefun/schema.json +1 -3
- intentkit/skills/cookiefun/search_accounts.py +9 -9
- intentkit/skills/cryptocompare/__init__.py +7 -24
- intentkit/skills/cryptocompare/api.py +2 -3
- intentkit/skills/cryptocompare/base.py +10 -24
- intentkit/skills/cryptocompare/fetch_news.py +4 -5
- intentkit/skills/cryptocompare/fetch_price.py +6 -7
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +4 -5
- intentkit/skills/cryptocompare/fetch_top_volume.py +4 -5
- intentkit/skills/cryptocompare/fetch_trading_signals.py +5 -6
- intentkit/skills/cryptocompare/schema.json +3 -3
- intentkit/skills/cryptopanic/__init__.py +7 -10
- intentkit/skills/cryptopanic/base.py +51 -55
- intentkit/skills/cryptopanic/fetch_crypto_news.py +4 -8
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +5 -7
- intentkit/skills/cryptopanic/schema.json +105 -103
- intentkit/skills/dapplooker/__init__.py +2 -9
- intentkit/skills/dapplooker/base.py +4 -9
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- intentkit/skills/dapplooker/schema.json +3 -5
- intentkit/skills/defillama/__init__.py +24 -74
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +8 -19
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_block.py +6 -8
- intentkit/skills/defillama/coins/fetch_current_prices.py +8 -10
- intentkit/skills/defillama/coins/fetch_first_price.py +7 -9
- intentkit/skills/defillama/coins/fetch_historical_prices.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_chart.py +9 -11
- intentkit/skills/defillama/coins/fetch_price_percentage.py +7 -9
- intentkit/skills/defillama/config/chains.py +1 -3
- intentkit/skills/defillama/fees/fetch_fees_overview.py +24 -26
- intentkit/skills/defillama/schema.json +5 -1
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +16 -18
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +8 -10
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +5 -7
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +7 -9
- intentkit/skills/defillama/tests/api_integration.test.py +1 -1
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_chains.py +9 -11
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +4 -6
- intentkit/skills/defillama/tvl/fetch_protocol.py +32 -38
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +3 -5
- intentkit/skills/defillama/tvl/fetch_protocols.py +37 -45
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +42 -48
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +35 -37
- intentkit/skills/defillama/volumes/fetch_options_overview.py +24 -28
- intentkit/skills/defillama/yields/fetch_pool_chart.py +10 -12
- intentkit/skills/defillama/yields/fetch_pools.py +26 -30
- intentkit/skills/dexscreener/__init__.py +97 -102
- intentkit/skills/dexscreener/base.py +125 -130
- intentkit/skills/dexscreener/get_pair_info.py +4 -5
- intentkit/skills/dexscreener/get_token_pairs.py +4 -5
- intentkit/skills/dexscreener/get_tokens_info.py +7 -8
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/schema.json +91 -93
- intentkit/skills/dexscreener/search_token.py +182 -184
- intentkit/skills/dexscreener/utils.py +15 -14
- intentkit/skills/dune_analytics/__init__.py +7 -9
- intentkit/skills/dune_analytics/base.py +48 -52
- intentkit/skills/dune_analytics/fetch_kol_buys.py +5 -7
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +6 -8
- intentkit/skills/dune_analytics/schema.json +104 -99
- intentkit/skills/elfa/__init__.py +5 -18
- intentkit/skills/elfa/base.py +10 -14
- intentkit/skills/elfa/mention.py +19 -21
- intentkit/skills/elfa/schema.json +3 -2
- intentkit/skills/elfa/stats.py +4 -4
- intentkit/skills/elfa/tokens.py +12 -12
- intentkit/skills/elfa/utils.py +26 -28
- intentkit/skills/enso/__init__.py +11 -31
- intentkit/skills/enso/base.py +54 -35
- intentkit/skills/enso/best_yield.py +16 -24
- intentkit/skills/enso/networks.py +6 -11
- intentkit/skills/enso/prices.py +11 -13
- intentkit/skills/enso/route.py +34 -38
- intentkit/skills/enso/schema.json +3 -2
- intentkit/skills/enso/tokens.py +29 -38
- intentkit/skills/enso/wallet.py +76 -191
- intentkit/skills/erc20/__init__.py +50 -0
- intentkit/skills/erc20/base.py +11 -0
- intentkit/skills/erc20/erc20.svg +5 -0
- intentkit/skills/erc20/schema.json +74 -0
- intentkit/skills/erc721/__init__.py +53 -0
- intentkit/skills/erc721/base.py +11 -0
- intentkit/skills/erc721/erc721.svg +5 -0
- intentkit/skills/erc721/schema.json +90 -0
- intentkit/skills/firecrawl/__init__.py +5 -18
- intentkit/skills/firecrawl/base.py +4 -9
- intentkit/skills/firecrawl/clear.py +4 -8
- intentkit/skills/firecrawl/crawl.py +19 -19
- intentkit/skills/firecrawl/query.py +4 -3
- intentkit/skills/firecrawl/schema.json +2 -6
- intentkit/skills/firecrawl/scrape.py +17 -22
- intentkit/skills/firecrawl/utils.py +50 -42
- intentkit/skills/github/__init__.py +2 -7
- intentkit/skills/github/base.py +1 -7
- intentkit/skills/github/github_search.py +1 -2
- intentkit/skills/github/schema.json +3 -4
- intentkit/skills/heurist/__init__.py +8 -27
- intentkit/skills/heurist/base.py +4 -9
- intentkit/skills/heurist/image_generation_animagine_xl.py +13 -15
- intentkit/skills/heurist/image_generation_arthemy_comics.py +13 -15
- intentkit/skills/heurist/image_generation_arthemy_real.py +13 -15
- intentkit/skills/heurist/image_generation_braindance.py +13 -15
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +13 -15
- intentkit/skills/heurist/image_generation_flux_1_dev.py +13 -15
- intentkit/skills/heurist/image_generation_sdxl.py +13 -15
- intentkit/skills/heurist/schema.json +2 -2
- intentkit/skills/http/__init__.py +4 -15
- intentkit/skills/http/base.py +1 -7
- intentkit/skills/http/get.py +21 -16
- intentkit/skills/http/post.py +23 -18
- intentkit/skills/http/put.py +23 -18
- intentkit/skills/http/schema.json +4 -5
- intentkit/skills/lifi/__init__.py +8 -13
- intentkit/skills/lifi/base.py +3 -9
- intentkit/skills/lifi/schema.json +17 -8
- intentkit/skills/lifi/token_execute.py +150 -60
- intentkit/skills/lifi/token_quote.py +8 -10
- intentkit/skills/lifi/utils.py +104 -51
- intentkit/skills/moralis/__init__.py +6 -10
- intentkit/skills/moralis/api.py +6 -7
- intentkit/skills/moralis/base.py +5 -10
- intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
- intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
- intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
- intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
- intentkit/skills/moralis/schema.json +7 -2
- intentkit/skills/morpho/__init__.py +52 -0
- intentkit/skills/morpho/base.py +11 -0
- intentkit/skills/morpho/morpho.svg +12 -0
- intentkit/skills/morpho/schema.json +73 -0
- intentkit/skills/nation/__init__.py +4 -9
- intentkit/skills/nation/base.py +5 -10
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/nation/schema.json +4 -3
- intentkit/skills/onchain.py +30 -0
- intentkit/skills/openai/__init__.py +17 -18
- intentkit/skills/openai/base.py +10 -14
- intentkit/skills/openai/dalle_image_generation.py +4 -9
- intentkit/skills/openai/gpt_avatar_generator.py +102 -0
- intentkit/skills/openai/gpt_image_generation.py +5 -9
- intentkit/skills/openai/gpt_image_mini_generator.py +92 -0
- intentkit/skills/openai/gpt_image_to_image.py +5 -9
- intentkit/skills/openai/image_to_text.py +3 -7
- intentkit/skills/openai/schema.json +34 -3
- intentkit/skills/portfolio/__init__.py +11 -35
- intentkit/skills/portfolio/base.py +33 -19
- intentkit/skills/portfolio/schema.json +3 -5
- intentkit/skills/portfolio/token_balances.py +21 -21
- intentkit/skills/portfolio/wallet_approvals.py +17 -18
- intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
- intentkit/skills/portfolio/wallet_history.py +31 -31
- intentkit/skills/portfolio/wallet_net_worth.py +13 -13
- intentkit/skills/portfolio/wallet_nfts.py +19 -19
- intentkit/skills/portfolio/wallet_profitability.py +18 -18
- intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
- intentkit/skills/portfolio/wallet_stats.py +3 -3
- intentkit/skills/portfolio/wallet_swaps.py +19 -19
- intentkit/skills/pyth/__init__.py +50 -0
- intentkit/skills/pyth/base.py +11 -0
- intentkit/skills/pyth/pyth.svg +6 -0
- intentkit/skills/pyth/schema.json +75 -0
- intentkit/skills/skills.toml +36 -0
- intentkit/skills/slack/__init__.py +5 -17
- intentkit/skills/slack/base.py +3 -9
- intentkit/skills/slack/get_channel.py +8 -8
- intentkit/skills/slack/get_message.py +9 -9
- intentkit/skills/slack/schedule_message.py +5 -5
- intentkit/skills/slack/schema.json +2 -2
- intentkit/skills/slack/send_message.py +3 -5
- intentkit/skills/supabase/__init__.py +7 -23
- intentkit/skills/supabase/base.py +1 -7
- intentkit/skills/supabase/delete_data.py +4 -4
- intentkit/skills/supabase/fetch_data.py +12 -12
- intentkit/skills/supabase/insert_data.py +4 -4
- intentkit/skills/supabase/invoke_function.py +6 -6
- intentkit/skills/supabase/schema.json +2 -3
- intentkit/skills/supabase/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- intentkit/skills/superfluid/__init__.py +53 -0
- intentkit/skills/superfluid/base.py +11 -0
- intentkit/skills/superfluid/schema.json +89 -0
- intentkit/skills/superfluid/superfluid.svg +6 -0
- intentkit/skills/system/__init__.py +7 -24
- intentkit/skills/system/add_autonomous_task.py +10 -12
- intentkit/skills/system/delete_autonomous_task.py +2 -2
- intentkit/skills/system/edit_autonomous_task.py +14 -18
- intentkit/skills/system/list_autonomous_tasks.py +3 -5
- intentkit/skills/system/read_agent_api_key.py +6 -4
- intentkit/skills/system/regenerate_agent_api_key.py +6 -4
- intentkit/skills/system/schema.json +6 -8
- intentkit/skills/tavily/__init__.py +3 -12
- intentkit/skills/tavily/base.py +4 -9
- intentkit/skills/tavily/schema.json +3 -5
- intentkit/skills/tavily/tavily_extract.py +2 -4
- intentkit/skills/tavily/tavily_search.py +4 -6
- intentkit/skills/token/__init__.py +5 -10
- intentkit/skills/token/base.py +7 -11
- intentkit/skills/token/erc20_transfers.py +19 -19
- intentkit/skills/token/schema.json +3 -6
- intentkit/skills/token/token_analytics.py +3 -3
- intentkit/skills/token/token_price.py +13 -13
- intentkit/skills/token/token_search.py +9 -9
- intentkit/skills/twitter/__init__.py +11 -35
- intentkit/skills/twitter/base.py +22 -34
- intentkit/skills/twitter/follow_user.py +2 -6
- intentkit/skills/twitter/get_mentions.py +5 -12
- intentkit/skills/twitter/get_timeline.py +4 -12
- intentkit/skills/twitter/get_user_by_username.py +2 -6
- intentkit/skills/twitter/get_user_tweets.py +5 -13
- intentkit/skills/twitter/like_tweet.py +2 -6
- intentkit/skills/twitter/post_tweet.py +6 -9
- intentkit/skills/twitter/reply_tweet.py +6 -9
- intentkit/skills/twitter/retweet.py +2 -6
- intentkit/skills/twitter/schema.json +1 -0
- intentkit/skills/twitter/search_tweets.py +4 -12
- intentkit/skills/unrealspeech/__init__.py +2 -7
- intentkit/skills/unrealspeech/base.py +2 -8
- intentkit/skills/unrealspeech/schema.json +2 -5
- intentkit/skills/unrealspeech/text_to_speech.py +8 -8
- intentkit/skills/venice_audio/__init__.py +98 -106
- intentkit/skills/venice_audio/base.py +117 -121
- intentkit/skills/venice_audio/input.py +41 -41
- intentkit/skills/venice_audio/schema.json +151 -152
- intentkit/skills/venice_audio/venice_audio.py +38 -21
- intentkit/skills/venice_image/__init__.py +147 -154
- intentkit/skills/venice_image/api.py +138 -138
- intentkit/skills/venice_image/base.py +185 -192
- intentkit/skills/venice_image/config.py +33 -35
- intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- intentkit/skills/venice_image/image_generation/image_generation_base.py +11 -10
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
- intentkit/skills/venice_image/schema.json +267 -267
- intentkit/skills/venice_image/utils.py +77 -78
- intentkit/skills/web_scraper/__init__.py +5 -18
- intentkit/skills/web_scraper/base.py +21 -7
- intentkit/skills/web_scraper/document_indexer.py +7 -6
- intentkit/skills/web_scraper/schema.json +2 -6
- intentkit/skills/web_scraper/scrape_and_index.py +15 -15
- intentkit/skills/web_scraper/utils.py +62 -63
- intentkit/skills/web_scraper/website_indexer.py +17 -19
- intentkit/skills/weth/__init__.py +49 -0
- intentkit/skills/weth/base.py +11 -0
- intentkit/skills/weth/schema.json +58 -0
- intentkit/skills/weth/weth.svg +6 -0
- intentkit/skills/wow/__init__.py +51 -0
- intentkit/skills/wow/base.py +11 -0
- intentkit/skills/wow/schema.json +89 -0
- intentkit/skills/wow/wow.svg +7 -0
- intentkit/skills/x402/__init__.py +58 -0
- intentkit/skills/x402/base.py +99 -0
- intentkit/skills/x402/http_request.py +117 -0
- intentkit/skills/x402/schema.json +40 -0
- intentkit/skills/x402/x402.webp +0 -0
- intentkit/skills/xmtp/__init__.py +4 -15
- intentkit/skills/xmtp/base.py +5 -5
- intentkit/skills/xmtp/price.py +7 -6
- intentkit/skills/xmtp/schema.json +69 -71
- intentkit/skills/xmtp/swap.py +6 -8
- intentkit/skills/xmtp/transfer.py +4 -6
- intentkit/utils/__init__.py +4 -0
- intentkit/utils/chain.py +198 -96
- intentkit/utils/ens.py +135 -0
- intentkit/utils/error.py +5 -2
- intentkit/utils/logging.py +9 -11
- intentkit/utils/schema.py +100 -0
- intentkit/utils/slack_alert.py +8 -8
- intentkit/utils/tx.py +16 -8
- intentkit/uv.lock +3377 -0
- {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/METADATA +13 -15
- intentkit-0.8.34.dev7.dist-info/RECORD +478 -0
- intentkit-0.8.34.dev7.dist-info/licenses/LICENSE +21 -0
- intentkit/core/node.py +0 -215
- intentkit/models/conversation.py +0 -286
- intentkit/models/generator.py +0 -347
- intentkit/skills/cdp/get_balance.py +0 -110
- intentkit/skills/cdp/swap.py +0 -121
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +0 -511
- intentkit-0.7.5.dev3.dist-info/RECORD +0 -424
- {intentkit-0.7.5.dev3.dist-info/licenses → intentkit}/LICENSE +0 -0
- {intentkit-0.7.5.dev3.dist-info → intentkit-0.8.34.dev7.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"title": "ERC721",
|
|
5
|
+
"description": "ERC721 NFT management actions via Coinbase AgentKit",
|
|
6
|
+
"x-icon": "https://ai.service.crestal.dev/skills/erc721/erc721.svg",
|
|
7
|
+
"x-tags": [
|
|
8
|
+
"Crypto",
|
|
9
|
+
"NFT"
|
|
10
|
+
],
|
|
11
|
+
"properties": {
|
|
12
|
+
"enabled": {
|
|
13
|
+
"type": "boolean",
|
|
14
|
+
"title": "Enabled",
|
|
15
|
+
"description": "Whether this skill is enabled",
|
|
16
|
+
"default": false
|
|
17
|
+
},
|
|
18
|
+
"states": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"properties": {
|
|
21
|
+
"Erc721ActionProvider_get_balance": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"title": "Get ERC721 Balance",
|
|
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": "State for Erc721ActionProvider_get_balance",
|
|
35
|
+
"default": "disabled"
|
|
36
|
+
},
|
|
37
|
+
"Erc721ActionProvider_mint": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"title": "Mint ERC721",
|
|
40
|
+
"enum": [
|
|
41
|
+
"disabled",
|
|
42
|
+
"public",
|
|
43
|
+
"private"
|
|
44
|
+
],
|
|
45
|
+
"x-enum-title": [
|
|
46
|
+
"Disabled",
|
|
47
|
+
"Agent Owner + All Users",
|
|
48
|
+
"Agent Owner Only"
|
|
49
|
+
],
|
|
50
|
+
"description": "State for Erc721ActionProvider_mint",
|
|
51
|
+
"default": "disabled"
|
|
52
|
+
},
|
|
53
|
+
"Erc721ActionProvider_transfer": {
|
|
54
|
+
"type": "string",
|
|
55
|
+
"title": "Transfer ERC721",
|
|
56
|
+
"enum": [
|
|
57
|
+
"disabled",
|
|
58
|
+
"public",
|
|
59
|
+
"private"
|
|
60
|
+
],
|
|
61
|
+
"x-enum-title": [
|
|
62
|
+
"Disabled",
|
|
63
|
+
"Agent Owner + All Users",
|
|
64
|
+
"Agent Owner Only"
|
|
65
|
+
],
|
|
66
|
+
"description": "State for Erc721ActionProvider_transfer",
|
|
67
|
+
"default": "disabled"
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"description": "States for each ERC721 skill (disabled, public, or private)"
|
|
71
|
+
},
|
|
72
|
+
"api_key_provider": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"title": "API Key Provider",
|
|
75
|
+
"description": "Who provides the API key",
|
|
76
|
+
"enum": [
|
|
77
|
+
"platform"
|
|
78
|
+
],
|
|
79
|
+
"x-enum-title": [
|
|
80
|
+
"Nation Hosted"
|
|
81
|
+
],
|
|
82
|
+
"default": "platform"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"required": [
|
|
86
|
+
"states",
|
|
87
|
+
"enabled"
|
|
88
|
+
],
|
|
89
|
+
"additionalProperties": true
|
|
90
|
+
}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import TypedDict
|
|
5
5
|
|
|
6
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
7
6
|
from intentkit.skills.base import SkillConfig, SkillState
|
|
8
7
|
from intentkit.skills.firecrawl.base import FirecrawlBaseTool
|
|
9
8
|
from intentkit.skills.firecrawl.clear import FirecrawlClearIndexedContent
|
|
@@ -37,7 +36,6 @@ class Config(SkillConfig):
|
|
|
37
36
|
async def get_skills(
|
|
38
37
|
config: "Config",
|
|
39
38
|
is_private: bool,
|
|
40
|
-
store: SkillStoreABC,
|
|
41
39
|
**_,
|
|
42
40
|
) -> list[FirecrawlBaseTool]:
|
|
43
41
|
"""Get all Firecrawl skills.
|
|
@@ -45,7 +43,6 @@ async def get_skills(
|
|
|
45
43
|
Args:
|
|
46
44
|
config: The configuration for Firecrawl skills.
|
|
47
45
|
is_private: Whether to include private skills.
|
|
48
|
-
store: The skill store for persisting data.
|
|
49
46
|
|
|
50
47
|
Returns:
|
|
51
48
|
A list of Firecrawl skills.
|
|
@@ -60,18 +57,16 @@ async def get_skills(
|
|
|
60
57
|
available_skills.append(skill_name)
|
|
61
58
|
|
|
62
59
|
# Get each skill using the cached getter
|
|
63
|
-
return [get_firecrawl_skill(name
|
|
60
|
+
return [get_firecrawl_skill(name) for name in available_skills]
|
|
64
61
|
|
|
65
62
|
|
|
66
63
|
def get_firecrawl_skill(
|
|
67
64
|
name: str,
|
|
68
|
-
store: SkillStoreABC,
|
|
69
65
|
) -> FirecrawlBaseTool:
|
|
70
66
|
"""Get a Firecrawl skill by name.
|
|
71
67
|
|
|
72
68
|
Args:
|
|
73
69
|
name: The name of the skill to get
|
|
74
|
-
store: The skill store for persisting data
|
|
75
70
|
|
|
76
71
|
Returns:
|
|
77
72
|
The requested Firecrawl skill
|
|
@@ -81,27 +76,19 @@ def get_firecrawl_skill(
|
|
|
81
76
|
"""
|
|
82
77
|
if name == "firecrawl_scrape":
|
|
83
78
|
if name not in _cache:
|
|
84
|
-
_cache[name] = FirecrawlScrape(
|
|
85
|
-
skill_store=store,
|
|
86
|
-
)
|
|
79
|
+
_cache[name] = FirecrawlScrape()
|
|
87
80
|
return _cache[name]
|
|
88
81
|
elif name == "firecrawl_crawl":
|
|
89
82
|
if name not in _cache:
|
|
90
|
-
_cache[name] = FirecrawlCrawl(
|
|
91
|
-
skill_store=store,
|
|
92
|
-
)
|
|
83
|
+
_cache[name] = FirecrawlCrawl()
|
|
93
84
|
return _cache[name]
|
|
94
85
|
elif name == "firecrawl_query_indexed_content":
|
|
95
86
|
if name not in _cache:
|
|
96
|
-
_cache[name] = FirecrawlQueryIndexedContent(
|
|
97
|
-
skill_store=store,
|
|
98
|
-
)
|
|
87
|
+
_cache[name] = FirecrawlQueryIndexedContent()
|
|
99
88
|
return _cache[name]
|
|
100
89
|
elif name == "firecrawl_clear_indexed_content":
|
|
101
90
|
if name not in _cache:
|
|
102
|
-
_cache[name] = FirecrawlClearIndexedContent(
|
|
103
|
-
skill_store=store,
|
|
104
|
-
)
|
|
91
|
+
_cache[name] = FirecrawlClearIndexedContent()
|
|
105
92
|
return _cache[name]
|
|
106
93
|
else:
|
|
107
94
|
raise ValueError(f"Unknown Firecrawl skill: {name}")
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
from
|
|
2
|
-
|
|
3
|
-
from langchain.tools.base import ToolException
|
|
1
|
+
from langchain_core.tools.base import ToolException
|
|
4
2
|
from pydantic import BaseModel, Field
|
|
5
3
|
|
|
6
|
-
from intentkit.
|
|
4
|
+
from intentkit.config.config import config
|
|
7
5
|
from intentkit.skills.base import IntentKitSkill
|
|
8
6
|
|
|
9
7
|
|
|
@@ -12,10 +10,7 @@ class FirecrawlBaseTool(IntentKitSkill):
|
|
|
12
10
|
|
|
13
11
|
name: str = Field(description="The name of the tool")
|
|
14
12
|
description: str = Field(description="A description of what the tool does")
|
|
15
|
-
args_schema:
|
|
16
|
-
skill_store: SkillStoreABC = Field(
|
|
17
|
-
description="The skill store for persisting data"
|
|
18
|
-
)
|
|
13
|
+
args_schema: type[BaseModel]
|
|
19
14
|
|
|
20
15
|
def get_api_key(self) -> str:
|
|
21
16
|
"""Get the Firecrawl API key from configuration."""
|
|
@@ -29,7 +24,7 @@ class FirecrawlBaseTool(IntentKitSkill):
|
|
|
29
24
|
else:
|
|
30
25
|
raise ToolException("No api_key found in agent_owner configuration")
|
|
31
26
|
else:
|
|
32
|
-
return
|
|
27
|
+
return config.firecrawl_api_key
|
|
33
28
|
|
|
34
29
|
@property
|
|
35
30
|
def category(self) -> str:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Type
|
|
3
2
|
|
|
4
3
|
from pydantic import BaseModel, Field
|
|
5
4
|
|
|
5
|
+
from intentkit.models.skill import AgentSkillData
|
|
6
6
|
from intentkit.skills.firecrawl.base import FirecrawlBaseTool
|
|
7
7
|
|
|
8
8
|
logger = logging.getLogger(__name__)
|
|
@@ -30,7 +30,7 @@ class FirecrawlClearIndexedContent(FirecrawlBaseTool):
|
|
|
30
30
|
"This will permanently delete all indexed content and cannot be undone.\n"
|
|
31
31
|
"Use this tool when you want to start fresh with new content."
|
|
32
32
|
)
|
|
33
|
-
args_schema:
|
|
33
|
+
args_schema: type[BaseModel] = FirecrawlClearInput
|
|
34
34
|
|
|
35
35
|
async def _arun(
|
|
36
36
|
self,
|
|
@@ -62,15 +62,11 @@ class FirecrawlClearIndexedContent(FirecrawlBaseTool):
|
|
|
62
62
|
try:
|
|
63
63
|
# Delete vector store data (using web_scraper storage format for compatibility)
|
|
64
64
|
vector_store_key = f"vector_store_{agent_id}"
|
|
65
|
-
await
|
|
66
|
-
agent_id, "web_scraper", vector_store_key
|
|
67
|
-
)
|
|
65
|
+
await AgentSkillData.delete(agent_id, "web_scraper", vector_store_key)
|
|
68
66
|
|
|
69
67
|
# Delete metadata
|
|
70
68
|
metadata_key = f"indexed_urls_{agent_id}"
|
|
71
|
-
await
|
|
72
|
-
agent_id, "web_scraper", metadata_key
|
|
73
|
-
)
|
|
69
|
+
await AgentSkillData.delete(agent_id, "web_scraper", metadata_key)
|
|
74
70
|
|
|
75
71
|
logger.info(
|
|
76
72
|
f"firecrawl_clear: Successfully cleared all indexed content for agent {agent_id}"
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import logging
|
|
3
|
-
from typing import List, Optional, Type
|
|
4
3
|
|
|
5
4
|
import httpx
|
|
6
5
|
from langchain_core.documents import Document
|
|
@@ -20,19 +19,19 @@ class FirecrawlCrawlInput(BaseModel):
|
|
|
20
19
|
limit: int = Field(
|
|
21
20
|
description="Maximum number of pages to crawl", default=10, ge=1, le=1000
|
|
22
21
|
)
|
|
23
|
-
formats:
|
|
22
|
+
formats: list[str] = Field(
|
|
24
23
|
description="Output formats to include in the response. Options: 'markdown', 'html', 'rawHtml', 'screenshot', 'links', 'json'",
|
|
25
24
|
default=["markdown"],
|
|
26
25
|
)
|
|
27
|
-
include_paths:
|
|
26
|
+
include_paths: list[str] | None = Field(
|
|
28
27
|
description="Regex patterns to include in the crawl (e.g., ['^/blog/.*$'])",
|
|
29
28
|
default=None,
|
|
30
29
|
)
|
|
31
|
-
exclude_paths:
|
|
30
|
+
exclude_paths: list[str] | None = Field(
|
|
32
31
|
description="Regex patterns to exclude from the crawl (e.g., ['^/admin/.*$'])",
|
|
33
32
|
default=None,
|
|
34
33
|
)
|
|
35
|
-
max_depth:
|
|
34
|
+
max_depth: int | None = Field(
|
|
36
35
|
description="Maximum depth to crawl from the base URL",
|
|
37
36
|
default=None,
|
|
38
37
|
ge=1,
|
|
@@ -91,16 +90,16 @@ class FirecrawlCrawl(FirecrawlBaseTool):
|
|
|
91
90
|
"Optionally indexes all crawled content for later querying using the firecrawl_query_indexed_content tool. "
|
|
92
91
|
"Use this when you need to gather comprehensive information from a website."
|
|
93
92
|
)
|
|
94
|
-
args_schema:
|
|
93
|
+
args_schema: type[BaseModel] = FirecrawlCrawlInput
|
|
95
94
|
|
|
96
95
|
async def _arun(
|
|
97
96
|
self,
|
|
98
97
|
url: str,
|
|
99
98
|
limit: int = 10,
|
|
100
|
-
formats:
|
|
101
|
-
include_paths:
|
|
102
|
-
exclude_paths:
|
|
103
|
-
max_depth:
|
|
99
|
+
formats: list[str] = None,
|
|
100
|
+
include_paths: list[str] | None = None,
|
|
101
|
+
exclude_paths: list[str] | None = None,
|
|
102
|
+
max_depth: int | None = None,
|
|
104
103
|
allow_backward_links: bool = False,
|
|
105
104
|
allow_external_links: bool = False,
|
|
106
105
|
allow_subdomains: bool = False,
|
|
@@ -137,9 +136,8 @@ class FirecrawlCrawl(FirecrawlBaseTool):
|
|
|
137
136
|
"rate_limit_minutes"
|
|
138
137
|
):
|
|
139
138
|
await self.user_rate_limit_by_category(
|
|
140
|
-
context.user_id,
|
|
141
139
|
skill_config["rate_limit_number"],
|
|
142
|
-
skill_config["rate_limit_minutes"],
|
|
140
|
+
skill_config["rate_limit_minutes"] * 60,
|
|
143
141
|
)
|
|
144
142
|
|
|
145
143
|
# Get the API key from the agent's configuration
|
|
@@ -279,6 +277,7 @@ class FirecrawlCrawl(FirecrawlBaseTool):
|
|
|
279
277
|
# Import indexing utilities from firecrawl utils
|
|
280
278
|
from intentkit.skills.firecrawl.utils import (
|
|
281
279
|
FirecrawlMetadataManager,
|
|
280
|
+
FirecrawlVectorStoreManager,
|
|
282
281
|
index_documents,
|
|
283
282
|
)
|
|
284
283
|
|
|
@@ -309,24 +308,25 @@ class FirecrawlCrawl(FirecrawlBaseTool):
|
|
|
309
308
|
# Get agent ID for indexing
|
|
310
309
|
agent_id = context.agent_id
|
|
311
310
|
if agent_id and documents:
|
|
311
|
+
vector_manager = FirecrawlVectorStoreManager()
|
|
312
|
+
|
|
312
313
|
# Index all documents
|
|
313
314
|
total_chunks, was_merged = await index_documents(
|
|
314
315
|
documents,
|
|
315
316
|
agent_id,
|
|
316
|
-
|
|
317
|
+
vector_manager,
|
|
317
318
|
chunk_size,
|
|
318
319
|
chunk_overlap,
|
|
319
320
|
)
|
|
320
321
|
|
|
321
322
|
# Update metadata
|
|
322
|
-
metadata_manager = FirecrawlMetadataManager(
|
|
323
|
-
self.skill_store
|
|
324
|
-
)
|
|
325
323
|
urls = [doc.metadata["source"] for doc in documents]
|
|
326
|
-
new_metadata =
|
|
327
|
-
|
|
324
|
+
new_metadata = (
|
|
325
|
+
FirecrawlMetadataManager.create_url_metadata(
|
|
326
|
+
urls, documents, "firecrawl_crawl"
|
|
327
|
+
)
|
|
328
328
|
)
|
|
329
|
-
await
|
|
329
|
+
await FirecrawlMetadataManager.update_metadata(
|
|
330
330
|
agent_id, new_metadata
|
|
331
331
|
)
|
|
332
332
|
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Type
|
|
3
2
|
|
|
4
3
|
from pydantic import BaseModel, Field
|
|
5
4
|
|
|
@@ -37,7 +36,7 @@ class FirecrawlQueryIndexedContent(FirecrawlBaseTool):
|
|
|
37
36
|
"Use this tool to search through content that was previously scraped and indexed using Firecrawl tools.\n"
|
|
38
37
|
"This tool can help answer questions based on the indexed web content from Firecrawl scraping/crawling."
|
|
39
38
|
)
|
|
40
|
-
args_schema:
|
|
39
|
+
args_schema: type[BaseModel] = FirecrawlQueryInput
|
|
41
40
|
|
|
42
41
|
async def _arun(
|
|
43
42
|
self,
|
|
@@ -62,12 +61,14 @@ class FirecrawlQueryIndexedContent(FirecrawlBaseTool):
|
|
|
62
61
|
# Import query utilities from firecrawl utils
|
|
63
62
|
from intentkit.skills.firecrawl.utils import (
|
|
64
63
|
FirecrawlDocumentProcessor,
|
|
64
|
+
FirecrawlVectorStoreManager,
|
|
65
65
|
query_indexed_content,
|
|
66
66
|
)
|
|
67
67
|
|
|
68
68
|
# Query the indexed content
|
|
69
|
+
vector_manager = FirecrawlVectorStoreManager()
|
|
69
70
|
docs = await query_indexed_content(
|
|
70
|
-
query, agent_id,
|
|
71
|
+
query, agent_id, vector_manager, max_results
|
|
71
72
|
)
|
|
72
73
|
|
|
73
74
|
if not docs:
|
|
@@ -5,11 +5,7 @@
|
|
|
5
5
|
"description": "AI-powered web scraping and crawling capabilities using Firecrawl",
|
|
6
6
|
"x-icon": "https://ai.service.crestal.dev/skills/firecrawl/firecrawl.png",
|
|
7
7
|
"x-tags": [
|
|
8
|
-
"
|
|
9
|
-
"Crawling",
|
|
10
|
-
"Content Extraction",
|
|
11
|
-
"Data Mining",
|
|
12
|
-
"Website Analysis"
|
|
8
|
+
"Knowledge Base"
|
|
13
9
|
],
|
|
14
10
|
"properties": {
|
|
15
11
|
"enabled": {
|
|
@@ -152,4 +148,4 @@
|
|
|
152
148
|
}
|
|
153
149
|
},
|
|
154
150
|
"additionalProperties": true
|
|
155
|
-
}
|
|
151
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import List, Optional, Type
|
|
3
2
|
|
|
4
3
|
import httpx
|
|
5
4
|
from langchain_core.documents import Document
|
|
@@ -16,7 +15,7 @@ class FirecrawlScrapeInput(BaseModel):
|
|
|
16
15
|
url: str = Field(
|
|
17
16
|
description="The URL to scrape. Must be a valid HTTP or HTTPS URL."
|
|
18
17
|
)
|
|
19
|
-
formats:
|
|
18
|
+
formats: list[str] = Field(
|
|
20
19
|
description="Output formats to include in the response. Options: 'markdown', 'html', 'rawHtml', 'screenshot', 'links', 'json'",
|
|
21
20
|
default=["markdown"],
|
|
22
21
|
)
|
|
@@ -24,11 +23,11 @@ class FirecrawlScrapeInput(BaseModel):
|
|
|
24
23
|
description="Whether to extract only the main content (excluding headers, footers, navigation, etc.)",
|
|
25
24
|
default=True,
|
|
26
25
|
)
|
|
27
|
-
include_tags:
|
|
26
|
+
include_tags: list[str] | None = Field(
|
|
28
27
|
description="HTML tags, classes, or IDs to include in the response (e.g., ['h1', 'p', '.main-content'])",
|
|
29
28
|
default=None,
|
|
30
29
|
)
|
|
31
|
-
exclude_tags:
|
|
30
|
+
exclude_tags: list[str] | None = Field(
|
|
32
31
|
description="HTML tags, classes, or IDs to exclude from the response (e.g., ['#ad', '#footer'])",
|
|
33
32
|
default=None,
|
|
34
33
|
)
|
|
@@ -81,15 +80,15 @@ class FirecrawlScrape(FirecrawlBaseTool):
|
|
|
81
80
|
"This tool can handle JavaScript-rendered content, PDFs, and dynamic websites. "
|
|
82
81
|
"Use this when you want to refresh/update content from a URL that was previously scraped."
|
|
83
82
|
)
|
|
84
|
-
args_schema:
|
|
83
|
+
args_schema: type[BaseModel] = FirecrawlScrapeInput
|
|
85
84
|
|
|
86
85
|
async def _arun(
|
|
87
86
|
self,
|
|
88
87
|
url: str,
|
|
89
|
-
formats:
|
|
88
|
+
formats: list[str] = None,
|
|
90
89
|
only_main_content: bool = True,
|
|
91
|
-
include_tags:
|
|
92
|
-
exclude_tags:
|
|
90
|
+
include_tags: list[str] | None = None,
|
|
91
|
+
exclude_tags: list[str] | None = None,
|
|
93
92
|
wait_for: int = 0,
|
|
94
93
|
timeout: int = 30000,
|
|
95
94
|
index_content: bool = True,
|
|
@@ -124,9 +123,8 @@ class FirecrawlScrape(FirecrawlBaseTool):
|
|
|
124
123
|
"rate_limit_minutes"
|
|
125
124
|
):
|
|
126
125
|
await self.user_rate_limit_by_category(
|
|
127
|
-
context.user_id,
|
|
128
126
|
skill_config["rate_limit_number"],
|
|
129
|
-
skill_config["rate_limit_minutes"],
|
|
127
|
+
skill_config["rate_limit_minutes"] * 60,
|
|
130
128
|
)
|
|
131
129
|
|
|
132
130
|
# Get the API key from the agent's configuration
|
|
@@ -265,11 +263,8 @@ class FirecrawlScrape(FirecrawlBaseTool):
|
|
|
265
263
|
# Get agent ID for indexing
|
|
266
264
|
agent_id = context.agent_id
|
|
267
265
|
if agent_id:
|
|
268
|
-
# Initialize
|
|
269
|
-
vs_manager = FirecrawlVectorStoreManager(
|
|
270
|
-
metadata_manager = FirecrawlMetadataManager(
|
|
271
|
-
self.skill_store
|
|
272
|
-
)
|
|
266
|
+
# Initialize vector store manager
|
|
267
|
+
vs_manager = FirecrawlVectorStoreManager()
|
|
273
268
|
|
|
274
269
|
# Load existing vector store
|
|
275
270
|
existing_vector_store = await vs_manager.load_vector_store(
|
|
@@ -368,10 +363,8 @@ class FirecrawlScrape(FirecrawlBaseTool):
|
|
|
368
363
|
# Update metadata to track all URLs
|
|
369
364
|
# Get existing metadata to preserve other URLs
|
|
370
365
|
metadata_key = f"indexed_urls_{agent_id}"
|
|
371
|
-
existing_metadata = (
|
|
372
|
-
|
|
373
|
-
agent_id, "firecrawl", metadata_key
|
|
374
|
-
)
|
|
366
|
+
existing_metadata = await self.get_agent_skill_data_raw(
|
|
367
|
+
"firecrawl", metadata_key
|
|
375
368
|
)
|
|
376
369
|
|
|
377
370
|
if existing_metadata and existing_metadata.get("urls"):
|
|
@@ -388,11 +381,13 @@ class FirecrawlScrape(FirecrawlBaseTool):
|
|
|
388
381
|
}
|
|
389
382
|
else:
|
|
390
383
|
# Create new metadata
|
|
391
|
-
updated_metadata =
|
|
392
|
-
|
|
384
|
+
updated_metadata = (
|
|
385
|
+
FirecrawlMetadataManager.create_url_metadata(
|
|
386
|
+
[url], [document], "firecrawl_scrape"
|
|
387
|
+
)
|
|
393
388
|
)
|
|
394
389
|
|
|
395
|
-
await
|
|
390
|
+
await FirecrawlMetadataManager.update_metadata(
|
|
396
391
|
agent_id, updated_metadata
|
|
397
392
|
)
|
|
398
393
|
|