intentkit 0.8.6.dev2__py3-none-any.whl → 0.8.17__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of intentkit might be problematic. Click here for more details.
- intentkit/__init__.py +1 -1
- intentkit/abstracts/agent.py +4 -5
- intentkit/abstracts/engine.py +5 -5
- intentkit/abstracts/graph.py +10 -5
- intentkit/abstracts/skill.py +6 -144
- intentkit/abstracts/twitter.py +4 -5
- intentkit/clients/__init__.py +3 -2
- intentkit/clients/cdp.py +53 -92
- intentkit/clients/twitter.py +56 -57
- intentkit/clients/web3.py +1 -3
- intentkit/config/config.py +5 -0
- intentkit/core/agent.py +16 -388
- intentkit/core/asset.py +64 -18
- intentkit/core/client.py +1 -1
- intentkit/core/credit.py +19 -20
- intentkit/core/engine.py +26 -11
- intentkit/core/node.py +2 -1
- intentkit/core/prompt.py +53 -15
- intentkit/core/scheduler.py +9 -9
- intentkit/core/statistics.py +6 -7
- intentkit/models/agent.py +256 -176
- intentkit/models/agent_data.py +62 -36
- intentkit/models/agent_schema.json +6 -9
- intentkit/models/app_setting.py +6 -6
- intentkit/models/chat.py +28 -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.csv +15 -12
- intentkit/models/llm.py +18 -16
- intentkit/models/redis.py +2 -3
- intentkit/models/skill.py +62 -66
- intentkit/models/skills.csv +30 -26
- intentkit/models/user.py +46 -21
- intentkit/skills/acolyt/__init__.py +2 -9
- intentkit/skills/acolyt/ask.py +3 -4
- intentkit/skills/acolyt/base.py +4 -9
- intentkit/skills/aixbt/__init__.py +2 -13
- intentkit/skills/aixbt/base.py +1 -7
- intentkit/skills/aixbt/projects.py +14 -15
- intentkit/skills/allora/__init__.py +2 -9
- intentkit/skills/allora/base.py +4 -9
- intentkit/skills/allora/price.py +3 -4
- intentkit/skills/base.py +175 -52
- intentkit/skills/basename/__init__.py +4 -8
- 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/token_info_and_price.py +5 -5
- 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/cdp/__init__.py +3 -10
- intentkit/skills/cdp/base.py +1 -7
- intentkit/skills/cdp/schema.json +1 -17
- intentkit/skills/chainlist/__init__.py +2 -7
- intentkit/skills/chainlist/base.py +1 -7
- intentkit/skills/chainlist/chain_lookup.py +18 -18
- intentkit/skills/common/__init__.py +2 -9
- intentkit/skills/common/base.py +1 -7
- intentkit/skills/common/current_time.py +1 -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/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/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/dapplooker/__init__.py +2 -9
- intentkit/skills/dapplooker/base.py +4 -9
- intentkit/skills/dapplooker/dapplooker_token_data.py +7 -7
- 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/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/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/elfa/__init__.py +5 -18
- intentkit/skills/elfa/base.py +10 -14
- 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 +26 -28
- intentkit/skills/enso/__init__.py +11 -31
- intentkit/skills/enso/base.py +9 -15
- intentkit/skills/enso/best_yield.py +5 -7
- intentkit/skills/enso/networks.py +3 -9
- intentkit/skills/enso/prices.py +2 -4
- intentkit/skills/enso/route.py +6 -12
- intentkit/skills/enso/tokens.py +4 -16
- intentkit/skills/enso/wallet.py +6 -6
- intentkit/skills/erc20/__init__.py +5 -11
- intentkit/skills/erc721/__init__.py +5 -9
- 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/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/heurist/__init__.py +8 -27
- intentkit/skills/heurist/base.py +4 -9
- intentkit/skills/heurist/image_generation_animagine_xl.py +12 -13
- intentkit/skills/heurist/image_generation_arthemy_comics.py +12 -13
- intentkit/skills/heurist/image_generation_arthemy_real.py +12 -13
- intentkit/skills/heurist/image_generation_braindance.py +12 -13
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +12 -13
- intentkit/skills/heurist/image_generation_flux_1_dev.py +12 -13
- intentkit/skills/heurist/image_generation_sdxl.py +12 -13
- intentkit/skills/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/lifi/__init__.py +5 -10
- intentkit/skills/lifi/base.py +1 -7
- intentkit/skills/lifi/token_execute.py +14 -17
- intentkit/skills/lifi/token_quote.py +7 -9
- intentkit/skills/lifi/utils.py +16 -16
- 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/morpho/__init__.py +5 -9
- intentkit/skills/nation/__init__.py +4 -9
- intentkit/skills/nation/base.py +5 -10
- intentkit/skills/nation/nft_check.py +3 -4
- intentkit/skills/onchain.py +23 -0
- intentkit/skills/openai/__init__.py +17 -18
- intentkit/skills/openai/base.py +10 -14
- intentkit/skills/openai/dalle_image_generation.py +3 -8
- intentkit/skills/openai/gpt_avatar_generator.py +102 -0
- intentkit/skills/openai/gpt_image_generation.py +4 -8
- intentkit/skills/openai/gpt_image_mini_generator.py +91 -0
- intentkit/skills/openai/gpt_image_to_image.py +4 -8
- intentkit/skills/openai/image_to_text.py +3 -7
- intentkit/skills/openai/schema.json +32 -0
- intentkit/skills/portfolio/__init__.py +11 -35
- intentkit/skills/portfolio/base.py +33 -19
- 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 +4 -10
- intentkit/skills/skills.toml +4 -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/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/update_data.py +6 -6
- intentkit/skills/supabase/upsert_data.py +4 -4
- intentkit/skills/superfluid/__init__.py +5 -9
- 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/tavily/__init__.py +3 -12
- intentkit/skills/tavily/base.py +4 -9
- 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/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/search_tweets.py +4 -12
- intentkit/skills/unrealspeech/__init__.py +2 -7
- intentkit/skills/unrealspeech/base.py +2 -8
- 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/venice_audio.py +7 -11
- intentkit/skills/venice_image/__init__.py +147 -154
- intentkit/skills/venice_image/api.py +138 -138
- intentkit/skills/venice_image/base.py +185 -192
- intentkit/skills/venice_image/config.py +33 -35
- intentkit/skills/venice_image/image_enhance/image_enhance.py +2 -3
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +21 -23
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +38 -40
- intentkit/skills/venice_image/image_generation/image_generation_base.py +9 -9
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -27
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -158
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -26
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -28
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -28
- intentkit/skills/venice_image/image_upscale/image_upscale.py +3 -3
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +21 -23
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -22
- intentkit/skills/venice_image/image_vision/image_vision.py +2 -2
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -17
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -9
- intentkit/skills/venice_image/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/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 +5 -11
- intentkit/skills/wow/__init__.py +5 -11
- intentkit/skills/x402/__init__.py +61 -0
- intentkit/skills/x402/ask_agent.py +98 -0
- intentkit/skills/x402/base.py +99 -0
- intentkit/skills/x402/http_request.py +117 -0
- intentkit/skills/x402/schema.json +45 -0
- intentkit/skills/x402/x402.webp +0 -0
- intentkit/skills/xmtp/__init__.py +4 -15
- intentkit/skills/xmtp/base.py +5 -5
- intentkit/skills/xmtp/price.py +6 -6
- intentkit/skills/xmtp/swap.py +6 -8
- 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 +100 -0
- intentkit/utils/slack_alert.py +7 -8
- {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/METADATA +3 -4
- intentkit-0.8.17.dist-info/RECORD +466 -0
- intentkit/models/generator.py +0 -347
- intentkit-0.8.6.dev2.dist-info/RECORD +0 -457
- {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/WHEEL +0 -0
- {intentkit-0.8.6.dev2.dist-info → intentkit-0.8.17.dist-info}/licenses/LICENSE +0 -0
|
@@ -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.slack.base import SlackBaseTool
|
|
9
8
|
from intentkit.skills.slack.get_channel import SlackGetChannel
|
|
@@ -34,7 +33,6 @@ class Config(SkillConfig):
|
|
|
34
33
|
async def get_skills(
|
|
35
34
|
config: "Config",
|
|
36
35
|
is_private: bool,
|
|
37
|
-
store: SkillStoreABC,
|
|
38
36
|
**_,
|
|
39
37
|
) -> list[SlackBaseTool]:
|
|
40
38
|
"""Get all Slack skills."""
|
|
@@ -50,7 +48,7 @@ async def get_skills(
|
|
|
50
48
|
# Get each skill using the cached getter
|
|
51
49
|
result = []
|
|
52
50
|
for name in available_skills:
|
|
53
|
-
skill = get_slack_skill(name
|
|
51
|
+
skill = get_slack_skill(name)
|
|
54
52
|
if skill:
|
|
55
53
|
result.append(skill)
|
|
56
54
|
return result
|
|
@@ -58,40 +56,30 @@ async def get_skills(
|
|
|
58
56
|
|
|
59
57
|
def get_slack_skill(
|
|
60
58
|
name: str,
|
|
61
|
-
store: SkillStoreABC,
|
|
62
59
|
) -> SlackBaseTool:
|
|
63
60
|
"""Get a Slack skill by name.
|
|
64
61
|
|
|
65
62
|
Args:
|
|
66
63
|
name: The name of the skill to get
|
|
67
|
-
store: The skill store for persisting data
|
|
68
64
|
|
|
69
65
|
Returns:
|
|
70
66
|
The requested Slack skill
|
|
71
67
|
"""
|
|
72
68
|
if name == "get_channel":
|
|
73
69
|
if name not in _cache:
|
|
74
|
-
_cache[name] = SlackGetChannel(
|
|
75
|
-
skill_store=store,
|
|
76
|
-
)
|
|
70
|
+
_cache[name] = SlackGetChannel()
|
|
77
71
|
return _cache[name]
|
|
78
72
|
elif name == "get_message":
|
|
79
73
|
if name not in _cache:
|
|
80
|
-
_cache[name] = SlackGetMessage(
|
|
81
|
-
skill_store=store,
|
|
82
|
-
)
|
|
74
|
+
_cache[name] = SlackGetMessage()
|
|
83
75
|
return _cache[name]
|
|
84
76
|
elif name == "schedule_message":
|
|
85
77
|
if name not in _cache:
|
|
86
|
-
_cache[name] = SlackScheduleMessage(
|
|
87
|
-
skill_store=store,
|
|
88
|
-
)
|
|
78
|
+
_cache[name] = SlackScheduleMessage()
|
|
89
79
|
return _cache[name]
|
|
90
80
|
elif name == "send_message":
|
|
91
81
|
if name not in _cache:
|
|
92
|
-
_cache[name] = SlackSendMessage(
|
|
93
|
-
skill_store=store,
|
|
94
|
-
)
|
|
82
|
+
_cache[name] = SlackSendMessage()
|
|
95
83
|
return _cache[name]
|
|
96
84
|
else:
|
|
97
85
|
logger.warning(f"Unknown Slack skill: {name}")
|
intentkit/skills/slack/base.py
CHANGED
|
@@ -1,10 +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
|
from slack_sdk import WebClient
|
|
6
4
|
|
|
7
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
8
5
|
from intentkit.skills.base import IntentKitSkill
|
|
9
6
|
|
|
10
7
|
|
|
@@ -13,10 +10,7 @@ class SlackBaseTool(IntentKitSkill):
|
|
|
13
10
|
|
|
14
11
|
name: str = Field(description="The name of the tool")
|
|
15
12
|
description: str = Field(description="A description of what the tool does")
|
|
16
|
-
args_schema:
|
|
17
|
-
skill_store: SkillStoreABC = Field(
|
|
18
|
-
description="The skill store for persisting data"
|
|
19
|
-
)
|
|
13
|
+
args_schema: type[BaseModel]
|
|
20
14
|
|
|
21
15
|
def get_api_key(self) -> str:
|
|
22
16
|
context = self.get_context()
|
|
@@ -70,4 +64,4 @@ class SlackMessage(BaseModel):
|
|
|
70
64
|
text: str
|
|
71
65
|
user: str
|
|
72
66
|
channel: str
|
|
73
|
-
thread_ts:
|
|
67
|
+
thread_ts: str | None = None
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any
|
|
1
|
+
from typing import Any
|
|
2
2
|
|
|
3
3
|
from pydantic import BaseModel, Field
|
|
4
4
|
|
|
@@ -8,11 +8,11 @@ from intentkit.skills.slack.base import SlackBaseTool, SlackChannel
|
|
|
8
8
|
class SlackGetChannelSchema(BaseModel):
|
|
9
9
|
"""Input schema for SlackGetChannel."""
|
|
10
10
|
|
|
11
|
-
channel_id:
|
|
11
|
+
channel_id: str | None = Field(
|
|
12
12
|
None,
|
|
13
13
|
description="The ID of the channel to get information about. Provide either channel_id or channel_name.",
|
|
14
14
|
)
|
|
15
|
-
channel_name:
|
|
15
|
+
channel_name: str | None = Field(
|
|
16
16
|
None,
|
|
17
17
|
description="The name of the channel to get information about. Provide either channel_id or channel_name.",
|
|
18
18
|
)
|
|
@@ -23,14 +23,14 @@ class SlackGetChannel(SlackBaseTool):
|
|
|
23
23
|
|
|
24
24
|
name: str = "slack_get_channel"
|
|
25
25
|
description: str = "Get information about a Slack channel by ID or name"
|
|
26
|
-
args_schema:
|
|
26
|
+
args_schema: type[BaseModel] = SlackGetChannelSchema
|
|
27
27
|
|
|
28
28
|
async def _arun(
|
|
29
29
|
self,
|
|
30
|
-
channel_id:
|
|
31
|
-
channel_name:
|
|
30
|
+
channel_id: str | None = None,
|
|
31
|
+
channel_name: str | None = None,
|
|
32
32
|
**kwargs,
|
|
33
|
-
) ->
|
|
33
|
+
) -> SlackChannel | dict[str, SlackChannel]:
|
|
34
34
|
"""Run the tool to get information about a Slack channel.
|
|
35
35
|
|
|
36
36
|
Args:
|
|
@@ -88,7 +88,7 @@ class SlackGetChannel(SlackBaseTool):
|
|
|
88
88
|
except Exception as e:
|
|
89
89
|
raise Exception(f"Error getting channel information: {str(e)}")
|
|
90
90
|
|
|
91
|
-
def _format_channel(self, channel:
|
|
91
|
+
def _format_channel(self, channel: dict[str, Any]) -> SlackChannel:
|
|
92
92
|
"""Format the channel data into a SlackChannel model.
|
|
93
93
|
|
|
94
94
|
Args:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from typing import Any
|
|
1
|
+
from typing import Any
|
|
2
2
|
|
|
3
3
|
from pydantic import BaseModel, Field
|
|
4
4
|
|
|
@@ -11,15 +11,15 @@ class SlackGetMessageSchema(BaseModel):
|
|
|
11
11
|
channel_id: str = Field(
|
|
12
12
|
description="The ID of the channel containing the message",
|
|
13
13
|
)
|
|
14
|
-
ts:
|
|
14
|
+
ts: str | None = Field(
|
|
15
15
|
None,
|
|
16
16
|
description="The timestamp of a specific message to retrieve. If not provided, returns recent messages.",
|
|
17
17
|
)
|
|
18
|
-
thread_ts:
|
|
18
|
+
thread_ts: str | None = Field(
|
|
19
19
|
None,
|
|
20
20
|
description="If provided, retrieve messages from this thread instead of the channel.",
|
|
21
21
|
)
|
|
22
|
-
limit:
|
|
22
|
+
limit: int | None = Field(
|
|
23
23
|
10,
|
|
24
24
|
description="The maximum number of messages to return (1-100, default 10).",
|
|
25
25
|
)
|
|
@@ -30,16 +30,16 @@ class SlackGetMessage(SlackBaseTool):
|
|
|
30
30
|
|
|
31
31
|
name: str = "slack_get_message"
|
|
32
32
|
description: str = "Get messages from a Slack channel or thread"
|
|
33
|
-
args_schema:
|
|
33
|
+
args_schema: type[BaseModel] = SlackGetMessageSchema
|
|
34
34
|
|
|
35
35
|
async def _arun(
|
|
36
36
|
self,
|
|
37
37
|
channel_id: str,
|
|
38
|
-
ts:
|
|
39
|
-
thread_ts:
|
|
38
|
+
ts: str | None = None,
|
|
39
|
+
thread_ts: str | None = None,
|
|
40
40
|
limit: int = 10,
|
|
41
41
|
**kwargs,
|
|
42
|
-
) ->
|
|
42
|
+
) -> dict[str, Any]:
|
|
43
43
|
"""Run the tool to get Slack messages.
|
|
44
44
|
|
|
45
45
|
Args:
|
|
@@ -116,7 +116,7 @@ class SlackGetMessage(SlackBaseTool):
|
|
|
116
116
|
except Exception as e:
|
|
117
117
|
raise Exception(f"Error getting messages: {str(e)}")
|
|
118
118
|
|
|
119
|
-
def _format_message(self, message:
|
|
119
|
+
def _format_message(self, message: dict[str, Any], channel_id: str) -> SlackMessage:
|
|
120
120
|
"""Format the message data into a SlackMessage model.
|
|
121
121
|
|
|
122
122
|
Args:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from pydantic import BaseModel, Field
|
|
5
5
|
|
|
@@ -18,7 +18,7 @@ class SlackScheduleMessageSchema(BaseModel):
|
|
|
18
18
|
post_at: str = Field(
|
|
19
19
|
description="The time to send the message in ISO format (e.g., '2023-12-25T10:00:00Z')",
|
|
20
20
|
)
|
|
21
|
-
thread_ts:
|
|
21
|
+
thread_ts: str | None = Field(
|
|
22
22
|
None,
|
|
23
23
|
description="The timestamp of the thread to reply to, if sending a thread reply",
|
|
24
24
|
)
|
|
@@ -29,16 +29,16 @@ class SlackScheduleMessage(SlackBaseTool):
|
|
|
29
29
|
|
|
30
30
|
name: str = "slack_schedule_message"
|
|
31
31
|
description: str = "Schedule a message to be sent to a Slack channel or thread at a specific time, if you need current time, use skill common_current_time"
|
|
32
|
-
args_schema:
|
|
32
|
+
args_schema: type[BaseModel] = SlackScheduleMessageSchema
|
|
33
33
|
|
|
34
34
|
async def _arun(
|
|
35
35
|
self,
|
|
36
36
|
channel_id: str,
|
|
37
37
|
text: str,
|
|
38
38
|
post_at: str,
|
|
39
|
-
thread_ts:
|
|
39
|
+
thread_ts: str | None = None,
|
|
40
40
|
**kwargs,
|
|
41
|
-
) ->
|
|
41
|
+
) -> dict[str, Any]:
|
|
42
42
|
"""Run the tool to schedule a Slack message.
|
|
43
43
|
|
|
44
44
|
Args:
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Optional, Type
|
|
2
|
-
|
|
3
1
|
from pydantic import BaseModel, Field
|
|
4
2
|
|
|
5
3
|
from intentkit.skills.slack.base import SlackBaseTool, SlackMessage
|
|
@@ -14,7 +12,7 @@ class SlackSendMessageSchema(BaseModel):
|
|
|
14
12
|
text: str = Field(
|
|
15
13
|
description="The text content of the message to send",
|
|
16
14
|
)
|
|
17
|
-
thread_ts:
|
|
15
|
+
thread_ts: str | None = Field(
|
|
18
16
|
None,
|
|
19
17
|
description="The timestamp of the thread to reply to, if sending a thread reply",
|
|
20
18
|
)
|
|
@@ -25,13 +23,13 @@ class SlackSendMessage(SlackBaseTool):
|
|
|
25
23
|
|
|
26
24
|
name: str = "slack_send_message"
|
|
27
25
|
description: str = "Send a message to a Slack channel or thread"
|
|
28
|
-
args_schema:
|
|
26
|
+
args_schema: type[BaseModel] = SlackSendMessageSchema
|
|
29
27
|
|
|
30
28
|
async def _arun(
|
|
31
29
|
self,
|
|
32
30
|
channel_id: str,
|
|
33
31
|
text: str,
|
|
34
|
-
thread_ts:
|
|
32
|
+
thread_ts: str | None = None,
|
|
35
33
|
**kwargs,
|
|
36
34
|
) -> SlackMessage:
|
|
37
35
|
"""Run the tool to send a Slack message.
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import NotRequired, TypedDict
|
|
5
5
|
|
|
6
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
7
6
|
from intentkit.skills.base import SkillConfig, SkillState
|
|
8
7
|
from intentkit.skills.supabase.base import SupabaseBaseTool
|
|
9
8
|
from intentkit.skills.supabase.delete_data import SupabaseDeleteData
|
|
@@ -41,7 +40,6 @@ class Config(SkillConfig):
|
|
|
41
40
|
async def get_skills(
|
|
42
41
|
config: "Config",
|
|
43
42
|
is_private: bool,
|
|
44
|
-
store: SkillStoreABC,
|
|
45
43
|
**_,
|
|
46
44
|
) -> list[SupabaseBaseTool]:
|
|
47
45
|
"""Get all Supabase skills."""
|
|
@@ -57,7 +55,7 @@ async def get_skills(
|
|
|
57
55
|
# Get each skill using the cached getter
|
|
58
56
|
result = []
|
|
59
57
|
for name in available_skills:
|
|
60
|
-
skill = get_supabase_skill(name
|
|
58
|
+
skill = get_supabase_skill(name)
|
|
61
59
|
if skill:
|
|
62
60
|
result.append(skill)
|
|
63
61
|
return result
|
|
@@ -65,52 +63,38 @@ async def get_skills(
|
|
|
65
63
|
|
|
66
64
|
def get_supabase_skill(
|
|
67
65
|
name: str,
|
|
68
|
-
store: SkillStoreABC,
|
|
69
66
|
) -> SupabaseBaseTool:
|
|
70
67
|
"""Get a Supabase skill by name.
|
|
71
68
|
|
|
72
69
|
Args:
|
|
73
70
|
name: The name of the skill to get
|
|
74
|
-
store: The skill store for persisting data
|
|
75
71
|
|
|
76
72
|
Returns:
|
|
77
73
|
The requested Supabase skill
|
|
78
74
|
"""
|
|
79
75
|
if name == "fetch_data":
|
|
80
76
|
if name not in _cache:
|
|
81
|
-
_cache[name] = SupabaseFetchData(
|
|
82
|
-
skill_store=store,
|
|
83
|
-
)
|
|
77
|
+
_cache[name] = SupabaseFetchData()
|
|
84
78
|
return _cache[name]
|
|
85
79
|
elif name == "insert_data":
|
|
86
80
|
if name not in _cache:
|
|
87
|
-
_cache[name] = SupabaseInsertData(
|
|
88
|
-
skill_store=store,
|
|
89
|
-
)
|
|
81
|
+
_cache[name] = SupabaseInsertData()
|
|
90
82
|
return _cache[name]
|
|
91
83
|
elif name == "update_data":
|
|
92
84
|
if name not in _cache:
|
|
93
|
-
_cache[name] = SupabaseUpdateData(
|
|
94
|
-
skill_store=store,
|
|
95
|
-
)
|
|
85
|
+
_cache[name] = SupabaseUpdateData()
|
|
96
86
|
return _cache[name]
|
|
97
87
|
elif name == "upsert_data":
|
|
98
88
|
if name not in _cache:
|
|
99
|
-
_cache[name] = SupabaseUpsertData(
|
|
100
|
-
skill_store=store,
|
|
101
|
-
)
|
|
89
|
+
_cache[name] = SupabaseUpsertData()
|
|
102
90
|
return _cache[name]
|
|
103
91
|
elif name == "delete_data":
|
|
104
92
|
if name not in _cache:
|
|
105
|
-
_cache[name] = SupabaseDeleteData(
|
|
106
|
-
skill_store=store,
|
|
107
|
-
)
|
|
93
|
+
_cache[name] = SupabaseDeleteData()
|
|
108
94
|
return _cache[name]
|
|
109
95
|
elif name == "invoke_function":
|
|
110
96
|
if name not in _cache:
|
|
111
|
-
_cache[name] = SupabaseInvokeFunction(
|
|
112
|
-
skill_store=store,
|
|
113
|
-
)
|
|
97
|
+
_cache[name] = SupabaseInvokeFunction()
|
|
114
98
|
return _cache[name]
|
|
115
99
|
else:
|
|
116
100
|
logger.warning(f"Unknown Supabase skill: {name}")
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
from typing import Type
|
|
2
|
-
|
|
3
1
|
from langchain_core.tools import ToolException
|
|
4
2
|
from pydantic import BaseModel, Field
|
|
5
3
|
|
|
6
4
|
from intentkit.abstracts.graph import AgentContext
|
|
7
|
-
from intentkit.abstracts.skill import SkillStoreABC
|
|
8
5
|
from intentkit.skills.base import IntentKitSkill
|
|
9
6
|
|
|
10
7
|
|
|
@@ -13,10 +10,7 @@ class SupabaseBaseTool(IntentKitSkill):
|
|
|
13
10
|
|
|
14
11
|
name: str = Field(description="The name of the tool")
|
|
15
12
|
description: str = Field(description="A description of what the tool does")
|
|
16
|
-
args_schema:
|
|
17
|
-
skill_store: SkillStoreABC = Field(
|
|
18
|
-
description="The skill store for persisting data"
|
|
19
|
-
)
|
|
13
|
+
args_schema: type[BaseModel]
|
|
20
14
|
|
|
21
15
|
@property
|
|
22
16
|
def category(self) -> str:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from langchain_core.tools import ToolException
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
@@ -17,7 +17,7 @@ class SupabaseDeleteDataInput(BaseModel):
|
|
|
17
17
|
"""Input for SupabaseDeleteData tool."""
|
|
18
18
|
|
|
19
19
|
table: str = Field(description="The name of the table to delete data from")
|
|
20
|
-
filters:
|
|
20
|
+
filters: dict[str, Any] = Field(
|
|
21
21
|
description="Dictionary of filters to identify which records to delete (e.g., {'id': 123})"
|
|
22
22
|
)
|
|
23
23
|
returning: str = Field(
|
|
@@ -34,12 +34,12 @@ class SupabaseDeleteData(SupabaseBaseTool):
|
|
|
34
34
|
|
|
35
35
|
name: str = NAME
|
|
36
36
|
description: str = PROMPT
|
|
37
|
-
args_schema:
|
|
37
|
+
args_schema: type[BaseModel] = SupabaseDeleteDataInput
|
|
38
38
|
|
|
39
39
|
async def _arun(
|
|
40
40
|
self,
|
|
41
41
|
table: str,
|
|
42
|
-
filters:
|
|
42
|
+
filters: dict[str, Any],
|
|
43
43
|
returning: str = "*",
|
|
44
44
|
**kwargs,
|
|
45
45
|
):
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from langchain_core.tools import ToolException
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
@@ -17,22 +17,22 @@ class SupabaseFetchDataInput(BaseModel):
|
|
|
17
17
|
"""Input for SupabaseFetchData tool."""
|
|
18
18
|
|
|
19
19
|
table: str = Field(description="The name of the table to fetch data from")
|
|
20
|
-
columns:
|
|
20
|
+
columns: str | None = Field(
|
|
21
21
|
default="*",
|
|
22
22
|
description="Comma-separated list of columns to select (default: '*' for all)",
|
|
23
23
|
)
|
|
24
|
-
filters:
|
|
24
|
+
filters: dict[str, Any] | None = Field(
|
|
25
25
|
default=None,
|
|
26
26
|
description="Dictionary of filters to apply (e.g., {'column': 'value', 'age': {'gte': 18}})",
|
|
27
27
|
)
|
|
28
|
-
order_by:
|
|
28
|
+
order_by: str | None = Field(default=None, description="Column to order by")
|
|
29
29
|
ascending: bool = Field(
|
|
30
30
|
default=True, description="Whether to order in ascending order (default: True)"
|
|
31
31
|
)
|
|
32
|
-
limit:
|
|
32
|
+
limit: int | None = Field(
|
|
33
33
|
default=None, description="Maximum number of records to return"
|
|
34
34
|
)
|
|
35
|
-
offset:
|
|
35
|
+
offset: int | None = Field(
|
|
36
36
|
default=None, description="Number of records to skip for pagination"
|
|
37
37
|
)
|
|
38
38
|
|
|
@@ -45,17 +45,17 @@ class SupabaseFetchData(SupabaseBaseTool):
|
|
|
45
45
|
|
|
46
46
|
name: str = NAME
|
|
47
47
|
description: str = PROMPT
|
|
48
|
-
args_schema:
|
|
48
|
+
args_schema: type[BaseModel] = SupabaseFetchDataInput
|
|
49
49
|
|
|
50
50
|
async def _arun(
|
|
51
51
|
self,
|
|
52
52
|
table: str,
|
|
53
|
-
columns:
|
|
54
|
-
filters:
|
|
55
|
-
order_by:
|
|
53
|
+
columns: str | None = "*",
|
|
54
|
+
filters: dict[str, Any] | None = None,
|
|
55
|
+
order_by: str | None = None,
|
|
56
56
|
ascending: bool = True,
|
|
57
|
-
limit:
|
|
58
|
-
offset:
|
|
57
|
+
limit: int | None = None,
|
|
58
|
+
offset: int | None = None,
|
|
59
59
|
**kwargs,
|
|
60
60
|
):
|
|
61
61
|
try:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from langchain_core.tools import ToolException
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
@@ -17,7 +17,7 @@ class SupabaseInsertDataInput(BaseModel):
|
|
|
17
17
|
"""Input for SupabaseInsertData tool."""
|
|
18
18
|
|
|
19
19
|
table: str = Field(description="The name of the table to insert data into")
|
|
20
|
-
data:
|
|
20
|
+
data: dict[str, Any] | list[dict[str, Any]] = Field(
|
|
21
21
|
description="The data to insert. Can be a single object or a list of objects"
|
|
22
22
|
)
|
|
23
23
|
returning: str = Field(
|
|
@@ -34,12 +34,12 @@ class SupabaseInsertData(SupabaseBaseTool):
|
|
|
34
34
|
|
|
35
35
|
name: str = NAME
|
|
36
36
|
description: str = PROMPT
|
|
37
|
-
args_schema:
|
|
37
|
+
args_schema: type[BaseModel] = SupabaseInsertDataInput
|
|
38
38
|
|
|
39
39
|
async def _arun(
|
|
40
40
|
self,
|
|
41
41
|
table: str,
|
|
42
|
-
data:
|
|
42
|
+
data: dict[str, Any] | list[dict[str, Any]],
|
|
43
43
|
returning: str = "*",
|
|
44
44
|
**kwargs,
|
|
45
45
|
):
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from langchain_core.tools import ToolException
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
@@ -17,10 +17,10 @@ class SupabaseInvokeFunctionInput(BaseModel):
|
|
|
17
17
|
"""Input for SupabaseInvokeFunction tool."""
|
|
18
18
|
|
|
19
19
|
function_name: str = Field(description="The name of the Edge Function to invoke")
|
|
20
|
-
parameters:
|
|
20
|
+
parameters: dict[str, Any] | None = Field(
|
|
21
21
|
default=None, description="Optional parameters to pass to the function"
|
|
22
22
|
)
|
|
23
|
-
headers:
|
|
23
|
+
headers: dict[str, str] | None = Field(
|
|
24
24
|
default=None, description="Optional headers to include in the request"
|
|
25
25
|
)
|
|
26
26
|
|
|
@@ -33,13 +33,13 @@ class SupabaseInvokeFunction(SupabaseBaseTool):
|
|
|
33
33
|
|
|
34
34
|
name: str = NAME
|
|
35
35
|
description: str = PROMPT
|
|
36
|
-
args_schema:
|
|
36
|
+
args_schema: type[BaseModel] = SupabaseInvokeFunctionInput
|
|
37
37
|
|
|
38
38
|
async def _arun(
|
|
39
39
|
self,
|
|
40
40
|
function_name: str,
|
|
41
|
-
parameters:
|
|
42
|
-
headers:
|
|
41
|
+
parameters: dict[str, Any] | None = None,
|
|
42
|
+
headers: dict[str, str] | None = None,
|
|
43
43
|
**kwargs,
|
|
44
44
|
):
|
|
45
45
|
try:
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from langchain_core.tools import ToolException
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
@@ -17,10 +17,10 @@ class SupabaseUpdateDataInput(BaseModel):
|
|
|
17
17
|
"""Input for SupabaseUpdateData tool."""
|
|
18
18
|
|
|
19
19
|
table: str = Field(description="The name of the table to update data in")
|
|
20
|
-
data:
|
|
20
|
+
data: dict[str, Any] = Field(
|
|
21
21
|
description="The data to update (key-value pairs of columns and new values)"
|
|
22
22
|
)
|
|
23
|
-
filters:
|
|
23
|
+
filters: dict[str, Any] = Field(
|
|
24
24
|
description="Dictionary of filters to identify which records to update (e.g., {'id': 123})"
|
|
25
25
|
)
|
|
26
26
|
returning: str = Field(
|
|
@@ -36,13 +36,13 @@ class SupabaseUpdateData(SupabaseBaseTool):
|
|
|
36
36
|
|
|
37
37
|
name: str = NAME
|
|
38
38
|
description: str = PROMPT
|
|
39
|
-
args_schema:
|
|
39
|
+
args_schema: type[BaseModel] = SupabaseUpdateDataInput
|
|
40
40
|
|
|
41
41
|
async def _arun(
|
|
42
42
|
self,
|
|
43
43
|
table: str,
|
|
44
|
-
data:
|
|
45
|
-
filters:
|
|
44
|
+
data: dict[str, Any],
|
|
45
|
+
filters: dict[str, Any],
|
|
46
46
|
returning: str = "*",
|
|
47
47
|
**kwargs,
|
|
48
48
|
):
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
from langchain_core.tools import ToolException
|
|
5
5
|
from pydantic import BaseModel, Field
|
|
@@ -19,7 +19,7 @@ class SupabaseUpsertDataInput(BaseModel):
|
|
|
19
19
|
"""Input for SupabaseUpsertData tool."""
|
|
20
20
|
|
|
21
21
|
table: str = Field(description="The name of the table to upsert data into")
|
|
22
|
-
data:
|
|
22
|
+
data: dict[str, Any] | list[dict[str, Any]] = Field(
|
|
23
23
|
description="The data to upsert. Can be a single object or a list of objects"
|
|
24
24
|
)
|
|
25
25
|
on_conflict: str = Field(
|
|
@@ -38,12 +38,12 @@ class SupabaseUpsertData(SupabaseBaseTool):
|
|
|
38
38
|
|
|
39
39
|
name: str = NAME
|
|
40
40
|
description: str = PROMPT
|
|
41
|
-
args_schema:
|
|
41
|
+
args_schema: type[BaseModel] = SupabaseUpsertDataInput
|
|
42
42
|
|
|
43
43
|
async def _arun(
|
|
44
44
|
self,
|
|
45
45
|
table: str,
|
|
46
|
-
data:
|
|
46
|
+
data: dict[str, Any] | list[dict[str, Any]],
|
|
47
47
|
on_conflict: str,
|
|
48
48
|
returning: str = "*",
|
|
49
49
|
**kwargs,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"""Superfluid AgentKit skills."""
|
|
2
2
|
|
|
3
|
-
from typing import
|
|
3
|
+
from typing import TypedDict
|
|
4
4
|
|
|
5
5
|
from coinbase_agentkit import superfluid_action_provider
|
|
6
6
|
|
|
7
|
-
from intentkit.
|
|
7
|
+
from intentkit.models.agent import Agent
|
|
8
8
|
from intentkit.skills.base import (
|
|
9
9
|
SkillConfig,
|
|
10
10
|
SkillState,
|
|
@@ -13,9 +13,6 @@ from intentkit.skills.base import (
|
|
|
13
13
|
)
|
|
14
14
|
from intentkit.skills.superfluid.base import SuperfluidBaseTool
|
|
15
15
|
|
|
16
|
-
if TYPE_CHECKING:
|
|
17
|
-
from intentkit.models.agent import Agent
|
|
18
|
-
|
|
19
16
|
|
|
20
17
|
class SkillStates(TypedDict):
|
|
21
18
|
SuperfluidActionProvider_create_flow: SkillState
|
|
@@ -30,11 +27,10 @@ class Config(SkillConfig):
|
|
|
30
27
|
|
|
31
28
|
|
|
32
29
|
async def get_skills(
|
|
33
|
-
config:
|
|
30
|
+
config: Config,
|
|
34
31
|
is_private: bool,
|
|
35
|
-
store: SkillStoreABC,
|
|
36
32
|
agent_id: str,
|
|
37
|
-
agent:
|
|
33
|
+
agent: Agent | None = None,
|
|
38
34
|
**_,
|
|
39
35
|
) -> list[SuperfluidBaseTool]:
|
|
40
36
|
"""Get all Superfluid skills."""
|
|
@@ -47,7 +43,7 @@ async def get_skills(
|
|
|
47
43
|
available_skills.append(skill_name)
|
|
48
44
|
|
|
49
45
|
actions = await get_agentkit_actions(
|
|
50
|
-
agent_id,
|
|
46
|
+
agent_id, [superfluid_action_provider], agent=agent
|
|
51
47
|
)
|
|
52
48
|
tools: list[SuperfluidBaseTool] = []
|
|
53
49
|
for skill in available_skills:
|