mirror of
https://github.com/hwchase17/langchain.git
synced 2025-08-11 22:04:37 +00:00
consolidating logic for when a chain is able to run with single input text, single output text open to feedback on naming, logic, usefulness
89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
"""Run NatBot."""
|
|
import time
|
|
|
|
from langchain.chains.natbot.base import NatBotChain
|
|
from langchain.chains.natbot.crawler import Crawler # type: ignore
|
|
|
|
|
|
def run_cmd(cmd: str, _crawler: Crawler) -> None:
|
|
"""Run command."""
|
|
cmd = cmd.split("\n")[0]
|
|
|
|
if cmd.startswith("SCROLL UP"):
|
|
_crawler.scroll("up")
|
|
elif cmd.startswith("SCROLL DOWN"):
|
|
_crawler.scroll("down")
|
|
elif cmd.startswith("CLICK"):
|
|
commasplit = cmd.split(",")
|
|
id = commasplit[0].split(" ")[1]
|
|
_crawler.click(id)
|
|
elif cmd.startswith("TYPE"):
|
|
spacesplit = cmd.split(" ")
|
|
id = spacesplit[1]
|
|
text_pieces = spacesplit[2:]
|
|
text = " ".join(text_pieces)
|
|
# Strip leading and trailing double quotes
|
|
text = text[1:-1]
|
|
|
|
if cmd.startswith("TYPESUBMIT"):
|
|
text += "\n"
|
|
_crawler.type(id, text)
|
|
|
|
time.sleep(2)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
objective = "Make a reservation for 2 at 7pm at bistro vida in menlo park"
|
|
print("\nWelcome to natbot! What is your objective?")
|
|
i = input()
|
|
if len(i) > 0:
|
|
objective = i
|
|
quiet = False
|
|
nat_bot_chain = NatBotChain.from_default(objective)
|
|
_crawler = Crawler()
|
|
_crawler.go_to_page("google.com")
|
|
try:
|
|
while True:
|
|
browser_content = "\n".join(_crawler.crawl())
|
|
llm_command = nat_bot_chain.execute(_crawler.page.url, browser_content)
|
|
if not quiet:
|
|
print("URL: " + _crawler.page.url)
|
|
print("Objective: " + objective)
|
|
print("----------------\n" + browser_content + "\n----------------\n")
|
|
if len(llm_command) > 0:
|
|
print("Suggested command: " + llm_command)
|
|
|
|
command = input()
|
|
if command == "r" or command == "":
|
|
run_cmd(llm_command, _crawler)
|
|
elif command == "g":
|
|
url = input("URL:")
|
|
_crawler.go_to_page(url)
|
|
elif command == "u":
|
|
_crawler.scroll("up")
|
|
time.sleep(1)
|
|
elif command == "d":
|
|
_crawler.scroll("down")
|
|
time.sleep(1)
|
|
elif command == "c":
|
|
id = input("id:")
|
|
_crawler.click(id)
|
|
time.sleep(1)
|
|
elif command == "t":
|
|
id = input("id:")
|
|
text = input("text:")
|
|
_crawler.type(id, text)
|
|
time.sleep(1)
|
|
elif command == "o":
|
|
objective = input("Objective:")
|
|
else:
|
|
print(
|
|
"(g) to visit url\n(u) scroll up\n(d) scroll down\n(c) to click"
|
|
"\n(t) to type\n(h) to view commands again"
|
|
"\n(r/enter) to run suggested command\n(o) change objective"
|
|
)
|
|
except KeyboardInterrupt:
|
|
print("\n[!] Ctrl+C detected, exiting gracefully.")
|
|
exit(0)
|