NahFam13's picture
z1
d26280a verified
from pathlib import Path
# class Code(MutableMapping[str | Path, str]):
# ToDo: implement as mutable mapping, potentially holding a dict instead of being a dict.
class FilesDict(dict):
"""
A dictionary-based container for managing code files.
This class extends the standard dictionary to enforce string keys and values,
representing filenames and their corresponding code content. It provides a method
to format its contents for chat-based interaction with an AI agent.
Methods
-------
to_chat() -> str:
Format the code files for chat-based interaction, returning a string suitable for AI input.
"""
def __setitem__(self, key, value):
"""
Set the code content for the given filename.
This method overrides the dictionary's __setitem__ to enforce type checks on the key and value.
The key must be a string or a Path object, and the value must be a string representing the code content.
Parameters
----------
key : str | Path
The filename as a key for the code content.
value : str
The code content to associate with the filename.
"""
if not isinstance(key, (str, Path)):
raise TypeError("Keys must be strings or Path's")
if not isinstance(value, str):
raise TypeError("Values must be strings")
super().__setitem__(key, value)
def to_chat(self):
def format_file_to_input(file_name: str, file_content: str) -> str:
"""
Format a file string to use as input to the AI agent.
Parameters
----------
file_name : str
The name of the file.
file_content : str
The content of the file.
Returns
-------
str
The formatted file string.
"""
file_str = f"""
{file_name}
```
{file_content}
```
"""
return file_str
return "\n".join(
[
format_file_to_input(file_name, file_content) + "\n"
for file_name, file_content in self.items()
]
)