The source code output in the chat will be colored in the given
color scheme. Syntax highlighting is powered by pygments, which
supports many styles out of the box. For example:
- default (the default)
- dracula
- emacs
- github-dark
- monokai
- vim
- solarized-dark
- solarized-light
See https://pygments.org/styles/
# Context:
USER: change the `functions` jsonschema so that `original_lines` is a list of strings and so is `update_files`
ASSISTANT: To make the requested changes, we need to modify the `functions` JSON schema in the `EditBlockFunctionCoder` class in the `aider/coders/editblock_func_coder.py` file.
Here is the change:
```python
aider/coders/editblock_func_coder.py
<<<<<<< ORIGINAL
properties=dict(
path=dict(
type="string",
description="Path of file to edit",
),
original_lines=dict(
type="string",
description=(
"Lines from the original file, including all"
" whitespace, newlines, without skipping any lines"
),
),
updated_lines=dict(
type="string",
description="New content to replace the `original_lines` with",
),
),
=======
properties=dict(
path=dict(
type="string",
description="Path of file to edit",
),
original_lines=dict(
type="array",
items=dict(
type="string",
),
description=(
"Lines from the original file, including all"
" whitespace, newlines, without skipping any lines"
),
),
updated_lines=dict(
type="array",
items=dict(
type="string",
),
description="New content to replace the `original_lines` with",
),
),
>>>>>>> UPDATED
```
This change modifies the `original_lines` and `updated_lines` properties to be an array of strings instead of a single string. This allows for multiple lines to be specified in the `original_lines` and `updated_lines` fields.
# Context:
USER: when calling `ChatCompletion`, take a sha1 hash of dict with all the args and append it to a list self.chat_completion_call_hashes
ASSISTANT: To implement this change, we need to modify the `send_with_retries` method in the `Coder` class in the `aider/coders/base_coder.py` file. We will import the `hashlib` module to generate the SHA1 hash. We will also add a new attribute `chat_completion_call_hashes` to the `Coder` class to store the hashes.
Here are the changes:
```python
aider/coders/base_coder.py
<<<<<<< ORIGINAL
import json
import os
import sys
import traceback
from json.decoder import JSONDecodeError
from pathlib import Path
=======
import hashlib
import json
import os
import sys
import traceback
from json.decoder import JSONDecodeError
from pathlib import Path
>>>>>>> UPDATED
```
```python
aider/coders/base_coder.py
<<<<<<< ORIGINAL
class Coder:
abs_fnames = None
repo = None
last_aider_commit_hash = None
last_asked_for_commit_time = 0
repo_map = None
functions = None
total_cost = 0.0
=======
class Coder:
abs_fnames = None
repo = None
last_aider_commit_hash = None
last_asked_for_commit_time = 0
repo_map = None
functions = None
total_cost = 0.0
chat_completion_call_hashes = []
>>>>>>> UPDATED
```
```python
aider/coders/base_coder.py
<<<<<<< ORIGINAL
def send_with_retries(self, model, messages, functions):
kwargs = dict(
model=model,
messages=messages,
temperature=0,
stream=self.stream,
)
if functions is not None:
kwargs["functions"] = self.functions
res = openai.ChatCompletion.create(**kwargs)
return res
=======
def send_with_retries(self, model, messages, functions):
kwargs = dict(
model=model,
messages=messages,
temperature=0,
stream=self.stream,
)
if functions is not None:
kwargs["functions"] = self.functions
# Generate SHA1 hash of kwargs and append it to chat_completion_call_hashes
hash_object = hashlib.sha1(json.dumps(kwargs, sort_keys=True).encode())
self.chat_completion_call_hashes.append(hash_object.hexdigest())
res = openai.ChatCompletion.create(**kwargs)
return res
>>>>>>> UPDATED
```