From 35ccfac3fd0b3913d402c319f81d8cfce62d4744 Mon Sep 17 00:00:00 2001
From: Paul Gauthier
Date: Wed, 26 Jul 2023 17:34:50 -0300
Subject: [PATCH 3/7] aider: Updated the output of `/tokens` to include the
total cost.
# Aider chat conversation:
USER: udpate the output of /tokens to include the total $ cost
ASSISTANT: To include the total cost in the output of the `/tokens` command, we need to modify the `cmd_tokens` method in the `Commands` class in the `aider/commands.py` file.
We will add a new variable `total_cost` to keep track of the total cost. For each token count, we will calculate the cost by multiplying the token count by the model's `completion_price` (since we're considering the cost of generating these tokens). We will then add this cost to `total_cost`.
Finally, we will add a line to the output to display the total cost.
Here are the changes:
python
aider/commands.py
<<<<<<< ORIGINAL
total = 0
for tk, msg, tip in res:
total += tk
msg = msg.ljust(col_width)
self.io.tool_output(f"{fmt(tk)} {msg} {tip}")
self.io.tool_output("=" * width)
self.io.tool_output(f"{fmt(total)} tokens total")
=======
total = 0
total_cost = 0.0
for tk, msg, tip in res:
total += tk
cost = tk * self.coder.main_model.completion_price
total_cost += cost
msg = msg.ljust(col_width)
self.io.tool_output(f"{fmt(tk)} {msg} {tip} (cost: ${cost:.2f})")
self.io.tool_output("=" * width)
self.io.tool_output(f"{fmt(total)} tokens total (cost: ${total_cost:.2f})")
>>>>>>> UPDATED
---
aider/commands.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/aider/commands.py b/aider/commands.py
index 6fd5fa594..8f8e4ac26 100644
--- a/aider/commands.py
+++ b/aider/commands.py
@@ -142,13 +142,16 @@ class Commands:
col_width = max(len(row[1]) for row in res)
total = 0
+ total_cost = 0.0
for tk, msg, tip in res:
total += tk
+ cost = tk * self.coder.main_model.completion_price
+ total_cost += cost
msg = msg.ljust(col_width)
- self.io.tool_output(f"{fmt(tk)} {msg} {tip}")
+ self.io.tool_output(f"{fmt(tk)} {msg} {tip} (cost: ${cost:.2f})")
self.io.tool_output("=" * width)
- self.io.tool_output(f"{fmt(total)} tokens total")
+ self.io.tool_output(f"{fmt(total)} tokens total (cost: ${total_cost:.2f})")
limit = self.coder.main_model.max_context_tokens
remaining = limit - total
From 2094b3176bd69ca94d1e70400db3c1ce2a0b43b1 Mon Sep 17 00:00:00 2001
From: Paul Gauthier
Date: Wed, 26 Jul 2023 17:35:42 -0300
Subject: [PATCH 4/7] aider: Adjusted the calculation of the cost in the
`cmd_tokens` method to account for the prices in `Model` being per 1k tokens.
# Aider chat conversation:
USER: the prices in `Model` are per 1k tokens
ASSISTANT: I see, the prices in the `Model` class are per 1k tokens. Therefore, we need to adjust the calculation of the cost in the `cmd_tokens` method in the `Commands` class in the `aider/commands.py` file.
We will divide the `completion_price` by 1000 before multiplying it with the token count to get the cost.
Here are the changes:
python
aider/commands.py
<<<<<<< ORIGINAL
total = 0
total_cost = 0.0
for tk, msg, tip in res:
total += tk
cost = tk * self.coder.main_model.completion_price
total_cost += cost
msg = msg.ljust(col_width)
self.io.tool_output(f"{fmt(tk)} {msg} {tip} (cost: ${cost:.2f})")
self.io.tool_output("=" * width)
self.io.tool_output(f"{fmt(total)} tokens total (cost: ${total_cost:.2f})")
=======
total = 0
total_cost = 0.0
for tk, msg, tip in res:
total += tk
cost = tk * (self.coder.main_model.completion_price / 1000)
total_cost += cost
msg = msg.ljust(col_width)
self.io.tool_output(f"{fmt(tk)} {msg} {tip} (cost: ${cost:.2f})")
self.io.tool_output("=" * width)
self.io.tool_output(f"{fmt(total)} tokens total (cost: ${total_cost:.2f})")
>>>>>>> UPDATED
---
aider/commands.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/aider/commands.py b/aider/commands.py
index 8f8e4ac26..ebb5c4fb9 100644
--- a/aider/commands.py
+++ b/aider/commands.py
@@ -145,7 +145,7 @@ class Commands:
total_cost = 0.0
for tk, msg, tip in res:
total += tk
- cost = tk * self.coder.main_model.completion_price
+ cost = tk * (self.coder.main_model.completion_price / 1000)
total_cost += cost
msg = msg.ljust(col_width)
self.io.tool_output(f"{fmt(tk)} {msg} {tip} (cost: ${cost:.2f})")
From ecd37b1ad55b26ca8018497f593437661f3533fb Mon Sep 17 00:00:00 2001
From: Paul Gauthier
Date: Wed, 26 Jul 2023 17:43:16 -0300
Subject: [PATCH 5/7] prettier cost output in /tokens
---
aider/commands.py | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/aider/commands.py b/aider/commands.py
index ebb5c4fb9..0eae3a8b1 100644
--- a/aider/commands.py
+++ b/aider/commands.py
@@ -135,36 +135,38 @@ class Commands:
self.io.tool_output()
width = 8
+ cost_width = 7
def fmt(v):
return format(int(v), ",").rjust(width)
col_width = max(len(row[1]) for row in res)
+ cost_pad = " " * cost_width
total = 0
total_cost = 0.0
for tk, msg, tip in res:
total += tk
- cost = tk * (self.coder.main_model.completion_price / 1000)
+ cost = tk * (self.coder.main_model.prompt_price / 1000)
total_cost += cost
msg = msg.ljust(col_width)
- self.io.tool_output(f"{fmt(tk)} {msg} {tip} (cost: ${cost:.2f})")
+ self.io.tool_output(f"${cost:5.2f} {fmt(tk)} {msg} {tip}")
- self.io.tool_output("=" * width)
- self.io.tool_output(f"{fmt(total)} tokens total (cost: ${total_cost:.2f})")
+ self.io.tool_output("=" * (width + cost_width + 1))
+ self.io.tool_output(f"${total_cost:5.2f} {fmt(total)} tokens total")
limit = self.coder.main_model.max_context_tokens
remaining = limit - total
if remaining > 1024:
- self.io.tool_output(f"{fmt(remaining)} tokens remaining in context window")
+ self.io.tool_output(f"{cost_pad}{fmt(remaining)} tokens remaining in context window")
elif remaining > 0:
self.io.tool_error(
- f"{fmt(remaining)} tokens remaining in context window (use /drop or /clear to make"
- " space)"
+ f"{cost_pad}{fmt(remaining)} tokens remaining in context window (use /drop or"
+ " /clear to make space)"
)
else:
- self.io.tool_error(f"{fmt(remaining)} tokens remaining, window exhausted!")
- self.io.tool_output(f"{fmt(limit)} tokens max context window size")
+ self.io.tool_error(f"{cost_pad}{fmt(remaining)} tokens remaining, window exhausted!")
+ self.io.tool_output(f"{cost_pad}{fmt(limit)} tokens max context window size")
def cmd_undo(self, args):
"Undo the last git commit if it was done by aider"
From c6f99c9b66fef34df6fa3d376ee5ce79cdcc4c17 Mon Sep 17 00:00:00 2001
From: Paul Gauthier
Date: Thu, 27 Jul 2023 06:47:47 -0300
Subject: [PATCH 6/7] Updated discord link
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 9017d84c8..a32d8661d 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ It also has features that [help GPT-4 understand and modify larger codebases](ht