From d0bce02c008425175379809fb22239ee10469fdf Mon Sep 17 00:00:00 2001 From: hypn4 Date: Thu, 19 Sep 2024 16:59:05 +0900 Subject: [PATCH 1/3] feat: add `extra_body`field and use in model settings. resolved: #1583 The `extra_body` field is a parameter used by the `openai` provider. Since `litellm` also uses this field to additionally transmit `request body`, I added a function so that `aider` can also utilize the `extra_body` field. The `openrouter` provider also supports various functions through the additional field of `request body`, so we added the function. The following is how to use it in model settings. ```yaml # .aider.model.settings.yml - name: "openrouter/" edit_format: "whole" use_repo_map: true extra_body: provider: order: - Azure allow_fallbacks: false ``` --- aider/coders/base_coder.py | 1 + aider/models.py | 1 + aider/sendchat.py | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 3960515af..3d04b50bd 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -1396,6 +1396,7 @@ class Coder: self.stream, temp, extra_headers=model.extra_headers, + extra_body=model.extra_body, max_tokens=model.max_tokens, ) self.chat_completion_call_hashes.append(hash_object.hexdigest()) diff --git a/aider/models.py b/aider/models.py index 744515336..29c3654ce 100644 --- a/aider/models.py +++ b/aider/models.py @@ -74,6 +74,7 @@ class ModelSettings: reminder: str = "user" examples_as_sys_msg: bool = False extra_headers: Optional[dict] = None + extra_body: Optional[dict] = None max_tokens: Optional[int] = None cache_control: bool = False caches_by_default: bool = False diff --git a/aider/sendchat.py b/aider/sendchat.py index 1ac34f9ab..d651e5902 100644 --- a/aider/sendchat.py +++ b/aider/sendchat.py @@ -53,6 +53,7 @@ def send_completion( stream, temperature=0, extra_headers=None, + extra_body=None, max_tokens=None, ): from aider.llm import litellm @@ -71,6 +72,8 @@ def send_completion( kwargs["tool_choice"] = {"type": "function", "function": {"name": function["name"]}} if extra_headers is not None: kwargs["extra_headers"] = extra_headers + if extra_body is not None: + kwargs["extra_body"] = extra_body if max_tokens is not None: kwargs["max_tokens"] = max_tokens @@ -103,6 +106,8 @@ def simple_send_with_retries(model_name, messages, extra_headers=None): } if extra_headers is not None: kwargs["extra_headers"] = extra_headers + if extra_body is not None: + kwargs["extra_body"] = extra_body _hash, response = send_completion(**kwargs) return response.choices[0].message.content From 6dc846d41ba6dbc42ce0e56fb86544f807b9ebc3 Mon Sep 17 00:00:00 2001 From: hypn4 Date: Sat, 21 Sep 2024 05:23:38 +0900 Subject: [PATCH 2/3] fix: added missing parameters. added missing parameters in `simple_send_with_retries` function. --- aider/sendchat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aider/sendchat.py b/aider/sendchat.py index d651e5902..6678b5ed2 100644 --- a/aider/sendchat.py +++ b/aider/sendchat.py @@ -96,7 +96,7 @@ def send_completion( @lazy_litellm_retry_decorator -def simple_send_with_retries(model_name, messages, extra_headers=None): +def simple_send_with_retries(model_name, messages, extra_headers=None, extra_body=None): try: kwargs = { "model_name": model_name, From a4044f4175f9d6559c0ee786a6d66ec5f6a32e46 Mon Sep 17 00:00:00 2001 From: hypn4 Date: Sun, 22 Sep 2024 04:02:49 +0900 Subject: [PATCH 3/3] feat: add `.venv` directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4216b9c5d..7767cef8f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ _site .jekyll-cache/ .jekyll-metadata aider/__version__.py +.venv/ \ No newline at end of file