From 0c3ae78ec18303857bb6007699d8141f6acde3d3 Mon Sep 17 00:00:00 2001 From: Nicholas Larus-Stone Date: Wed, 16 Nov 2022 22:05:28 -0800 Subject: [PATCH] chore: update ascii colors to work with dark mode (#152) --- langchain/chains/base.py | 2 +- langchain/input.py | 19 ++++++++++++------- tests/unit_tests/test_input.py | 2 +- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/langchain/chains/base.py b/langchain/chains/base.py index 53befcff13..0f9edecb05 100644 --- a/langchain/chains/base.py +++ b/langchain/chains/base.py @@ -9,7 +9,7 @@ class Chain(BaseModel, ABC): """Base interface that all chains should implement.""" verbose: bool = False - """Whether to print out the code that was executed.""" + """Whether to print out response text.""" @property @abstractmethod diff --git a/langchain/input.py b/langchain/input.py index 21c7333e56..ef7053ad31 100644 --- a/langchain/input.py +++ b/langchain/input.py @@ -1,14 +1,19 @@ """Handle chained inputs.""" from typing import Dict, List, Optional -_COLOR_MAPPING = {"blue": 51, "yellow": 229, "pink": 219, "green": 85} +_TEXT_COLOR_MAPPING = { + "blue": "36;1", + "yellow": "33;1", + "pink": "38;5;200", + "green": "32;1", +} def get_color_mapping( items: List[str], excluded_colors: Optional[List] = None ) -> Dict[str, str]: """Get mapping for items to a support color.""" - colors = list(_COLOR_MAPPING.keys()) + colors = list(_TEXT_COLOR_MAPPING.keys()) if excluded_colors is not None: colors = [c for c in colors if c not in excluded_colors] color_mapping = {item: colors[i % len(colors)] for i, item in enumerate(items)} @@ -20,8 +25,8 @@ def print_text(text: str, color: Optional[str] = None, end: str = "") -> None: if color is None: print(text, end=end) else: - color_str = _COLOR_MAPPING[color] - print(f"\u001b[48;5;{color_str}m{text}\x1b[0m", end=end) + color_str = _TEXT_COLOR_MAPPING[color] + print(f"\u001b[{color_str}m\033[1;3m{text}\u001b[0m", end=end) class ChainedInput: @@ -29,14 +34,14 @@ class ChainedInput: def __init__(self, text: str, verbose: bool = False): """Initialize with verbose flag and initial text.""" - self.verbose = verbose - if self.verbose: + self._verbose = verbose + if self._verbose: print_text(text, None) self._input = text def add(self, text: str, color: Optional[str] = None) -> None: """Add text to input, print if in verbose mode.""" - if self.verbose: + if self._verbose: print_text(text, color) self._input += text diff --git a/tests/unit_tests/test_input.py b/tests/unit_tests/test_input.py index cc837cbabc..43dd3b080b 100644 --- a/tests/unit_tests/test_input.py +++ b/tests/unit_tests/test_input.py @@ -48,7 +48,7 @@ def test_chained_input_verbose() -> None: chained_input.add("baz", color="blue") sys.stdout = old_stdout output = mystdout.getvalue() - assert output == "\x1b[48;5;51mbaz\x1b[0m" + assert output == "\x1b[36;1m\x1b[1;3mbaz\x1b[0m" assert chained_input.input == "foobarbaz"