fix: Add cache control headers to chat messages

This commit is contained in:
Paul Gauthier 2024-08-17 07:02:56 -07:00 committed by Paul Gauthier (aider)
parent a849a98164
commit 022d103a99
2 changed files with 35 additions and 5 deletions

View file

@ -66,14 +66,39 @@ class ChatChunks:
return ( return (
self.system self.system
+ self.examples + self.examples
+ self.done
+ self.repo + self.repo
+ self.readonly_files + self.readonly_files
+ self.done
+ self.chat_files + self.chat_files
+ self.cur + self.cur
+ self.reminder + self.reminder
) )
def add_cache_control_headers(self):
if self.examples:
self.add_cache_control(self.examples)
else:
self.add_cache_control(self.system)
if self.readonly_files:
self.add_cache_control(self.readonly_files)
else:
self.add_cache_control(self.repo)
self.add_cache_control(self.chat_files)
def add_cache_control(self, messages):
if not messages:
return
content = messages[-1]
if type(content) is str:
content = dict(
type="text",
text=content,
)
content["cache_control"] = {"type": "ephemeral"}
class Coder: class Coder:
abs_fnames = None abs_fnames = None
@ -257,12 +282,12 @@ class Coder:
total_cost=0.0, total_cost=0.0,
map_refresh="auto", map_refresh="auto",
cache_prompts=False, cache_prompts=False,
cache_prompts=False,
): ):
self.commit_before_message = [] self.commit_before_message = []
self.aider_commit_hashes = set() self.aider_commit_hashes = set()
self.rejected_urls = set() self.rejected_urls = set()
self.abs_root_path_cache = {} self.abs_root_path_cache = {}
self.cache_prompts = cache_prompts
if not fnames: if not fnames:
fnames = [] fnames = []
@ -991,6 +1016,9 @@ class Coder:
def format_messages(self): def format_messages(self):
chunks = self.format_chat_chunks() chunks = self.format_chat_chunks()
if self.cache_prompts and self.main_model.cache_control:
chunks.add_cache_control_headers()
return chunks.all_messages() return chunks.all_messages()
def send_message(self, inp): def send_message(self, inp):

View file

@ -74,7 +74,7 @@ class ModelSettings:
examples_as_sys_msg: bool = False examples_as_sys_msg: bool = False
extra_headers: Optional[dict] = None extra_headers: Optional[dict] = None
max_tokens: Optional[int] = None max_tokens: Optional[int] = None
cache_control_enabled: bool = False cache_control: bool = False
# https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo # https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo
@ -274,6 +274,7 @@ MODEL_SETTINGS = [
extra_headers={ extra_headers={
"anthropic-beta": ANTHROPIC_BETA_HEADER, "anthropic-beta": ANTHROPIC_BETA_HEADER,
}, },
cache_control=True,
), ),
ModelSettings( ModelSettings(
"anthropic/claude-3-5-sonnet-20240620", "anthropic/claude-3-5-sonnet-20240620",
@ -285,6 +286,7 @@ MODEL_SETTINGS = [
extra_headers={ extra_headers={
"anthropic-beta": ANTHROPIC_BETA_HEADER, "anthropic-beta": ANTHROPIC_BETA_HEADER,
}, },
cache_control=True,
), ),
ModelSettings( ModelSettings(
"openrouter/anthropic/claude-3.5-sonnet", "openrouter/anthropic/claude-3.5-sonnet",
@ -296,8 +298,8 @@ MODEL_SETTINGS = [
max_tokens=8192, max_tokens=8192,
extra_headers={ extra_headers={
"anthropic-beta": "max-tokens-3-5-sonnet-2024-07-15", "anthropic-beta": "max-tokens-3-5-sonnet-2024-07-15",
"HTTP-Referer": "https://aider.chat", "HTTP-Referer": AIDER_SITE_URL,
"X-Title": "Aider", "X-Title": AIDER_APP_NAME,
}, },
), ),
# Vertex AI Claude models # Vertex AI Claude models