Skip to content

Commit 3736902

Browse files
author
Your Name
committed
Add --cost-limit parameter to constrain model costs
1 parent 7ea7aa2 commit 3736902

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

cecli/args.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,12 @@ def get_parser(default_config_files, git_root):
260260
default=3,
261261
help="Maximum number of retries a model gets on malformed outputs (default: 3)",
262262
)
263+
group.add_argument(
264+
"--cost-limit",
265+
type=float,
266+
default=None,
267+
help="Cost limit per session, exceeding this forces prompt confirmation (default: None)",
268+
)
263269
group.add_argument(
264270
"--file-diffs",
265271
action=argparse.BooleanOptionalAction,

cecli/coders/base_coder.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ class Coder:
157157
last_user_message = ""
158158
uuid = ""
159159
model_kwargs = {}
160+
cost_multiplier = 1
160161

161162
# Task coordination state variables
162163
input_running = False
@@ -1580,6 +1581,18 @@ async def run_one(self, user_message, preproc):
15801581
self.reflected_message = None
15811582
self.tool_reflection = False
15821583

1584+
if float(self.total_cost) > self.cost_multiplier * nested.getter(
1585+
self.args, "cost_limit", float("inf")
1586+
):
1587+
if await self.io.confirm_ask(
1588+
"You have reached your configured cost limit. Continue?",
1589+
group_response="Cost Limit",
1590+
explicit_yes_required=True,
1591+
):
1592+
Coder.cost_multiplier += 1
1593+
else:
1594+
return
1595+
15831596
async for _ in self.send_message(message):
15841597
pass
15851598

0 commit comments

Comments
 (0)