Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit191c7c0

Browse files
authored
Use dataset-scoped get_datapoint in frontend (#4861)
1 parent1310519 commit191c7c0

File tree

8 files changed

+34
-55
lines changed

8 files changed

+34
-55
lines changed

‎internal/tensorzero-node/lib/index.ts‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ import type {
2828
CountFeedbackByTargetIdParams,
2929
QueryDemonstrationFeedbackByInferenceIdParams,
3030
DemonstrationFeedbackRow,
31-
GetDatapointParams,
32-
Datapoint,
3331
GetCumulativeFeedbackTimeseriesParams,
3432
KeyInfo,
3533
}from"./bindings";
@@ -239,12 +237,6 @@ export class DatabaseClient {
239237
);
240238
}
241239

242-
asyncgetDatapoint(params:GetDatapointParams):Promise<Datapoint>{
243-
constparamsString=safeStringify(params);
244-
constresult=awaitthis.nativeDatabaseClient.getDatapoint(paramsString);
245-
returnJSON.parse(result)asDatapoint;
246-
}
247-
248240
asyncgetModelUsageTimeseries(
249241
timeWindow:TimeWindow,
250242
maxPeriods:number,

‎internal/tensorzero-node/src/database.rs‎

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use serde::Deserialize;
22
use tensorzero::{
33
setup_clickhouse_without_config,ClickHouseConnection,CountDatapointsForDatasetFunctionParams,
4-
DatasetQueryParams,GetDatapointParams,GetDatasetMetadataParams,TimeWindow,
4+
DatasetQueryParams,GetDatasetMetadataParams,TimeWindow,
55
};
66
use uuid::Uuid;
77

@@ -178,11 +178,6 @@ impl DatabaseClient {
178178
)
179179
}
180180

181-
#[napi]
182-
pubasyncfnget_datapoint(&self,params:String) ->Result<String, napi::Error>{
183-
napi_call!(&self, get_datapoint, params,GetDatapointParams)
184-
}
185-
186181
#[napi]
187182
pubasyncfnget_feedback_by_variant(&self,params:String) ->Result<String, napi::Error>{
188183
let params_struct:GetFeedbackByVariantParams =

‎ui/app/routes/datasets/$dataset_name/datapoint/$id/route.tsx‎

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -291,21 +291,12 @@ export async function loader({
291291
status:404,
292292
});
293293
}
294-
constdatapoint=awaitgetTensorZeroClient().getDatapoint(id);
294+
constdatapoint=awaitgetTensorZeroClient().getDatapoint(id,dataset_name);
295295
if(!datapoint){
296296
throwdata(`No datapoint found for ID \`${id}\`.`,{
297297
status:404,
298298
});
299299
}
300-
// Note (GabrielBianconi): `getDatapoint` no longer depends on the dataset name, but maybe it should?
301-
if(datapoint.dataset_name!==dataset_name){
302-
throwdata(
303-
`The datapoint \`${id}\` does not belong to dataset \`${dataset_name}\`.`,
304-
{
305-
status:400,
306-
},
307-
);
308-
}
309300

310301
// Load file data for InputElement component
311302
constresolvedInput=awaitloadFileDataForInput(datapoint.input);

‎ui/app/routes/datasets/$dataset_name/route.tsx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { DeleteButton } from "~/components/utils/DeleteButton";
1919
import{getTensorZeroClient}from"~/utils/tensorzero.server";
2020
import{getConfig,getFunctionConfig}from"~/utils/config/index.server";
2121
import{useReadOnly}from"~/context/read-only";
22-
import{listDatapoints}from"~/utils/tensorzero.server";
2322

2423
exportasyncfunctionloader({ request, params}:Route.LoaderArgs){
2524
const{ dataset_name}=params;
@@ -36,16 +35,17 @@ export async function loader({ request, params }: Route.LoaderArgs) {
3635
throwdata("Limit cannot exceed 100",{status:400});
3736
}
3837

39-
const[counts,rows]=awaitPromise.all([
38+
const[counts,getDatapointsResponse]=awaitPromise.all([
4039
getDatasetMetadata({}),
41-
listDatapoints(dataset_name,/*function_name=*/undefined,limit,offset),
40+
getTensorZeroClient().listDatapoints(dataset_name,{limit, offset}),
4241
]);
4342
constcount_info=counts.find(
4443
(count)=>count.dataset_name===dataset_name,
4544
);
4645
if(!count_info){
4746
throwdata("Dataset not found",{status:404});
4847
}
48+
constrows=getDatapointsResponse.datapoints;
4949
return{ rows, count_info, limit, offset, rowsAdded, rowsSkipped};
5050
}
5151

‎ui/app/routes/playground/route.tsx‎

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
}from"~/context/config";
1818
import{getConfig,getFunctionConfig}from"~/utils/config/index.server";
1919
importtype{Route}from"./+types/route";
20-
import{listDatapoints}from"~/utils/tensorzero.server";
20+
import{getTensorZeroClient}from"~/utils/tensorzero.server";
2121
import{datapointInputToZodInput}from"~/routes/api/tensorzero/inference.utils";
2222
import{resolveInput}from"~/utils/resolve.server";
2323
import{X}from"lucide-react";
@@ -152,11 +152,15 @@ export async function loader({ request }: Route.LoaderArgs) {
152152
}
153153
constdatasetName=searchParams.get("datasetName");
154154

155-
letdatapoints,totalDatapoints;
155+
letgetDatapointsResponse,totalDatapoints;
156156
try{
157-
[datapoints,totalDatapoints]=datasetName
157+
[getDatapointsResponse,totalDatapoints]=datasetName
158158
?awaitPromise.all([
159-
listDatapoints(datasetName,functionName??undefined,limit,offset),
159+
getTensorZeroClient().listDatapoints(datasetName,{
160+
function_name:functionName??undefined,
161+
limit,
162+
offset,
163+
}),
160164
functionName
161165
?countDatapointsForDatasetFunction(datasetName,functionName)
162166
:null,
@@ -171,9 +175,12 @@ export async function loader({ request }: Route.LoaderArgs) {
171175
);
172176
}
173177

178+
constdatapoints:TensorZeroDatapoint[]=
179+
getDatapointsResponse?.datapoints??[];
180+
174181
letinputs;
175182
try{
176-
inputs=datapoints
183+
inputs=getDatapointsResponse
177184
?awaitPromise.all(
178185
datapoints.map(async(datapoint)=>{
179186
constinputData=datapointInputToZodInput(datapoint.input);

‎ui/app/utils/tensorzero.server.ts‎

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
importtype{JsonValue}from"~/types/tensorzero";
99
import{getEnv}from"./env.server";
1010
import{getFeedbackConfig}from"./config/feedback";
11-
importtype{DatapointasTensorZeroDatapoint}from"~/types/tensorzero";
1211

1312
let_tensorZeroClient:TensorZeroClient|undefined;
1413

@@ -165,17 +164,3 @@ export async function addJudgeDemonstration(formData: FormData) {
165164
constresponse=awaitgetTensorZeroClient().feedback(feedbackRequest);
166165
returnresponse;
167166
}
168-
169-
exportasyncfunctionlistDatapoints(
170-
datasetName:string,
171-
functionName?:string,
172-
limit?:number,
173-
offset?:number,
174-
):Promise<TensorZeroDatapoint[]>{
175-
constresponse=awaitgetTensorZeroClient().listDatapoints(datasetName,{
176-
function_name:functionName,
177-
limit:limit,
178-
offset:offset,
179-
});
180-
returnresponse.datapoints;
181-
}

‎ui/app/utils/tensorzero.test.ts‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@ describe("update datapoints", () => {
2424
// Verify initial state: is_custom should be false, source_inference_id should match
2525
constinitialDatapoint=awaittensorZeroClient.getDatapoint(
2626
createResult.id,
27+
/*datasetName=*/"test",
2728
);
28-
expect(initialDatapoint).not.toBeNull();
29+
expect(initialDatapoint).toBeDefined();
2930
expect(initialDatapoint?.is_custom).toBe(false);
3031
expect(initialDatapoint?.source_inference_id).toBe(inferenceId);
3132

32-
// TypeScript refinement: we've verified initialDatapoint isnot null
33+
// TypeScript refinement: we've verified initialDatapoint isdefined
3334
if(!initialDatapoint||initialDatapoint.type!=="json"){
3435
thrownewError("Expected JSON datapoint");
3536
}
@@ -45,9 +46,7 @@ describe("update datapoints", () => {
4546
constupdateResult=awaittensorZeroClient.updateDatapoint("test",{
4647
type:"json",
4748
id:initialDatapoint.id,
48-
// TODO (#4674 #4675): fix this casting
49-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
50-
input:initialDatapoint.inputasany,// Type conversion needed: StoredInput has ObjectStoragePointer files, Input expects full file types
49+
input:initialDatapoint.input,
5150
output:{
5251
raw:JSON.stringify(updatedOutput),
5352
},
@@ -57,6 +56,7 @@ describe("update datapoints", () => {
5756
// Verify updated state
5857
constupdatedDatapoint=awaittensorZeroClient.getDatapoint(
5958
updateResult.id,
59+
/*datasetName=*/"test",
6060
);
6161

6262
// New ID should be created

‎ui/app/utils/tensorzero/tensorzero.ts‎

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,14 @@ export class TensorZeroClient {
447447
return{id:body.ids[0]};
448448
}
449449

450-
asyncgetDatapoint(datapointId:string):Promise<Datapoint|null>{
451-
constendpoint=`/v1/datasets/get_datapoints`;
450+
asyncgetDatapoint(
451+
datapointId:string,
452+
datasetName?:string,
453+
):Promise<Datapoint|undefined>{
454+
// We currently maintain 2 endpoints for getting a datapoint, with/without the dataset name.
455+
constendpoint=datasetName
456+
?`/v1/datasets/${encodeURIComponent(datasetName)}/get_datapoints`
457+
:`/v1/datasets/get_datapoints`;
452458
constrequestBody:GetDatapointsRequest={
453459
ids:[datapointId],
454460
};
@@ -464,7 +470,10 @@ export class TensorZeroClient {
464470
}
465471

466472
constbody=(awaitresponse.json())asGetDatapointsResponse;
467-
returnbody.datapoints[0]??null;
473+
if(body.datapoints.length===0){
474+
returnundefined;
475+
}
476+
returnbody.datapoints[0];
468477
}
469478

470479
asynclistDatapoints(

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp