diff --git a/swarms/utils/__init__.py b/swarms/utils/__init__.py new file mode 100644 index 00000000..8c47e910 --- /dev/null +++ b/swarms/utils/__init__.py @@ -0,0 +1 @@ +from swarms.utils.ansi import Code, Color, Style, ANSI, dim_multiline \ No newline at end of file diff --git a/swarms/utils/ansi.py b/swarms/utils/ansi.py new file mode 100644 index 00000000..2ad1078d --- /dev/null +++ b/swarms/utils/ansi.py @@ -0,0 +1,112 @@ +class Code: + def __init__(self, value: int): + self.value = value + + def __str__(self): + return "%d" % self.value + + +class Color(Code): + def bg(self) -> "Color": + self.value += 10 + return self + + def bright(self) -> "Color": + self.value += 60 + return self + + @staticmethod + def black() -> "Color": + return Color(30) + + @staticmethod + def red() -> "Color": + return Color(31) + + @staticmethod + def green() -> "Color": + return Color(32) + + @staticmethod + def yellow() -> "Color": + return Color(33) + + @staticmethod + def blue() -> "Color": + return Color(34) + + @staticmethod + def magenta() -> "Color": + return Color(35) + + @staticmethod + def cyan() -> "Color": + return Color(36) + + @staticmethod + def white() -> "Color": + return Color(37) + + @staticmethod + def default() -> "Color": + return Color(39) + + +class Style(Code): + @staticmethod + def reset() -> "Style": + return Style(0) + + @staticmethod + def bold() -> "Style": + return Style(1) + + @staticmethod + def dim() -> "Style": + return Style(2) + + @staticmethod + def italic() -> "Style": + return Style(3) + + @staticmethod + def underline() -> "Style": + return Style(4) + + @staticmethod + def blink() -> "Style": + return Style(5) + + @staticmethod + def reverse() -> "Style": + return Style(7) + + @staticmethod + def conceal() -> "Style": + return Style(8) + + +class ANSI: + ESCAPE = "\x1b[" + CLOSE = "m" + + def __init__(self, text: str): + self.text = text + self.args = [] + + def join(self) -> str: + return ANSI.ESCAPE + ";".join([str(a) for a in self.args]) + ANSI.CLOSE + + def wrap(self, text: str) -> str: + return self.join() + text + ANSI(Style.reset()).join() + + def to(self, *args: str): + self.args = list(args) + return self.wrap(self.text) + + +def dim_multiline(message: str) -> str: + lines = message.split("\n") + if len(lines) <= 1: + return lines[0] + return lines[0] + ANSI("\n... ".join([""] + lines[1:])).to(Color.black().bright()) \ No newline at end of file