update branch name in gha (#274)

harrison/promot-mrkl
Harrison Chase 1 year ago committed by GitHub
parent 48b093823e
commit 3c1c7ba672
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,7 +2,7 @@ name: lint
on:
push:
branches: [main]
branches: [master]
pull_request:
env:

@ -2,7 +2,7 @@ name: test
on:
push:
branches: [main]
branches: [master]
pull_request:
env:

@ -3,8 +3,8 @@
from langchain.agents import MRKLChain, ReActChain, SelfAskWithSearchChain
from langchain.chains import (
ConversationChain,
LLMChain,
LLMBashChain,
LLMChain,
LLMMathChain,
PALChain,
QAWithSourcesChain,

@ -1,3 +1,4 @@
"""Chain that interprets a prompt and executes bash code to perform bash operations."""
from typing import Dict, List
from pydantic import BaseModel, Extra
@ -5,9 +6,9 @@ from pydantic import BaseModel, Extra
from langchain.chains.base import Chain
from langchain.chains.llm import LLMChain
from langchain.chains.llm_bash.prompt import PROMPT
from langchain.utilities.bash import BashProcess
from langchain.input import print_text
from langchain.llms.base import LLM
from langchain.utilities.bash import BashProcess
class LLMBashChain(Chain, BaseModel):
@ -47,7 +48,7 @@ class LLMBashChain(Chain, BaseModel):
"""
return [self.output_key]
def _call(self, inputs: Dict[str, str]) -> Dict[str, Dict[str, list[str]]]:
def _call(self, inputs: Dict[str, str]) -> Dict[str, str]:
llm_executor = LLMChain(prompt=PROMPT, llm=self.llm)
bash_executor = BashProcess()
if self.verbose:
@ -60,7 +61,7 @@ class LLMBashChain(Chain, BaseModel):
t = t.strip()
if t.startswith("```bash"):
# Split the string into a list of substrings
command_list = t.split('\n')
command_list = t.split("\n")
print(command_list)
# Remove the first and last substrings
@ -73,5 +74,4 @@ class LLMBashChain(Chain, BaseModel):
else:
raise ValueError(f"unknown format from LLM: {t}")
answer = {"commands": command_list, "output": output}
return {self.output_key: answer}
return {self.output_key: output}

@ -1,6 +1,6 @@
"""General utilities."""
from langchain.utilities.bash import BashProcess
__all__ = [
'BashProcess',
"BashProcess",
]

@ -1,14 +1,17 @@
"""Wrapper around subprocess to run commands."""
import subprocess
from typing import Dict, List, Union
from typing import List
class BashProcess:
"""Executes bash commands and returns the output."""
def __init__(self, strip_newlines: bool = False):
"""Initialize with stripping newlines."""
self.strip_newlines = strip_newlines
def run(self, commands: List[str]) -> Dict[str, Union[bool, list[str]]]:
def run(self, commands: List[str]) -> str:
"""Run commands and return final output."""
outputs = []
for command in commands:
try:
@ -17,7 +20,5 @@ class BashProcess:
output = output.strip()
outputs.append(output)
except subprocess.CalledProcessError as error:
outputs.append(str(error))
return {"success": False, "outputs": outputs}
return {"success": True, "outputs": outputs}
return str(error)
return outputs[-1]

@ -10,9 +10,9 @@ from tests.unit_tests.llms.fake_llm import FakeLLM
@pytest.fixture
def fake_llm_bash_chain() -> LLMBashChain:
"""Fake LLM Bash chain for testing."""
queries = {
_PROMPT_TEMPLATE.format(question="Please write a bash script that prints 'Hello World' to the console."): "```bash\nexpr 1 + 1\n```",
}
question = "Please write a bash script that prints 'Hello World' to the console."
prompt = _PROMPT_TEMPLATE.format(question=question)
queries = {prompt: "```bash\nexpr 1 + 1\n```"}
fake_llm = FakeLLM(queries=queries)
return LLMBashChain(llm=fake_llm, input_key="q", output_key="a")
@ -21,4 +21,4 @@ def test_simple_question(fake_llm_bash_chain: LLMBashChain) -> None:
"""Test simple question that should not need python."""
question = "Please write a bash script that prints 'Hello World' to the console."
output = fake_llm_bash_chain.run(question)
assert output == {'commands': ['expr 1 + 1'], 'output': {'outputs': ['2\n'], 'success': True}}
assert output == "2\n"

@ -1,22 +1,25 @@
"""Test the bash utility."""
import subprocess
from pathlib import Path
from langchain.utilities.bash import BashProcess
def test_pwd_command() -> None:
"""Test correct functionality."""
session = BashProcess()
commands = ["pwd"]
output = session.run(commands)
print(output)
assert output["outputs"] == [subprocess.check_output("pwd", shell=True).decode()]
assert output == subprocess.check_output("pwd", shell=True).decode()
def test_incorrect_command() -> None:
"""Test handling of incorrect command."""
session = BashProcess()
output = session.run(["invalid_command"])
assert output["success"] is False
assert output == "Command 'invalid_command' returned non-zero exit status 127."
def test_create_directory_and_files(tmp_path: Path) -> None:
"""Test creation of a directory and files in a temporary directory."""
@ -31,14 +34,12 @@ def test_create_directory_and_files(tmp_path: Path) -> None:
f"touch {temp_dir}/file1.txt",
f"touch {temp_dir}/file2.txt",
f"echo 'hello world' > {temp_dir}/file2.txt",
f"cat {temp_dir}/file2.txt"
f"cat {temp_dir}/file2.txt",
]
output = session.run(commands)
assert output["success"] is True
assert output["outputs"][-1] == "hello world"
assert output == "hello world"
# check that the files were created in the temporary directory
output = session.run([f"ls {temp_dir}"])
assert output["success"] is True
assert output["outputs"] == ["file1.txt\nfile2.txt"]
assert output == "file1.txt\nfile2.txt"
Loading…
Cancel
Save