Skip to content

Commit be1da42

Browse files
chore(closes OPEN-8647): add endpoint to retrieve aggregated user data for inference pipelines
1 parent 7a1e23a commit be1da42

File tree

8 files changed

+119
-3
lines changed

8 files changed

+119
-3
lines changed

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
configured_endpoints: 26
2-
openapi_spec_hash: 6f6cb98b7755d18274dd51e857508336
3-
config_hash: cc9a32249c08143687799eb8de187d6a
1+
configured_endpoints: 27
2+
openapi_spec_hash: c70c3eccfe803e99c14e97e650b1e314
3+
config_hash: 1f7626e569e1a74574a58d7883170a0e

MIGRATION.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ This affects the following methods:
7878
- `client.commits.testResults.list()`
7979
- `client.inferencePipelines.retrieve()`
8080
- `client.inferencePipelines.update()`
81+
- `client.inferencePipelines.retrieveUsers()`
8182
- `client.inferencePipelines.testResults.list()`
8283
- `client.tests.listResults()`
8384

api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,14 @@ Types:
109109

110110
- <code><a href="./src/resources/inference-pipelines/inference-pipelines.ts">InferencePipelineRetrieveResponse</a></code>
111111
- <code><a href="./src/resources/inference-pipelines/inference-pipelines.ts">InferencePipelineUpdateResponse</a></code>
112+
- <code><a href="./src/resources/inference-pipelines/inference-pipelines.ts">InferencePipelineRetrieveUsersResponse</a></code>
112113

113114
Methods:
114115

115116
- <code title="get /inference-pipelines/{inferencePipelineId}">client.inferencePipelines.<a href="./src/resources/inference-pipelines/inference-pipelines.ts">retrieve</a>(inferencePipelineID, { ...params }) -> InferencePipelineRetrieveResponse</code>
116117
- <code title="put /inference-pipelines/{inferencePipelineId}">client.inferencePipelines.<a href="./src/resources/inference-pipelines/inference-pipelines.ts">update</a>(inferencePipelineID, { ...params }) -> InferencePipelineUpdateResponse</code>
117118
- <code title="delete /inference-pipelines/{inferencePipelineId}">client.inferencePipelines.<a href="./src/resources/inference-pipelines/inference-pipelines.ts">delete</a>(inferencePipelineID) -> void</code>
119+
- <code title="get /inference-pipelines/{inferencePipelineId}/users">client.inferencePipelines.<a href="./src/resources/inference-pipelines/inference-pipelines.ts">retrieveUsers</a>(inferencePipelineID, { ...params }) -> InferencePipelineRetrieveUsersResponse</code>
118120

119121
## Data
120122

src/client.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import { CommitRetrieveResponse, Commits } from './resources/commits/commits';
2828
import {
2929
InferencePipelineRetrieveParams,
3030
InferencePipelineRetrieveResponse,
31+
InferencePipelineRetrieveUsersParams,
32+
InferencePipelineRetrieveUsersResponse,
3133
InferencePipelineUpdateParams,
3234
InferencePipelineUpdateResponse,
3335
InferencePipelines,
@@ -779,8 +781,10 @@ export declare namespace Openlayer {
779781
InferencePipelines as InferencePipelines,
780782
type InferencePipelineRetrieveResponse as InferencePipelineRetrieveResponse,
781783
type InferencePipelineUpdateResponse as InferencePipelineUpdateResponse,
784+
type InferencePipelineRetrieveUsersResponse as InferencePipelineRetrieveUsersResponse,
782785
type InferencePipelineRetrieveParams as InferencePipelineRetrieveParams,
783786
type InferencePipelineUpdateParams as InferencePipelineUpdateParams,
787+
type InferencePipelineRetrieveUsersParams as InferencePipelineRetrieveUsersParams,
784788
};
785789

786790
export { Storage as Storage };

src/resources/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ export {
55
InferencePipelines,
66
type InferencePipelineRetrieveResponse,
77
type InferencePipelineUpdateResponse,
8+
type InferencePipelineRetrieveUsersResponse,
89
type InferencePipelineRetrieveParams,
910
type InferencePipelineUpdateParams,
11+
type InferencePipelineRetrieveUsersParams,
1012
} from './inference-pipelines/inference-pipelines';
1113
export {
1214
Projects,

src/resources/inference-pipelines/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ export {
55
InferencePipelines,
66
type InferencePipelineRetrieveResponse,
77
type InferencePipelineUpdateResponse,
8+
type InferencePipelineRetrieveUsersResponse,
89
type InferencePipelineRetrieveParams,
910
type InferencePipelineUpdateParams,
11+
type InferencePipelineRetrieveUsersParams,
1012
} from './inference-pipelines';
1113
export { Rows, type RowUpdateResponse, type RowUpdateParams } from './rows';
1214
export { TestResults, type TestResultListResponse, type TestResultListParams } from './test-results';

src/resources/inference-pipelines/inference-pipelines.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,29 @@ export class InferencePipelines extends APIResource {
7171
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
7272
});
7373
}
74+
75+
/**
76+
* Get aggregated user data for an inference pipeline with pagination and metadata.
77+
*
78+
* Returns a list of users who have interacted with the inference pipeline,
79+
* including their activity statistics such as session counts, record counts, token
80+
* usage, and costs.
81+
*
82+
* @example
83+
* ```ts
84+
* const response =
85+
* await client.inferencePipelines.retrieveUsers(
86+
* '182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
87+
* );
88+
* ```
89+
*/
90+
retrieveUsers(
91+
inferencePipelineID: string,
92+
query: InferencePipelineRetrieveUsersParams | null | undefined = {},
93+
options?: RequestOptions,
94+
): APIPromise<InferencePipelineRetrieveUsersResponse> {
95+
return this._client.get(path`/inference-pipelines/${inferencePipelineID}/users`, { query, ...options });
96+
}
7497
}
7598

7699
export interface InferencePipelineRetrieveResponse {
@@ -809,6 +832,52 @@ export namespace InferencePipelineUpdateResponse {
809832
}
810833
}
811834

835+
export interface InferencePipelineRetrieveUsersResponse {
836+
/**
837+
* Array of user aggregation data
838+
*/
839+
items: Array<InferencePipelineRetrieveUsersResponse.Item>;
840+
}
841+
842+
export namespace InferencePipelineRetrieveUsersResponse {
843+
export interface Item {
844+
/**
845+
* The unique user identifier
846+
*/
847+
id: string;
848+
849+
/**
850+
* Total cost for this user
851+
*/
852+
cost: number;
853+
854+
/**
855+
* Timestamp of the user's first event/trace
856+
*/
857+
dateOfFirstRecord: string;
858+
859+
/**
860+
* Timestamp of the user's last event/trace
861+
*/
862+
dateOfLastRecord: string;
863+
864+
/**
865+
* Total number of traces/rows for this user
866+
*/
867+
records: number;
868+
869+
/**
870+
* Count of unique sessions for this user
871+
*/
872+
sessions: number;
873+
874+
/**
875+
* Total token count for this user
876+
*/
877+
tokens: number;
878+
}
879+
}
880+
812881
export interface InferencePipelineRetrieveParams {
813882
/**
814883
* Expand specific nested objects.
@@ -834,6 +903,18 @@ export interface InferencePipelineUpdateParams {
834903
referenceDatasetUri?: string | null;
835904
}
836905

906+
export interface InferencePipelineRetrieveUsersParams {
907+
/**
908+
* The page to return in a paginated query.
909+
*/
910+
page?: number;
911+
912+
/**
913+
* Maximum number of items to return per page.
914+
*/
915+
perPage?: number;
916+
}
917+
837918
InferencePipelines.Data = Data;
838919
InferencePipelines.Rows = Rows;
839920
InferencePipelines.TestResults = TestResults;
@@ -842,8 +923,10 @@ export declare namespace InferencePipelines {
842923
export {
843924
type InferencePipelineRetrieveResponse as InferencePipelineRetrieveResponse,
844925
type InferencePipelineUpdateResponse as InferencePipelineUpdateResponse,
926+
type InferencePipelineRetrieveUsersResponse as InferencePipelineRetrieveUsersResponse,
845927
type InferencePipelineRetrieveParams as InferencePipelineRetrieveParams,
846928
type InferencePipelineUpdateParams as InferencePipelineUpdateParams,
929+
type InferencePipelineRetrieveUsersParams as InferencePipelineRetrieveUsersParams,
847930
};
848931

849932
export {

tests/api-resources/inference-pipelines/inference-pipelines.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,26 @@ describe('resource inferencePipelines', () => {
6666
expect(dataAndResponse.data).toBe(response);
6767
expect(dataAndResponse.response).toBe(rawResponse);
6868
});
69+
70+
test('retrieveUsers', async () => {
71+
const responsePromise = client.inferencePipelines.retrieveUsers('182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e');
72+
const rawResponse = await responsePromise.asResponse();
73+
expect(rawResponse).toBeInstanceOf(Response);
74+
const response = await responsePromise;
75+
expect(response).not.toBeInstanceOf(Response);
76+
const dataAndResponse = await responsePromise.withResponse();
77+
expect(dataAndResponse.data).toBe(response);
78+
expect(dataAndResponse.response).toBe(rawResponse);
79+
});
80+
81+
test('retrieveUsers: request options and params are passed correctly', async () => {
82+
// ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
83+
await expect(
84+
client.inferencePipelines.retrieveUsers(
85+
'182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e',
86+
{ page: 1, perPage: 1 },
87+
{ path: '/_stainless_unknown_path' },
88+
),
89+
).rejects.toThrow(Openlayer.NotFoundError);
90+
});
6991
});

0 commit comments

Comments
 (0)