intentkit 0.8.17.dev1__py3-none-any.whl → 0.8.17.dev2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of intentkit might be problematic. Click here for more details.
- intentkit/__init__.py +1 -1
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +6 -5
- intentkit/abstracts/skill.py +5 -5
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/cdp.py +19 -77
- intentkit/clients/twitter.py +26 -34
- intentkit/clients/web3.py +1 -3
- intentkit/config/config.py +4 -0
- intentkit/core/agent.py +15 -15
- intentkit/core/asset.py +1 -2
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +19 -20
- intentkit/core/engine.py +2 -4
- intentkit/core/node.py +2 -1
- intentkit/core/prompt.py +3 -4
- intentkit/core/scheduler.py +1 -1
- intentkit/core/statistics.py +6 -7
- intentkit/models/agent.py +125 -92
- intentkit/models/agent_data.py +62 -36
- intentkit/models/app_setting.py +6 -6
- intentkit/models/chat.py +27 -24
- intentkit/models/conversation.py +8 -8
- intentkit/models/credit.py +62 -64
- intentkit/models/db.py +8 -7
- intentkit/models/db_mig.py +2 -2
- intentkit/models/llm.py +12 -14
- intentkit/models/redis.py +2 -3
- intentkit/models/skill.py +25 -27
- intentkit/models/user.py +21 -22
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +1 -3
- intentkit/skills/aixbt/base.py +1 -3
- intentkit/skills/aixbt/projects.py +13 -13
- intentkit/skills/allora/base.py +1 -3
- intentkit/skills/allora/price.py +2 -3
- intentkit/skills/base.py +15 -22
- intentkit/skills/basename/__init__.py +3 -5
- intentkit/skills/carv/__init__.py +7 -8
- intentkit/skills/carv/base.py +6 -6
- intentkit/skills/carv/fetch_news.py +3 -3
- intentkit/skills/carv/onchain_query.py +4 -4
- intentkit/skills/carv/token_info_and_price.py +5 -5
- intentkit/skills/casino/base.py +1 -3
- intentkit/skills/casino/deck_draw.py +1 -2
- intentkit/skills/casino/deck_shuffle.py +1 -2
- intentkit/skills/casino/dice_roll.py +1 -2
- intentkit/skills/cdp/__init__.py +3 -5
- intentkit/skills/cdp/base.py +1 -3
- intentkit/skills/chainlist/base.py +1 -3
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/common/base.py +1 -3
- intentkit/skills/common/current_time.py +1 -2
- intentkit/skills/cookiefun/base.py +1 -2
- intentkit/skills/cookiefun/get_account_details.py +7 -7
- intentkit/skills/cookiefun/get_account_feed.py +19 -19
- intentkit/skills/cookiefun/get_account_smart_followers.py +7 -7
- intentkit/skills/cookiefun/get_sectors.py +3 -3
- intentkit/skills/cookiefun/search_accounts.py +9 -9
- intentkit/skills/cryptocompare/api.py +2 -3
- intentkit/skills/cryptocompare/base.py +6 -6
- intentkit/skills/cryptocompare/fetch_news.py +3 -4
- intentkit/skills/cryptocompare/fetch_price.py +5 -6
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +3 -4
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +3 -4
- intentkit/skills/cryptocompare/fetch_top_volume.py +3 -4
- intentkit/skills/cryptocompare/fetch_trading_signals.py +4 -5
- intentkit/skills/cryptopanic/__init__.py +4 -4
- intentkit/skills/cryptopanic/base.py +1 -3
- intentkit/skills/cryptopanic/fetch_crypto_news.py +3 -5
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +3 -3
- intentkit/skills/dapplooker/base.py +1 -3
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- intentkit/skills/defillama/api.py +6 -9
- intentkit/skills/defillama/base.py +5 -6
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +6 -8
- intentkit/skills/defillama/coins/fetch_block.py +4 -6
- intentkit/skills/defillama/coins/fetch_current_prices.py +6 -8
- intentkit/skills/defillama/coins/fetch_first_price.py +5 -7
- intentkit/skills/defillama/coins/fetch_historical_prices.py +7 -9
- intentkit/skills/defillama/coins/fetch_price_chart.py +7 -9
- intentkit/skills/defillama/coins/fetch_price_percentage.py +5 -7
- intentkit/skills/defillama/config/chains.py +1 -3
- intentkit/skills/defillama/fees/fetch_fees_overview.py +22 -24
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +14 -16
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +6 -8
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +3 -5
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +5 -7
- intentkit/skills/defillama/tests/api_integration.test.py +1 -1
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +2 -4
- intentkit/skills/defillama/tvl/fetch_chains.py +7 -9
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +2 -4
- intentkit/skills/defillama/tvl/fetch_protocol.py +30 -36
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +1 -3
- intentkit/skills/defillama/tvl/fetch_protocols.py +35 -43
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +40 -46
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +33 -35
- intentkit/skills/defillama/volumes/fetch_options_overview.py +22 -26
- intentkit/skills/defillama/yields/fetch_pool_chart.py +8 -10
- intentkit/skills/defillama/yields/fetch_pools.py +24 -28
- intentkit/skills/dexscreener/__init__.py +2 -2
- intentkit/skills/dexscreener/base.py +3 -3
- intentkit/skills/dexscreener/get_pair_info.py +2 -2
- intentkit/skills/dexscreener/get_token_pairs.py +2 -2
- intentkit/skills/dexscreener/get_tokens_info.py +5 -5
- intentkit/skills/dexscreener/model/search_token_response.py +80 -82
- intentkit/skills/dexscreener/search_token.py +182 -182
- intentkit/skills/dexscreener/utils.py +15 -14
- intentkit/skills/dune_analytics/__init__.py +4 -4
- intentkit/skills/dune_analytics/base.py +1 -3
- intentkit/skills/dune_analytics/fetch_kol_buys.py +4 -4
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +5 -5
- intentkit/skills/elfa/base.py +1 -3
- intentkit/skills/elfa/mention.py +19 -21
- intentkit/skills/elfa/stats.py +4 -4
- intentkit/skills/elfa/tokens.py +12 -12
- intentkit/skills/elfa/utils.py +25 -27
- intentkit/skills/enso/__init__.py +2 -2
- intentkit/skills/enso/base.py +5 -8
- intentkit/skills/enso/best_yield.py +4 -6
- intentkit/skills/enso/networks.py +1 -2
- intentkit/skills/enso/prices.py +1 -3
- intentkit/skills/enso/route.py +1 -3
- intentkit/skills/enso/tokens.py +1 -3
- intentkit/skills/enso/wallet.py +5 -5
- intentkit/skills/erc20/__init__.py +4 -6
- intentkit/skills/erc721/__init__.py +4 -6
- intentkit/skills/firecrawl/base.py +1 -3
- intentkit/skills/firecrawl/clear.py +1 -2
- intentkit/skills/firecrawl/crawl.py +9 -10
- intentkit/skills/firecrawl/query.py +1 -2
- intentkit/skills/firecrawl/scrape.py +7 -8
- intentkit/skills/firecrawl/utils.py +13 -13
- intentkit/skills/github/base.py +1 -3
- intentkit/skills/github/github_search.py +1 -2
- intentkit/skills/heurist/base.py +1 -3
- intentkit/skills/heurist/image_generation_animagine_xl.py +7 -8
- intentkit/skills/heurist/image_generation_arthemy_comics.py +7 -8
- intentkit/skills/heurist/image_generation_arthemy_real.py +7 -8
- intentkit/skills/heurist/image_generation_braindance.py +7 -8
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +7 -8
- intentkit/skills/heurist/image_generation_flux_1_dev.py +7 -8
- intentkit/skills/heurist/image_generation_sdxl.py +7 -8
- intentkit/skills/http/base.py +1 -3
- intentkit/skills/http/get.py +7 -7
- intentkit/skills/http/post.py +9 -9
- intentkit/skills/http/put.py +9 -9
- intentkit/skills/lifi/__init__.py +4 -4
- intentkit/skills/lifi/base.py +1 -3
- intentkit/skills/lifi/token_execute.py +13 -13
- intentkit/skills/lifi/token_quote.py +6 -6
- intentkit/skills/lifi/utils.py +16 -16
- intentkit/skills/moralis/__init__.py +3 -3
- intentkit/skills/moralis/api.py +6 -7
- intentkit/skills/moralis/base.py +2 -4
- intentkit/skills/moralis/fetch_chain_portfolio.py +10 -11
- intentkit/skills/moralis/fetch_nft_portfolio.py +22 -22
- intentkit/skills/moralis/fetch_solana_portfolio.py +11 -12
- intentkit/skills/moralis/fetch_wallet_portfolio.py +8 -9
- intentkit/skills/morpho/__init__.py +4 -6
- intentkit/skills/nation/__init__.py +2 -2
- intentkit/skills/nation/base.py +1 -3
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/onchain.py +2 -6
- intentkit/skills/openai/base.py +1 -3
- intentkit/skills/openai/dalle_image_generation.py +1 -3
- intentkit/skills/openai/gpt_image_generation.py +2 -3
- intentkit/skills/openai/gpt_image_to_image.py +2 -3
- intentkit/skills/openai/image_to_text.py +1 -2
- intentkit/skills/portfolio/base.py +6 -6
- intentkit/skills/portfolio/token_balances.py +21 -21
- intentkit/skills/portfolio/wallet_approvals.py +7 -7
- intentkit/skills/portfolio/wallet_defi_positions.py +3 -3
- intentkit/skills/portfolio/wallet_history.py +21 -21
- intentkit/skills/portfolio/wallet_net_worth.py +13 -13
- intentkit/skills/portfolio/wallet_nfts.py +19 -19
- intentkit/skills/portfolio/wallet_profitability.py +7 -7
- intentkit/skills/portfolio/wallet_profitability_summary.py +5 -5
- intentkit/skills/portfolio/wallet_stats.py +3 -3
- intentkit/skills/portfolio/wallet_swaps.py +19 -19
- intentkit/skills/pyth/__init__.py +3 -5
- intentkit/skills/slack/base.py +2 -4
- intentkit/skills/slack/get_channel.py +8 -8
- intentkit/skills/slack/get_message.py +9 -9
- intentkit/skills/slack/schedule_message.py +5 -5
- intentkit/skills/slack/send_message.py +3 -5
- intentkit/skills/supabase/base.py +1 -3
- intentkit/skills/supabase/delete_data.py +4 -4
- intentkit/skills/supabase/fetch_data.py +12 -12
- intentkit/skills/supabase/insert_data.py +4 -4
- intentkit/skills/supabase/invoke_function.py +6 -6
- intentkit/skills/supabase/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- intentkit/skills/superfluid/__init__.py +4 -6
- intentkit/skills/system/add_autonomous_task.py +8 -10
- intentkit/skills/system/edit_autonomous_task.py +12 -14
- intentkit/skills/system/list_autonomous_tasks.py +1 -3
- intentkit/skills/tavily/base.py +1 -3
- intentkit/skills/tavily/tavily_extract.py +1 -2
- intentkit/skills/tavily/tavily_search.py +1 -3
- intentkit/skills/token/base.py +5 -5
- intentkit/skills/token/erc20_transfers.py +19 -19
- intentkit/skills/token/token_analytics.py +3 -3
- intentkit/skills/token/token_price.py +13 -13
- intentkit/skills/token/token_search.py +9 -9
- intentkit/skills/twitter/base.py +3 -4
- intentkit/skills/twitter/follow_user.py +1 -2
- intentkit/skills/twitter/get_mentions.py +3 -4
- intentkit/skills/twitter/get_timeline.py +1 -2
- intentkit/skills/twitter/get_user_by_username.py +1 -2
- intentkit/skills/twitter/get_user_tweets.py +2 -3
- intentkit/skills/twitter/like_tweet.py +1 -2
- intentkit/skills/twitter/post_tweet.py +3 -4
- intentkit/skills/twitter/reply_tweet.py +3 -4
- intentkit/skills/twitter/retweet.py +1 -2
- intentkit/skills/twitter/search_tweets.py +1 -2
- intentkit/skills/unrealspeech/base.py +1 -3
- intentkit/skills/unrealspeech/text_to_speech.py +8 -8
- intentkit/skills/venice_audio/__init__.py +8 -9
- intentkit/skills/venice_audio/base.py +3 -4
- intentkit/skills/venice_audio/input.py +41 -41
- intentkit/skills/venice_audio/venice_audio.py +6 -6
- intentkit/skills/venice_image/__init__.py +5 -5
- intentkit/skills/venice_image/api.py +138 -138
- intentkit/skills/venice_image/base.py +3 -3
- intentkit/skills/venice_image/config.py +33 -35
- intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
- intentkit/skills/venice_image/utils.py +77 -78
- intentkit/skills/web_scraper/base.py +1 -3
- intentkit/skills/web_scraper/document_indexer.py +1 -2
- intentkit/skills/web_scraper/scrape_and_index.py +4 -5
- intentkit/skills/web_scraper/utils.py +25 -26
- intentkit/skills/web_scraper/website_indexer.py +10 -11
- intentkit/skills/weth/__init__.py +4 -6
- intentkit/skills/wow/__init__.py +4 -6
- intentkit/skills/x402/__init__.py +2 -2
- intentkit/skills/x402/ask_agent.py +7 -7
- intentkit/skills/x402/base.py +2 -1
- intentkit/skills/x402/http_request.py +10 -10
- intentkit/skills/xmtp/base.py +3 -3
- intentkit/skills/xmtp/price.py +2 -2
- intentkit/skills/xmtp/swap.py +2 -4
- intentkit/skills/xmtp/transfer.py +4 -6
- intentkit/utils/error.py +2 -2
- intentkit/utils/logging.py +2 -4
- intentkit/utils/s3.py +8 -9
- intentkit/utils/schema.py +5 -5
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.8.17.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/METADATA +3 -4
- intentkit-0.8.17.dev2.dist-info/RECORD +464 -0
- intentkit/models/generator.py +0 -347
- intentkit-0.8.17.dev1.dist-info/RECORD +0 -465
- {intentkit-0.8.17.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/WHEEL +0 -0
- {intentkit-0.8.17.dev1.dist-info → intentkit-0.8.17.dev2.dist-info}/licenses/LICENSE +0 -0
intentkit/skills/elfa/mention.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Mention-related skills for Elfa AI API."""
|
|
2
2
|
|
|
3
|
-
from typing import Any
|
|
3
|
+
from typing import Any
|
|
4
4
|
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
@@ -12,19 +12,19 @@ class ElfaGetTopMentionsInput(BaseModel):
|
|
|
12
12
|
"""Input parameters for top mentions."""
|
|
13
13
|
|
|
14
14
|
ticker: str = Field(description="Stock ticker symbol (e.g., ETH, $ETH, BTC, $BTC)")
|
|
15
|
-
timeWindow:
|
|
15
|
+
timeWindow: str | None = Field(
|
|
16
16
|
"1h", description="Time window (e.g., '1h', '24h', '7d')"
|
|
17
17
|
)
|
|
18
|
-
page:
|
|
19
|
-
pageSize:
|
|
18
|
+
page: int | None = Field(1, description="Page number for pagination")
|
|
19
|
+
pageSize: int | None = Field(10, description="Number of items per page")
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class ElfaGetTopMentionsOutput(BaseModel):
|
|
23
23
|
"""Output structure for top mentions response."""
|
|
24
24
|
|
|
25
25
|
success: bool
|
|
26
|
-
data:
|
|
27
|
-
metadata:
|
|
26
|
+
data: list[MentionData] | None = Field(None, description="List of top mentions")
|
|
27
|
+
metadata: dict[str, Any] | None = Field(None, description="Response metadata")
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class ElfaGetTopMentions(ElfaBaseTool):
|
|
@@ -46,7 +46,7 @@ class ElfaGetTopMentions(ElfaBaseTool):
|
|
|
46
46
|
Updated hourly. Returns engagement metrics and account information for market sentiment analysis.
|
|
47
47
|
|
|
48
48
|
Use this to track public opinion, identify trending news, and monitor investor discussions."""
|
|
49
|
-
args_schema:
|
|
49
|
+
args_schema: type[BaseModel] = ElfaGetTopMentionsInput
|
|
50
50
|
|
|
51
51
|
async def _arun(
|
|
52
52
|
self,
|
|
@@ -102,30 +102,28 @@ class ElfaGetTopMentions(ElfaBaseTool):
|
|
|
102
102
|
class ElfaSearchMentionsInput(BaseModel):
|
|
103
103
|
"""Input parameters for search mentions."""
|
|
104
104
|
|
|
105
|
-
keywords:
|
|
105
|
+
keywords: str | None = Field(
|
|
106
106
|
None,
|
|
107
107
|
description="Up to 5 keywords to search for, separated by commas. Phrases accepted",
|
|
108
108
|
)
|
|
109
|
-
accountName:
|
|
109
|
+
accountName: str | None = Field(
|
|
110
110
|
None,
|
|
111
111
|
description="Account username to filter by (optional if keywords provided)",
|
|
112
112
|
)
|
|
113
|
-
timeWindow:
|
|
114
|
-
limit:
|
|
115
|
-
searchType:
|
|
116
|
-
|
|
117
|
-
)
|
|
118
|
-
cursor: Optional[str] = Field(None, description="Cursor for pagination")
|
|
113
|
+
timeWindow: str | None = Field("7d", description="Time window for search")
|
|
114
|
+
limit: int | None = Field(20, description="Number of results to return (max 30)")
|
|
115
|
+
searchType: str | None = Field("or", description="Type of search ('and' or 'or')")
|
|
116
|
+
cursor: str | None = Field(None, description="Cursor for pagination")
|
|
119
117
|
|
|
120
118
|
|
|
121
119
|
class ElfaSearchMentionsOutput(BaseModel):
|
|
122
120
|
"""Output structure for search mentions response."""
|
|
123
121
|
|
|
124
122
|
success: bool
|
|
125
|
-
data:
|
|
123
|
+
data: list[MentionData] | None = Field(
|
|
126
124
|
None, description="List of matching mentions"
|
|
127
125
|
)
|
|
128
|
-
metadata:
|
|
126
|
+
metadata: dict[str, Any] | None = Field(
|
|
129
127
|
None, description="Response metadata with cursor"
|
|
130
128
|
)
|
|
131
129
|
|
|
@@ -150,16 +148,16 @@ class ElfaSearchMentions(ElfaBaseTool):
|
|
|
150
148
|
Updated every 5 minutes. Access 30 days of recent data or historical archives.
|
|
151
149
|
|
|
152
150
|
Use this for market research, brand monitoring, opinion tracking, and competitive analysis."""
|
|
153
|
-
args_schema:
|
|
151
|
+
args_schema: type[BaseModel] = ElfaSearchMentionsInput
|
|
154
152
|
|
|
155
153
|
async def _arun(
|
|
156
154
|
self,
|
|
157
|
-
keywords:
|
|
158
|
-
accountName:
|
|
155
|
+
keywords: str | None = None,
|
|
156
|
+
accountName: str | None = None,
|
|
159
157
|
timeWindow: str = "7d",
|
|
160
158
|
limit: int = 20,
|
|
161
159
|
searchType: str = "or",
|
|
162
|
-
cursor:
|
|
160
|
+
cursor: str | None = None,
|
|
163
161
|
**kwargs,
|
|
164
162
|
) -> ElfaSearchMentionsOutput:
|
|
165
163
|
"""
|
intentkit/skills/elfa/stats.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Smart stats skill for Elfa AI API."""
|
|
2
2
|
|
|
3
|
-
from typing import Any
|
|
3
|
+
from typing import Any
|
|
4
4
|
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
@@ -18,8 +18,8 @@ class ElfaGetSmartStatsOutput(BaseModel):
|
|
|
18
18
|
"""Output structure for smart stats response."""
|
|
19
19
|
|
|
20
20
|
success: bool
|
|
21
|
-
data:
|
|
22
|
-
metadata:
|
|
21
|
+
data: SmartStatsData | None = Field(None, description="Smart stats data")
|
|
22
|
+
metadata: dict[str, Any] | None = Field(None, description="Response metadata")
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class ElfaGetSmartStats(ElfaBaseTool):
|
|
@@ -43,7 +43,7 @@ class ElfaGetSmartStats(ElfaBaseTool):
|
|
|
43
43
|
description: str = """Get comprehensive social media metrics for a username including smart following count,
|
|
44
44
|
engagement scores, and follower analytics. Use this for competitor analysis, influencer identification,
|
|
45
45
|
and social media performance audits."""
|
|
46
|
-
args_schema:
|
|
46
|
+
args_schema: type[BaseModel] = ElfaGetSmartStatsInput
|
|
47
47
|
|
|
48
48
|
async def _arun(self, username: str, **kwargs) -> ElfaGetSmartStatsOutput:
|
|
49
49
|
"""
|
intentkit/skills/elfa/tokens.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Trending tokens skill for Elfa AI API."""
|
|
2
2
|
|
|
3
|
-
from typing import Any
|
|
3
|
+
from typing import Any
|
|
4
4
|
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
6
6
|
|
|
@@ -11,13 +11,13 @@ from .utils import make_elfa_request
|
|
|
11
11
|
class ElfaGetTrendingTokensInput(BaseModel):
|
|
12
12
|
"""Input parameters for trending tokens."""
|
|
13
13
|
|
|
14
|
-
timeWindow:
|
|
14
|
+
timeWindow: str | None = Field(
|
|
15
15
|
"7d",
|
|
16
16
|
description="Time window for trending analysis (e.g., '30m', '1h', '4h', '24h', '7d', '30d')",
|
|
17
17
|
)
|
|
18
|
-
page:
|
|
19
|
-
pageSize:
|
|
20
|
-
minMentions:
|
|
18
|
+
page: int | None = Field(1, description="Page number for pagination")
|
|
19
|
+
pageSize: int | None = Field(50, description="Number of items per page")
|
|
20
|
+
minMentions: int | None = Field(
|
|
21
21
|
5, description="Minimum number of mentions required"
|
|
22
22
|
)
|
|
23
23
|
|
|
@@ -25,20 +25,20 @@ class ElfaGetTrendingTokensInput(BaseModel):
|
|
|
25
25
|
class TrendingToken(BaseModel):
|
|
26
26
|
"""Individual trending token data."""
|
|
27
27
|
|
|
28
|
-
token:
|
|
29
|
-
current_count:
|
|
30
|
-
previous_count:
|
|
31
|
-
change_percent:
|
|
28
|
+
token: str | None = Field(None, description="Token symbol")
|
|
29
|
+
current_count: int | None = Field(None, description="Current mention count")
|
|
30
|
+
previous_count: int | None = Field(None, description="Previous mention count")
|
|
31
|
+
change_percent: float | None = Field(None, description="Change percentage")
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class ElfaGetTrendingTokensOutput(BaseModel):
|
|
35
35
|
"""Output structure for trending tokens response."""
|
|
36
36
|
|
|
37
37
|
success: bool
|
|
38
|
-
data:
|
|
38
|
+
data: list[TrendingToken] | None = Field(
|
|
39
39
|
None, description="List of trending tokens"
|
|
40
40
|
)
|
|
41
|
-
metadata:
|
|
41
|
+
metadata: dict[str, Any] | None = Field(None, description="Response metadata")
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
class ElfaGetTrendingTokens(ElfaBaseTool):
|
|
@@ -60,7 +60,7 @@ class ElfaGetTrendingTokens(ElfaBaseTool):
|
|
|
60
60
|
Updated every 5 minutes. Smart mentions provide sophisticated discussion volume measurement beyond simple keyword counts.
|
|
61
61
|
|
|
62
62
|
Use this to identify tokens gaining traction, gauge market sentiment, and research potential investments."""
|
|
63
|
-
args_schema:
|
|
63
|
+
args_schema: type[BaseModel] = ElfaGetTrendingTokensInput
|
|
64
64
|
|
|
65
65
|
async def _arun(
|
|
66
66
|
self,
|
intentkit/skills/elfa/utils.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Utility functions for Elfa skills."""
|
|
2
2
|
|
|
3
|
-
from typing import Any
|
|
3
|
+
from typing import Any
|
|
4
4
|
|
|
5
5
|
import httpx
|
|
6
6
|
from langchain_core.tools.base import ToolException
|
|
@@ -14,13 +14,13 @@ class ElfaResponse(BaseModel):
|
|
|
14
14
|
|
|
15
15
|
success: bool
|
|
16
16
|
data: Any = None
|
|
17
|
-
metadata:
|
|
17
|
+
metadata: dict[str, Any] | None = None
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
async def make_elfa_request(
|
|
21
21
|
endpoint: str,
|
|
22
22
|
api_key: str,
|
|
23
|
-
params:
|
|
23
|
+
params: dict[str, Any] | None = None,
|
|
24
24
|
timeout: int = 30,
|
|
25
25
|
) -> ElfaResponse:
|
|
26
26
|
"""
|
|
@@ -82,32 +82,32 @@ async def make_elfa_request(
|
|
|
82
82
|
class RepostBreakdown(BaseModel):
|
|
83
83
|
"""Repost breakdown data."""
|
|
84
84
|
|
|
85
|
-
smart:
|
|
86
|
-
ct:
|
|
85
|
+
smart: int | None = None
|
|
86
|
+
ct: int | None = None
|
|
87
87
|
|
|
88
88
|
|
|
89
89
|
class Account(BaseModel):
|
|
90
90
|
"""Account information."""
|
|
91
91
|
|
|
92
|
-
username:
|
|
93
|
-
isVerified:
|
|
92
|
+
username: str | None = None
|
|
93
|
+
isVerified: bool | None = None
|
|
94
94
|
|
|
95
95
|
|
|
96
96
|
class MentionData(BaseModel):
|
|
97
97
|
"""Base mention data structure used across multiple endpoints."""
|
|
98
98
|
|
|
99
|
-
tweetId:
|
|
100
|
-
link:
|
|
101
|
-
likeCount:
|
|
102
|
-
repostCount:
|
|
103
|
-
viewCount:
|
|
104
|
-
quoteCount:
|
|
105
|
-
replyCount:
|
|
106
|
-
bookmarkCount:
|
|
107
|
-
mentionedAt:
|
|
108
|
-
type:
|
|
109
|
-
account:
|
|
110
|
-
repostBreakdown:
|
|
99
|
+
tweetId: str | None = Field(None, description="Tweet ID")
|
|
100
|
+
link: str | None = Field(None, description="Link to the tweet")
|
|
101
|
+
likeCount: int | None = Field(None, description="Number of likes")
|
|
102
|
+
repostCount: int | None = Field(None, description="Number of reposts")
|
|
103
|
+
viewCount: int | None = Field(None, description="Number of views")
|
|
104
|
+
quoteCount: int | None = Field(None, description="Number of quotes")
|
|
105
|
+
replyCount: int | None = Field(None, description="Number of replies")
|
|
106
|
+
bookmarkCount: int | None = Field(None, description="Number of bookmarks")
|
|
107
|
+
mentionedAt: str | None = Field(None, description="When mentioned")
|
|
108
|
+
type: str | None = Field(None, description="Post type")
|
|
109
|
+
account: Account | None = Field(None, description="Account information")
|
|
110
|
+
repostBreakdown: RepostBreakdown | None = Field(
|
|
111
111
|
None, description="Repost breakdown"
|
|
112
112
|
)
|
|
113
113
|
|
|
@@ -115,15 +115,13 @@ class MentionData(BaseModel):
|
|
|
115
115
|
class SmartStatsData(BaseModel):
|
|
116
116
|
"""Smart stats data structure."""
|
|
117
117
|
|
|
118
|
-
smartFollowingCount:
|
|
119
|
-
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
smartFollowerCount: Optional[int] = Field(None, description="Smart follower count")
|
|
124
|
-
followerCount: Optional[int] = Field(None, description="Total follower count")
|
|
118
|
+
smartFollowingCount: int | None = Field(None, description="Smart following count")
|
|
119
|
+
averageEngagement: float | None = Field(None, description="Average engagement")
|
|
120
|
+
averageReach: float | None = Field(None, description="Average reach")
|
|
121
|
+
smartFollowerCount: int | None = Field(None, description="Smart follower count")
|
|
122
|
+
followerCount: int | None = Field(None, description="Total follower count")
|
|
125
123
|
|
|
126
124
|
|
|
127
|
-
def clean_params(params:
|
|
125
|
+
def clean_params(params: dict[str, Any]) -> dict[str, Any]:
|
|
128
126
|
"""Remove None values from parameters dict."""
|
|
129
127
|
return {k: v for k, v in params.items() if v is not None}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Enso skills."""
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import NotRequired, TypedDict
|
|
5
5
|
|
|
6
6
|
from intentkit.skills.base import SkillConfig, SkillState
|
|
7
7
|
from intentkit.skills.enso.base import EnsoBaseTool
|
|
@@ -35,7 +35,7 @@ class Config(SkillConfig):
|
|
|
35
35
|
|
|
36
36
|
states: SkillStates
|
|
37
37
|
api_token: NotRequired[str]
|
|
38
|
-
main_tokens: NotRequired[
|
|
38
|
+
main_tokens: NotRequired[list[str]]
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
async def get_skills(
|
intentkit/skills/enso/base.py
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from decimal import Decimal
|
|
2
|
-
from typing import Optional, Type
|
|
3
2
|
|
|
4
3
|
from coinbase_agentkit import CdpEvmWalletProvider
|
|
5
4
|
from langchain_core.tools.base import ToolException
|
|
@@ -19,7 +18,7 @@ class EnsoBaseTool(IntentKitSkill):
|
|
|
19
18
|
|
|
20
19
|
name: str = Field(description="The name of the tool")
|
|
21
20
|
description: str = Field(description="A description of what the tool does")
|
|
22
|
-
args_schema:
|
|
21
|
+
args_schema: type[BaseModel]
|
|
23
22
|
|
|
24
23
|
async def get_wallet_provider(self, context: AgentContext) -> CdpEvmWalletProvider:
|
|
25
24
|
"""Get the wallet provider from the CDP client.
|
|
@@ -28,7 +27,7 @@ class EnsoBaseTool(IntentKitSkill):
|
|
|
28
27
|
context: The skill context containing agent information.
|
|
29
28
|
|
|
30
29
|
Returns:
|
|
31
|
-
|
|
30
|
+
CdpEvmWalletProvider | None: The wallet provider if available.
|
|
32
31
|
"""
|
|
33
32
|
return await get_agent_wallet_provider(context.agent)
|
|
34
33
|
|
|
@@ -36,7 +35,7 @@ class EnsoBaseTool(IntentKitSkill):
|
|
|
36
35
|
provider: CdpEvmWalletProvider = await self.get_wallet_provider(context)
|
|
37
36
|
return provider.get_address()
|
|
38
37
|
|
|
39
|
-
def get_chain_provider(self, context: AgentContext) ->
|
|
38
|
+
def get_chain_provider(self, context: AgentContext) -> ChainProvider | None:
|
|
40
39
|
return config.chain_provider
|
|
41
40
|
|
|
42
41
|
def get_main_tokens(self, context: AgentContext) -> list[str]:
|
|
@@ -59,7 +58,7 @@ class EnsoBaseTool(IntentKitSkill):
|
|
|
59
58
|
)
|
|
60
59
|
|
|
61
60
|
def resolve_chain_id(
|
|
62
|
-
self, context: AgentContext, chain_id:
|
|
61
|
+
self, context: AgentContext, chain_id: int | None = None
|
|
63
62
|
) -> int:
|
|
64
63
|
if chain_id:
|
|
65
64
|
return chain_id
|
|
@@ -84,9 +83,7 @@ class EnsoBaseTool(IntentKitSkill):
|
|
|
84
83
|
return "enso"
|
|
85
84
|
|
|
86
85
|
|
|
87
|
-
def format_amount_with_decimals(
|
|
88
|
-
amount: object, decimals: Optional[int]
|
|
89
|
-
) -> Optional[str]:
|
|
86
|
+
def format_amount_with_decimals(amount: object, decimals: int | None) -> str | None:
|
|
90
87
|
if amount is None or decimals is None:
|
|
91
88
|
return None
|
|
92
89
|
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import List, Optional, Type
|
|
2
|
-
|
|
3
1
|
import httpx
|
|
4
2
|
from langchain_core.tools.base import ToolException
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
@@ -40,8 +38,8 @@ class YieldOption(BaseModel):
|
|
|
40
38
|
None, description="Primary contract address for interacting with the protocol"
|
|
41
39
|
)
|
|
42
40
|
apy: float = Field(None, description="Annual Percentage Yield")
|
|
43
|
-
tvl:
|
|
44
|
-
underlying_tokens:
|
|
41
|
+
tvl: float | None = Field(None, description="Total Value Locked in the protocol")
|
|
42
|
+
underlying_tokens: list[str] = Field(
|
|
45
43
|
[], description="List of underlying token symbols"
|
|
46
44
|
)
|
|
47
45
|
|
|
@@ -49,7 +47,7 @@ class YieldOption(BaseModel):
|
|
|
49
47
|
class EnsoGetBestYieldOutput(BaseModel):
|
|
50
48
|
"""Output containing the best yield options."""
|
|
51
49
|
|
|
52
|
-
best_options:
|
|
50
|
+
best_options: list[YieldOption] = Field(
|
|
53
51
|
[], description="List of best yield options sorted by APY (descending)"
|
|
54
52
|
)
|
|
55
53
|
token_symbol: str = Field(None, description="Symbol of the token searched for")
|
|
@@ -68,7 +66,7 @@ class EnsoGetBestYield(EnsoBaseTool):
|
|
|
68
66
|
"Find the best yield options for a specific token (default: USDC) across all protocols "
|
|
69
67
|
"on a blockchain network (default: Base). Results are sorted by APY in descending order."
|
|
70
68
|
)
|
|
71
|
-
args_schema:
|
|
69
|
+
args_schema: type[BaseModel] = EnsoGetBestYieldInput
|
|
72
70
|
|
|
73
71
|
async def _arun(
|
|
74
72
|
self,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Type
|
|
3
2
|
|
|
4
3
|
import httpx
|
|
5
4
|
from langchain_core.tools.base import ToolException
|
|
@@ -46,7 +45,7 @@ class EnsoGetNetworks(EnsoBaseTool):
|
|
|
46
45
|
|
|
47
46
|
name: str = "enso_get_networks"
|
|
48
47
|
description: str = "Retrieve networks supported by the Enso API"
|
|
49
|
-
args_schema:
|
|
48
|
+
args_schema: type[BaseModel] = EnsoGetNetworksInput
|
|
50
49
|
|
|
51
50
|
async def _arun(self, **kwargs) -> EnsoGetNetworksOutput:
|
|
52
51
|
"""
|
intentkit/skills/enso/prices.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Type
|
|
2
|
-
|
|
3
1
|
import httpx
|
|
4
2
|
from langchain_core.tools.base import ToolException
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
@@ -36,7 +34,7 @@ class EnsoGetPrices(EnsoBaseTool):
|
|
|
36
34
|
|
|
37
35
|
name: str = "enso_get_prices"
|
|
38
36
|
description: str = "Retrieve the price of a token by chain ID and contract address"
|
|
39
|
-
args_schema:
|
|
37
|
+
args_schema: type[BaseModel] = EnsoGetPricesInput
|
|
40
38
|
|
|
41
39
|
async def _arun(
|
|
42
40
|
self,
|
intentkit/skills/enso/route.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Type
|
|
2
|
-
|
|
3
1
|
import httpx
|
|
4
2
|
from langchain_core.tools.base import ToolException
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
@@ -155,7 +153,7 @@ class EnsoRouteShortcut(EnsoBaseTool):
|
|
|
155
153
|
|
|
156
154
|
name: str = "enso_route_shortcut"
|
|
157
155
|
description: str = "This tool is used specifically for broadcasting a route transaction calldata to the network. It should only be used when the user explicitly requests to broadcast a route transaction with routeId."
|
|
158
|
-
args_schema:
|
|
156
|
+
args_schema: type[BaseModel] = EnsoRouteShortcutInput
|
|
159
157
|
|
|
160
158
|
async def _arun(
|
|
161
159
|
self,
|
intentkit/skills/enso/tokens.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Type
|
|
2
|
-
|
|
3
1
|
import httpx
|
|
4
2
|
from langchain_core.tools.base import ToolException
|
|
5
3
|
from pydantic import BaseModel, Field
|
|
@@ -133,7 +131,7 @@ class EnsoGetTokens(EnsoBaseTool):
|
|
|
133
131
|
"Enso Finance Token Information Tool: Retrieves detailed token information from the Enso Finance API, "
|
|
134
132
|
"including APY, symbol, address, protocol slug, token type, and underlying tokens."
|
|
135
133
|
)
|
|
136
|
-
args_schema:
|
|
134
|
+
args_schema: type[BaseModel] = EnsoGetTokensInput
|
|
137
135
|
|
|
138
136
|
async def _arun(
|
|
139
137
|
self,
|
intentkit/skills/enso/wallet.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Literal
|
|
1
|
+
from typing import Literal
|
|
2
2
|
|
|
3
3
|
import httpx
|
|
4
4
|
from langchain_core.tools.base import ToolException
|
|
@@ -35,7 +35,7 @@ class EnsoGetWalletBalances(EnsoBaseTool):
|
|
|
35
35
|
description: str = (
|
|
36
36
|
"Retrieve token balances of a wallet on a specified blockchain network."
|
|
37
37
|
)
|
|
38
|
-
args_schema:
|
|
38
|
+
args_schema: type[BaseModel] = EnsoGetBalancesInput
|
|
39
39
|
|
|
40
40
|
async def _arun(
|
|
41
41
|
self,
|
|
@@ -107,7 +107,7 @@ class EnsoGetWalletApprovals(EnsoBaseTool):
|
|
|
107
107
|
description: str = (
|
|
108
108
|
"Retrieve token spend approvals for a wallet on a specified blockchain network."
|
|
109
109
|
)
|
|
110
|
-
args_schema:
|
|
110
|
+
args_schema: type[BaseModel] = EnsoGetApprovalsInput
|
|
111
111
|
|
|
112
112
|
async def _arun(
|
|
113
113
|
self,
|
|
@@ -192,7 +192,7 @@ class EnsoWalletApprove(EnsoBaseTool):
|
|
|
192
192
|
"network. It should only be used when the user explicitly requests to broadcast an approval transaction "
|
|
193
193
|
"with a specific amount for a certain token."
|
|
194
194
|
)
|
|
195
|
-
args_schema:
|
|
195
|
+
args_schema: type[BaseModel] = EnsoWalletApproveInput
|
|
196
196
|
response_format: str = "content_and_artifact"
|
|
197
197
|
|
|
198
198
|
async def _arun(
|
|
@@ -202,7 +202,7 @@ class EnsoWalletApprove(EnsoBaseTool):
|
|
|
202
202
|
chainId: int | None = None,
|
|
203
203
|
routingStrategy: Literal["ensowallet", "router", "delegate"] | None = None,
|
|
204
204
|
**_: object,
|
|
205
|
-
) ->
|
|
205
|
+
) -> tuple[EnsoWalletApproveOutput, EnsoWalletApproveArtifact]:
|
|
206
206
|
context = self.get_context()
|
|
207
207
|
resolved_chain_id = self.resolve_chain_id(context, chainId)
|
|
208
208
|
api_token = self.get_api_token(context)
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""ERC20 AgentKit skills."""
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import TypedDict
|
|
4
4
|
|
|
5
5
|
from coinbase_agentkit import erc20_action_provider
|
|
6
6
|
|
|
7
|
+
from intentkit.models.agent import Agent
|
|
7
8
|
from intentkit.skills.base import (
|
|
8
9
|
SkillConfig,
|
|
9
10
|
SkillState,
|
|
@@ -12,9 +13,6 @@ from intentkit.skills.base import (
|
|
|
12
13
|
)
|
|
13
14
|
from intentkit.skills.erc20.base import ERC20BaseTool
|
|
14
15
|
|
|
15
|
-
if TYPE_CHECKING:
|
|
16
|
-
from intentkit.models.agent import Agent
|
|
17
|
-
|
|
18
16
|
|
|
19
17
|
class SkillStates(TypedDict):
|
|
20
18
|
ERC20ActionProvider_get_balance: SkillState
|
|
@@ -28,10 +26,10 @@ class Config(SkillConfig):
|
|
|
28
26
|
|
|
29
27
|
|
|
30
28
|
async def get_skills(
|
|
31
|
-
config:
|
|
29
|
+
config: Config,
|
|
32
30
|
is_private: bool,
|
|
33
31
|
agent_id: str,
|
|
34
|
-
agent:
|
|
32
|
+
agent: Agent | None = None,
|
|
35
33
|
**_,
|
|
36
34
|
) -> list[ERC20BaseTool]:
|
|
37
35
|
"""Get all ERC20 skills."""
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""ERC721 AgentKit skills."""
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import TypedDict
|
|
4
4
|
|
|
5
5
|
from coinbase_agentkit import erc721_action_provider
|
|
6
6
|
|
|
7
|
+
from intentkit.models.agent import Agent
|
|
7
8
|
from intentkit.skills.base import (
|
|
8
9
|
SkillConfig,
|
|
9
10
|
SkillState,
|
|
@@ -12,9 +13,6 @@ from intentkit.skills.base import (
|
|
|
12
13
|
)
|
|
13
14
|
from intentkit.skills.erc721.base import ERC721BaseTool
|
|
14
15
|
|
|
15
|
-
if TYPE_CHECKING:
|
|
16
|
-
from intentkit.models.agent import Agent
|
|
17
|
-
|
|
18
16
|
|
|
19
17
|
class SkillStates(TypedDict):
|
|
20
18
|
Erc721ActionProvider_get_balance: SkillState
|
|
@@ -29,10 +27,10 @@ class Config(SkillConfig):
|
|
|
29
27
|
|
|
30
28
|
|
|
31
29
|
async def get_skills(
|
|
32
|
-
config:
|
|
30
|
+
config: Config,
|
|
33
31
|
is_private: bool,
|
|
34
32
|
agent_id: str,
|
|
35
|
-
agent:
|
|
33
|
+
agent: Agent | None = None,
|
|
36
34
|
**_,
|
|
37
35
|
) -> list[ERC721BaseTool]:
|
|
38
36
|
"""Get all ERC721 skills."""
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Type
|
|
2
|
-
|
|
3
1
|
from langchain_core.tools.base import ToolException
|
|
4
2
|
from pydantic import BaseModel, Field
|
|
5
3
|
|
|
@@ -12,7 +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:
|
|
13
|
+
args_schema: type[BaseModel]
|
|
16
14
|
|
|
17
15
|
def get_api_key(self) -> str:
|
|
18
16
|
"""Get the Firecrawl API key from configuration."""
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Type
|
|
3
2
|
|
|
4
3
|
from pydantic import BaseModel, Field
|
|
5
4
|
|
|
@@ -31,7 +30,7 @@ class FirecrawlClearIndexedContent(FirecrawlBaseTool):
|
|
|
31
30
|
"This will permanently delete all indexed content and cannot be undone.\n"
|
|
32
31
|
"Use this tool when you want to start fresh with new content."
|
|
33
32
|
)
|
|
34
|
-
args_schema:
|
|
33
|
+
args_schema: type[BaseModel] = FirecrawlClearInput
|
|
35
34
|
|
|
36
35
|
async def _arun(
|
|
37
36
|
self,
|
|
@@ -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,
|