Skip to content

Commit 78a5cb1

Browse files
authored
chore: agent.usage() (#38790)
1 parent 01b6f51 commit 78a5cb1

File tree

10 files changed

+85
-1
lines changed

10 files changed

+85
-1
lines changed

docs/src/api/class-pageagent.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,19 @@ Task to perform using agentic loop.
9696

9797
### option: PageAgent.perform.-inline- = %%-page-agent-call-options-v1.58-%%
9898
* since: v1.58
99+
100+
## async method: PageAgent.usage
101+
* since: v1.58
102+
- returns: <[Object]>
103+
- `turns` <[int]>
104+
- `inputTokens` <[int]>
105+
- `outputTokens` <[int]>
106+
107+
Returns the current token usage for this agent.
108+
109+
**Usage**
110+
111+
```js
112+
const usage = await agent.usage();
113+
console.log(`Tokens used: ${usage.inputTokens} in, ${usage.outputTokens} out`);
114+
```

packages/playwright-client/types/types.d.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5462,6 +5462,25 @@ export interface PageAgent {
54625462
};
54635463
}>;
54645464

5465+
/**
5466+
* Returns the current token usage for this agent.
5467+
*
5468+
* **Usage**
5469+
*
5470+
* ```js
5471+
* const usage = await agent.usage();
5472+
* console.log(`Tokens used: ${usage.inputTokens} in, ${usage.outputTokens} out`);
5473+
* ```
5474+
*
5475+
*/
5476+
usage(): Promise<{
5477+
turns: number;
5478+
5479+
inputTokens: number;
5480+
5481+
outputTokens: number;
5482+
}>;
5483+
54655484
[Symbol.asyncDispose](): Promise<void>;
54665485
}
54675486

packages/playwright-core/src/client/pageAgent.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ export class PageAgent extends ChannelOwner<channels.PageAgentChannel> implement
5656
return { result, usage };
5757
}
5858

59+
async usage() {
60+
const { usage } = await this._channel.usage({});
61+
return usage;
62+
}
63+
5964
async dispose() {
6065
await this._channel.dispose();
6166
}

packages/playwright-core/src/protocol/validator.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2939,6 +2939,10 @@ scheme.PageAgentExtractResult = tObject({
29392939
});
29402940
scheme.PageAgentDisposeParams = tOptional(tObject({}));
29412941
scheme.PageAgentDisposeResult = tOptional(tObject({}));
2942+
scheme.PageAgentUsageParams = tOptional(tObject({}));
2943+
scheme.PageAgentUsageResult = tObject({
2944+
usage: tType('AgentUsage'),
2945+
});
29422946
scheme.AgentUsage = tObject({
29432947
turns: tInt,
29442948
inputTokens: tInt,

packages/playwright-core/src/server/dispatchers/pageAgentDispatcher.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ export class PageAgentDispatcher extends Dispatcher<SdkObject, channels.PageAgen
6262
return { result, usage: this._usage };
6363
}
6464

65+
async usage(params: channels.PageAgentUsageParams, progress: Progress): Promise<channels.PageAgentUsageResult> {
66+
return { usage: this._usage };
67+
}
68+
6569
async dispose(params: channels.PageAgentDisposeParams, progress: Progress): Promise<void> {
6670
}
6771

packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,5 +316,6 @@ export const methodMetainfo = new Map<string, { internal?: boolean, title?: stri
316316
['PageAgent.perform', { title: 'Perform "{task}"', }],
317317
['PageAgent.expect', { title: 'Expect "{expectation}"', }],
318318
['PageAgent.extract', { title: 'Extract "{query}"', }],
319-
['PageAgent.dispose', { internal: true, }]
319+
['PageAgent.dispose', { internal: true, }],
320+
['PageAgent.usage', { title: 'Get agent usage', group: 'configuration', }]
320321
]);

packages/playwright-core/types/types.d.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5462,6 +5462,25 @@ export interface PageAgent {
54625462
};
54635463
}>;
54645464

5465+
/**
5466+
* Returns the current token usage for this agent.
5467+
*
5468+
* **Usage**
5469+
*
5470+
* ```js
5471+
* const usage = await agent.usage();
5472+
* console.log(`Tokens used: ${usage.inputTokens} in, ${usage.outputTokens} out`);
5473+
* ```
5474+
*
5475+
*/
5476+
usage(): Promise<{
5477+
turns: number;
5478+
5479+
inputTokens: number;
5480+
5481+
outputTokens: number;
5482+
}>;
5483+
54655484
[Symbol.asyncDispose](): Promise<void>;
54665485
}
54675486

packages/playwright/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,10 @@ const playwrightFixtures: Fixtures<TestFixtures, WorkerFixtures> = ({
486486

487487
await use(agent);
488488

489+
const usage = await agent.usage();
490+
if (usage.turns > 0)
491+
await testInfoImpl.attach('agent-usage', { contentType: 'application/json', body: Buffer.from(JSON.stringify(usage, null, 2)) });
492+
489493
if (!resolvedCacheFile || !cacheOutFile)
490494
return;
491495
if (testInfo.status !== 'passed')

packages/protocol/src/channels.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5103,6 +5103,7 @@ export interface PageAgentChannel extends PageAgentEventTarget, EventTargetChann
51035103
expect(params: PageAgentExpectParams, progress?: Progress): Promise<PageAgentExpectResult>;
51045104
extract(params: PageAgentExtractParams, progress?: Progress): Promise<PageAgentExtractResult>;
51055105
dispose(params?: PageAgentDisposeParams, progress?: Progress): Promise<PageAgentDisposeResult>;
5106+
usage(params?: PageAgentUsageParams, progress?: Progress): Promise<PageAgentUsageResult>;
51065107
}
51075108
export type PageAgentTurnEvent = {
51085109
role: string,
@@ -5165,6 +5166,11 @@ export type PageAgentExtractResult = {
51655166
export type PageAgentDisposeParams = {};
51665167
export type PageAgentDisposeOptions = {};
51675168
export type PageAgentDisposeResult = void;
5169+
export type PageAgentUsageParams = {};
5170+
export type PageAgentUsageOptions = {};
5171+
export type PageAgentUsageResult = {
5172+
usage: AgentUsage,
5173+
};
51685174

51695175
export interface PageAgentEvents {
51705176
'turn': PageAgentTurnEvent;

packages/protocol/src/protocol.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4352,6 +4352,12 @@ PageAgent:
43524352
dispose:
43534353
internal: true
43544354

4355+
usage:
4356+
title: 'Get agent usage'
4357+
group: configuration
4358+
returns:
4359+
usage: AgentUsage
4360+
43554361
events:
43564362

43574363
turn:

0 commit comments

Comments
 (0)