intentkit 0.5.0__py3-none-any.whl → 0.5.2__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 +17 -0
- intentkit/abstracts/__init__.py +0 -0
- intentkit/abstracts/agent.py +60 -0
- intentkit/abstracts/api.py +4 -0
- intentkit/abstracts/engine.py +38 -0
- intentkit/abstracts/exception.py +9 -0
- intentkit/abstracts/graph.py +25 -0
- intentkit/abstracts/skill.py +129 -0
- intentkit/abstracts/twitter.py +54 -0
- intentkit/clients/__init__.py +14 -0
- intentkit/clients/cdp.py +53 -0
- intentkit/clients/twitter.py +445 -0
- intentkit/config/__init__.py +0 -0
- intentkit/config/config.py +164 -0
- intentkit/core/__init__.py +0 -0
- intentkit/core/agent.py +191 -0
- intentkit/core/api.py +40 -0
- intentkit/core/client.py +45 -0
- intentkit/core/credit.py +1767 -0
- intentkit/core/engine.py +1018 -0
- intentkit/core/node.py +223 -0
- intentkit/core/prompt.py +58 -0
- intentkit/core/skill.py +124 -0
- intentkit/models/agent.py +1689 -0
- intentkit/models/agent_data.py +810 -0
- intentkit/models/agent_schema.json +733 -0
- intentkit/models/app_setting.py +156 -0
- intentkit/models/base.py +9 -0
- intentkit/models/chat.py +581 -0
- intentkit/models/conversation.py +286 -0
- intentkit/models/credit.py +1406 -0
- intentkit/models/db.py +120 -0
- intentkit/models/db_mig.py +102 -0
- intentkit/models/generator.py +347 -0
- intentkit/models/llm.py +746 -0
- intentkit/models/redis.py +132 -0
- intentkit/models/skill.py +466 -0
- intentkit/models/user.py +243 -0
- intentkit/skills/__init__.py +12 -0
- intentkit/skills/acolyt/__init__.py +83 -0
- intentkit/skills/acolyt/acolyt.jpg +0 -0
- intentkit/skills/acolyt/ask.py +128 -0
- intentkit/skills/acolyt/base.py +28 -0
- intentkit/skills/acolyt/schema.json +89 -0
- intentkit/skills/aixbt/README.md +71 -0
- intentkit/skills/aixbt/__init__.py +73 -0
- intentkit/skills/aixbt/aixbt.jpg +0 -0
- intentkit/skills/aixbt/base.py +21 -0
- intentkit/skills/aixbt/projects.py +153 -0
- intentkit/skills/aixbt/schema.json +99 -0
- intentkit/skills/allora/__init__.py +83 -0
- intentkit/skills/allora/allora.jpeg +0 -0
- intentkit/skills/allora/base.py +28 -0
- intentkit/skills/allora/price.py +130 -0
- intentkit/skills/allora/schema.json +89 -0
- intentkit/skills/base.py +174 -0
- intentkit/skills/carv/README.md +95 -0
- intentkit/skills/carv/__init__.py +121 -0
- intentkit/skills/carv/base.py +183 -0
- intentkit/skills/carv/carv.webp +0 -0
- intentkit/skills/carv/fetch_news.py +92 -0
- intentkit/skills/carv/onchain_query.py +164 -0
- intentkit/skills/carv/schema.json +137 -0
- intentkit/skills/carv/token_info_and_price.py +110 -0
- intentkit/skills/cdp/__init__.py +137 -0
- intentkit/skills/cdp/base.py +21 -0
- intentkit/skills/cdp/cdp.png +0 -0
- intentkit/skills/cdp/get_balance.py +81 -0
- intentkit/skills/cdp/schema.json +473 -0
- intentkit/skills/chainlist/README.md +38 -0
- intentkit/skills/chainlist/__init__.py +54 -0
- intentkit/skills/chainlist/base.py +21 -0
- intentkit/skills/chainlist/chain_lookup.py +208 -0
- intentkit/skills/chainlist/chainlist.png +0 -0
- intentkit/skills/chainlist/schema.json +47 -0
- intentkit/skills/common/__init__.py +82 -0
- intentkit/skills/common/base.py +21 -0
- intentkit/skills/common/common.jpg +0 -0
- intentkit/skills/common/current_time.py +84 -0
- intentkit/skills/common/schema.json +57 -0
- intentkit/skills/cookiefun/README.md +121 -0
- intentkit/skills/cookiefun/__init__.py +78 -0
- intentkit/skills/cookiefun/base.py +41 -0
- intentkit/skills/cookiefun/constants.py +18 -0
- intentkit/skills/cookiefun/cookiefun.png +0 -0
- intentkit/skills/cookiefun/get_account_details.py +171 -0
- intentkit/skills/cookiefun/get_account_feed.py +282 -0
- intentkit/skills/cookiefun/get_account_smart_followers.py +181 -0
- intentkit/skills/cookiefun/get_sectors.py +128 -0
- intentkit/skills/cookiefun/schema.json +155 -0
- intentkit/skills/cookiefun/search_accounts.py +225 -0
- intentkit/skills/cryptocompare/__init__.py +130 -0
- intentkit/skills/cryptocompare/api.py +159 -0
- intentkit/skills/cryptocompare/base.py +303 -0
- intentkit/skills/cryptocompare/cryptocompare.png +0 -0
- intentkit/skills/cryptocompare/fetch_news.py +96 -0
- intentkit/skills/cryptocompare/fetch_price.py +99 -0
- intentkit/skills/cryptocompare/fetch_top_exchanges.py +113 -0
- intentkit/skills/cryptocompare/fetch_top_market_cap.py +109 -0
- intentkit/skills/cryptocompare/fetch_top_volume.py +108 -0
- intentkit/skills/cryptocompare/fetch_trading_signals.py +107 -0
- intentkit/skills/cryptocompare/schema.json +168 -0
- intentkit/skills/cryptopanic/__init__.py +108 -0
- intentkit/skills/cryptopanic/base.py +51 -0
- intentkit/skills/cryptopanic/cryptopanic.png +0 -0
- intentkit/skills/cryptopanic/fetch_crypto_news.py +153 -0
- intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +136 -0
- intentkit/skills/cryptopanic/schema.json +103 -0
- intentkit/skills/dapplooker/README.md +92 -0
- intentkit/skills/dapplooker/__init__.py +83 -0
- intentkit/skills/dapplooker/base.py +26 -0
- intentkit/skills/dapplooker/dapplooker.jpg +0 -0
- intentkit/skills/dapplooker/dapplooker_token_data.py +476 -0
- intentkit/skills/dapplooker/schema.json +91 -0
- intentkit/skills/defillama/__init__.py +323 -0
- intentkit/skills/defillama/api.py +315 -0
- intentkit/skills/defillama/base.py +135 -0
- intentkit/skills/defillama/coins/__init__.py +0 -0
- intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +116 -0
- intentkit/skills/defillama/coins/fetch_block.py +98 -0
- intentkit/skills/defillama/coins/fetch_current_prices.py +105 -0
- intentkit/skills/defillama/coins/fetch_first_price.py +100 -0
- intentkit/skills/defillama/coins/fetch_historical_prices.py +110 -0
- intentkit/skills/defillama/coins/fetch_price_chart.py +109 -0
- intentkit/skills/defillama/coins/fetch_price_percentage.py +93 -0
- intentkit/skills/defillama/config/__init__.py +0 -0
- intentkit/skills/defillama/config/chains.py +433 -0
- intentkit/skills/defillama/defillama.jpeg +0 -0
- intentkit/skills/defillama/fees/__init__.py +0 -0
- intentkit/skills/defillama/fees/fetch_fees_overview.py +130 -0
- intentkit/skills/defillama/schema.json +383 -0
- intentkit/skills/defillama/stablecoins/__init__.py +0 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +100 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +129 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +83 -0
- intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +126 -0
- intentkit/skills/defillama/tests/__init__.py +0 -0
- intentkit/skills/defillama/tests/api_integration.test.py +192 -0
- intentkit/skills/defillama/tests/api_unit.test.py +583 -0
- intentkit/skills/defillama/tvl/__init__.py +0 -0
- intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +106 -0
- intentkit/skills/defillama/tvl/fetch_chains.py +107 -0
- intentkit/skills/defillama/tvl/fetch_historical_tvl.py +91 -0
- intentkit/skills/defillama/tvl/fetch_protocol.py +207 -0
- intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +93 -0
- intentkit/skills/defillama/tvl/fetch_protocols.py +196 -0
- intentkit/skills/defillama/volumes/__init__.py +0 -0
- intentkit/skills/defillama/volumes/fetch_dex_overview.py +157 -0
- intentkit/skills/defillama/volumes/fetch_dex_summary.py +123 -0
- intentkit/skills/defillama/volumes/fetch_options_overview.py +131 -0
- intentkit/skills/defillama/yields/__init__.py +0 -0
- intentkit/skills/defillama/yields/fetch_pool_chart.py +100 -0
- intentkit/skills/defillama/yields/fetch_pools.py +126 -0
- intentkit/skills/dexscreener/__init__.py +93 -0
- intentkit/skills/dexscreener/base.py +133 -0
- intentkit/skills/dexscreener/dexscreener.png +0 -0
- intentkit/skills/dexscreener/model/__init__.py +0 -0
- intentkit/skills/dexscreener/model/search_token_response.py +82 -0
- intentkit/skills/dexscreener/schema.json +48 -0
- intentkit/skills/dexscreener/search_token.py +321 -0
- intentkit/skills/dune_analytics/__init__.py +103 -0
- intentkit/skills/dune_analytics/base.py +46 -0
- intentkit/skills/dune_analytics/dune.png +0 -0
- intentkit/skills/dune_analytics/fetch_kol_buys.py +128 -0
- intentkit/skills/dune_analytics/fetch_nation_metrics.py +237 -0
- intentkit/skills/dune_analytics/schema.json +99 -0
- intentkit/skills/elfa/README.md +100 -0
- intentkit/skills/elfa/__init__.py +123 -0
- intentkit/skills/elfa/base.py +28 -0
- intentkit/skills/elfa/elfa.jpg +0 -0
- intentkit/skills/elfa/mention.py +504 -0
- intentkit/skills/elfa/schema.json +153 -0
- intentkit/skills/elfa/stats.py +118 -0
- intentkit/skills/elfa/tokens.py +126 -0
- intentkit/skills/enso/README.md +75 -0
- intentkit/skills/enso/__init__.py +114 -0
- intentkit/skills/enso/abi/__init__.py +0 -0
- intentkit/skills/enso/abi/approval.py +279 -0
- intentkit/skills/enso/abi/erc20.py +14 -0
- intentkit/skills/enso/abi/route.py +129 -0
- intentkit/skills/enso/base.py +44 -0
- intentkit/skills/enso/best_yield.py +286 -0
- intentkit/skills/enso/enso.jpg +0 -0
- intentkit/skills/enso/networks.py +105 -0
- intentkit/skills/enso/prices.py +93 -0
- intentkit/skills/enso/route.py +300 -0
- intentkit/skills/enso/schema.json +212 -0
- intentkit/skills/enso/tokens.py +223 -0
- intentkit/skills/enso/wallet.py +381 -0
- intentkit/skills/github/README.md +63 -0
- intentkit/skills/github/__init__.py +54 -0
- intentkit/skills/github/base.py +21 -0
- intentkit/skills/github/github.jpg +0 -0
- intentkit/skills/github/github_search.py +183 -0
- intentkit/skills/github/schema.json +59 -0
- intentkit/skills/heurist/__init__.py +143 -0
- intentkit/skills/heurist/base.py +26 -0
- intentkit/skills/heurist/heurist.png +0 -0
- intentkit/skills/heurist/image_generation_animagine_xl.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_comics.py +162 -0
- intentkit/skills/heurist/image_generation_arthemy_real.py +162 -0
- intentkit/skills/heurist/image_generation_braindance.py +162 -0
- intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +162 -0
- intentkit/skills/heurist/image_generation_flux_1_dev.py +162 -0
- intentkit/skills/heurist/image_generation_sdxl.py +161 -0
- intentkit/skills/heurist/schema.json +196 -0
- intentkit/skills/lifi/README.md +294 -0
- intentkit/skills/lifi/__init__.py +141 -0
- intentkit/skills/lifi/base.py +21 -0
- intentkit/skills/lifi/lifi.png +0 -0
- intentkit/skills/lifi/schema.json +89 -0
- intentkit/skills/lifi/token_execute.py +472 -0
- intentkit/skills/lifi/token_quote.py +190 -0
- intentkit/skills/lifi/utils.py +656 -0
- intentkit/skills/moralis/README.md +490 -0
- intentkit/skills/moralis/__init__.py +110 -0
- intentkit/skills/moralis/api.py +281 -0
- intentkit/skills/moralis/base.py +55 -0
- intentkit/skills/moralis/fetch_chain_portfolio.py +191 -0
- intentkit/skills/moralis/fetch_nft_portfolio.py +284 -0
- intentkit/skills/moralis/fetch_solana_portfolio.py +331 -0
- intentkit/skills/moralis/fetch_wallet_portfolio.py +301 -0
- intentkit/skills/moralis/moralis.png +0 -0
- intentkit/skills/moralis/schema.json +156 -0
- intentkit/skills/moralis/tests/__init__.py +0 -0
- intentkit/skills/moralis/tests/test_wallet.py +511 -0
- intentkit/skills/nation/__init__.py +62 -0
- intentkit/skills/nation/base.py +31 -0
- intentkit/skills/nation/nation.png +0 -0
- intentkit/skills/nation/nft_check.py +106 -0
- intentkit/skills/nation/schema.json +58 -0
- intentkit/skills/openai/__init__.py +107 -0
- intentkit/skills/openai/base.py +32 -0
- intentkit/skills/openai/dalle_image_generation.py +128 -0
- intentkit/skills/openai/gpt_image_generation.py +152 -0
- intentkit/skills/openai/gpt_image_to_image.py +186 -0
- intentkit/skills/openai/image_to_text.py +126 -0
- intentkit/skills/openai/openai.png +0 -0
- intentkit/skills/openai/schema.json +139 -0
- intentkit/skills/portfolio/README.md +55 -0
- intentkit/skills/portfolio/__init__.py +151 -0
- intentkit/skills/portfolio/base.py +107 -0
- intentkit/skills/portfolio/constants.py +9 -0
- intentkit/skills/portfolio/moralis.png +0 -0
- intentkit/skills/portfolio/schema.json +237 -0
- intentkit/skills/portfolio/token_balances.py +155 -0
- intentkit/skills/portfolio/wallet_approvals.py +102 -0
- intentkit/skills/portfolio/wallet_defi_positions.py +80 -0
- intentkit/skills/portfolio/wallet_history.py +155 -0
- intentkit/skills/portfolio/wallet_net_worth.py +112 -0
- intentkit/skills/portfolio/wallet_nfts.py +139 -0
- intentkit/skills/portfolio/wallet_profitability.py +101 -0
- intentkit/skills/portfolio/wallet_profitability_summary.py +91 -0
- intentkit/skills/portfolio/wallet_stats.py +79 -0
- intentkit/skills/portfolio/wallet_swaps.py +147 -0
- intentkit/skills/skills.toml +103 -0
- intentkit/skills/slack/__init__.py +98 -0
- intentkit/skills/slack/base.py +55 -0
- intentkit/skills/slack/get_channel.py +109 -0
- intentkit/skills/slack/get_message.py +136 -0
- intentkit/skills/slack/schedule_message.py +92 -0
- intentkit/skills/slack/schema.json +135 -0
- intentkit/skills/slack/send_message.py +81 -0
- intentkit/skills/slack/slack.jpg +0 -0
- intentkit/skills/system/__init__.py +90 -0
- intentkit/skills/system/base.py +22 -0
- intentkit/skills/system/read_agent_api_key.py +87 -0
- intentkit/skills/system/regenerate_agent_api_key.py +77 -0
- intentkit/skills/system/schema.json +53 -0
- intentkit/skills/system/system.svg +76 -0
- intentkit/skills/tavily/README.md +86 -0
- intentkit/skills/tavily/__init__.py +91 -0
- intentkit/skills/tavily/base.py +27 -0
- intentkit/skills/tavily/schema.json +119 -0
- intentkit/skills/tavily/tavily.jpg +0 -0
- intentkit/skills/tavily/tavily_extract.py +147 -0
- intentkit/skills/tavily/tavily_search.py +139 -0
- intentkit/skills/token/README.md +89 -0
- intentkit/skills/token/__init__.py +107 -0
- intentkit/skills/token/base.py +154 -0
- intentkit/skills/token/constants.py +9 -0
- intentkit/skills/token/erc20_transfers.py +145 -0
- intentkit/skills/token/moralis.png +0 -0
- intentkit/skills/token/schema.json +141 -0
- intentkit/skills/token/token_analytics.py +81 -0
- intentkit/skills/token/token_price.py +132 -0
- intentkit/skills/token/token_search.py +121 -0
- intentkit/skills/twitter/__init__.py +146 -0
- intentkit/skills/twitter/base.py +68 -0
- intentkit/skills/twitter/follow_user.py +69 -0
- intentkit/skills/twitter/get_mentions.py +124 -0
- intentkit/skills/twitter/get_timeline.py +111 -0
- intentkit/skills/twitter/get_user_by_username.py +84 -0
- intentkit/skills/twitter/get_user_tweets.py +123 -0
- intentkit/skills/twitter/like_tweet.py +65 -0
- intentkit/skills/twitter/post_tweet.py +90 -0
- intentkit/skills/twitter/reply_tweet.py +98 -0
- intentkit/skills/twitter/retweet.py +76 -0
- intentkit/skills/twitter/schema.json +258 -0
- intentkit/skills/twitter/search_tweets.py +115 -0
- intentkit/skills/twitter/twitter.png +0 -0
- intentkit/skills/unrealspeech/__init__.py +55 -0
- intentkit/skills/unrealspeech/base.py +21 -0
- intentkit/skills/unrealspeech/schema.json +100 -0
- intentkit/skills/unrealspeech/text_to_speech.py +177 -0
- intentkit/skills/unrealspeech/unrealspeech.jpg +0 -0
- intentkit/skills/venice_audio/__init__.py +106 -0
- intentkit/skills/venice_audio/base.py +119 -0
- intentkit/skills/venice_audio/input.py +41 -0
- intentkit/skills/venice_audio/schema.json +152 -0
- intentkit/skills/venice_audio/venice_audio.py +240 -0
- intentkit/skills/venice_audio/venice_logo.jpg +0 -0
- intentkit/skills/venice_image/README.md +119 -0
- intentkit/skills/venice_image/__init__.py +154 -0
- intentkit/skills/venice_image/api.py +138 -0
- intentkit/skills/venice_image/base.py +188 -0
- intentkit/skills/venice_image/config.py +35 -0
- intentkit/skills/venice_image/image_enhance/README.md +119 -0
- intentkit/skills/venice_image/image_enhance/__init__.py +0 -0
- intentkit/skills/venice_image/image_enhance/image_enhance.py +80 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_base.py +23 -0
- intentkit/skills/venice_image/image_enhance/image_enhance_input.py +40 -0
- intentkit/skills/venice_image/image_generation/README.md +144 -0
- intentkit/skills/venice_image/image_generation/__init__.py +0 -0
- intentkit/skills/venice_image/image_generation/image_generation_base.py +117 -0
- intentkit/skills/venice_image/image_generation/image_generation_fluently_xl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev.py +27 -0
- intentkit/skills/venice_image/image_generation/image_generation_flux_dev_uncensored.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_input.py +158 -0
- intentkit/skills/venice_image/image_generation/image_generation_lustify_sdxl.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_pony_realism.py +26 -0
- intentkit/skills/venice_image/image_generation/image_generation_stable_diffusion_3_5.py +28 -0
- intentkit/skills/venice_image/image_generation/image_generation_venice_sd35.py +28 -0
- intentkit/skills/venice_image/image_upscale/README.md +111 -0
- intentkit/skills/venice_image/image_upscale/__init__.py +0 -0
- intentkit/skills/venice_image/image_upscale/image_upscale.py +90 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_base.py +23 -0
- intentkit/skills/venice_image/image_upscale/image_upscale_input.py +22 -0
- intentkit/skills/venice_image/image_vision/README.md +112 -0
- intentkit/skills/venice_image/image_vision/__init__.py +0 -0
- intentkit/skills/venice_image/image_vision/image_vision.py +100 -0
- intentkit/skills/venice_image/image_vision/image_vision_base.py +17 -0
- intentkit/skills/venice_image/image_vision/image_vision_input.py +9 -0
- intentkit/skills/venice_image/schema.json +267 -0
- intentkit/skills/venice_image/utils.py +78 -0
- intentkit/skills/venice_image/venice_image.jpg +0 -0
- intentkit/skills/web_scraper/README.md +82 -0
- intentkit/skills/web_scraper/__init__.py +92 -0
- intentkit/skills/web_scraper/base.py +21 -0
- intentkit/skills/web_scraper/langchain.png +0 -0
- intentkit/skills/web_scraper/schema.json +115 -0
- intentkit/skills/web_scraper/scrape_and_index.py +327 -0
- intentkit/utils/__init__.py +1 -0
- intentkit/utils/chain.py +436 -0
- intentkit/utils/error.py +134 -0
- intentkit/utils/logging.py +70 -0
- intentkit/utils/middleware.py +61 -0
- intentkit/utils/random.py +16 -0
- intentkit/utils/s3.py +267 -0
- intentkit/utils/slack_alert.py +79 -0
- intentkit/utils/tx.py +37 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/METADATA +1 -1
- intentkit-0.5.2.dist-info/RECORD +365 -0
- intentkit-0.5.0.dist-info/RECORD +0 -4
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/WHEEL +0 -0
- {intentkit-0.5.0.dist-info → intentkit-0.5.2.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Type
|
|
3
|
+
|
|
4
|
+
from langchain_core.runnables import RunnableConfig
|
|
5
|
+
from langchain_core.tools import ToolException
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from intentkit.clients import get_twitter_client
|
|
9
|
+
from intentkit.skills.twitter.base import TwitterBaseTool
|
|
10
|
+
|
|
11
|
+
NAME = "twitter_retweet"
|
|
12
|
+
PROMPT = "Retweet a tweet on Twitter"
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class TwitterRetweetInput(BaseModel):
|
|
18
|
+
"""Input for TwitterRetweet tool."""
|
|
19
|
+
|
|
20
|
+
tweet_id: str = Field(description="The ID of the tweet to retweet")
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TwitterRetweet(TwitterBaseTool):
|
|
24
|
+
"""Tool for retweeting tweets on Twitter.
|
|
25
|
+
|
|
26
|
+
This tool uses the Twitter API v2 to retweet tweets on Twitter.
|
|
27
|
+
|
|
28
|
+
Attributes:
|
|
29
|
+
name: The name of the tool.
|
|
30
|
+
description: A description of what the tool does.
|
|
31
|
+
args_schema: The schema for the tool's input arguments.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
name: str = NAME
|
|
35
|
+
description: str = PROMPT
|
|
36
|
+
args_schema: Type[BaseModel] = TwitterRetweetInput
|
|
37
|
+
|
|
38
|
+
async def _arun(self, tweet_id: str, config: RunnableConfig, **kwargs):
|
|
39
|
+
try:
|
|
40
|
+
context = self.context_from_config(config)
|
|
41
|
+
twitter = get_twitter_client(
|
|
42
|
+
agent_id=context.agent.id,
|
|
43
|
+
skill_store=self.skill_store,
|
|
44
|
+
config=context.config,
|
|
45
|
+
)
|
|
46
|
+
client = await twitter.get_client()
|
|
47
|
+
|
|
48
|
+
# Check rate limit only when not using OAuth
|
|
49
|
+
if not twitter.use_key:
|
|
50
|
+
await self.check_rate_limit(
|
|
51
|
+
context.agent.id, max_requests=5, interval=15
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# Get authenticated user's ID
|
|
55
|
+
user_id = twitter.self_id
|
|
56
|
+
if not user_id:
|
|
57
|
+
raise ValueError("Failed to get authenticated user ID.")
|
|
58
|
+
|
|
59
|
+
# Retweet the tweet using tweepy client
|
|
60
|
+
response = await client.retweet(
|
|
61
|
+
tweet_id=tweet_id, user_auth=twitter.use_key
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
if (
|
|
65
|
+
"data" in response
|
|
66
|
+
and "retweeted" in response["data"]
|
|
67
|
+
and response["data"]["retweeted"]
|
|
68
|
+
):
|
|
69
|
+
return response
|
|
70
|
+
else:
|
|
71
|
+
logger.error(f"Error retweeting: {str(response)}")
|
|
72
|
+
raise ToolException("Failed to retweet.")
|
|
73
|
+
|
|
74
|
+
except Exception as e:
|
|
75
|
+
logger.error(f"Error retweeting: {str(e)}")
|
|
76
|
+
raise type(e)(f"[agent:{context.agent.id}]: {e}") from e
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"title": "X",
|
|
5
|
+
"description": "Integration with X API enabling social media interactions including retrieving posts, mentions, user information, and posting content with media support",
|
|
6
|
+
"x-icon": "https://ai.service.crestal.dev/skills/twitter/twitter.png",
|
|
7
|
+
"x-tags": [
|
|
8
|
+
"Social"
|
|
9
|
+
],
|
|
10
|
+
"properties": {
|
|
11
|
+
"enabled": {
|
|
12
|
+
"type": "boolean",
|
|
13
|
+
"title": "Enabled",
|
|
14
|
+
"description": "Whether this skill is enabled",
|
|
15
|
+
"default": false
|
|
16
|
+
},
|
|
17
|
+
"states": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"properties": {
|
|
20
|
+
"get_mentions": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"title": "Get Mentions",
|
|
23
|
+
"enum": [
|
|
24
|
+
"disabled",
|
|
25
|
+
"public",
|
|
26
|
+
"private"
|
|
27
|
+
],
|
|
28
|
+
"x-enum-title": [
|
|
29
|
+
"Disabled",
|
|
30
|
+
"Agent Owner + All Users",
|
|
31
|
+
"Agent Owner Only"
|
|
32
|
+
],
|
|
33
|
+
"description": "Retrieves posts that mention the authenticated user from the past 24 hours.",
|
|
34
|
+
"default": "disabled"
|
|
35
|
+
},
|
|
36
|
+
"post_tweet": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"title": "Create a Post",
|
|
39
|
+
"enum": [
|
|
40
|
+
"disabled",
|
|
41
|
+
"public",
|
|
42
|
+
"private"
|
|
43
|
+
],
|
|
44
|
+
"x-enum-title": [
|
|
45
|
+
"Disabled",
|
|
46
|
+
"Agent Owner + All Users",
|
|
47
|
+
"Agent Owner Only"
|
|
48
|
+
],
|
|
49
|
+
"description": "Publishes posts with media attachments, and content moderation checks",
|
|
50
|
+
"default": "disabled"
|
|
51
|
+
},
|
|
52
|
+
"reply_tweet": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"title": "Reply to a Post",
|
|
55
|
+
"enum": [
|
|
56
|
+
"disabled",
|
|
57
|
+
"public",
|
|
58
|
+
"private"
|
|
59
|
+
],
|
|
60
|
+
"x-enum-title": [
|
|
61
|
+
"Disabled",
|
|
62
|
+
"Agent Owner + All Users",
|
|
63
|
+
"Agent Owner Only"
|
|
64
|
+
],
|
|
65
|
+
"description": "Constructs contextual replies to posts with mention handling and conversation threading",
|
|
66
|
+
"default": "disabled"
|
|
67
|
+
},
|
|
68
|
+
"get_timeline": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"title": "Get Timeline",
|
|
71
|
+
"enum": [
|
|
72
|
+
"disabled",
|
|
73
|
+
"public",
|
|
74
|
+
"private"
|
|
75
|
+
],
|
|
76
|
+
"x-enum-title": [
|
|
77
|
+
"Disabled",
|
|
78
|
+
"Agent Owner + All Users",
|
|
79
|
+
"Agent Owner Only"
|
|
80
|
+
],
|
|
81
|
+
"description": "Fetches user's home timeline with recent posts.",
|
|
82
|
+
"default": "disabled"
|
|
83
|
+
},
|
|
84
|
+
"follow_user": {
|
|
85
|
+
"type": "string",
|
|
86
|
+
"title": "Follow User",
|
|
87
|
+
"enum": [
|
|
88
|
+
"disabled",
|
|
89
|
+
"public",
|
|
90
|
+
"private"
|
|
91
|
+
],
|
|
92
|
+
"x-enum-title": [
|
|
93
|
+
"Disabled",
|
|
94
|
+
"Agent Owner + All Users",
|
|
95
|
+
"Agent Owner Only"
|
|
96
|
+
],
|
|
97
|
+
"description": "Initiates following of X accounts with rate limit handling and anti-spam safeguards",
|
|
98
|
+
"default": "disabled"
|
|
99
|
+
},
|
|
100
|
+
"like_tweet": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"title": "Like a Post",
|
|
103
|
+
"enum": [
|
|
104
|
+
"disabled",
|
|
105
|
+
"public",
|
|
106
|
+
"private"
|
|
107
|
+
],
|
|
108
|
+
"x-enum-title": [
|
|
109
|
+
"Disabled",
|
|
110
|
+
"Agent Owner + All Users",
|
|
111
|
+
"Agent Owner Only"
|
|
112
|
+
],
|
|
113
|
+
"description": "Likes a post",
|
|
114
|
+
"default": "disabled"
|
|
115
|
+
},
|
|
116
|
+
"retweet": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"title": "Repost a Post",
|
|
119
|
+
"enum": [
|
|
120
|
+
"disabled",
|
|
121
|
+
"public",
|
|
122
|
+
"private"
|
|
123
|
+
],
|
|
124
|
+
"x-enum-title": [
|
|
125
|
+
"Disabled",
|
|
126
|
+
"Agent Owner + All Users",
|
|
127
|
+
"Agent Owner Only"
|
|
128
|
+
],
|
|
129
|
+
"description": "Shares posts with attribution tracking and duplicate prevention mechanisms",
|
|
130
|
+
"default": "disabled"
|
|
131
|
+
},
|
|
132
|
+
"search_tweets": {
|
|
133
|
+
"type": "string",
|
|
134
|
+
"title": "Search Posts",
|
|
135
|
+
"enum": [
|
|
136
|
+
"disabled",
|
|
137
|
+
"public",
|
|
138
|
+
"private"
|
|
139
|
+
],
|
|
140
|
+
"x-enum-title": [
|
|
141
|
+
"Disabled",
|
|
142
|
+
"Agent Owner + All Users",
|
|
143
|
+
"Agent Owner Only"
|
|
144
|
+
],
|
|
145
|
+
"description": "Executes advanced X searches with keyword filters, date ranges, and engagement thresholds",
|
|
146
|
+
"default": "disabled"
|
|
147
|
+
},
|
|
148
|
+
"get_user_by_username": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"title": "Get User by Username",
|
|
151
|
+
"enum": [
|
|
152
|
+
"disabled",
|
|
153
|
+
"public",
|
|
154
|
+
"private"
|
|
155
|
+
],
|
|
156
|
+
"x-enum-title": [
|
|
157
|
+
"Disabled",
|
|
158
|
+
"Agent Owner + All Users",
|
|
159
|
+
"Agent Owner Only"
|
|
160
|
+
],
|
|
161
|
+
"description": "Retrieves user information by username.",
|
|
162
|
+
"default": "disabled"
|
|
163
|
+
},
|
|
164
|
+
"get_user_tweets": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"title": "Get User Tweets",
|
|
167
|
+
"enum": [
|
|
168
|
+
"disabled",
|
|
169
|
+
"public",
|
|
170
|
+
"private"
|
|
171
|
+
],
|
|
172
|
+
"x-enum-title": [
|
|
173
|
+
"Disabled",
|
|
174
|
+
"Agent Owner + All Users",
|
|
175
|
+
"Agent Owner Only"
|
|
176
|
+
],
|
|
177
|
+
"description": "Retrieves tweets from a specific user by their user ID.",
|
|
178
|
+
"default": "disabled"
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
"description": "States for each X skill"
|
|
182
|
+
},
|
|
183
|
+
"api_key_provider": {
|
|
184
|
+
"type": "string",
|
|
185
|
+
"title": "API Key Provider",
|
|
186
|
+
"description": "Who provides the API key",
|
|
187
|
+
"enum": [
|
|
188
|
+
"platform",
|
|
189
|
+
"agent_owner"
|
|
190
|
+
],
|
|
191
|
+
"x-enum-title": [
|
|
192
|
+
"Nation Hosted",
|
|
193
|
+
"Owner Provided"
|
|
194
|
+
],
|
|
195
|
+
"default": "platform"
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"required": [
|
|
199
|
+
"states",
|
|
200
|
+
"enabled"
|
|
201
|
+
],
|
|
202
|
+
"if": {
|
|
203
|
+
"properties": {
|
|
204
|
+
"api_key_provider": {
|
|
205
|
+
"const": "agent_owner"
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
"then": {
|
|
210
|
+
"properties": {
|
|
211
|
+
"consumer_key": {
|
|
212
|
+
"type": "string",
|
|
213
|
+
"title": "X API consumer key",
|
|
214
|
+
"description": "X API consumer key",
|
|
215
|
+
"x-link": "[Get your API key](https://developer.x.com/)",
|
|
216
|
+
"x-sensitive": true,
|
|
217
|
+
"maxLength": 100
|
|
218
|
+
},
|
|
219
|
+
"consumer_secret": {
|
|
220
|
+
"type": "string",
|
|
221
|
+
"title": "X API consumer secret",
|
|
222
|
+
"description": "X API consumer secret",
|
|
223
|
+
"x-sensitive": true,
|
|
224
|
+
"maxLength": 100
|
|
225
|
+
},
|
|
226
|
+
"access_token": {
|
|
227
|
+
"type": "string",
|
|
228
|
+
"title": "X API access token",
|
|
229
|
+
"description": "X API access token",
|
|
230
|
+
"x-sensitive": true,
|
|
231
|
+
"maxLength": 100
|
|
232
|
+
},
|
|
233
|
+
"access_token_secret": {
|
|
234
|
+
"type": "string",
|
|
235
|
+
"title": "X API access token secret",
|
|
236
|
+
"description": "X API access token secret",
|
|
237
|
+
"x-sensitive": true,
|
|
238
|
+
"maxLength": 100
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
"if": {
|
|
242
|
+
"properties": {
|
|
243
|
+
"enabled": {
|
|
244
|
+
"const": true
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
"then": {
|
|
249
|
+
"required": [
|
|
250
|
+
"consumer_key",
|
|
251
|
+
"consumer_secret",
|
|
252
|
+
"access_token",
|
|
253
|
+
"access_token_secret"
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"additionalProperties": true
|
|
258
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import datetime
|
|
2
|
+
import logging
|
|
3
|
+
from typing import Type
|
|
4
|
+
|
|
5
|
+
from langchain_core.runnables import RunnableConfig
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
from intentkit.clients import get_twitter_client
|
|
9
|
+
|
|
10
|
+
from .base import TwitterBaseTool
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
NAME = "twitter_search_tweets"
|
|
15
|
+
PROMPT = "Search for recent tweets on Twitter using a query keyword."
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class TwitterSearchTweetsInput(BaseModel):
|
|
19
|
+
"""Input for TwitterSearchTweets tool."""
|
|
20
|
+
|
|
21
|
+
query: str = Field(description="The search query to find tweets")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class TwitterSearchTweets(TwitterBaseTool):
|
|
25
|
+
"""Tool for searching recent tweets on Twitter.
|
|
26
|
+
|
|
27
|
+
This tool uses the Twitter API v2 to search for recent tweets based on a query.
|
|
28
|
+
|
|
29
|
+
Attributes:
|
|
30
|
+
name: The name of the tool.
|
|
31
|
+
description: A description of what the tool does.
|
|
32
|
+
args_schema: The schema for the tool's input arguments.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
name: str = NAME
|
|
36
|
+
description: str = PROMPT
|
|
37
|
+
args_schema: Type[BaseModel] = TwitterSearchTweetsInput
|
|
38
|
+
|
|
39
|
+
async def _arun(self, query: str, config: RunnableConfig, **kwargs):
|
|
40
|
+
max_results = 10
|
|
41
|
+
try:
|
|
42
|
+
context = self.context_from_config(config)
|
|
43
|
+
twitter = get_twitter_client(
|
|
44
|
+
agent_id=context.agent.id,
|
|
45
|
+
skill_store=self.skill_store,
|
|
46
|
+
config=context.config,
|
|
47
|
+
)
|
|
48
|
+
client = await twitter.get_client()
|
|
49
|
+
|
|
50
|
+
# Check rate limit only when not using OAuth
|
|
51
|
+
if not twitter.use_key:
|
|
52
|
+
await self.check_rate_limit(
|
|
53
|
+
context.agent.id, max_requests=3, interval=60 * 24
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
# Get since_id from store to avoid duplicate results
|
|
57
|
+
last = await self.skill_store.get_agent_skill_data(
|
|
58
|
+
context.agent.id, self.name, query
|
|
59
|
+
)
|
|
60
|
+
last = last or {}
|
|
61
|
+
since_id = last.get("since_id")
|
|
62
|
+
|
|
63
|
+
# Reset since_id if the saved timestamp is over 6 days old
|
|
64
|
+
if since_id and last.get("timestamp"):
|
|
65
|
+
try:
|
|
66
|
+
saved_time = datetime.datetime.fromisoformat(last["timestamp"])
|
|
67
|
+
if (datetime.datetime.now() - saved_time).days > 6:
|
|
68
|
+
since_id = None
|
|
69
|
+
except (ValueError, TypeError):
|
|
70
|
+
since_id = None
|
|
71
|
+
|
|
72
|
+
tweets = await client.search_recent_tweets(
|
|
73
|
+
query=query,
|
|
74
|
+
user_auth=twitter.use_key,
|
|
75
|
+
since_id=since_id,
|
|
76
|
+
max_results=max_results,
|
|
77
|
+
expansions=[
|
|
78
|
+
"referenced_tweets.id",
|
|
79
|
+
"referenced_tweets.id.attachments.media_keys",
|
|
80
|
+
"referenced_tweets.id.author_id",
|
|
81
|
+
"attachments.media_keys",
|
|
82
|
+
"author_id",
|
|
83
|
+
],
|
|
84
|
+
tweet_fields=[
|
|
85
|
+
"created_at",
|
|
86
|
+
"author_id",
|
|
87
|
+
"text",
|
|
88
|
+
"referenced_tweets",
|
|
89
|
+
"attachments",
|
|
90
|
+
],
|
|
91
|
+
user_fields=[
|
|
92
|
+
"username",
|
|
93
|
+
"name",
|
|
94
|
+
"profile_image_url",
|
|
95
|
+
"description",
|
|
96
|
+
"public_metrics",
|
|
97
|
+
"location",
|
|
98
|
+
"connection_status",
|
|
99
|
+
],
|
|
100
|
+
media_fields=["url", "type", "width", "height"],
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
# Update the since_id in store for the next request
|
|
104
|
+
if tweets.get("meta") and tweets.get("meta").get("newest_id"):
|
|
105
|
+
last["since_id"] = tweets["meta"]["newest_id"]
|
|
106
|
+
last["timestamp"] = datetime.datetime.now().isoformat()
|
|
107
|
+
await self.skill_store.save_agent_skill_data(
|
|
108
|
+
context.agent.id, self.name, query, last
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
return tweets
|
|
112
|
+
|
|
113
|
+
except Exception as e:
|
|
114
|
+
logger.error(f"Error searching tweets: {str(e)}")
|
|
115
|
+
raise type(e)(f"[agent:{context.agent.id}]: {e}") from e
|
|
Binary file
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
from typing import TypedDict
|
|
2
|
+
|
|
3
|
+
from intentkit.abstracts.skill import SkillStoreABC
|
|
4
|
+
from intentkit.skills.base import SkillConfig, SkillState
|
|
5
|
+
from intentkit.skills.unrealspeech.base import UnrealSpeechBaseTool
|
|
6
|
+
from intentkit.skills.unrealspeech.text_to_speech import TextToSpeech
|
|
7
|
+
|
|
8
|
+
# Cache skills at the system level, because they are stateless
|
|
9
|
+
_cache: dict[str, UnrealSpeechBaseTool] = {}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class SkillStates(TypedDict):
|
|
13
|
+
text_to_speech: SkillState
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class Config(SkillConfig):
|
|
17
|
+
"""Configuration for UnrealSpeech skills."""
|
|
18
|
+
|
|
19
|
+
states: SkillStates
|
|
20
|
+
api_key: str = "" # Optional API key
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
async def get_skills(
|
|
24
|
+
config: "Config",
|
|
25
|
+
is_private: bool,
|
|
26
|
+
store: SkillStoreABC,
|
|
27
|
+
**_,
|
|
28
|
+
) -> list[UnrealSpeechBaseTool]:
|
|
29
|
+
"""Get all UnrealSpeech tools."""
|
|
30
|
+
available_skills = []
|
|
31
|
+
|
|
32
|
+
# Include skills based on their state
|
|
33
|
+
for skill_name, state in config["states"].items():
|
|
34
|
+
if state == "disabled":
|
|
35
|
+
continue
|
|
36
|
+
elif state == "public" or (state == "private" and is_private):
|
|
37
|
+
available_skills.append(skill_name)
|
|
38
|
+
|
|
39
|
+
# Get each skill using the cached getter
|
|
40
|
+
return [get_unrealspeech_skill(name, store) for name in available_skills]
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def get_unrealspeech_skill(
|
|
44
|
+
name: str,
|
|
45
|
+
store: SkillStoreABC,
|
|
46
|
+
) -> UnrealSpeechBaseTool:
|
|
47
|
+
"""Get an UnrealSpeech skill by name."""
|
|
48
|
+
if name == "text_to_speech":
|
|
49
|
+
if name not in _cache:
|
|
50
|
+
_cache[name] = TextToSpeech(
|
|
51
|
+
skill_store=store,
|
|
52
|
+
)
|
|
53
|
+
return _cache[name]
|
|
54
|
+
else:
|
|
55
|
+
raise ValueError(f"Unknown UnrealSpeech skill: {name}")
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from typing import Type
|
|
2
|
+
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
|
|
5
|
+
from intentkit.abstracts.skill import SkillStoreABC
|
|
6
|
+
from intentkit.skills.base import IntentKitSkill
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class UnrealSpeechBaseTool(IntentKitSkill):
|
|
10
|
+
"""Base class for UnrealSpeech text-to-speech tools."""
|
|
11
|
+
|
|
12
|
+
name: str = Field(description="The name of the tool")
|
|
13
|
+
description: str = Field(description="A description of what the tool does")
|
|
14
|
+
args_schema: Type[BaseModel]
|
|
15
|
+
skill_store: SkillStoreABC = Field(
|
|
16
|
+
description="The skill store for persisting data"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
@property
|
|
20
|
+
def category(self) -> str:
|
|
21
|
+
return "unrealspeech"
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"title": "UnrealSpeech",
|
|
5
|
+
"description": "Convert text to natural-sounding speech with various voices and customization options",
|
|
6
|
+
"x-icon": "https://ai.service.crestal.dev/skills/unrealspeech/unrealspeech.jpg",
|
|
7
|
+
"x-tags": [
|
|
8
|
+
"Audio",
|
|
9
|
+
"Speech",
|
|
10
|
+
"Text-to-Speech",
|
|
11
|
+
"Voice"
|
|
12
|
+
],
|
|
13
|
+
"properties": {
|
|
14
|
+
"enabled": {
|
|
15
|
+
"type": "boolean",
|
|
16
|
+
"title": "Enabled",
|
|
17
|
+
"description": "Whether this skill is enabled",
|
|
18
|
+
"default": false
|
|
19
|
+
},
|
|
20
|
+
"states": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"properties": {
|
|
23
|
+
"text_to_speech": {
|
|
24
|
+
"type": "string",
|
|
25
|
+
"title": "Text to Speech",
|
|
26
|
+
"enum": [
|
|
27
|
+
"disabled",
|
|
28
|
+
"public",
|
|
29
|
+
"private"
|
|
30
|
+
],
|
|
31
|
+
"x-enum-title": [
|
|
32
|
+
"Disabled",
|
|
33
|
+
"Agent Owner + All Users",
|
|
34
|
+
"Agent Owner Only"
|
|
35
|
+
],
|
|
36
|
+
"description": "Convert text to natural-sounding speech with various voices and customization options",
|
|
37
|
+
"default": "disabled"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"description": "States for each UnrealSpeech skill (disabled, public, or private)"
|
|
41
|
+
},
|
|
42
|
+
"api_key_provider": {
|
|
43
|
+
"type": "string",
|
|
44
|
+
"title": "API Key Provider",
|
|
45
|
+
"description": "Provider of the API key for AIXBT API service",
|
|
46
|
+
"enum": [
|
|
47
|
+
"agent_owner"
|
|
48
|
+
],
|
|
49
|
+
"x-enum-title": [
|
|
50
|
+
"Owner Provided"
|
|
51
|
+
],
|
|
52
|
+
"default": "agent_owner"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
"required": [
|
|
56
|
+
"states",
|
|
57
|
+
"enabled"
|
|
58
|
+
],
|
|
59
|
+
"if": {
|
|
60
|
+
"properties": {
|
|
61
|
+
"api_key_provider": {
|
|
62
|
+
"const": "agent_owner"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"then": {
|
|
67
|
+
"properties": {
|
|
68
|
+
"api_key": {
|
|
69
|
+
"type": "string",
|
|
70
|
+
"title": "UnrealSpeech API Key",
|
|
71
|
+
"description": "API key for UnrealSpeech service",
|
|
72
|
+
"x-link": "[Get your API key](https://unrealspeech.com/)",
|
|
73
|
+
"x-sensitive": true
|
|
74
|
+
},
|
|
75
|
+
"rate_limit_number": {
|
|
76
|
+
"type": "integer",
|
|
77
|
+
"title": "Rate Limit Number",
|
|
78
|
+
"description": "Number of requests allowed per time window, only valid if api_key is set"
|
|
79
|
+
},
|
|
80
|
+
"rate_limit_minutes": {
|
|
81
|
+
"type": "integer",
|
|
82
|
+
"title": "Rate Limit Minutes",
|
|
83
|
+
"description": "Time window in minutes for rate limiting, only valid if api_key is set"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"if": {
|
|
87
|
+
"properties": {
|
|
88
|
+
"enabled": {
|
|
89
|
+
"const": true
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"then": {
|
|
94
|
+
"required": [
|
|
95
|
+
"api_key"
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"additionalProperties": true
|
|
100
|
+
}
|