diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 250f50e57..ae1424774 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -38,6 +38,7 @@ class Coder: last_asked_for_commit_time = 0 repo_map = None functions = None + total_cost = 0.0 @classmethod def create( @@ -526,12 +527,22 @@ class Coder: except AttributeError: pass + prompt_tokens = completion.usage.prompt_tokens + completion_tokens = completion.usage.completion_tokens + + tokens = f"{prompt_tokens} prompt tokens, {completion_tokens} completion tokens" + if self.main_model.prompt_price: + cost = prompt_tokens * self.main_model.prompt_price / 1000 + cost += completion_tokens * self.main_model.completion_price / 1000 + tokens += f", ${cost:.6f} cost" + self.total_cost += cost + show_resp = self.render_incremental_response(True) if self.pretty: - md = Markdown(show_resp, style=self.assistant_output_color, code_theme="default") - self.io.console.print(md) - else: - print(show_resp) + show_resp = Markdown(show_resp, style=self.assistant_output_color, code_theme="default") + + self.io.console.print(show_resp) + self.io.console.print(tokens) def show_send_output_stream(self, completion, silent): live = None diff --git a/aider/models.py b/aider/models.py index 4871ad884..cf20dee36 100644 --- a/aider/models.py +++ b/aider/models.py @@ -11,6 +11,9 @@ class Model: use_repo_map = False send_undo_reply = False + prompt_price = None + completion_price = None + def __init__(self, name): self.name = name @@ -33,11 +36,27 @@ class Model: self.edit_format = "diff" self.use_repo_map = True self.send_undo_reply = True + + if tokens == 8: + self.prompt_price = 0.03 + self.completion_price = 0.06 + elif tokens == 32: + self.prompt_price = 0.06 + self.completion_price = 0.12 + return if self.is_gpt35(): self.edit_format = "whole-func" self.always_available = True + + if tokens == 4: + self.prompt_price = 0.0015 + self.completion_price = 0.002 + elif tokens == 16: + self.prompt_price = 0.003 + self.completion_price = 0.004 + return raise ValueError(f"Unsupported model: {name}")