diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index b097a281f..c6710ab49 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -629,7 +629,10 @@ class Coder: if len(chunk.choices) == 0: continue - if hasattr(chunk.choices[0], "finish_reason") and chunk.choices[0].finish_reason == "length": + if ( + hasattr(chunk.choices[0], "finish_reason") + and chunk.choices[0].finish_reason == "length" + ): raise ExhaustedContextWindow() try: diff --git a/aider/models/__init__.py b/aider/models/__init__.py index f5a6fa7a8..ed9d684f7 100644 --- a/aider/models/__init__.py +++ b/aider/models/__init__.py @@ -1,7 +1,7 @@ +from .model import Model from .openai import OpenAIModel from .openrouter import OpenRouterModel -from .model import Model -GPT4 = Model.create('gpt-4') -GPT35 = Model.create('gpt-3.5-turbo') -GPT35_16k = Model.create('gpt-3.5-turbo-16k') +GPT4 = Model.create("gpt-4") +GPT35 = Model.create("gpt-3.5-turbo") +GPT35_16k = Model.create("gpt-3.5-turbo-16k") diff --git a/aider/models/model.py b/aider/models/model.py index f7169557e..904ec8af0 100644 --- a/aider/models/model.py +++ b/aider/models/model.py @@ -1,4 +1,6 @@ -import openai +import openai + + class Model: name = None edit_format = None @@ -16,7 +18,8 @@ class Model: def create(cls, name): from .openai import OpenAIModel from .openrouter import OpenRouterModel - if ("openrouter.ai" in openai.api_base): + + if "openrouter.ai" in openai.api_base: return OpenRouterModel(name) return OpenAIModel(name) @@ -25,12 +28,12 @@ class Model: @staticmethod def strong_model(): - return Model.create('gpt-4') + return Model.create("gpt-4") @staticmethod def weak_model(): - return Model.create('gpt-3.5-turbo') + return Model.create("gpt-3.5-turbo") @staticmethod def commit_message_models(): - return [Model.create('gpt-3.5-turbo'), Model.create('gpt-3.5-turbo-16k')] + return [Model.create("gpt-3.5-turbo"), Model.create("gpt-3.5-turbo-16k")] diff --git a/aider/models/openai.py b/aider/models/openai.py index d25156758..ca6d36994 100644 --- a/aider/models/openai.py +++ b/aider/models/openai.py @@ -1,5 +1,7 @@ -import tiktoken import re + +import tiktoken + from .model import Model known_tokens = { diff --git a/aider/models/openrouter.py b/aider/models/openrouter.py index 8306c136f..6c78b560a 100644 --- a/aider/models/openrouter.py +++ b/aider/models/openrouter.py @@ -1,5 +1,6 @@ import openai import tiktoken + from .model import Model cached_model_details = None @@ -7,12 +8,12 @@ cached_model_details = None class OpenRouterModel(Model): def __init__(self, name): - if name == 'gpt-4': - name = 'openai/gpt-4' - elif name == 'gpt-3.5-turbo': - name = 'openai/gpt-3.5-turbo' - elif name == 'gpt-3.5-turbo-16k': - name = 'openai/gpt-3.5-turbo-16k' + if name == "gpt-4": + name = "openai/gpt-4" + elif name == "gpt-3.5-turbo": + name = "openai/gpt-3.5-turbo" + elif name == "gpt-3.5-turbo-16k": + name = "openai/gpt-3.5-turbo-16k" self.name = name self.edit_format = edit_format_for_model(name) @@ -24,20 +25,22 @@ class OpenRouterModel(Model): global cached_model_details if cached_model_details == None: cached_model_details = openai.Model.list().data - found = next((details for details in cached_model_details if details.get('id') == name), None) + found = next( + (details for details in cached_model_details if details.get("id") == name), None + ) if found: - self.max_context_tokens = int(found.get('context_length')) - self.prompt_price = round(float(found.get('pricing').get('prompt')) * 1000,6) - self.completion_price = round(float(found.get('pricing').get('completion')) * 1000,6) + self.max_context_tokens = int(found.get("context_length")) + self.prompt_price = round(float(found.get("pricing").get("prompt")) * 1000, 6) + self.completion_price = round(float(found.get("pricing").get("completion")) * 1000, 6) else: - raise ValueError(f'invalid openrouter model: {name}') + raise ValueError(f"invalid openrouter model: {name}") # TODO run benchmarks and figure out which models support which edit-formats def edit_format_for_model(name): - if any(str in name for str in ['gpt-4', 'claude-2']): + if any(str in name for str in ["gpt-4", "claude-2"]): return "diff" return "whole" diff --git a/aider/sendchat.py b/aider/sendchat.py index 2269e512c..7c2994dcc 100644 --- a/aider/sendchat.py +++ b/aider/sendchat.py @@ -51,10 +51,7 @@ def send_with_retries(model_name, messages, functions, stream): kwargs["engine"] = openai.api_engine if "openrouter.ai" in openai.api_base: - kwargs["headers"] = { - "HTTP-Referer": "http://aider.chat", - "X-Title": "Aider" - } + kwargs["headers"] = {"HTTP-Referer": "http://aider.chat", "X-Title": "Aider"} key = json.dumps(kwargs, sort_keys=True).encode() diff --git a/setup.py b/setup.py index acf8d5aac..b616865c8 100644 --- a/setup.py +++ b/setup.py @@ -18,10 +18,10 @@ setup( packages=find_packages(), include_package_data=True, package_data={ - 'aider': ['queries/*'], + "aider": ["queries/*"], }, install_requires=requirements, - python_requires='>=3.9', + python_requires=">=3.9", entry_points={ "console_scripts": [ "aider = aider.main:main", diff --git a/tests/test_models.py b/tests/test_models.py index 6856a9827..417cfacd4 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -24,33 +24,33 @@ class TestModels(unittest.TestCase): model = Model.create("gpt-4-32k-2123") self.assertEqual(model.max_context_tokens, 32 * 1024) - - @patch('openai.Model.list') + @patch("openai.Model.list") def test_openrouter_model_properties(self, mock_model_list): import openai + old_base = openai.api_base - openai.api_base = 'https://openrouter.ai/api/v1' + openai.api_base = "https://openrouter.ai/api/v1" mock_model_list.return_value = { - 'data': [ + "data": [ { - 'id': 'openai/gpt-4', - 'object': 'model', - 'context_length': '8192', - 'pricing': { - 'prompt': '0.00006', - 'completion': '0.00012' - } + "id": "openai/gpt-4", + "object": "model", + "context_length": "8192", + "pricing": {"prompt": "0.00006", "completion": "0.00012"}, } ] } - mock_model_list.return_value = type('', (), {'data': mock_model_list.return_value['data']})() + mock_model_list.return_value = type( + "", (), {"data": mock_model_list.return_value["data"]} + )() model = OpenRouterModel("gpt-4") - self.assertEqual(model.name, 'openai/gpt-4') + self.assertEqual(model.name, "openai/gpt-4") self.assertEqual(model.max_context_tokens, 8192) self.assertEqual(model.prompt_price, 0.06) self.assertEqual(model.completion_price, 0.12) openai.api_base = old_base + if __name__ == "__main__": unittest.main()