From 5796244e4a2cf7b425dec83f77ecea2f35a43a39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Ho=CC=88nicke?= Date: Fri, 26 May 2023 13:30:56 +0200 Subject: [PATCH] =?UTF-8?q?=E2=8F=AA=20fix:=20fix=20bring=20back=20the=20t?= =?UTF-8?q?est=20description=20for=20func=20generation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dev_gpt/apis/gpt.py | 11 +++++---- dev_gpt/cli.py | 3 +++ .../options/generate/conversation_logger.py | 23 +++++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/dev_gpt/apis/gpt.py b/dev_gpt/apis/gpt.py index e208528..e66a9aa 100644 --- a/dev_gpt/apis/gpt.py +++ b/dev_gpt/apis/gpt.py @@ -16,7 +16,7 @@ from urllib3.exceptions import InvalidChunkLength from dev_gpt.constants import PRICING_GPT4_PROMPT, PRICING_GPT4_GENERATION, PRICING_GPT3_5_TURBO_PROMPT, \ PRICING_GPT3_5_TURBO_GENERATION, CHARS_PER_TOKEN -from dev_gpt.options.generate.conversation_logger import ConversationLogger +from dev_gpt.options.generate.conversation_logger import ConversationLogger, Timer from dev_gpt.options.generate.parser import identity_parser from dev_gpt.options.generate.templates_system import template_system_message_base from dev_gpt.utils.string_tools import print_colored, get_template_parameters @@ -128,14 +128,15 @@ class _GPTConversation: self.conversation_logger = conversation_logger def print_messages(self, messages): + t = Timer().get_time_since_start() for i, message in enumerate(messages): if os.environ['VERBOSE'].lower() == 'true': if isinstance(message, SystemMessage): - print_colored(f'({i}) system - prompt', message.content, 'magenta') + print_colored(f'{t} - ({i}) system - prompt', message.content, 'magenta') elif isinstance(message, HumanMessage): - print_colored(f'({i}) user - prompt', message.content, 'blue') + print_colored(f'{t} - ({i}) user - prompt', message.content, 'blue') elif isinstance(message, AIMessage): - print_colored(f'({i}) assistant - prompt', message.content, 'green') + print_colored(f'{t} - ({i}) assistant - prompt', message.content, 'green') def chat(self, prompt: str, role: str = 'user'): MassageClass = HumanMessage if role == 'user' else SystemMessage @@ -143,7 +144,7 @@ class _GPTConversation: self.messages.append(chat_message) self.print_messages(self.messages) if self.print_stream: - print_colored('assistant', '', 'green', end='') + print_colored(f'{Timer().get_time_since_start()} - assistant', '', 'green', end='') print('thinking...') for i in range(10): try: diff --git a/dev_gpt/cli.py b/dev_gpt/cli.py index 094bcbd..928dfe0 100644 --- a/dev_gpt/cli.py +++ b/dev_gpt/cli.py @@ -7,6 +7,8 @@ import click from dev_gpt.apis.gpt import configure_openai_api_key from dev_gpt.apis.jina_cloud import jina_auth_login from dev_gpt.options.configure.key_handling import set_api_key +from dev_gpt.options.generate.conversation_logger import Timer + def openai_api_key_needed(func): def wrapper(*args, **kwargs): @@ -44,6 +46,7 @@ def path_param(func): @click.pass_context @exception_interceptor def main(ctx): + Timer() # start timer if ctx.invoked_subcommand is None: click.echo(ctx.get_help()) diff --git a/dev_gpt/options/generate/conversation_logger.py b/dev_gpt/options/generate/conversation_logger.py index cbb3577..1d12471 100644 --- a/dev_gpt/options/generate/conversation_logger.py +++ b/dev_gpt/options/generate/conversation_logger.py @@ -25,4 +25,27 @@ class ConversationLogger: f.write(json.dumps(self.log_file, indent=2)) +import datetime +class Singleton(type): + _instances = {} + + def __call__(cls, *args, **kwargs): + if cls not in cls._instances: + cls._instances[cls] = super().__call__(*args, **kwargs) + return cls._instances[cls] + +class Timer(metaclass=Singleton): + def __init__(self): + if not hasattr(self, "start_time"): + self.start_time = datetime.datetime.now() + + def get_time_since_start(self): + now = datetime.datetime.now() + time_diff = now - self.start_time + minutes, seconds = divmod(time_diff.seconds, 60) + + if minutes > 0: + return f"{minutes}m, {seconds}s" + else: + return f"{seconds}s"