Skip to content

Commit

Permalink
Delete Experiments (#3348)
Browse files Browse the repository at this point in the history
  • Loading branch information
kavinvalli authored Mar 1, 2025
1 parent e962a7e commit 1a74b55
Show file tree
Hide file tree
Showing 18 changed files with 377 additions and 42 deletions.
16 changes: 16 additions & 0 deletions bifrost/lib/clients/jawnTypes/private.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ export interface paths {
};
"/v2/experiment/{experimentId}": {
get: operations["GetExperimentById"];
delete: operations["DeleteExperiment"];
};
"/v2/experiment/{experimentId}/prompt-version": {
post: operations["CreateNewPromptVersionForExperiment"];
Expand Down Expand Up @@ -2500,6 +2501,21 @@ export interface operations {
};
};
};
DeleteExperiment: {
parameters: {
path: {
experimentId: string;
};
};
responses: {
/** @description Ok */
200: {
content: {
"application/json": components["schemas"]["Result_null.string_"];
};
};
};
};
CreateNewPromptVersionForExperiment: {
parameters: {
path: {
Expand Down
16 changes: 16 additions & 0 deletions bifrost/lib/clients/jawnTypes/public.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ export interface paths {
};
"/v2/experiment/{experimentId}": {
get: operations["GetExperimentById"];
delete: operations["DeleteExperiment"];
};
"/v2/experiment/{experimentId}/prompt-version": {
post: operations["CreateNewPromptVersionForExperiment"];
Expand Down Expand Up @@ -3202,6 +3203,21 @@ export interface operations {
};
};
};
DeleteExperiment: {
parameters: {
path: {
experimentId: string;
};
};
responses: {
/** @description Ok */
200: {
content: {
"application/json": components["schemas"]["Result_null.string_"];
};
};
};
};
CreateNewPromptVersionForExperiment: {
parameters: {
path: {
Expand Down
33 changes: 33 additions & 0 deletions docs/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -9647,6 +9647,39 @@
}
},
"/v2/experiment/{experimentId}": {
"delete": {
"operationId": "DeleteExperiment",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Result_null.string_"
}
}
}
}
},
"tags": [
"Experiment"
],
"security": [
{
"api_key": []
}
],
"parameters": [
{
"in": "path",
"name": "experimentId",
"required": true,
"schema": {
"type": "string"
}
}
]
},
"get": {
"operationId": "GetExperimentById",
"responses": {
Expand Down
13 changes: 4 additions & 9 deletions helicone-cron/src/db/database.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,7 @@ export type Database = {
name: string
organization: string
original_prompt_version: string
soft_delete: boolean
}
Insert: {
copied_original_prompt_version?: string | null
Expand All @@ -767,6 +768,7 @@ export type Database = {
name: string
organization: string
original_prompt_version: string
soft_delete?: boolean
}
Update: {
copied_original_prompt_version?: string | null
Expand All @@ -776,6 +778,7 @@ export type Database = {
name?: string
organization?: string
original_prompt_version?: string
soft_delete?: boolean
}
Relationships: [
{
Expand Down Expand Up @@ -2932,14 +2935,6 @@ export type Database = {
}
Returns: boolean
}
create_main_org: {
Args: {
user_id: string
}
Returns: {
organization_id: string
}[]
}
date_count:
| {
Args: {
Expand Down Expand Up @@ -3245,7 +3240,7 @@ export type Database = {
Args: {
name: string
}
Returns: unknown
Returns: string[]
}
get_size_by_bucket: {
Args: Record<PropertyKey, never>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
alter table "public"."experiment_v3" add column "soft_delete" boolean not null default false;
17 changes: 17 additions & 0 deletions valhalla/jawn/src/controllers/public/experimentV2Controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,23 @@ export class ExperimentV2Controller extends Controller {
return result;
}

@Delete("/{experimentId}")
public async deleteExperiment(
@Path() experimentId: string,
@Request() request: JawnAuthenticatedRequest
): Promise<Result<null, string>> {
const experimentManager = new ExperimentV2Manager(request.authParams);
const result = await experimentManager.deleteExperiment(experimentId);

if (result.error) {
this.setStatus(500);
} else {
this.setStatus(200);
}

return result;
}

@Get("/{experimentId}")
public async getExperimentById(
@Path() experimentId: string,
Expand Down
13 changes: 4 additions & 9 deletions valhalla/jawn/src/lib/db/database.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,7 @@ export type Database = {
name: string
organization: string
original_prompt_version: string
soft_delete: boolean
}
Insert: {
copied_original_prompt_version?: string | null
Expand All @@ -767,6 +768,7 @@ export type Database = {
name: string
organization: string
original_prompt_version: string
soft_delete?: boolean
}
Update: {
copied_original_prompt_version?: string | null
Expand All @@ -776,6 +778,7 @@ export type Database = {
name?: string
organization?: string
original_prompt_version?: string
soft_delete?: boolean
}
Relationships: [
{
Expand Down Expand Up @@ -2932,14 +2935,6 @@ export type Database = {
}
Returns: boolean
}
create_main_org: {
Args: {
user_id: string
}
Returns: {
organization_id: string
}[]
}
date_count:
| {
Args: {
Expand Down Expand Up @@ -3245,7 +3240,7 @@ export type Database = {
Args: {
name: string
}
Returns: unknown
Returns: string[]
}
get_size_by_bucket: {
Args: Record<PropertyKey, never>
Expand Down
23 changes: 22 additions & 1 deletion valhalla/jawn/src/managers/experiment/ExperimentV2Manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,9 @@ export class ExperimentV2Manager extends BaseManager {
const response = await supabaseServer.client
.from("experiment_v3")
.select("*")
.eq("organization", this.authParams.organizationId);
.eq("organization", this.authParams.organizationId)
.eq("soft_delete", false)
.order("created_at", { ascending: false });

return ok(response.data ?? []);
} catch (e) {
Expand All @@ -128,6 +130,25 @@ export class ExperimentV2Manager extends BaseManager {
return experiment.data ?? null;
}

async deleteExperiment(experimentId: string): Promise<Result<null, string>> {
const experiment = await this.hasAccessToExperiment(experimentId);
if (!experiment) {
return err("Experiment not found");
}

const result = await supabaseServer.client
.from("experiment_v3")
.update({ soft_delete: true })
.eq("id", experimentId)
.eq("organization", this.authParams.organizationId);

if (result.error) {
return err("Failed to delete experiment");
}

return ok(null);
}

// this query needs to be better imo
async createNewExperiment(
name: string,
Expand Down
32 changes: 32 additions & 0 deletions valhalla/jawn/src/tsoa-build/private/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2470,6 +2470,38 @@ export function RegisterRoutes(app: Router) {
}
});
// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa
app.delete('/v2/experiment/:experimentId',
authenticateMiddleware([{"api_key":[]}]),
...(fetchMiddlewares<RequestHandler>(ExperimentV2Controller)),
...(fetchMiddlewares<RequestHandler>(ExperimentV2Controller.prototype.deleteExperiment)),

async function ExperimentV2Controller_deleteExperiment(request: ExRequest, response: ExResponse, next: any) {
const args: Record<string, TsoaRoute.ParameterSchema> = {
experimentId: {"in":"path","name":"experimentId","required":true,"dataType":"string"},
request: {"in":"request","name":"request","required":true,"dataType":"object"},
};

// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa

let validatedArgs: any[] = [];
try {
validatedArgs = templateService.getValidatedArgs({ args, request, response });

const controller = new ExperimentV2Controller();

await templateService.apiHandler({
methodName: 'deleteExperiment',
controller,
response,
next,
validatedArgs,
successStatus: undefined,
});
} catch (err) {
return next(err);
}
});
// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa
app.get('/v2/experiment/:experimentId',
authenticateMiddleware([{"api_key":[]}]),
...(fetchMiddlewares<RequestHandler>(ExperimentV2Controller)),
Expand Down
33 changes: 33 additions & 0 deletions valhalla/jawn/src/tsoa-build/private/swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -6718,6 +6718,39 @@
}
},
"/v2/experiment/{experimentId}": {
"delete": {
"operationId": "DeleteExperiment",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Result_null.string_"
}
}
}
}
},
"tags": [
"Experiment"
],
"security": [
{
"api_key": []
}
],
"parameters": [
{
"in": "path",
"name": "experimentId",
"required": true,
"schema": {
"type": "string"
}
}
]
},
"get": {
"operationId": "GetExperimentById",
"responses": {
Expand Down
32 changes: 32 additions & 0 deletions valhalla/jawn/src/tsoa-build/public/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3920,6 +3920,38 @@ export function RegisterRoutes(app: Router) {
}
});
// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa
app.delete('/v2/experiment/:experimentId',
authenticateMiddleware([{"api_key":[]}]),
...(fetchMiddlewares<RequestHandler>(ExperimentV2Controller)),
...(fetchMiddlewares<RequestHandler>(ExperimentV2Controller.prototype.deleteExperiment)),

async function ExperimentV2Controller_deleteExperiment(request: ExRequest, response: ExResponse, next: any) {
const args: Record<string, TsoaRoute.ParameterSchema> = {
experimentId: {"in":"path","name":"experimentId","required":true,"dataType":"string"},
request: {"in":"request","name":"request","required":true,"dataType":"object"},
};

// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa

let validatedArgs: any[] = [];
try {
validatedArgs = templateService.getValidatedArgs({ args, request, response });

const controller = new ExperimentV2Controller();

await templateService.apiHandler({
methodName: 'deleteExperiment',
controller,
response,
next,
validatedArgs,
successStatus: undefined,
});
} catch (err) {
return next(err);
}
});
// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa
app.get('/v2/experiment/:experimentId',
authenticateMiddleware([{"api_key":[]}]),
...(fetchMiddlewares<RequestHandler>(ExperimentV2Controller)),
Expand Down
Loading

0 comments on commit 1a74b55

Please sign in to comment.