Declaring and make some tool configurable using env vars (#376)

This commit is contained in:
Thiago Moretto
2025-07-14 10:48:36 -03:00
committed by GitHub
parent 78f5144bde
commit 9f6002a9dd
9 changed files with 48 additions and 14 deletions

View File

@@ -2,7 +2,7 @@ import os
import secrets
from typing import Any, Dict, List, Optional, Type
from crewai.tools import BaseTool
from crewai.tools import BaseTool, EnvVar
from openai import OpenAI
from pydantic import BaseModel, Field
@@ -33,6 +33,9 @@ class AIMindTool(BaseTool):
datasources: Optional[List[Dict[str, Any]]] = None
mind_name: Optional[str] = None
package_dependencies: List[str] = ["minds-sdk"]
env_vars: List[EnvVar] = [
EnvVar(name="MINDS_API_KEY", description="API key for AI-Minds", required=True),
]
def __init__(self, api_key: Optional[str] = None, **kwargs):
super().__init__(**kwargs)
@@ -85,4 +88,4 @@ class AIMindTool(BaseTool):
stream=False,
)
return completion.choices[0].message.content
return completion.choices[0].message.content

View File

@@ -1,6 +1,7 @@
import os
from typing import Any, List
from crewai.tools import BaseTool
from crewai.tools import BaseTool, EnvVar
try:
from linkup import LinkupClient
@@ -24,8 +25,11 @@ class LinkupSearchTool(BaseTool):
)
_client: LinkupClient = PrivateAttr() # type: ignore
package_dependencies: List[str] = ["linkup-sdk"]
env_vars: List[EnvVar] = [
EnvVar(name="LINKUP_API_KEY", description="API key for Linkup", required=True),
]
def __init__(self, api_key: str):
def __init__(self, api_key: str | None = None):
"""
Initialize the tool with an API key.
"""
@@ -48,7 +52,7 @@ class LinkupSearchTool(BaseTool):
"The 'linkup-sdk' package is required to use the LinkupSearchTool. "
"Please install it with: uv add linkup-sdk"
)
self._client = LinkupClient(api_key=api_key)
self._client = LinkupClient(api_key=api_key or os.getenv("LINKUP_API_KEY"))
def _run(
self, query: str, depth: str = "standard", output_type: str = "searchResults"

View File

@@ -1,8 +1,9 @@
"""Multion tool spec."""
import os
from typing import Any, Optional, List
from crewai.tools import BaseTool
from crewai.tools import BaseTool, EnvVar
class MultiOnTool(BaseTool):
@@ -17,6 +18,9 @@ class MultiOnTool(BaseTool):
local: bool = False
max_steps: int = 3
package_dependencies: List[str] = ["multion"]
env_vars: List[EnvVar] = [
EnvVar(name="MULTION_API_KEY", description="API key for Multion", required=True),
]
def __init__(
self,
@@ -44,7 +48,7 @@ class MultiOnTool(BaseTool):
)
self.session_id = None
self.local = local
self.multion = MultiOn(api_key=api_key)
self.multion = MultiOn(api_key=api_key or os.getenv("MULTION_API_KEY"))
self.max_steps = max_steps
def _run(

View File

@@ -4,7 +4,7 @@ from importlib.metadata import version
from platform import architecture, python_version
from typing import Any, List, Type
from crewai.tools import BaseTool
from crewai.tools import BaseTool, EnvVar
from pydantic import BaseModel, ConfigDict, Field
try:
@@ -73,6 +73,10 @@ class OxylabsAmazonProductScraperTool(BaseTool):
oxylabs_api: RealtimeClient
config: OxylabsAmazonProductScraperConfig
package_dependencies: List[str] = ["oxylabs"]
env_vars: List[EnvVar] = [
EnvVar(name="OXYLABS_USERNAME", description="Username for Oxylabs", required=True),
EnvVar(name="OXYLABS_PASSWORD", description="Password for Oxylabs", required=True),
]
def __init__(
self,

View File

@@ -4,7 +4,7 @@ from importlib.metadata import version
from platform import architecture, python_version
from typing import Any, List, Type
from crewai.tools import BaseTool
from crewai.tools import BaseTool, EnvVar
from pydantic import BaseModel, ConfigDict, Field
try:
@@ -75,6 +75,10 @@ class OxylabsAmazonSearchScraperTool(BaseTool):
oxylabs_api: RealtimeClient
config: OxylabsAmazonSearchScraperConfig
package_dependencies: List[str] = ["oxylabs"]
env_vars: List[EnvVar] = [
EnvVar(name="OXYLABS_USERNAME", description="Username for Oxylabs", required=True),
EnvVar(name="OXYLABS_PASSWORD", description="Password for Oxylabs", required=True),
]
def __init__(
self,

View File

@@ -4,7 +4,7 @@ from importlib.metadata import version
from platform import architecture, python_version
from typing import Any, List, Type
from crewai.tools import BaseTool
from crewai.tools import BaseTool, EnvVar
from pydantic import BaseModel, ConfigDict, Field
try:
@@ -78,6 +78,10 @@ class OxylabsGoogleSearchScraperTool(BaseTool):
oxylabs_api: RealtimeClient
config: OxylabsGoogleSearchScraperConfig
package_dependencies: List[str] = ["oxylabs"]
env_vars: List[EnvVar] = [
EnvVar(name="OXYLABS_USERNAME", description="Username for Oxylabs", required=True),
EnvVar(name="OXYLABS_PASSWORD", description="Password for Oxylabs", required=True),
]
def __init__(
self,

View File

@@ -4,7 +4,7 @@ from importlib.metadata import version
from platform import architecture, python_version
from typing import Any, List, Type
from crewai.tools import BaseTool
from crewai.tools import BaseTool, EnvVar
from pydantic import BaseModel, ConfigDict, Field
try:
@@ -69,6 +69,10 @@ class OxylabsUniversalScraperTool(BaseTool):
oxylabs_api: RealtimeClient
config: OxylabsUniversalScraperConfig
package_dependencies: List[str] = ["oxylabs"]
env_vars: List[EnvVar] = [
EnvVar(name="OXYLABS_USERNAME", description="Username for Oxylabs", required=True),
EnvVar(name="OXYLABS_PASSWORD", description="Password for Oxylabs", required=True),
]
def __init__(
self,

View File

@@ -1,7 +1,8 @@
import os
import logging
from typing import Any, Dict, Literal, Optional, Type, List
from crewai.tools import BaseTool
from crewai.tools import BaseTool, EnvVar
from pydantic import BaseModel, Field
logger = logging.getLogger(__file__)
@@ -29,6 +30,9 @@ class ScrapflyScrapeWebsiteTool(BaseTool):
api_key: str = None
scrapfly: Optional[Any] = None
package_dependencies: List[str] = ["scrapfly-sdk"]
env_vars: List[EnvVar] = [
EnvVar(name="SCRAPFLY_API_KEY", description="API key for Scrapfly", required=True),
]
def __init__(self, api_key: str):
super().__init__()
@@ -47,7 +51,7 @@ class ScrapflyScrapeWebsiteTool(BaseTool):
raise ImportError(
"`scrapfly-sdk` package not found, please run `uv add scrapfly-sdk`"
)
self.scrapfly = ScrapflyClient(key=api_key)
self.scrapfly = ScrapflyClient(key=api_key or os.getenv("SCRAPFLY_API_KEY"))
def _run(
self,

View File

@@ -2,7 +2,7 @@ import logging
from typing import Any, Dict, Literal, Optional, Type, List
from urllib.parse import unquote, urlparse
from crewai.tools import BaseTool
from crewai.tools import BaseTool, EnvVar
from pydantic import BaseModel, Field
logger = logging.getLogger(__file__)
@@ -54,6 +54,9 @@ class SpiderTool(BaseTool):
log_failures: bool = True
config: SpiderToolConfig = SpiderToolConfig()
package_dependencies: List[str] = ["spider-client"]
env_vars: List[EnvVar] = [
EnvVar(name="SPIDER_API_KEY", description="API key for Spider.cloud", required=True),
]
def __init__(
self,