Source code for langchain.utilities.multion
"""Util that calls MultiOn Client.
In order to set this up, follow instructions at:
https://multion.notion.site/Download-MultiOn-ddddcfe719f94ab182107ca2612c07a5
"""
from typing import Any, Optional
from pydantic import BaseModel
class MultionAPI:
def __init__(self) -> None:
self.tabId = None
self.new_session_count = 0
def create_session(self, query: str, url: str) -> str:
"""Always the first step to run any activities that can be done using browser.
Args:
'query': the query that you need to perform in the given url.
If there is no 'query' set it as open.
'url': the base url of a site.
"""
import multion
# Only create new session once and continue using update session
if self.new_session_count < 2:
response = multion.new_session({"input": query, "url": url})
self.new_session_count += 1
self.tabId = response["tabId"]
return response["message"]
else:
return "Continue using update session"
def update_session(self, query: str, url: str) -> str:
"""Updates the existing browser session.
Updates with given action and url, used consequently to handle browser
activities after creating one session of browser.
Args:
'query': the query that you need to perform in the given url.
If there is no 'query' set it as open.
'url': the base url of a site.
"""
import multion
response = multion.update_session(self.tabId, {"input": query, "url": url})
return response["message"]
[docs]class MultionClientAPIWrapper(BaseModel):
"""Wrapper for Multion Client API.
In order to set this up, follow instructions at:
NEED TO ADD
"""
client: Any = MultionAPI()
[docs] def run(self, task: str, url: str, tabId: Optional[Any]) -> str:
"""Run body through Multion Client and respond with action.
Args:
task:
url:
tabId:
"""
if self.client.tabId is None or tabId is None:
self.client = MultionAPI()
message = self.client.create_session(task, url)
else:
message = self.client.update_session(task, url)
return message