From d9db6d80ea565be4b1f4c23772a7f81cf5e835e0 Mon Sep 17 00:00:00 2001 From: arcticfly <41524992+arcticfly@users.noreply.github.com> Date: Fri, 11 Aug 2023 15:02:14 -0700 Subject: [PATCH] Update external types (#137) * Separate server and frontend error logic * Update types in external api --- .../OutputsTable/EditScenarioVars.tsx | 2 +- .../server/api/routers/externalApi.router.ts | 24 +- .../api/routers/promptVariants.router.ts | 2 +- .../api/routers/scenarioVariables.router.ts | 2 +- .../maybeReportError.ts} | 13 +- .../utils/errorHandling/standardResponses.ts | 11 + client-libs/schema.json | 16 +- client-libs/typescript/codegen/api.js | 272 ------------------ client-libs/typescript/codegen/api.ts | 10 +- client-libs/typescript/codegen/base.js | 80 ------ client-libs/typescript/codegen/common.js | 252 ---------------- .../typescript/codegen/configuration.js | 44 --- client-libs/typescript/codegen/index.js | 31 -- client-libs/typescript/openai-legacy/index.ts | 39 ++- client-libs/typescript/openai/index.ts | 12 +- 15 files changed, 70 insertions(+), 740 deletions(-) rename app/src/utils/{standardResponses.ts => errorHandling/maybeReportError.ts} (56%) create mode 100644 app/src/utils/errorHandling/standardResponses.ts delete mode 100644 client-libs/typescript/codegen/api.js delete mode 100644 client-libs/typescript/codegen/base.js delete mode 100644 client-libs/typescript/codegen/common.js delete mode 100644 client-libs/typescript/codegen/configuration.js delete mode 100644 client-libs/typescript/codegen/index.js diff --git a/app/src/components/OutputsTable/EditScenarioVars.tsx b/app/src/components/OutputsTable/EditScenarioVars.tsx index 9854bfa..8cee904 100644 --- a/app/src/components/OutputsTable/EditScenarioVars.tsx +++ b/app/src/components/OutputsTable/EditScenarioVars.tsx @@ -4,7 +4,7 @@ import { useEffect, useState } from "react"; import { BsPencil, BsX } from "react-icons/bs"; import { api } from "~/utils/api"; import { useExperiment, useHandledAsyncCallback, useScenarioVars } from "~/utils/hooks"; -import { maybeReportError } from "~/utils/standardResponses"; +import { maybeReportError } from "~/utils/errorHandling/maybeReportError"; import { FloatingLabelInput } from "./FloatingLabelInput"; export const ScenarioVar = ({ diff --git a/app/src/server/api/routers/externalApi.router.ts b/app/src/server/api/routers/externalApi.router.ts index aecbbbc..7e1b6c7 100644 --- a/app/src/server/api/routers/externalApi.router.ts +++ b/app/src/server/api/routers/externalApi.router.ts @@ -39,7 +39,7 @@ export const externalApiRouter = createTRPCRouter({ }) .input( z.object({ - startTime: z.number().describe("Unix timestamp in milliseconds"), + requestedAt: z.number().describe("Unix timestamp in milliseconds"), reqPayload: z.unknown().describe("JSON-encoded request payload"), tags: z .record(z.string()) @@ -85,7 +85,7 @@ export const externalApiRouter = createTRPCRouter({ await prisma.loggedCall.create({ data: { projectId: key.projectId, - requestedAt: new Date(input.startTime), + requestedAt: new Date(input.requestedAt), cacheHit: true, modelResponseId: existingResponse.id, }, @@ -106,12 +106,12 @@ export const externalApiRouter = createTRPCRouter({ }) .input( z.object({ - startTime: z.number().describe("Unix timestamp in milliseconds"), - endTime: z.number().describe("Unix timestamp in milliseconds"), + requestedAt: z.number().describe("Unix timestamp in milliseconds"), + receivedAt: z.number().describe("Unix timestamp in milliseconds"), reqPayload: z.unknown().describe("JSON-encoded request payload"), respPayload: z.unknown().optional().describe("JSON-encoded response payload"), - respStatus: z.number().optional().describe("HTTP status code of response"), - error: z.string().optional().describe("User-friendly error message"), + statusCode: z.number().optional().describe("HTTP status code of response"), + errorMessage: z.string().optional().describe("User-friendly error message"), tags: z .record(z.string()) .optional() @@ -153,7 +153,7 @@ export const externalApiRouter = createTRPCRouter({ data: { id: newLoggedCallId, projectId: key.projectId, - requestedAt: new Date(input.startTime), + requestedAt: new Date(input.requestedAt), cacheHit: false, }, }), @@ -161,13 +161,13 @@ export const externalApiRouter = createTRPCRouter({ data: { id: newModelResponseId, originalLoggedCallId: newLoggedCallId, - requestedAt: new Date(input.startTime), - receivedAt: new Date(input.endTime), + requestedAt: new Date(input.requestedAt), + receivedAt: new Date(input.receivedAt), reqPayload: input.reqPayload as Prisma.InputJsonValue, respPayload: input.respPayload as Prisma.InputJsonValue, - statusCode: input.respStatus, - errorMessage: input.error, - durationMs: input.endTime - input.startTime, + statusCode: input.statusCode, + errorMessage: input.errorMessage, + durationMs: input.receivedAt - input.requestedAt, cacheKey: respPayload.success ? requestHash : null, inputTokens: usage?.inputTokens, outputTokens: usage?.outputTokens, diff --git a/app/src/server/api/routers/promptVariants.router.ts b/app/src/server/api/routers/promptVariants.router.ts index 7a01da1..b385dde 100644 --- a/app/src/server/api/routers/promptVariants.router.ts +++ b/app/src/server/api/routers/promptVariants.router.ts @@ -3,7 +3,7 @@ import { createTRPCRouter, protectedProcedure, publicProcedure } from "~/server/ import { prisma } from "~/server/db"; import { Prisma } from "@prisma/client"; import { generateNewCell } from "~/server/utils/generateNewCell"; -import { error, success } from "~/utils/standardResponses"; +import { error, success } from "~/utils/errorHandling/standardResponses"; import { recordExperimentUpdated } from "~/server/utils/recordExperimentUpdated"; import { reorderPromptVariants } from "~/server/utils/reorderPromptVariants"; import { type PromptVariant } from "@prisma/client"; diff --git a/app/src/server/api/routers/scenarioVariables.router.ts b/app/src/server/api/routers/scenarioVariables.router.ts index 9c1f678..4fddfea 100644 --- a/app/src/server/api/routers/scenarioVariables.router.ts +++ b/app/src/server/api/routers/scenarioVariables.router.ts @@ -3,7 +3,7 @@ import { sql } from "kysely"; import { z } from "zod"; import { createTRPCRouter, protectedProcedure, publicProcedure } from "~/server/api/trpc"; import { kysely, prisma } from "~/server/db"; -import { error, success } from "~/utils/standardResponses"; +import { error, success } from "~/utils/errorHandling/standardResponses"; import { requireCanModifyExperiment, requireCanViewExperiment } from "~/utils/accessControl"; export const scenarioVarsRouter = createTRPCRouter({ diff --git a/app/src/utils/standardResponses.ts b/app/src/utils/errorHandling/maybeReportError.ts similarity index 56% rename from app/src/utils/standardResponses.ts rename to app/src/utils/errorHandling/maybeReportError.ts index e1897d6..4028af3 100644 --- a/app/src/utils/standardResponses.ts +++ b/app/src/utils/errorHandling/maybeReportError.ts @@ -1,16 +1,5 @@ import { toast } from "~/theme/ChakraThemeProvider"; - -export function error(message: string): { status: "error"; message: string } { - return { - status: "error", - message, - }; -} -export function success(payload: T): { status: "success"; payload: T }; -export function success(payload?: undefined): { status: "success"; payload: undefined }; -export function success(payload?: T) { - return { status: "success", payload }; -} +import { type error, type success } from "./standardResponses"; type SuccessType = ReturnType>; type ErrorType = ReturnType; diff --git a/app/src/utils/errorHandling/standardResponses.ts b/app/src/utils/errorHandling/standardResponses.ts new file mode 100644 index 0000000..65a93cd --- /dev/null +++ b/app/src/utils/errorHandling/standardResponses.ts @@ -0,0 +1,11 @@ +export function error(message: string): { status: "error"; message: string } { + return { + status: "error", + message, + }; +} +export function success(payload: T): { status: "success"; payload: T }; +export function success(payload?: undefined): { status: "success"; payload: undefined }; +export function success(payload?: T) { + return { status: "success", payload }; +} diff --git a/client-libs/schema.json b/client-libs/schema.json index 3cf2280..1c33740 100644 --- a/client-libs/schema.json +++ b/client-libs/schema.json @@ -22,7 +22,7 @@ "schema": { "type": "object", "properties": { - "startTime": { + "requestedAt": { "type": "number", "description": "Unix timestamp in milliseconds" }, @@ -38,7 +38,7 @@ } }, "required": [ - "startTime" + "requestedAt" ], "additionalProperties": false } @@ -80,11 +80,11 @@ "schema": { "type": "object", "properties": { - "startTime": { + "requestedAt": { "type": "number", "description": "Unix timestamp in milliseconds" }, - "endTime": { + "receivedAt": { "type": "number", "description": "Unix timestamp in milliseconds" }, @@ -94,11 +94,11 @@ "respPayload": { "description": "JSON-encoded response payload" }, - "respStatus": { + "statusCode": { "type": "number", "description": "HTTP status code of response" }, - "error": { + "errorMessage": { "type": "string", "description": "User-friendly error message" }, @@ -111,8 +111,8 @@ } }, "required": [ - "startTime", - "endTime" + "requestedAt", + "receivedAt" ], "additionalProperties": false } diff --git a/client-libs/typescript/codegen/api.js b/client-libs/typescript/codegen/api.js deleted file mode 100644 index 9680129..0000000 --- a/client-libs/typescript/codegen/api.js +++ /dev/null @@ -1,272 +0,0 @@ -"use strict"; -/* tslint:disable */ -/* eslint-disable */ -/** - * OpenPipe API - * The public API for reporting API calls to OpenPipe - * - * The version of the OpenAPI document: 0.1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DefaultApi = exports.DefaultApiFactory = exports.DefaultApiFp = exports.DefaultApiAxiosParamCreator = void 0; -var axios_1 = require("axios"); -// Some imports not used depending on template conditions -// @ts-ignore -var common_1 = require("./common"); -// @ts-ignore -var base_1 = require("./base"); -/** - * DefaultApi - axios parameter creator - * @export - */ -var DefaultApiAxiosParamCreator = function (configuration) { - var _this = this; - return { - /** - * Check if a prompt is cached - * @param {ExternalApiCheckCacheRequest} externalApiCheckCacheRequest - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - externalApiCheckCache: function (externalApiCheckCacheRequest, options) { - if (options === void 0) { options = {}; } - return __awaiter(_this, void 0, void 0, function () { - var localVarPath, localVarUrlObj, baseOptions, localVarRequestOptions, localVarHeaderParameter, localVarQueryParameter, headersFromBaseOptions; - return __generator(this, function (_a) { - // verify required parameter 'externalApiCheckCacheRequest' is not null or undefined - (0, common_1.assertParamExists)('externalApiCheckCache', 'externalApiCheckCacheRequest', externalApiCheckCacheRequest); - localVarPath = "/v1/check-cache"; - localVarUrlObj = new URL(localVarPath, common_1.DUMMY_BASE_URL); - if (configuration) { - baseOptions = configuration.baseOptions; - } - localVarRequestOptions = __assign(__assign({ method: 'POST' }, baseOptions), options); - localVarHeaderParameter = {}; - localVarQueryParameter = {}; - localVarHeaderParameter['Content-Type'] = 'application/json'; - (0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter); - headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = __assign(__assign(__assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers); - localVarRequestOptions.data = (0, common_1.serializeDataIfNeeded)(externalApiCheckCacheRequest, localVarRequestOptions, configuration); - return [2 /*return*/, { - url: (0, common_1.toPathString)(localVarUrlObj), - options: localVarRequestOptions, - }]; - }); - }); - }, - /** - * Report an API call - * @param {ExternalApiReportRequest} externalApiReportRequest - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - externalApiReport: function (externalApiReportRequest, options) { - if (options === void 0) { options = {}; } - return __awaiter(_this, void 0, void 0, function () { - var localVarPath, localVarUrlObj, baseOptions, localVarRequestOptions, localVarHeaderParameter, localVarQueryParameter, headersFromBaseOptions; - return __generator(this, function (_a) { - // verify required parameter 'externalApiReportRequest' is not null or undefined - (0, common_1.assertParamExists)('externalApiReport', 'externalApiReportRequest', externalApiReportRequest); - localVarPath = "/v1/report"; - localVarUrlObj = new URL(localVarPath, common_1.DUMMY_BASE_URL); - if (configuration) { - baseOptions = configuration.baseOptions; - } - localVarRequestOptions = __assign(__assign({ method: 'POST' }, baseOptions), options); - localVarHeaderParameter = {}; - localVarQueryParameter = {}; - localVarHeaderParameter['Content-Type'] = 'application/json'; - (0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter); - headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = __assign(__assign(__assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers); - localVarRequestOptions.data = (0, common_1.serializeDataIfNeeded)(externalApiReportRequest, localVarRequestOptions, configuration); - return [2 /*return*/, { - url: (0, common_1.toPathString)(localVarUrlObj), - options: localVarRequestOptions, - }]; - }); - }); - }, - }; -}; -exports.DefaultApiAxiosParamCreator = DefaultApiAxiosParamCreator; -/** - * DefaultApi - functional programming interface - * @export - */ -var DefaultApiFp = function (configuration) { - var localVarAxiosParamCreator = (0, exports.DefaultApiAxiosParamCreator)(configuration); - return { - /** - * Check if a prompt is cached - * @param {ExternalApiCheckCacheRequest} externalApiCheckCacheRequest - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - externalApiCheckCache: function (externalApiCheckCacheRequest, options) { - return __awaiter(this, void 0, void 0, function () { - var localVarAxiosArgs; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, localVarAxiosParamCreator.externalApiCheckCache(externalApiCheckCacheRequest, options)]; - case 1: - localVarAxiosArgs = _a.sent(); - return [2 /*return*/, (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration)]; - } - }); - }); - }, - /** - * Report an API call - * @param {ExternalApiReportRequest} externalApiReportRequest - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - externalApiReport: function (externalApiReportRequest, options) { - return __awaiter(this, void 0, void 0, function () { - var localVarAxiosArgs; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, localVarAxiosParamCreator.externalApiReport(externalApiReportRequest, options)]; - case 1: - localVarAxiosArgs = _a.sent(); - return [2 /*return*/, (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration)]; - } - }); - }); - }, - }; -}; -exports.DefaultApiFp = DefaultApiFp; -/** - * DefaultApi - factory interface - * @export - */ -var DefaultApiFactory = function (configuration, basePath, axios) { - var localVarFp = (0, exports.DefaultApiFp)(configuration); - return { - /** - * Check if a prompt is cached - * @param {ExternalApiCheckCacheRequest} externalApiCheckCacheRequest - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - externalApiCheckCache: function (externalApiCheckCacheRequest, options) { - return localVarFp.externalApiCheckCache(externalApiCheckCacheRequest, options).then(function (request) { return request(axios, basePath); }); - }, - /** - * Report an API call - * @param {ExternalApiReportRequest} externalApiReportRequest - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - externalApiReport: function (externalApiReportRequest, options) { - return localVarFp.externalApiReport(externalApiReportRequest, options).then(function (request) { return request(axios, basePath); }); - }, - }; -}; -exports.DefaultApiFactory = DefaultApiFactory; -/** - * DefaultApi - object-oriented interface - * @export - * @class DefaultApi - * @extends {BaseAPI} - */ -var DefaultApi = /** @class */ (function (_super) { - __extends(DefaultApi, _super); - function DefaultApi() { - return _super !== null && _super.apply(this, arguments) || this; - } - /** - * Check if a prompt is cached - * @param {ExternalApiCheckCacheRequest} externalApiCheckCacheRequest - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DefaultApi - */ - DefaultApi.prototype.externalApiCheckCache = function (externalApiCheckCacheRequest, options) { - var _this = this; - return (0, exports.DefaultApiFp)(this.configuration).externalApiCheckCache(externalApiCheckCacheRequest, options).then(function (request) { return request(_this.axios, _this.basePath); }); - }; - /** - * Report an API call - * @param {ExternalApiReportRequest} externalApiReportRequest - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DefaultApi - */ - DefaultApi.prototype.externalApiReport = function (externalApiReportRequest, options) { - var _this = this; - return (0, exports.DefaultApiFp)(this.configuration).externalApiReport(externalApiReportRequest, options).then(function (request) { return request(_this.axios, _this.basePath); }); - }; - return DefaultApi; -}(base_1.BaseAPI)); -exports.DefaultApi = DefaultApi; diff --git a/client-libs/typescript/codegen/api.ts b/client-libs/typescript/codegen/api.ts index 64b5068..bd2d3a4 100644 --- a/client-libs/typescript/codegen/api.ts +++ b/client-libs/typescript/codegen/api.ts @@ -85,7 +85,7 @@ export interface ExternalApiCheckCacheRequest { * @type {number} * @memberof ExternalApiCheckCacheRequest */ - 'startTime': number; + 'requestedAt': number; /** * JSON-encoded request payload * @type {any} @@ -110,13 +110,13 @@ export interface ExternalApiReportRequest { * @type {number} * @memberof ExternalApiReportRequest */ - 'startTime': number; + 'requestedAt': number; /** * Unix timestamp in milliseconds * @type {number} * @memberof ExternalApiReportRequest */ - 'endTime': number; + 'receivedAt': number; /** * JSON-encoded request payload * @type {any} @@ -134,13 +134,13 @@ export interface ExternalApiReportRequest { * @type {number} * @memberof ExternalApiReportRequest */ - 'respStatus'?: number; + 'statusCode'?: number; /** * User-friendly error message * @type {string} * @memberof ExternalApiReportRequest */ - 'error'?: string; + 'errorMessage'?: string; /** * Extra tags to attach to the call for filtering. Eg { \"userId\": \"123\", \"promptId\": \"populate-title\" } * @type {{ [key: string]: string; }} diff --git a/client-libs/typescript/codegen/base.js b/client-libs/typescript/codegen/base.js deleted file mode 100644 index 5d52771..0000000 --- a/client-libs/typescript/codegen/base.js +++ /dev/null @@ -1,80 +0,0 @@ -"use strict"; -/* tslint:disable */ -/* eslint-disable */ -/** - * OpenPipe API - * The public API for reporting API calls to OpenPipe - * - * The version of the OpenAPI document: 0.1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RequiredError = exports.BaseAPI = exports.COLLECTION_FORMATS = exports.BASE_PATH = void 0; -var axios_1 = require("axios"); -exports.BASE_PATH = "https://app.openpipe.ai/api".replace(/\/+$/, ""); -/** - * - * @export - */ -exports.COLLECTION_FORMATS = { - csv: ",", - ssv: " ", - tsv: "\t", - pipes: "|", -}; -/** - * - * @export - * @class BaseAPI - */ -var BaseAPI = /** @class */ (function () { - function BaseAPI(configuration, basePath, axios) { - if (basePath === void 0) { basePath = exports.BASE_PATH; } - if (axios === void 0) { axios = axios_1.default; } - this.basePath = basePath; - this.axios = axios; - if (configuration) { - this.configuration = configuration; - this.basePath = configuration.basePath || this.basePath; - } - } - return BaseAPI; -}()); -exports.BaseAPI = BaseAPI; -; -/** - * - * @export - * @class RequiredError - * @extends {Error} - */ -var RequiredError = /** @class */ (function (_super) { - __extends(RequiredError, _super); - function RequiredError(field, msg) { - var _this = _super.call(this, msg) || this; - _this.field = field; - _this.name = "RequiredError"; - return _this; - } - return RequiredError; -}(Error)); -exports.RequiredError = RequiredError; diff --git a/client-libs/typescript/codegen/common.js b/client-libs/typescript/codegen/common.js deleted file mode 100644 index fa65488..0000000 --- a/client-libs/typescript/codegen/common.js +++ /dev/null @@ -1,252 +0,0 @@ -"use strict"; -/* tslint:disable */ -/* eslint-disable */ -/** - * OpenPipe API - * The public API for reporting API calls to OpenPipe - * - * The version of the OpenAPI document: 0.1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (g && (g = 0, op[0] && (_ = 0)), _) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createRequestFunction = exports.toPathString = exports.serializeDataIfNeeded = exports.setSearchParams = exports.setOAuthToObject = exports.setBearerAuthToObject = exports.setBasicAuthToObject = exports.setApiKeyToObject = exports.assertParamExists = exports.DUMMY_BASE_URL = void 0; -var base_1 = require("./base"); -/** - * - * @export - */ -exports.DUMMY_BASE_URL = 'https://example.com'; -/** - * - * @throws {RequiredError} - * @export - */ -var assertParamExists = function (functionName, paramName, paramValue) { - if (paramValue === null || paramValue === undefined) { - throw new base_1.RequiredError(paramName, "Required parameter ".concat(paramName, " was null or undefined when calling ").concat(functionName, ".")); - } -}; -exports.assertParamExists = assertParamExists; -/** - * - * @export - */ -var setApiKeyToObject = function (object, keyParamName, configuration) { - return __awaiter(this, void 0, void 0, function () { - var localVarApiKeyValue, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(configuration && configuration.apiKey)) return [3 /*break*/, 5]; - if (!(typeof configuration.apiKey === 'function')) return [3 /*break*/, 2]; - return [4 /*yield*/, configuration.apiKey(keyParamName)]; - case 1: - _a = _b.sent(); - return [3 /*break*/, 4]; - case 2: return [4 /*yield*/, configuration.apiKey]; - case 3: - _a = _b.sent(); - _b.label = 4; - case 4: - localVarApiKeyValue = _a; - object[keyParamName] = localVarApiKeyValue; - _b.label = 5; - case 5: return [2 /*return*/]; - } - }); - }); -}; -exports.setApiKeyToObject = setApiKeyToObject; -/** - * - * @export - */ -var setBasicAuthToObject = function (object, configuration) { - if (configuration && (configuration.username || configuration.password)) { - object["auth"] = { username: configuration.username, password: configuration.password }; - } -}; -exports.setBasicAuthToObject = setBasicAuthToObject; -/** - * - * @export - */ -var setBearerAuthToObject = function (object, configuration) { - return __awaiter(this, void 0, void 0, function () { - var accessToken, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(configuration && configuration.accessToken)) return [3 /*break*/, 5]; - if (!(typeof configuration.accessToken === 'function')) return [3 /*break*/, 2]; - return [4 /*yield*/, configuration.accessToken()]; - case 1: - _a = _b.sent(); - return [3 /*break*/, 4]; - case 2: return [4 /*yield*/, configuration.accessToken]; - case 3: - _a = _b.sent(); - _b.label = 4; - case 4: - accessToken = _a; - object["Authorization"] = "Bearer " + accessToken; - _b.label = 5; - case 5: return [2 /*return*/]; - } - }); - }); -}; -exports.setBearerAuthToObject = setBearerAuthToObject; -/** - * - * @export - */ -var setOAuthToObject = function (object, name, scopes, configuration) { - return __awaiter(this, void 0, void 0, function () { - var localVarAccessTokenValue, _a; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!(configuration && configuration.accessToken)) return [3 /*break*/, 5]; - if (!(typeof configuration.accessToken === 'function')) return [3 /*break*/, 2]; - return [4 /*yield*/, configuration.accessToken(name, scopes)]; - case 1: - _a = _b.sent(); - return [3 /*break*/, 4]; - case 2: return [4 /*yield*/, configuration.accessToken]; - case 3: - _a = _b.sent(); - _b.label = 4; - case 4: - localVarAccessTokenValue = _a; - object["Authorization"] = "Bearer " + localVarAccessTokenValue; - _b.label = 5; - case 5: return [2 /*return*/]; - } - }); - }); -}; -exports.setOAuthToObject = setOAuthToObject; -function setFlattenedQueryParams(urlSearchParams, parameter, key) { - if (key === void 0) { key = ""; } - if (parameter == null) - return; - if (typeof parameter === "object") { - if (Array.isArray(parameter)) { - parameter.forEach(function (item) { return setFlattenedQueryParams(urlSearchParams, item, key); }); - } - else { - Object.keys(parameter).forEach(function (currentKey) { - return setFlattenedQueryParams(urlSearchParams, parameter[currentKey], "".concat(key).concat(key !== '' ? '.' : '').concat(currentKey)); - }); - } - } - else { - if (urlSearchParams.has(key)) { - urlSearchParams.append(key, parameter); - } - else { - urlSearchParams.set(key, parameter); - } - } -} -/** - * - * @export - */ -var setSearchParams = function (url) { - var objects = []; - for (var _i = 1; _i < arguments.length; _i++) { - objects[_i - 1] = arguments[_i]; - } - var searchParams = new URLSearchParams(url.search); - setFlattenedQueryParams(searchParams, objects); - url.search = searchParams.toString(); -}; -exports.setSearchParams = setSearchParams; -/** - * - * @export - */ -var serializeDataIfNeeded = function (value, requestOptions, configuration) { - var nonString = typeof value !== 'string'; - var needsSerialization = nonString && configuration && configuration.isJsonMime - ? configuration.isJsonMime(requestOptions.headers['Content-Type']) - : nonString; - return needsSerialization - ? JSON.stringify(value !== undefined ? value : {}) - : (value || ""); -}; -exports.serializeDataIfNeeded = serializeDataIfNeeded; -/** - * - * @export - */ -var toPathString = function (url) { - return url.pathname + url.search + url.hash; -}; -exports.toPathString = toPathString; -/** - * - * @export - */ -var createRequestFunction = function (axiosArgs, globalAxios, BASE_PATH, configuration) { - return function (axios, basePath) { - if (axios === void 0) { axios = globalAxios; } - if (basePath === void 0) { basePath = BASE_PATH; } - var axiosRequestArgs = __assign(__assign({}, axiosArgs.options), { url: ((configuration === null || configuration === void 0 ? void 0 : configuration.basePath) || basePath) + axiosArgs.url }); - return axios.request(axiosRequestArgs); - }; -}; -exports.createRequestFunction = createRequestFunction; diff --git a/client-libs/typescript/codegen/configuration.js b/client-libs/typescript/codegen/configuration.js deleted file mode 100644 index bbc5bfb..0000000 --- a/client-libs/typescript/codegen/configuration.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -/* tslint:disable */ -/* eslint-disable */ -/** - * OpenPipe API - * The public API for reporting API calls to OpenPipe - * - * The version of the OpenAPI document: 0.1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Configuration = void 0; -var Configuration = /** @class */ (function () { - function Configuration(param) { - if (param === void 0) { param = {}; } - this.apiKey = param.apiKey; - this.username = param.username; - this.password = param.password; - this.accessToken = param.accessToken; - this.basePath = param.basePath; - this.baseOptions = param.baseOptions; - this.formDataCtor = param.formDataCtor; - } - /** - * Check if the given MIME is a JSON MIME. - * JSON MIME examples: - * application/json - * application/json; charset=UTF8 - * APPLICATION/JSON - * application/vnd.company+json - * @param mime - MIME (Multipurpose Internet Mail Extensions) - * @return True if the given MIME is JSON, false otherwise. - */ - Configuration.prototype.isJsonMime = function (mime) { - var jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i'); - return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json'); - }; - return Configuration; -}()); -exports.Configuration = Configuration; diff --git a/client-libs/typescript/codegen/index.js b/client-libs/typescript/codegen/index.js deleted file mode 100644 index 519d4f3..0000000 --- a/client-libs/typescript/codegen/index.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; -/* tslint:disable */ -/* eslint-disable */ -/** - * OpenPipe API - * The public API for reporting API calls to OpenPipe - * - * The version of the OpenAPI document: 0.1.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./api"), exports); -__exportStar(require("./configuration"), exports); diff --git a/client-libs/typescript/openai-legacy/index.ts b/client-libs/typescript/openai-legacy/index.ts index 99b8d80..0bf9726 100644 --- a/client-libs/typescript/openai-legacy/index.ts +++ b/client-libs/typescript/openai-legacy/index.ts @@ -13,7 +13,11 @@ type OPConfigurationParameters = { export class Configuration extends openai.Configuration { public qkConfig?: openPipeClient.Configuration; - constructor(config: openai.ConfigurationParameters & { opParameters?: OPConfigurationParameters }) { + constructor( + config: openai.ConfigurationParameters & { + opParameters?: OPConfigurationParameters; + } + ) { super(config); if (config.opParameters) { this.qkConfig = new openPipeClient.Configuration(config.opParameters); @@ -21,7 +25,9 @@ export class Configuration extends openai.Configuration { } } -type CreateChatCompletion = InstanceType["createChatCompletion"]; +type CreateChatCompletion = InstanceType< + typeof openai.OpenAIApi +>["createChatCompletion"]; export class OpenAIApi extends openai.OpenAIApi { public openPipeApi?: openPipeClient.DefaultApi; @@ -37,41 +43,44 @@ export class OpenAIApi extends openai.OpenAIApi { createChatCompletionRequest: Parameters[0], options?: Parameters[1] ): ReturnType { - const startTime = Date.now(); + const requestedAt = Date.now(); let resp: Awaited> | null = null; let respPayload: openai.CreateChatCompletionResponse | null = null; - let respStatus: number | undefined = undefined; - let error: string | undefined; + let statusCode: number | undefined = undefined; + let errorMessage: string | undefined; try { - resp = await super.createChatCompletion(createChatCompletionRequest, options); + resp = await super.createChatCompletion( + createChatCompletionRequest, + options + ); respPayload = resp.data; - respStatus = resp.status; + statusCode = resp.status; } catch (err) { console.error("Error in createChatCompletion"); if ("isAxiosError" in err && err.isAxiosError) { - error = err.response?.data?.error?.message; + errorMessage = err.response?.data?.error?.message; respPayload = err.response?.data; - respStatus = err.response?.status; + statusCode = err.response?.status; } else if ("message" in err) { - error = err.message.toString(); + errorMessage = err.message.toString(); } throw err; } finally { this.openPipeApi ?.externalApiReport({ - startTime, - endTime: Date.now(), + requestedAt, + receivedAt: Date.now(), reqPayload: createChatCompletionRequest, respPayload: respPayload, - respStatus: respStatus, - error, + statusCode: statusCode, + errorMessage, tags: { client: "openai-js", clientVersion: version, }, }) .catch((err) => { - console.error("Error reporting to QK", err); + console.error("Error reporting to OP", err); }); } diff --git a/client-libs/typescript/openai/index.ts b/client-libs/typescript/openai/index.ts index 8c20bdb..023d9e0 100644 --- a/client-libs/typescript/openai/index.ts +++ b/client-libs/typescript/openai/index.ts @@ -26,7 +26,7 @@ export class OpenAI extends openai.OpenAI { const axiosInstance = axios.create({ baseURL: openPipeBaseUrl, headers: { - 'x-openpipe-api-key': openPipeApiKey, + "x-openpipe-api-key": openPipeApiKey, }, }); this.openPipeApi = new openPipeClient.DefaultApi( @@ -88,18 +88,18 @@ class ExtendedCompletions extends openai.OpenAI.Chat.Completions { console.log("Doing post API call for Streaming..."); return result; } else { - const startTime = Date.now(); + const requestedAt = Date.now(); const result = await super.create( params as CompletionCreateParams.CreateChatCompletionRequestNonStreaming, options ); await this.openaiInstance.openPipeApi?.externalApiReport({ - startTime, - endTime: Date.now(), + requestedAt, + receivedAt: Date.now(), reqPayload: params, respPayload: result, - respStatus: 200, - error: undefined, + statusCode: 200, + errorMessage: undefined, tags, });