intentkit 0.6.9.dev2__py3-none-any.whl → 0.6.10.dev1__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.

Files changed (168) hide show
  1. intentkit/__init__.py +1 -1
  2. intentkit/abstracts/graph.py +17 -2
  3. intentkit/core/engine.py +29 -30
  4. intentkit/core/node.py +10 -20
  5. intentkit/models/agent.py +3 -0
  6. intentkit/models/chat.py +9 -1
  7. intentkit/skills/acolyt/ask.py +2 -5
  8. intentkit/skills/acolyt/base.py +16 -6
  9. intentkit/skills/aixbt/__init__.py +3 -7
  10. intentkit/skills/aixbt/projects.py +12 -36
  11. intentkit/skills/allora/base.py +16 -6
  12. intentkit/skills/allora/price.py +2 -4
  13. intentkit/skills/base.py +8 -1
  14. intentkit/skills/carv/base.py +12 -10
  15. intentkit/skills/carv/fetch_news.py +90 -92
  16. intentkit/skills/carv/onchain_query.py +162 -164
  17. intentkit/skills/carv/token_info_and_price.py +108 -110
  18. intentkit/skills/chainlist/chain_lookup.py +1 -2
  19. intentkit/skills/common/current_time.py +1 -2
  20. intentkit/skills/cookiefun/base.py +20 -12
  21. intentkit/skills/cookiefun/get_account_details.py +1 -3
  22. intentkit/skills/cookiefun/get_account_feed.py +1 -3
  23. intentkit/skills/cookiefun/get_account_smart_followers.py +1 -3
  24. intentkit/skills/cookiefun/get_sectors.py +2 -3
  25. intentkit/skills/cookiefun/search_accounts.py +1 -3
  26. intentkit/skills/cryptocompare/fetch_news.py +3 -4
  27. intentkit/skills/cryptocompare/fetch_price.py +3 -4
  28. intentkit/skills/cryptocompare/fetch_top_exchanges.py +3 -4
  29. intentkit/skills/cryptocompare/fetch_top_market_cap.py +3 -4
  30. intentkit/skills/cryptocompare/fetch_top_volume.py +3 -4
  31. intentkit/skills/cryptocompare/fetch_trading_signals.py +3 -4
  32. intentkit/skills/cryptopanic/base.py +13 -9
  33. intentkit/skills/cryptopanic/fetch_crypto_news.py +150 -153
  34. intentkit/skills/cryptopanic/fetch_crypto_sentiment.py +133 -136
  35. intentkit/skills/dapplooker/base.py +16 -6
  36. intentkit/skills/dapplooker/dapplooker_token_data.py +2 -4
  37. intentkit/skills/defillama/coins/fetch_batch_historical_prices.py +2 -3
  38. intentkit/skills/defillama/coins/fetch_block.py +2 -3
  39. intentkit/skills/defillama/coins/fetch_current_prices.py +2 -5
  40. intentkit/skills/defillama/coins/fetch_first_price.py +2 -5
  41. intentkit/skills/defillama/coins/fetch_historical_prices.py +2 -3
  42. intentkit/skills/defillama/coins/fetch_price_chart.py +2 -5
  43. intentkit/skills/defillama/coins/fetch_price_percentage.py +2 -5
  44. intentkit/skills/defillama/fees/fetch_fees_overview.py +2 -3
  45. intentkit/skills/defillama/stablecoins/fetch_stablecoin_chains.py +2 -3
  46. intentkit/skills/defillama/stablecoins/fetch_stablecoin_charts.py +2 -3
  47. intentkit/skills/defillama/stablecoins/fetch_stablecoin_prices.py +2 -3
  48. intentkit/skills/defillama/stablecoins/fetch_stablecoins.py +2 -3
  49. intentkit/skills/defillama/tvl/fetch_chain_historical_tvl.py +2 -5
  50. intentkit/skills/defillama/tvl/fetch_chains.py +2 -3
  51. intentkit/skills/defillama/tvl/fetch_historical_tvl.py +2 -3
  52. intentkit/skills/defillama/tvl/fetch_protocol.py +2 -5
  53. intentkit/skills/defillama/tvl/fetch_protocol_current_tvl.py +2 -5
  54. intentkit/skills/defillama/tvl/fetch_protocols.py +2 -3
  55. intentkit/skills/defillama/volumes/fetch_dex_overview.py +2 -3
  56. intentkit/skills/defillama/volumes/fetch_dex_summary.py +2 -5
  57. intentkit/skills/defillama/volumes/fetch_options_overview.py +2 -3
  58. intentkit/skills/defillama/yields/fetch_pool_chart.py +2 -5
  59. intentkit/skills/defillama/yields/fetch_pools.py +2 -3
  60. intentkit/skills/dune_analytics/base.py +15 -9
  61. intentkit/skills/dune_analytics/fetch_kol_buys.py +125 -128
  62. intentkit/skills/dune_analytics/fetch_nation_metrics.py +234 -237
  63. intentkit/skills/elfa/base.py +16 -6
  64. intentkit/skills/elfa/mention.py +2 -7
  65. intentkit/skills/elfa/stats.py +2 -6
  66. intentkit/skills/elfa/tokens.py +1 -4
  67. intentkit/skills/enso/base.py +25 -13
  68. intentkit/skills/enso/best_yield.py +1 -4
  69. intentkit/skills/enso/networks.py +2 -5
  70. intentkit/skills/enso/prices.py +1 -5
  71. intentkit/skills/enso/route.py +2 -5
  72. intentkit/skills/enso/tokens.py +1 -4
  73. intentkit/skills/enso/wallet.py +3 -9
  74. intentkit/skills/firecrawl/base.py +16 -6
  75. intentkit/skills/firecrawl/clear.py +1 -3
  76. intentkit/skills/firecrawl/crawl.py +7 -8
  77. intentkit/skills/firecrawl/query.py +7 -9
  78. intentkit/skills/firecrawl/scrape.py +7 -8
  79. intentkit/skills/github/github_search.py +1 -3
  80. intentkit/skills/heurist/base.py +15 -0
  81. intentkit/skills/heurist/image_generation_animagine_xl.py +3 -4
  82. intentkit/skills/heurist/image_generation_arthemy_comics.py +3 -4
  83. intentkit/skills/heurist/image_generation_arthemy_real.py +3 -4
  84. intentkit/skills/heurist/image_generation_braindance.py +3 -4
  85. intentkit/skills/heurist/image_generation_cyber_realistic_xl.py +3 -4
  86. intentkit/skills/heurist/image_generation_flux_1_dev.py +3 -4
  87. intentkit/skills/heurist/image_generation_sdxl.py +3 -4
  88. intentkit/skills/http/get.py +0 -2
  89. intentkit/skills/http/post.py +0 -2
  90. intentkit/skills/http/put.py +0 -2
  91. intentkit/skills/lifi/token_execute.py +1 -3
  92. intentkit/skills/lifi/token_quote.py +0 -2
  93. intentkit/skills/moralis/base.py +15 -1
  94. intentkit/skills/nation/nft_check.py +2 -5
  95. intentkit/skills/openai/base.py +14 -5
  96. intentkit/skills/openai/dalle_image_generation.py +6 -5
  97. intentkit/skills/openai/gpt_image_generation.py +6 -5
  98. intentkit/skills/openai/gpt_image_to_image.py +6 -5
  99. intentkit/skills/openai/image_to_text.py +6 -6
  100. intentkit/skills/portfolio/base.py +4 -3
  101. intentkit/skills/portfolio/token_balances.py +2 -4
  102. intentkit/skills/portfolio/wallet_approvals.py +2 -4
  103. intentkit/skills/portfolio/wallet_defi_positions.py +3 -4
  104. intentkit/skills/portfolio/wallet_history.py +2 -4
  105. intentkit/skills/portfolio/wallet_net_worth.py +2 -4
  106. intentkit/skills/portfolio/wallet_nfts.py +2 -4
  107. intentkit/skills/portfolio/wallet_profitability.py +2 -4
  108. intentkit/skills/portfolio/wallet_profitability_summary.py +2 -4
  109. intentkit/skills/portfolio/wallet_stats.py +2 -4
  110. intentkit/skills/portfolio/wallet_swaps.py +2 -4
  111. intentkit/skills/slack/base.py +18 -0
  112. intentkit/skills/slack/get_channel.py +3 -4
  113. intentkit/skills/slack/get_message.py +3 -4
  114. intentkit/skills/slack/schedule_message.py +3 -4
  115. intentkit/skills/slack/send_message.py +3 -4
  116. intentkit/skills/supabase/delete_data.py +3 -6
  117. intentkit/skills/supabase/fetch_data.py +3 -6
  118. intentkit/skills/supabase/insert_data.py +3 -6
  119. intentkit/skills/supabase/invoke_function.py +3 -6
  120. intentkit/skills/supabase/update_data.py +3 -6
  121. intentkit/skills/supabase/upsert_data.py +3 -6
  122. intentkit/skills/system/add_autonomous_task.py +1 -3
  123. intentkit/skills/system/delete_autonomous_task.py +1 -3
  124. intentkit/skills/system/edit_autonomous_task.py +1 -3
  125. intentkit/skills/system/list_autonomous_tasks.py +1 -3
  126. intentkit/skills/system/read_agent_api_key.py +2 -3
  127. intentkit/skills/system/regenerate_agent_api_key.py +2 -5
  128. intentkit/skills/tavily/base.py +14 -5
  129. intentkit/skills/tavily/tavily_extract.py +7 -8
  130. intentkit/skills/tavily/tavily_search.py +11 -9
  131. intentkit/skills/token/base.py +4 -6
  132. intentkit/skills/token/erc20_transfers.py +2 -4
  133. intentkit/skills/token/token_analytics.py +2 -4
  134. intentkit/skills/token/token_price.py +2 -4
  135. intentkit/skills/token/token_search.py +2 -4
  136. intentkit/skills/twitter/base.py +41 -0
  137. intentkit/skills/twitter/follow_user.py +4 -4
  138. intentkit/skills/twitter/get_mentions.py +4 -4
  139. intentkit/skills/twitter/get_timeline.py +4 -4
  140. intentkit/skills/twitter/get_user_by_username.py +4 -4
  141. intentkit/skills/twitter/get_user_tweets.py +4 -4
  142. intentkit/skills/twitter/like_tweet.py +4 -4
  143. intentkit/skills/twitter/post_tweet.py +3 -4
  144. intentkit/skills/twitter/reply_tweet.py +3 -4
  145. intentkit/skills/twitter/retweet.py +4 -4
  146. intentkit/skills/twitter/search_tweets.py +4 -4
  147. intentkit/skills/unrealspeech/base.py +16 -0
  148. intentkit/skills/unrealspeech/text_to_speech.py +4 -4
  149. intentkit/skills/venice_audio/base.py +11 -9
  150. intentkit/skills/venice_audio/venice_audio.py +238 -240
  151. intentkit/skills/venice_image/base.py +23 -19
  152. intentkit/skills/venice_image/image_enhance/image_enhance.py +78 -80
  153. intentkit/skills/venice_image/image_generation/image_generation_base.py +115 -117
  154. intentkit/skills/venice_image/image_upscale/image_upscale.py +88 -90
  155. intentkit/skills/venice_image/image_vision/image_vision.py +98 -100
  156. intentkit/skills/web_scraper/document_indexer.py +3 -5
  157. intentkit/skills/web_scraper/scrape_and_index.py +14 -17
  158. intentkit/skills/web_scraper/website_indexer.py +8 -10
  159. intentkit/skills/xmtp/README.md +110 -0
  160. intentkit/skills/xmtp/__init__.py +82 -0
  161. intentkit/skills/xmtp/base.py +13 -0
  162. intentkit/skills/xmtp/schema.json +41 -0
  163. intentkit/skills/xmtp/transfer.py +170 -0
  164. intentkit/skills/xmtp/xmtp.svg +26 -0
  165. {intentkit-0.6.9.dev2.dist-info → intentkit-0.6.10.dev1.dist-info}/METADATA +3 -3
  166. {intentkit-0.6.9.dev2.dist-info → intentkit-0.6.10.dev1.dist-info}/RECORD +168 -162
  167. {intentkit-0.6.9.dev2.dist-info → intentkit-0.6.10.dev1.dist-info}/WHEEL +0 -0
  168. {intentkit-0.6.9.dev2.dist-info → intentkit-0.6.10.dev1.dist-info}/licenses/LICENSE +0 -0
@@ -1,110 +1,108 @@
1
- import logging
2
- import re
3
- from typing import Any, Dict, Optional, Type
4
-
5
- from langchain_core.runnables import RunnableConfig
6
- from pydantic import BaseModel, Field
7
-
8
- from intentkit.skills.carv.base import CarvBaseTool
9
-
10
- logger = logging.getLogger(__name__)
11
-
12
-
13
- class TokenInfoAndPriceInput(BaseModel):
14
- ticker: str = Field(
15
- description="The token's ticker symbol (e.g., 'eth', 'btc', 'sol', 'xrp')."
16
- )
17
- token_name: str = Field(
18
- description="The token name (e.g ethereum, bitcoin, solana, ripple)"
19
- )
20
- amount: Optional[float] = Field(
21
- description="(optional) amount of token, fill this if user asking for how much x amount of specific token worth"
22
- )
23
-
24
-
25
- class TokenInfoAndPriceTool(CarvBaseTool):
26
- """
27
- Fetches detailed information and the current USD price of a cryptocurrency token from the CARV API,
28
- given its ticker symbol (e.g., 'eth', 'btc', 'aave').
29
- Returns metadata including the token's name, symbol, platform, category tags, and contract addresses
30
- Useful for understanding a token's identity, ecosystem, and market valu
31
- Use this tool when you need comprehensive token data and live pricing from CARV
32
- """
33
-
34
- name: str = "carv_token_info_and_price"
35
- description: str = (
36
- "Fetches detailed information and the current USD price of a cryptocurrency token from the CARV API, "
37
- "given its ticker symbol (e.g., 'eth', 'btc', 'aave'). or token name"
38
- "Returns metadata including the token's name, symbol, platform, category tags, and contract addresses "
39
- "Useful for understanding a token's identity, ecosystem, and market value"
40
- "Use this tool when you need comprehensive token data and live pricing from CARV."
41
- )
42
- args_schema: Type[BaseModel] = TokenInfoAndPriceInput
43
-
44
- async def _arun(
45
- self,
46
- ticker: str,
47
- token_name: str,
48
- amount: Optional[float] = 1,
49
- config: RunnableConfig = None, # type: ignore
50
- **kwargs: Any,
51
- ) -> Dict[str, Any]:
52
- if not ticker:
53
- return {
54
- "error": True,
55
- "message": "ticker is null",
56
- "suggestion": "ask the user for the specific ticker, and fill the `ticker` field when calling this tool",
57
- }
58
-
59
- context = self.context_from_config(config)
60
- params = {"ticker": ticker}
61
- path = "/ai-agent-backend/token_info"
62
- method = "GET"
63
-
64
- result, error = await self._call_carv_api(
65
- context=context,
66
- endpoint=path,
67
- params=params,
68
- method=method,
69
- )
70
-
71
- if error is not None or result is None:
72
- logger.error(f"Error returned from CARV API: {error}")
73
- return {
74
- "error": True,
75
- "error_type": "APIError",
76
- "message": "Failed to fetch token info from CARV API.",
77
- "details": error,
78
- }
79
-
80
- # retry with token_name if price is 0 or missing
81
- if "price" not in result or result["price"] == 0:
82
- fallback_ticker = re.sub(r"\s+", "-", token_name.strip().lower())
83
- logger.info(
84
- f"Fallback triggered. Trying with fallback ticker: {fallback_ticker}"
85
- )
86
-
87
- fallback_params = {"ticker": fallback_ticker}
88
- result, error = await self._call_carv_api(
89
- context=context,
90
- endpoint=path,
91
- params=fallback_params,
92
- method=method,
93
- )
94
-
95
- if error is not None or result is None or result.get("price") == 0:
96
- logger.error(f"Fallback error returned from CARV API: {error}")
97
- return {
98
- "error": True,
99
- "error_type": "APIError",
100
- "message": "Failed to fetch token info from CARV API with fallback.",
101
- "details": error,
102
- }
103
-
104
- if "price" in result and amount is not None:
105
- return {
106
- "additional_info": f"{amount} {ticker.upper()} is worth ${round(amount * result['price'], 2)}",
107
- **result,
108
- }
109
-
110
- return result
1
+ import logging
2
+ import re
3
+ from typing import Any, Dict, Optional, Type
4
+
5
+ from pydantic import BaseModel, Field
6
+
7
+ from intentkit.skills.carv.base import CarvBaseTool
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ class TokenInfoAndPriceInput(BaseModel):
13
+ ticker: str = Field(
14
+ description="The token's ticker symbol (e.g., 'eth', 'btc', 'sol', 'xrp')."
15
+ )
16
+ token_name: str = Field(
17
+ description="The token name (e.g ethereum, bitcoin, solana, ripple)"
18
+ )
19
+ amount: Optional[float] = Field(
20
+ description="(optional) amount of token, fill this if user asking for how much x amount of specific token worth"
21
+ )
22
+
23
+
24
+ class TokenInfoAndPriceTool(CarvBaseTool):
25
+ """
26
+ Fetches detailed information and the current USD price of a cryptocurrency token from the CARV API,
27
+ given its ticker symbol (e.g., 'eth', 'btc', 'aave').
28
+ Returns metadata including the token's name, symbol, platform, category tags, and contract addresses
29
+ Useful for understanding a token's identity, ecosystem, and market valu
30
+ Use this tool when you need comprehensive token data and live pricing from CARV
31
+ """
32
+
33
+ name: str = "carv_token_info_and_price"
34
+ description: str = (
35
+ "Fetches detailed information and the current USD price of a cryptocurrency token from the CARV API, "
36
+ "given its ticker symbol (e.g., 'eth', 'btc', 'aave'). or token name"
37
+ "Returns metadata including the token's name, symbol, platform, category tags, and contract addresses "
38
+ "Useful for understanding a token's identity, ecosystem, and market value"
39
+ "Use this tool when you need comprehensive token data and live pricing from CARV."
40
+ )
41
+ args_schema: Type[BaseModel] = TokenInfoAndPriceInput
42
+
43
+ async def _arun(
44
+ self,
45
+ ticker: str,
46
+ token_name: str,
47
+ amount: Optional[float] = 1, # type: ignore
48
+ **kwargs: Any,
49
+ ) -> Dict[str, Any]:
50
+ if not ticker:
51
+ return {
52
+ "error": True,
53
+ "message": "ticker is null",
54
+ "suggestion": "ask the user for the specific ticker, and fill the `ticker` field when calling this tool",
55
+ }
56
+
57
+ context = self.get_context()
58
+ params = {"ticker": ticker}
59
+ path = "/ai-agent-backend/token_info"
60
+ method = "GET"
61
+
62
+ result, error = await self._call_carv_api(
63
+ context=context,
64
+ endpoint=path,
65
+ params=params,
66
+ method=method,
67
+ )
68
+
69
+ if error is not None or result is None:
70
+ logger.error(f"Error returned from CARV API: {error}")
71
+ return {
72
+ "error": True,
73
+ "error_type": "APIError",
74
+ "message": "Failed to fetch token info from CARV API.",
75
+ "details": error,
76
+ }
77
+
78
+ # retry with token_name if price is 0 or missing
79
+ if "price" not in result or result["price"] == 0:
80
+ fallback_ticker = re.sub(r"\s+", "-", token_name.strip().lower())
81
+ logger.info(
82
+ f"Fallback triggered. Trying with fallback ticker: {fallback_ticker}"
83
+ )
84
+
85
+ fallback_params = {"ticker": fallback_ticker}
86
+ result, error = await self._call_carv_api(
87
+ context=context,
88
+ endpoint=path,
89
+ params=fallback_params,
90
+ method=method,
91
+ )
92
+
93
+ if error is not None or result is None or result.get("price") == 0:
94
+ logger.error(f"Fallback error returned from CARV API: {error}")
95
+ return {
96
+ "error": True,
97
+ "error_type": "APIError",
98
+ "message": "Failed to fetch token info from CARV API with fallback.",
99
+ "details": error,
100
+ }
101
+
102
+ if "price" in result and amount is not None:
103
+ return {
104
+ "additional_info": f"{amount} {ticker.upper()} is worth ${round(amount * result['price'], 2)}",
105
+ **result,
106
+ }
107
+
108
+ return result
@@ -2,7 +2,6 @@ import logging
2
2
  from typing import Any, Dict, List, Optional, Type
3
3
 
4
4
  import httpx
5
- from langchain_core.runnables import RunnableConfig
6
5
  from pydantic import BaseModel, Field
7
6
 
8
7
  from intentkit.skills.chainlist.base import ChainlistBaseTool
@@ -160,7 +159,7 @@ class ChainLookup(ChainlistBaseTool):
160
159
  chain_id: Optional[int] = None,
161
160
  no_tracking: Optional[bool] = False,
162
161
  limit: Optional[int] = 5,
163
- config: Optional[RunnableConfig] = None,
162
+ config: Optional[Any] = None,
164
163
  **kwargs,
165
164
  ) -> Dict:
166
165
  """Lookup blockchain RPC endpoints from Chainlist."""
@@ -3,7 +3,6 @@ from datetime import datetime
3
3
  from typing import Type
4
4
 
5
5
  import pytz
6
- from langchain_core.runnables import RunnableConfig
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from intentkit.skills.common.base import CommonBaseTool
@@ -39,7 +38,7 @@ class CurrentTime(CommonBaseTool):
39
38
  )
40
39
  args_schema: Type[BaseModel] = CurrentTimeInput
41
40
 
42
- async def _arun(self, timezone: str, config: RunnableConfig, **kwargs) -> str:
41
+ async def _arun(self, timezone: str, **kwargs) -> str:
43
42
  """Implementation of the tool to get the current time.
44
43
 
45
44
  Args:
@@ -1,7 +1,7 @@
1
1
  import logging
2
- from typing import Optional, Type
2
+ from typing import Type
3
3
 
4
- from langchain_core.runnables import RunnableConfig
4
+ from langchain.tools.base import ToolException
5
5
  from pydantic import BaseModel, Field
6
6
 
7
7
  from intentkit.abstracts.skill import SkillStoreABC
@@ -24,18 +24,26 @@ class CookieFunBaseTool(IntentKitSkill):
24
24
  def category(self) -> str:
25
25
  return "cookiefun"
26
26
 
27
- def get_api_key(self, config: RunnableConfig) -> Optional[str]:
27
+ def get_api_key(self) -> str:
28
28
  """
29
29
  Get the API key from configuration.
30
30
 
31
- Args:
32
- config: The runnable configuration containing context
33
-
34
31
  Returns:
35
- The API key or None if not configured
32
+ The API key
33
+
34
+ Raises:
35
+ ToolException: If the API key is not found or provider is invalid.
36
36
  """
37
- context = self.context_from_config(config)
38
- skill_config = context.config
39
- if skill_config.get("api_key_provider") == "agent_owner":
40
- return skill_config.get("api_key")
41
- return self.skill_store.get_system_config("cookiefun_api_key")
37
+ context = self.get_context()
38
+ skill_config = context.agent.skill_config(self.category)
39
+ api_key_provider = skill_config.get("api_key_provider")
40
+ if api_key_provider == "agent_owner":
41
+ api_key = skill_config.get("api_key")
42
+ if api_key:
43
+ return api_key
44
+ else:
45
+ raise ToolException("No api_key found in agent_owner configuration")
46
+ else:
47
+ raise ToolException(
48
+ f"Invalid API key provider: {api_key_provider}. Only 'agent_owner' is supported for CookieFun."
49
+ )
@@ -1,7 +1,6 @@
1
1
  from typing import Any, Dict, Optional, Type, Union
2
2
 
3
3
  import httpx
4
- from langchain_core.runnables import RunnableConfig
5
4
  from pydantic import BaseModel, Field
6
5
 
7
6
  from intentkit.skills.cookiefun.base import CookieFunBaseTool, logger
@@ -31,7 +30,6 @@ class GetAccountDetails(CookieFunBaseTool):
31
30
 
32
31
  async def _arun(
33
32
  self,
34
- config: RunnableConfig,
35
33
  username: Optional[str] = None,
36
34
  userId: Optional[str] = None,
37
35
  **kwargs,
@@ -57,7 +55,7 @@ class GetAccountDetails(CookieFunBaseTool):
57
55
 
58
56
  try:
59
57
  # Get context to retrieve API key
60
- api_key = self.get_api_key(config)
58
+ api_key = self.get_api_key()
61
59
 
62
60
  if not api_key:
63
61
  logger.error("No API key provided for CookieFun API")
@@ -2,7 +2,6 @@ from enum import IntEnum
2
2
  from typing import Any, Dict, List, Optional, Type, Union
3
3
 
4
4
  import httpx
5
- from langchain_core.runnables import RunnableConfig
6
5
  from pydantic import BaseModel, Field
7
6
 
8
7
  from intentkit.skills.cookiefun.base import CookieFunBaseTool, logger
@@ -84,7 +83,6 @@ class GetAccountFeed(CookieFunBaseTool):
84
83
 
85
84
  async def _arun(
86
85
  self,
87
- config: RunnableConfig,
88
86
  username: Optional[str] = None,
89
87
  userId: Optional[str] = None,
90
88
  startDate: Optional[str] = None,
@@ -130,7 +128,7 @@ class GetAccountFeed(CookieFunBaseTool):
130
128
 
131
129
  try:
132
130
  # Get context to retrieve API key
133
- api_key = self.get_api_key(config)
131
+ api_key = self.get_api_key()
134
132
 
135
133
  if not api_key:
136
134
  logger.error("No API key provided for CookieFun API")
@@ -1,7 +1,6 @@
1
1
  from typing import Any, Dict, List, Optional, Type, Union
2
2
 
3
3
  import httpx
4
- from langchain_core.runnables import RunnableConfig
5
4
  from pydantic import BaseModel, Field
6
5
 
7
6
  from intentkit.skills.cookiefun.base import CookieFunBaseTool, logger
@@ -31,7 +30,6 @@ class GetAccountSmartFollowers(CookieFunBaseTool):
31
30
 
32
31
  async def _arun(
33
32
  self,
34
- config: RunnableConfig,
35
33
  username: Optional[str] = None,
36
34
  userId: Optional[str] = None,
37
35
  **kwargs,
@@ -57,7 +55,7 @@ class GetAccountSmartFollowers(CookieFunBaseTool):
57
55
 
58
56
  try:
59
57
  # Get context to retrieve API key
60
- api_key = self.get_api_key(config)
58
+ api_key = self.get_api_key()
61
59
 
62
60
  if not api_key:
63
61
  logger.error("No API key provided for CookieFun API")
@@ -1,7 +1,6 @@
1
1
  from typing import Any, Dict, List, Type
2
2
 
3
3
  import httpx
4
- from langchain_core.runnables import RunnableConfig
5
4
  from pydantic import BaseModel
6
5
 
7
6
  from intentkit.skills.cookiefun.base import CookieFunBaseTool, logger
@@ -23,7 +22,7 @@ class GetSectors(CookieFunBaseTool):
23
22
  )
24
23
  args_schema: Type[BaseModel] = GetSectorsInput
25
24
 
26
- async def _arun(self, config: RunnableConfig, **kwargs) -> List[Dict[str, Any]]:
25
+ async def _arun(self, **kwargs) -> List[Dict[str, Any]]:
27
26
  """
28
27
  Get all available sectors from the CookieFun API.
29
28
 
@@ -33,7 +32,7 @@ class GetSectors(CookieFunBaseTool):
33
32
  logger.info("Getting sectors from CookieFun API")
34
33
  try:
35
34
  # Get API key
36
- api_key = self.get_api_key(config)
35
+ api_key = self.get_api_key()
37
36
 
38
37
  if not api_key:
39
38
  logger.error("No API key provided for CookieFun API")
@@ -2,7 +2,6 @@ from enum import IntEnum
2
2
  from typing import Any, Dict, List, Optional, Type, Union
3
3
 
4
4
  import httpx
5
- from langchain_core.runnables import RunnableConfig
6
5
  from pydantic import BaseModel, Field
7
6
 
8
7
  from intentkit.skills.cookiefun.base import CookieFunBaseTool, logger
@@ -64,7 +63,6 @@ class SearchAccounts(CookieFunBaseTool):
64
63
 
65
64
  async def _arun(
66
65
  self,
67
- config: RunnableConfig,
68
66
  searchQuery: str,
69
67
  type: Optional[int] = None,
70
68
  sortBy: Optional[int] = None,
@@ -97,7 +95,7 @@ class SearchAccounts(CookieFunBaseTool):
97
95
 
98
96
  try:
99
97
  # Get context to retrieve API key
100
- api_key = self.get_api_key(config)
98
+ api_key = self.get_api_key()
101
99
 
102
100
  if not api_key:
103
101
  logger.error("No API key provided for CookieFun API")
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import List, Type
5
5
 
6
- from langchain_core.runnables import RunnableConfig
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from intentkit.skills.cryptocompare.base import CryptoCompareBaseTool, CryptoNews
@@ -38,7 +37,6 @@ class CryptoCompareFetchNews(CryptoCompareBaseTool):
38
37
  async def _arun(
39
38
  self,
40
39
  token: str,
41
- config: RunnableConfig,
42
40
  **kwargs,
43
41
  ) -> List[CryptoNews]:
44
42
  """Async implementation of the tool to fetch cryptocurrency news.
@@ -54,13 +52,14 @@ class CryptoCompareFetchNews(CryptoCompareBaseTool):
54
52
  Exception: If there's an error accessing the CryptoCompare API.
55
53
  """
56
54
  try:
57
- context = self.context_from_config(config)
55
+ context = self.get_context()
56
+ skill_config = context.agent.skill_config(self.category)
58
57
 
59
58
  # Check rate limit
60
59
  await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
61
60
 
62
61
  # Get API key from context
63
- api_key = context.config.get("api_key")
62
+ api_key = skill_config.get("api_key")
64
63
  if not api_key:
65
64
  raise ValueError("CryptoCompare API key not found in configuration")
66
65
 
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import List, Type
5
5
 
6
- from langchain_core.runnables import RunnableConfig
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from intentkit.skills.cryptocompare.base import CryptoCompareBaseTool, CryptoPrice
@@ -47,7 +46,6 @@ class CryptoCompareFetchPrice(CryptoCompareBaseTool):
47
46
  self,
48
47
  from_symbol: str,
49
48
  to_symbols: List[str],
50
- config: RunnableConfig,
51
49
  **kwargs,
52
50
  ) -> List[CryptoPrice]:
53
51
  """Async implementation of the tool to fetch cryptocurrency prices.
@@ -64,13 +62,14 @@ class CryptoCompareFetchPrice(CryptoCompareBaseTool):
64
62
  Exception: If there's an error accessing the CryptoCompare API.
65
63
  """
66
64
  try:
67
- context = self.context_from_config(config)
65
+ context = self.get_context()
66
+ skill_config = context.agent.skill_config(self.category)
68
67
 
69
68
  # Check rate limit
70
69
  await self.check_rate_limit(context.agent_id, max_requests=10, interval=60)
71
70
 
72
71
  # Get API key from context
73
- api_key = context.config.get("api_key")
72
+ api_key = skill_config.get("api_key")
74
73
  if not api_key:
75
74
  raise ValueError("CryptoCompare API key not found in configuration")
76
75
 
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import List, Type
5
5
 
6
- from langchain_core.runnables import RunnableConfig
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from intentkit.skills.cryptocompare.base import CryptoCompareBaseTool, CryptoExchange
@@ -52,7 +51,6 @@ class CryptoCompareFetchTopExchanges(CryptoCompareBaseTool):
52
51
  from_symbol: str,
53
52
  to_symbol: str = "USD",
54
53
  limit: int = 10,
55
- config: RunnableConfig = None,
56
54
  **kwargs,
57
55
  ) -> List[CryptoExchange]:
58
56
  """Async implementation of the tool to fetch top exchanges for a cryptocurrency pair.
@@ -70,13 +68,14 @@ class CryptoCompareFetchTopExchanges(CryptoCompareBaseTool):
70
68
  Exception: If there's an error accessing the CryptoCompare API.
71
69
  """
72
70
  try:
73
- context = self.context_from_config(config)
71
+ context = self.get_context()
72
+ skill_config = context.agent.skill_config(self.category)
74
73
 
75
74
  # Check rate limit
76
75
  await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
77
76
 
78
77
  # Get API key from context
79
- api_key = context.config.get("api_key")
78
+ api_key = skill_config.get("api_key")
80
79
  if not api_key:
81
80
  raise ValueError("CryptoCompare API key not found in configuration")
82
81
 
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import List, Type
5
5
 
6
- from langchain_core.runnables import RunnableConfig
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from intentkit.skills.cryptocompare.base import CryptoCompareBaseTool, CryptoCurrency
@@ -46,7 +45,6 @@ class CryptoCompareFetchTopMarketCap(CryptoCompareBaseTool):
46
45
  self,
47
46
  to_symbol: str = "USD",
48
47
  limit: int = 10,
49
- config: RunnableConfig = None,
50
48
  **kwargs,
51
49
  ) -> List[CryptoCurrency]:
52
50
  """Async implementation of the tool to fetch top cryptocurrencies by market cap.
@@ -63,13 +61,14 @@ class CryptoCompareFetchTopMarketCap(CryptoCompareBaseTool):
63
61
  Exception: If there's an error accessing the CryptoCompare API.
64
62
  """
65
63
  try:
66
- context = self.context_from_config(config)
64
+ context = self.get_context()
65
+ skill_config = context.agent.skill_config(self.category)
67
66
 
68
67
  # Check rate limit
69
68
  await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
70
69
 
71
70
  # Get API key from context
72
- api_key = context.config.get("api_key")
71
+ api_key = skill_config.get("api_key")
73
72
  if not api_key:
74
73
  raise ValueError("CryptoCompare API key not found in configuration")
75
74
 
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import List, Type
5
5
 
6
- from langchain_core.runnables import RunnableConfig
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from intentkit.skills.cryptocompare.base import CryptoCompareBaseTool, CryptoCurrency
@@ -45,7 +44,6 @@ class CryptoCompareFetchTopVolume(CryptoCompareBaseTool):
45
44
  self,
46
45
  to_symbol: str = "USD",
47
46
  limit: int = 10,
48
- config: RunnableConfig = None,
49
47
  **kwargs,
50
48
  ) -> List[CryptoCurrency]:
51
49
  """Async implementation of the tool to fetch top cryptocurrencies by trading volume.
@@ -62,13 +60,14 @@ class CryptoCompareFetchTopVolume(CryptoCompareBaseTool):
62
60
  Exception: If there's an error accessing the CryptoCompare API.
63
61
  """
64
62
  try:
65
- context = self.context_from_config(config)
63
+ context = self.get_context()
64
+ skill_config = context.agent.skill_config(self.category)
66
65
 
67
66
  # Check rate limit
68
67
  await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
69
68
 
70
69
  # Get API key from context
71
- api_key = context.config.get("api_key")
70
+ api_key = skill_config.get("api_key")
72
71
  if not api_key:
73
72
  raise ValueError("CryptoCompare API key not found in configuration")
74
73
 
@@ -3,7 +3,6 @@
3
3
  import logging
4
4
  from typing import Dict, List, Type
5
5
 
6
- from langchain_core.runnables import RunnableConfig
7
6
  from pydantic import BaseModel, Field
8
7
 
9
8
  from intentkit.skills.cryptocompare.base import CryptoCompareBaseTool
@@ -49,7 +48,6 @@ class CryptoCompareFetchTradingSignals(CryptoCompareBaseTool):
49
48
  async def _arun(
50
49
  self,
51
50
  from_symbol: str,
52
- config: RunnableConfig,
53
51
  **kwargs,
54
52
  ) -> List[TradingSignal]:
55
53
  """Async implementation of the tool to fetch cryptocurrency trading signals.
@@ -65,13 +63,14 @@ class CryptoCompareFetchTradingSignals(CryptoCompareBaseTool):
65
63
  Exception: If there's an error accessing the CryptoCompare API.
66
64
  """
67
65
  try:
68
- context = self.context_from_config(config)
66
+ context = self.get_context()
67
+ skill_config = context.agent.skill_config(self.category)
69
68
 
70
69
  # Check rate limit
71
70
  await self.check_rate_limit(context.agent_id, max_requests=5, interval=60)
72
71
 
73
72
  # Get API key from context
74
- api_key = context.config.get("api_key")
73
+ api_key = skill_config.get("api_key")
75
74
  if not api_key:
76
75
  raise ValueError("CryptoCompare API key not found in configuration")
77
76