Skip to content

Commit

Permalink
Log prompt-tokens to devdb and show in 'My Usage' view (#1309)
Browse files Browse the repository at this point in the history
* Also log the number of prompt tokens to the dev-db

* Show prompt tokens in 'My Usage' view
  • Loading branch information
tijszwinkels authored and sestinj committed Jun 23, 2024
1 parent 4d795e3 commit 7c5eb47
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 38 deletions.
2 changes: 2 additions & 0 deletions core/llm/countTokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ function countTokens(
? countImageTokens(part)
: encoding.encode(part.text ?? "", "all", []).length;
}, 0);
} else {
return encoding.encode(content ?? "", "all", []).length;
}
return encoding.encode(content, "all", []).length;
}
Expand Down
8 changes: 5 additions & 3 deletions core/llm/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -225,15 +225,16 @@ ${settings}
${prompt}`;
}

private _logTokensGenerated(model: string, completion: string) {
const tokens = this.countTokens(completion);
private _logTokensGenerated(model: string, prompt: string, completion: string) {
let promptTokens = this.countTokens(prompt);
let generatedTokens = this.countTokens(completion);
Telemetry.capture("tokens_generated", {
model: model,
provider: this.providerName,
promptTokens: promptTokens,
generatedTokens: generatedTokens,
});
DevDataSqliteDb.logTokensGenerated(model, this.providerName, tokens);
DevDataSqliteDb.logTokensGenerated(model, this.providerName, promptTokens, generatedTokens);
}

fetch(url: RequestInfo | URL, init?: RequestInit): Promise<Response> {
Expand Down Expand Up @@ -594,3 +595,4 @@ ${prompt}`;
return rendered;
}
}

18 changes: 7 additions & 11 deletions core/util/devdataSqlite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,28 +19,24 @@ export class DevDataSqliteDb {

// Add tokens_prompt column if it doesn't exist
const columnCheckResult = await db.all(
`PRAGMA table_info(tokens_generated);`,
);
const columnExists = columnCheckResult.some(
(col: any) => col.name === "tokens_prompt",
`PRAGMA table_info(tokens_generated);`
);
const columnExists = columnCheckResult.some((col: any) => col.name === "tokens_prompt");
if (!columnExists) {
await db.exec(
`ALTER TABLE tokens_generated ADD COLUMN tokens_prompt INTEGER NOT NULL DEFAULT 0;`,
);
await db.exec(`ALTER TABLE tokens_generated ADD COLUMN tokens_prompt INTEGER NOT NULL DEFAULT 0;`);
}
}

public static async logTokensGenerated(
model: string,
provider: string,
promptTokens: number,
generatedTokens: number,
generatedTokens: number
) {
const db = await DevDataSqliteDb.get();
await db?.run(
"INSERT INTO tokens_generated (model, provider, tokens_generated) VALUES (?, ?, ?)",
[model, provider, tokens],
`INSERT INTO tokens_generated (model, provider, tokens_prompt, tokens_generated) VALUES (?, ?, ?, ?)`,
[model, provider, promptTokens, generatedTokens],
);
}

Expand Down Expand Up @@ -83,4 +79,4 @@ export class DevDataSqliteDb {

return DevDataSqliteDb.db;
}
}
}
4 changes: 2 additions & 2 deletions core/web/webviewProtocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ export type WebviewProtocol = Protocol &
reloadWindow: [undefined, void];
focusEditor: [undefined, void];
toggleFullScreen: [undefined, void];
"stats/getTokensPerDay": [undefined, { day: string; tokens: number }[]];
"stats/getTokensPerModel": [undefined, { model: string; tokens: number }[]];
"stats/getTokensPerDay": [undefined, { day: string; promptTokens: number; generatedTokens: number }[]];
"stats/getTokensPerModel": [undefined, { model: string; promptTokens: number; generatedTokens: number }[]];
insertAtCursor: [{ text: string }, void];
copyText: [{ text: string }, void];
"jetbrains/editorInsetHeight": [{ height: number }, void];
Expand Down
32 changes: 10 additions & 22 deletions gui/src/pages/stats.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,25 +38,21 @@ function Stats() {
const navigate = useNavigate();
const ideMessenger = useContext(IdeMessengerContext);

const [days, setDays] = useState<
{ day: string; promptTokens: number; generatedTokens: number }[]
>([]);
const [models, setModels] = useState<
{ model: string; promptTokens: number; generatedTokens: number }[]
>([]);
const [days, setDays] = useState<{ day: string; promptTokens: number; generatedTokens: number }[]>([]);
const [models, setModels] = useState<{ model: string; promptTokens: number; generatedTokens: number }[]>([]);

useEffect(() => {
ideMessenger.request("stats/getTokensPerDay", undefined).then((days) => {
ideRequest("stats/getTokensPerDay", undefined).then((days) => {
console.log("days", days);
setDays(days);
});
}, []);

useEffect(() => {
ideMessenger
.request("stats/getTokensPerModel", undefined)
.then((models) => {
setModels(models);
});
ideRequest("stats/getTokensPerModel", undefined).then((models) => {
console.log("models", models);
setModels(models);
});
}, []);

return (
Expand All @@ -82,11 +78,7 @@ function Stats() {
<CopyButton
text={generateTable(
([["Day", "Generated Tokens", "Prompt Tokens"]] as any).concat(
days.map((day) => [
day.day,
day.generatedTokens,
day.promptTokens,
]),
days.map((day) => [day.day, day.generatedTokens, day.promptTokens]),
),
)}
/>
Expand Down Expand Up @@ -115,11 +107,7 @@ function Stats() {
<CopyButton
text={generateTable(
([["Model", "Generated Tokens", "Prompt Tokens"]] as any).concat(
models.map((model) => [
model.model,
model.generatedTokens,
model.promptTokens,
]),
models.map((model) => [model.model, model.generatedTokens, model.promptTokens]),
),
)}
/>
Expand Down

0 comments on commit 7c5eb47

Please sign in to comment.