Skip to content

Commit 243c2ca

Browse files
committed
fix: enhance model cost estimation for GitHub provider and update tests
1 parent d69a373 commit 243c2ca

2 files changed

Lines changed: 22 additions & 4 deletions

File tree

packages/core/src/usage.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
CHAR_FLOPPY_DISK,
2323
CHAR_UP_DOWN_ARROWS,
2424
MODEL_PRICINGS,
25+
MODEL_PROVIDER_GITHUB,
2526
} from "./constants.js";
2627
import { prettyCost, prettyTokensPerSecond, prettyDuration, prettyTokens } from "./pretty.js";
2728
import { genaiscriptDebug } from "./debug.js";
@@ -40,11 +41,20 @@ export function estimateCost(modelId: string, usage: ChatCompletionUsage) {
4041

4142
const { completion_tokens, prompt_tokens } = usage;
4243
let { provider, model } = parseModelIdentifier(modelId);
44+
45+
if (provider === MODEL_PROVIDER_GITHUB) {
46+
if (/^openai\//.test(model)) {
47+
dbg(`patch %s -> %s`, modelId, model);
48+
model = model.replace(/^openai\//, "");
49+
}
50+
}
51+
4352
let mid = `${provider}:${model}`.toLowerCase();
4453
let cost = MODEL_PRICINGS[mid];
4554
if (!cost) {
55+
// match specific model names
4656
const m = model.match(
47-
/^gpt-(3\.5|4|4o|o1|o3|o4|o4-mini|o1-mini|o1-preview|4o-mini|o3-mini|4\.1|4\.1-mini|4\.1-nano)/,
57+
/^(gpt-(3\.5|4|4o|4\.1|4\.1-mini|4\.1-nano)|o1|o3|o4|o4-mini|o1-mini|o3-mini|o1-preview|4o-mini)/,
4858
);
4959
if (m) {
5060
model = m[0];

packages/core/test/usage.test.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,17 @@ describe("usage", () => {
1313
completion_tokens: 50,
1414
total_tokens: 150,
1515
};
16-
const cost = estimateCost("openai:chatgpt-4o-latest", usage);
17-
assert(typeof cost === "number");
18-
assert.strictEqual(cost, 0.00075);
16+
for (const model of [
17+
"openai:chatgpt-4o-latest",
18+
"github:gpt-4o",
19+
"github:openai/gpt-4o",
20+
"azure:gpt-4o",
21+
]) {
22+
console.log(model);
23+
const cost = estimateCost(model, usage);
24+
assert(typeof cost === "number");
25+
assert.strictEqual(cost, 0.00075);
26+
}
1927
});
2028

2129
test("should match model pattern when exact model not found", () => {

0 commit comments

Comments
 (0)