From ecf10b2bd85dc4c9c7e37f8ebd98d7e791a65470 Mon Sep 17 00:00:00 2001 From: kvaky Date: Sun, 4 Feb 2024 22:52:12 +0100 Subject: [PATCH 1/3] Add temperature setting --- src/rawdog/__main__.py | 7 ++++--- src/rawdog/llm_client.py | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/rawdog/__main__.py b/src/rawdog/__main__.py index 8889418..3d17ced 100644 --- a/src/rawdog/__main__.py +++ b/src/rawdog/__main__.py @@ -9,12 +9,12 @@ llm_client = LLMClient() # Will prompt for API key if not found -def rawdog(prompt: str, verbose: bool=False): +def rawdog(prompt: str, verbose: bool=False, temperature: float=1.0): _continue = True while _continue is True: error, script, output = "", "", "" try: - message, script = llm_client.get_script(prompt) + message, script = llm_client.get_script(prompt, temperature) if script: if verbose: _message = f"{message}\n" if message else "" @@ -63,6 +63,7 @@ def main(): parser = argparse.ArgumentParser(description='A smart assistant that can execute Python code to help or hurt you.') parser.add_argument('prompt', nargs='*', help='Prompt for direct execution. If empty, enter conversation mode') parser.add_argument('--dry-run', action='store_true', help='Print the script before executing and prompt for confirmation.') + parser.add_argument('--temperature', type=float, default=1.0, help='The temperature of the language model (default: 1.)') args = parser.parse_args() if len(args.prompt) > 0: @@ -74,7 +75,7 @@ def main(): print("\nWhat can I do for you? (Ctrl-C to exit)") prompt = input("> ") print("") - rawdog(prompt, verbose=args.dry_run) + rawdog(prompt, verbose=args.dry_run, temperature=args.temperature) except KeyboardInterrupt: print("Exiting...") break diff --git a/src/rawdog/llm_client.py b/src/rawdog/llm_client.py index abc29b2..6664b07 100644 --- a/src/rawdog/llm_client.py +++ b/src/rawdog/llm_client.py @@ -71,6 +71,7 @@ def __init__(self): def get_response( self, messages: list[dict[str, str]], + temperature: float=1.0, ) -> str: log = { "model": self.model, @@ -84,7 +85,7 @@ def get_response( api_key=self.api_key, model=self.model, messages=messages, - temperature=1.0, + temperature=temperature, custom_llm_provider=self.custom_provider, ) text = (response.choices[0].message.content) or "" @@ -113,8 +114,8 @@ def get_response( with open(self.log_path, "a") as f: f.write(json.dumps(log) + "\n") - def get_script(self, prompt: str): + def get_script(self, prompt: str, temperature: float=1.0): self.conversation.append({"role": "user", "content": f"PROMPT: {prompt}"}) - response = self.get_response(self.conversation) + response = self.get_response(self.conversation, temperature) self.conversation.append({"role": "system", "content": response}) return parse_script(response) From ebeec6ba826fd253785768768da0269e5b30bdb8 Mon Sep 17 00:00:00 2001 From: kvaky Date: Mon, 5 Feb 2024 14:09:45 +0100 Subject: [PATCH 2/3] Move temperature to config --- src/rawdog/__main__.py | 7 +++---- src/rawdog/llm_client.py | 14 +++++++++----- src/rawdog/utils.py | 14 ++++++++++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/rawdog/__main__.py b/src/rawdog/__main__.py index 3d17ced..8889418 100644 --- a/src/rawdog/__main__.py +++ b/src/rawdog/__main__.py @@ -9,12 +9,12 @@ llm_client = LLMClient() # Will prompt for API key if not found -def rawdog(prompt: str, verbose: bool=False, temperature: float=1.0): +def rawdog(prompt: str, verbose: bool=False): _continue = True while _continue is True: error, script, output = "", "", "" try: - message, script = llm_client.get_script(prompt, temperature) + message, script = llm_client.get_script(prompt) if script: if verbose: _message = f"{message}\n" if message else "" @@ -63,7 +63,6 @@ def main(): parser = argparse.ArgumentParser(description='A smart assistant that can execute Python code to help or hurt you.') parser.add_argument('prompt', nargs='*', help='Prompt for direct execution. If empty, enter conversation mode') parser.add_argument('--dry-run', action='store_true', help='Print the script before executing and prompt for confirmation.') - parser.add_argument('--temperature', type=float, default=1.0, help='The temperature of the language model (default: 1.)') args = parser.parse_args() if len(args.prompt) > 0: @@ -75,7 +74,7 @@ def main(): print("\nWhat can I do for you? (Ctrl-C to exit)") prompt = input("> ") print("") - rawdog(prompt, verbose=args.dry_run, temperature=args.temperature) + rawdog(prompt, verbose=args.dry_run) except KeyboardInterrupt: print("Exiting...") break diff --git a/src/rawdog/llm_client.py b/src/rawdog/llm_client.py index 6664b07..95ba626 100644 --- a/src/rawdog/llm_client.py +++ b/src/rawdog/llm_client.py @@ -13,10 +13,12 @@ get_llm_api_key, get_llm_model, get_llm_custom_provider, + get_llm_temperature, set_base_url, set_llm_api_key, set_llm_model, - set_llm_custom_provider + set_llm_custom_provider, + set_llm_temperature, ) from rawdog.prompts import script_prompt, script_examples @@ -63,6 +65,9 @@ def __init__(self): set_llm_api_key(self.api_key) self.custom_provider = get_llm_custom_provider() or None set_llm_custom_provider(self.custom_provider) + cfg_temperature = get_llm_temperature() + self.temperature = cfg_temperature if cfg_temperature is not None else 1.0 + set_llm_temperature(self.temperature) self.conversation = [ {"role": "system", "content": script_prompt}, {"role": "system", "content": script_examples}, @@ -71,7 +76,6 @@ def __init__(self): def get_response( self, messages: list[dict[str, str]], - temperature: float=1.0, ) -> str: log = { "model": self.model, @@ -85,7 +89,7 @@ def get_response( api_key=self.api_key, model=self.model, messages=messages, - temperature=temperature, + temperature=self.temperature, custom_llm_provider=self.custom_provider, ) text = (response.choices[0].message.content) or "" @@ -114,8 +118,8 @@ def get_response( with open(self.log_path, "a") as f: f.write(json.dumps(log) + "\n") - def get_script(self, prompt: str, temperature: float=1.0): + def get_script(self, prompt: str): self.conversation.append({"role": "user", "content": f"PROMPT: {prompt}"}) - response = self.get_response(self.conversation, temperature) + response = self.get_response(self.conversation) self.conversation.append({"role": "system", "content": response}) return parse_script(response) diff --git a/src/rawdog/utils.py b/src/rawdog/utils.py index f869735..ca913cb 100644 --- a/src/rawdog/utils.py +++ b/src/rawdog/utils.py @@ -39,10 +39,17 @@ def get_llm_api_key(): config = load_config() return config.get('llm_api_key') + def get_llm_custom_provider(): config = load_config() return config.get('llm_custom_provider') + +def get_llm_temperature(): + config = load_config() + return config.get('llm_temperature') + + def set_llm_model(model_name: str): config = load_config() config['llm_model'] = model_name @@ -60,7 +67,14 @@ def set_base_url(base_url: str): config['llm_base_url'] = base_url save_config(config) + def set_llm_custom_provider(custom_provider: str): config = load_config() config['llm_custom_provider'] = custom_provider save_config(config) + + +def set_llm_temperature(temperature: float): + config = load_config() + config['llm_temperature'] = temperature + save_config(config) From f976fa6351b0f04954a98cfef6fc0f867e21c2f6 Mon Sep 17 00:00:00 2001 From: BioBootloader Date: Wed, 7 Feb 2024 16:58:47 -0800 Subject: [PATCH 3/3] fix --- src/rawdog/utils.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/rawdog/utils.py b/src/rawdog/utils.py index daa7db0..db1f642 100644 --- a/src/rawdog/utils.py +++ b/src/rawdog/utils.py @@ -69,11 +69,6 @@ def get_llm_model(): return config.get("llm_model") -def get_llm_api_key(): - config = load_config() - return config.get("llm_api_key") - - def get_llm_custom_provider(): config = load_config() return config.get("llm_custom_provider")