mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-11 17:18:29 +00:00
git-subtree-dir: packages/tools git-subtree-split: 78317b9c127f18bd040c1d77e3c0840cdc9a5b38
81 lines
2.4 KiB
Python
81 lines
2.4 KiB
Python
"""Multion tool spec."""
|
|
|
|
import os
|
|
from typing import Any, Optional, List
|
|
|
|
from crewai.tools import BaseTool, EnvVar
|
|
|
|
|
|
class MultiOnTool(BaseTool):
|
|
"""Tool to wrap MultiOn Browse Capabilities."""
|
|
|
|
name: str = "Multion Browse Tool"
|
|
description: str = """Multion gives the ability for LLMs to control web browsers using natural language instructions.
|
|
If the status is 'CONTINUE', reissue the same instruction to continue execution
|
|
"""
|
|
multion: Optional[Any] = None
|
|
session_id: Optional[str] = None
|
|
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,
|
|
api_key: Optional[str] = None,
|
|
local: bool = False,
|
|
max_steps: int = 3,
|
|
**kwargs,
|
|
):
|
|
super().__init__(**kwargs)
|
|
try:
|
|
from multion.client import MultiOn # type: ignore
|
|
except ImportError:
|
|
import click
|
|
|
|
if click.confirm(
|
|
"You are missing the 'multion' package. Would you like to install it?"
|
|
):
|
|
import subprocess
|
|
|
|
subprocess.run(["uv", "add", "multion"], check=True)
|
|
from multion.client import MultiOn
|
|
else:
|
|
raise ImportError(
|
|
"`multion` package not found, please run `uv add multion`"
|
|
)
|
|
self.session_id = None
|
|
self.local = local
|
|
self.multion = MultiOn(api_key=api_key or os.getenv("MULTION_API_KEY"))
|
|
self.max_steps = max_steps
|
|
|
|
def _run(
|
|
self,
|
|
cmd: str,
|
|
*args: Any,
|
|
**kwargs: Any,
|
|
) -> str:
|
|
"""
|
|
Run the Multion client with the given command.
|
|
|
|
Args:
|
|
cmd (str): The detailed and specific natural language instructrion for web browsing
|
|
|
|
*args (Any): Additional arguments to pass to the Multion client
|
|
**kwargs (Any): Additional keyword arguments to pass to the Multion client
|
|
"""
|
|
|
|
browse = self.multion.browse(
|
|
cmd=cmd,
|
|
session_id=self.session_id,
|
|
local=self.local,
|
|
max_steps=self.max_steps,
|
|
*args,
|
|
**kwargs,
|
|
)
|
|
self.session_id = browse.session_id
|
|
|
|
return browse.message + "\n\n STATUS: " + browse.status
|