UNPKG

@gentrace/openai

Version:

Gentrace OpenAI v4 plugin for Node.JS

1 lines 55.4 kB
{"version":3,"file":"openai.mjs","sources":["openai.js"],"sourcesContent":["var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __asyncValues = (this && this.__asyncValues) || function (o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n};\nvar __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }\nvar __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n};\nimport { Pipeline, PipelineRun, StepRun, } from \"@gentrace/core\";\n// @ts-ignore: the typings from @types/mustache are incorrect\nimport Mustache from \"mustache\";\nimport OpenAI from \"openai\";\nimport { Completions, } from \"openai/resources/beta/chat/completions\";\nimport { isDefined } from \"./util\";\nimport { parseChatCompletion, validateInputTools, } from \"openai/lib/parser\";\nfunction createRenderedChatMessages(messages) {\n let newMessages = [];\n for (let message of messages) {\n if (message.contentTemplate && message.contentInputs) {\n const { contentTemplate, contentInputs } = message, rest = __rest(message, [\"contentTemplate\", \"contentInputs\"]);\n newMessages.push(Object.assign(Object.assign({}, rest), { content: Mustache.render(contentTemplate, contentInputs) }));\n }\n else {\n newMessages.push(Object.assign({}, message));\n }\n }\n return newMessages;\n}\nexport class GentraceStream {\n constructor(stream, pipelineRun, partialStepRun, isSelfContained, aggregator) {\n this.stream = stream;\n this.pipelineRun = pipelineRun;\n this.partialStepRun = partialStepRun;\n this.isSelfContained = isSelfContained;\n this.aggregator = aggregator;\n }\n [Symbol.asyncIterator]() {\n var _a;\n return __asyncGenerator(this, arguments, function* _b() {\n var _c, e_1, _d, _e;\n const allItems = [];\n try {\n for (var _f = true, _g = __asyncValues(this.stream), _h; _h = yield __await(_g.next()), _c = _h.done, !_c; _f = true) {\n _e = _h.value;\n _f = false;\n const item = _e;\n // Yield each item from original stream\n yield yield __await(item);\n allItems.push(item);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (!_f && !_c && (_d = _g.return)) yield __await(_d.call(_g));\n }\n finally { if (e_1) throw e_1.error; }\n }\n const consolidatedResponse = this.aggregator(allItems);\n const endTime = Date.now();\n const elapsedTime = endTime - Date.parse(this.partialStepRun.startTime);\n this.partialStepRun.elapsedTime = elapsedTime;\n this.partialStepRun.endTime = new Date(endTime).toISOString();\n this.partialStepRun.outputs = consolidatedResponse;\n (_a = this.pipelineRun) === null || _a === void 0 ? void 0 : _a.addStepRunNode(this.partialStepRun);\n if (this.isSelfContained) {\n yield __await(this.pipelineRun.submit());\n }\n });\n }\n}\nexport class GentraceEmbeddings extends OpenAI.Embeddings {\n constructor({ client, pipelineRun, gentraceConfig, }) {\n super(client);\n this.pipelineRun = pipelineRun;\n this.gentraceConfig = gentraceConfig;\n }\n createInner(body, options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const { pipelineSlug, gentrace } = body, newPayload = __rest(body, [\"pipelineSlug\", \"gentrace\"]);\n const { model } = newPayload, inputParams = __rest(newPayload, [\"model\"]);\n let isSelfContainedPullRequest = !this.pipelineRun && pipelineSlug;\n let pipelineRun = this.pipelineRun;\n if (isSelfContainedPullRequest) {\n const pipeline = new Pipeline({\n id: pipelineSlug,\n slug: pipelineSlug,\n apiKey: this.gentraceConfig.apiKey,\n basePath: this.gentraceConfig.basePath,\n logger: this.gentraceConfig.logger,\n });\n pipelineRun = new PipelineRun({\n pipeline,\n });\n }\n const startTime = Date.now();\n const completion = (yield this._client.post(\"/embeddings\", Object.assign({ body: newPayload }, options)));\n const endTime = Date.now();\n const elapsedTime = Math.floor(endTime - startTime);\n pipelineRun === null || pipelineRun === void 0 ? void 0 : pipelineRun.addStepRunNode(new OpenAICreateEmbeddingStepRun(elapsedTime, new Date(startTime).toISOString(), new Date(endTime).toISOString(), Object.assign({}, inputParams), { model }, completion, (_a = body === null || body === void 0 ? void 0 : body.gentrace) !== null && _a !== void 0 ? _a : {}));\n if (isSelfContainedPullRequest) {\n const { pipelineRunId } = yield pipelineRun.submit();\n completion.pipelineRunId =\n pipelineRunId;\n return completion;\n }\n return completion;\n });\n }\n}\nexport class GentraceModerations extends OpenAI.Moderations {\n constructor({ client, pipelineRun, gentraceConfig, }) {\n super(client);\n this.pipelineRun = pipelineRun;\n this.gentraceConfig = gentraceConfig;\n }\n createInner(body, options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const { pipelineSlug, gentrace } = body, newPayload = __rest(body, [\"pipelineSlug\", \"gentrace\"]);\n const { model } = newPayload, inputParams = __rest(newPayload, [\"model\"]);\n let isSelfContainedPullRequest = !this.pipelineRun && pipelineSlug;\n let pipelineRun = this.pipelineRun;\n if (isSelfContainedPullRequest) {\n const pipeline = new Pipeline({\n id: pipelineSlug,\n slug: pipelineSlug,\n apiKey: this.gentraceConfig.apiKey,\n basePath: this.gentraceConfig.basePath,\n logger: this.gentraceConfig.logger,\n });\n pipelineRun = new PipelineRun({\n pipeline,\n });\n }\n const startTime = Date.now();\n const completion = (yield this._client.post(\"/moderations\", Object.assign({ body: newPayload }, options)));\n const endTime = Date.now();\n const elapsedTime = Math.floor(endTime - startTime);\n pipelineRun === null || pipelineRun === void 0 ? void 0 : pipelineRun.addStepRunNode(new OpenAICreateModerationStepRun(elapsedTime, new Date(startTime).toISOString(), new Date(endTime).toISOString(), Object.assign({}, inputParams), { model }, completion, (_a = body === null || body === void 0 ? void 0 : body.gentrace) !== null && _a !== void 0 ? _a : {}));\n if (isSelfContainedPullRequest) {\n const { pipelineRunId } = yield pipelineRun.submit();\n completion.pipelineRunId =\n pipelineRunId;\n return completion;\n }\n return completion;\n });\n }\n}\nexport class GentraceChatCompletions extends OpenAI.Chat.Completions {\n constructor({ client, pipelineRun, gentraceConfig, }) {\n super(client);\n this.pipelineRun = pipelineRun;\n this.gentraceConfig = gentraceConfig;\n }\n // @ts-ignore\n createInner(body, requestOptions) {\n var _a, _b, _c;\n return __awaiter(this, void 0, void 0, function* () {\n const { pipelineSlug } = body;\n let isSelfContainedPipelineRun = !this.pipelineRun && !!pipelineSlug;\n let pipelineRun = this.pipelineRun;\n if (isSelfContainedPipelineRun) {\n const pipeline = new Pipeline({\n id: pipelineSlug,\n slug: pipelineSlug,\n apiKey: this.gentraceConfig.apiKey,\n basePath: this.gentraceConfig.basePath,\n logger: this.gentraceConfig.logger,\n });\n pipelineRun = new PipelineRun({\n pipeline,\n });\n }\n const { messages, pipelineSlug: _pipelineSlug, gentrace } = body, baseCompletionOptions = __rest(body, [\"messages\", \"pipelineSlug\", \"gentrace\"]);\n const renderedMessages = createRenderedChatMessages(messages);\n const contentTemplatesArray = messages.map((message) => {\n var _a;\n return (_a = message.contentTemplate) !== null && _a !== void 0 ? _a : null;\n });\n const contentInputsArray = messages.map((message) => {\n var _a;\n return (_a = message.contentInputs) !== null && _a !== void 0 ? _a : null;\n });\n const startTime = Date.now();\n const completion = this._client.post(\"/chat/completions\", Object.assign(Object.assign({ body: Object.assign({ messages: renderedMessages }, baseCompletionOptions) }, requestOptions), { stream: (_a = body.stream) !== null && _a !== void 0 ? _a : false }));\n const data = yield completion;\n let finalData = data;\n const endTime = Date.now();\n const elapsedTime = Math.floor(endTime - startTime);\n // user parameter is an input, not a model parameter\n const { user, tools } = baseCompletionOptions, modelParams = __rest(baseCompletionOptions, [\"user\", \"tools\"]);\n if (body.stream) {\n finalData = new GentraceStream(data, pipelineRun, new OpenAICreateChatCompletionStepRun(0, new Date(startTime).toISOString(), \"\", {\n messages: renderedMessages,\n tools,\n user,\n contentInputs: contentInputsArray,\n }, Object.assign(Object.assign({}, modelParams), { contentTemplates: contentTemplatesArray }), finalData, (_b = body === null || body === void 0 ? void 0 : body.gentrace) !== null && _b !== void 0 ? _b : {}), !!isSelfContainedPipelineRun, createChatCompletionStreamResponse);\n }\n else {\n pipelineRun === null || pipelineRun === void 0 ? void 0 : pipelineRun.addStepRunNode(new OpenAICreateChatCompletionStepRun(elapsedTime, new Date(startTime).toISOString(), new Date(endTime).toISOString(), {\n messages: renderedMessages,\n user,\n contentInputs: contentInputsArray,\n }, Object.assign(Object.assign({}, modelParams), { contentTemplates: contentTemplatesArray }), finalData, (_c = body === null || body === void 0 ? void 0 : body.gentrace) !== null && _c !== void 0 ? _c : {}));\n }\n if (isSelfContainedPipelineRun) {\n let pipelineRunId = \"\";\n if (!body.stream) {\n const submitInfo = yield pipelineRun.submit();\n pipelineRunId = submitInfo.pipelineRunId;\n }\n else {\n pipelineRunId = pipelineRun.getId();\n }\n finalData.pipelineRunId =\n pipelineRunId;\n return finalData;\n }\n return finalData;\n });\n }\n}\nexport class GentraceCompletions extends OpenAI.Completions {\n constructor({ client, pipelineRun, gentraceConfig, }) {\n super(client);\n this.pipelineRun = pipelineRun;\n this.gentraceConfig = gentraceConfig;\n }\n createInner(body, requestOptions) {\n var _a, _b, _c, _d;\n return __awaiter(this, void 0, void 0, function* () {\n const { pipelineSlug } = body;\n let isSelfContainedPipelineRun = !this.pipelineRun && !!pipelineSlug;\n let pipelineRun = this.pipelineRun;\n if (isSelfContainedPipelineRun) {\n const pipeline = new Pipeline({\n id: pipelineSlug,\n slug: pipelineSlug,\n apiKey: this.gentraceConfig.apiKey,\n basePath: this.gentraceConfig.basePath,\n logger: this.gentraceConfig.logger,\n });\n pipelineRun = new PipelineRun({\n pipeline,\n });\n }\n const { promptTemplate, promptInputs, prompt, pipelineSlug: _pipelineSlug, gentrace } = body, baseCompletionOptions = __rest(body, [\"promptTemplate\", \"promptInputs\", \"prompt\", \"pipelineSlug\", \"gentrace\"]);\n let renderedPrompt = prompt;\n if (promptTemplate && promptInputs) {\n renderedPrompt = Mustache.render(promptTemplate, promptInputs);\n }\n const newCompletionOptions = Object.assign(Object.assign({}, baseCompletionOptions), { prompt: renderedPrompt, stream: (_a = baseCompletionOptions.stream) !== null && _a !== void 0 ? _a : false });\n const startTime = Date.now();\n const completion = this._client.post(\"/completions\", Object.assign(Object.assign({ body: newCompletionOptions }, requestOptions), { stream: (_b = body.stream) !== null && _b !== void 0 ? _b : false }));\n const data = yield completion;\n let finalData = data;\n const endTime = Date.now();\n const elapsedTime = Math.floor(endTime - startTime);\n // User and suffix parameters are inputs not model parameters\n const { user, suffix } = baseCompletionOptions, partialModelParams = __rest(baseCompletionOptions, [\"user\", \"suffix\"]);\n if (body.stream) {\n finalData = new GentraceStream(data, pipelineRun, new OpenAICreateCompletionStepRun(0, new Date(startTime).toISOString(), \"\", {\n prompt: promptTemplate && promptInputs ? promptInputs : prompt,\n user,\n suffix,\n }, Object.assign(Object.assign({}, partialModelParams), { promptTemplate }), finalData, (_c = body === null || body === void 0 ? void 0 : body.gentrace) !== null && _c !== void 0 ? _c : {}), !!isSelfContainedPipelineRun, createCompletionStreamResponse);\n }\n else {\n pipelineRun === null || pipelineRun === void 0 ? void 0 : pipelineRun.addStepRunNode(new OpenAICreateCompletionStepRun(elapsedTime, new Date(startTime).toISOString(), new Date(endTime).toISOString(), {\n prompt: promptTemplate && promptInputs ? promptInputs : prompt,\n user,\n suffix,\n }, Object.assign(Object.assign({}, partialModelParams), { promptTemplate }), finalData, (_d = body === null || body === void 0 ? void 0 : body.gentrace) !== null && _d !== void 0 ? _d : {}));\n }\n if (isSelfContainedPipelineRun) {\n let pipelineRunId = \"\";\n if (!body.stream) {\n const submitInfo = yield pipelineRun.submit();\n pipelineRunId = submitInfo.pipelineRunId;\n }\n else {\n pipelineRunId = pipelineRun.getId();\n }\n finalData.pipelineRunId =\n pipelineRunId;\n return finalData;\n }\n return finalData;\n });\n }\n}\nexport class GentraceBetaChatCompletions extends Completions {\n constructor({ client, pipelineRun, gentraceConfig, }) {\n super(client);\n this.pipelineRun = pipelineRun;\n this.gentraceConfig = gentraceConfig;\n }\n parseInner(body, options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const { pipelineSlug } = body;\n let isSelfContainedPipelineRun = !this.pipelineRun && !!pipelineSlug;\n let pipelineRun = this.pipelineRun;\n if (isSelfContainedPipelineRun) {\n const pipeline = new Pipeline({\n id: pipelineSlug,\n slug: pipelineSlug,\n apiKey: this.gentraceConfig.apiKey,\n basePath: this.gentraceConfig.basePath,\n logger: this.gentraceConfig.logger,\n });\n pipelineRun = new PipelineRun({\n pipeline,\n });\n }\n const { messages, pipelineSlug: _pipelineSlug, gentrace } = body, baseCompletionOptions = __rest(body, [\"messages\", \"pipelineSlug\", \"gentrace\"]);\n const renderedMessages = createRenderedChatMessages(messages);\n const contentTemplatesArray = messages.map((message) => {\n var _a;\n return (_a = message.contentTemplate) !== null && _a !== void 0 ? _a : null;\n });\n const contentInputsArray = messages.map((message) => {\n var _a;\n return (_a = message.contentInputs) !== null && _a !== void 0 ? _a : null;\n });\n const startTime = Date.now();\n validateInputTools(body.tools);\n // TODO: this is not sufficient for structuredt outputs. There's additional parsing that needs to happen.\n const completion = this._client.post(\"/chat/completions\", Object.assign({ body: Object.assign({ messages: renderedMessages }, baseCompletionOptions) }, options));\n const rawData = yield completion;\n // @ts-ignore\n const data = parseChatCompletion(rawData, body);\n const endTime = Date.now();\n const elapsedTime = Math.floor(endTime - startTime);\n // user parameter is an input, not a model parameter\n const { user, tools } = baseCompletionOptions, modelParams = __rest(baseCompletionOptions, [\"user\", \"tools\"]);\n pipelineRun === null || pipelineRun === void 0 ? void 0 : pipelineRun.addStepRunNode(new OpenAICreateChatCompletionStepRun(elapsedTime, new Date(startTime).toISOString(), new Date(endTime).toISOString(), {\n messages: renderedMessages,\n user,\n contentInputs: contentInputsArray,\n }, Object.assign(Object.assign({}, modelParams), { contentTemplates: contentTemplatesArray }), data, (_a = body === null || body === void 0 ? void 0 : body.gentrace) !== null && _a !== void 0 ? _a : {}));\n if (isSelfContainedPipelineRun) {\n const submitInfo = yield pipelineRun.submit();\n const pipelineRunId = submitInfo.pipelineRunId;\n return Object.assign(Object.assign({}, data), { pipelineRunId });\n }\n return data;\n });\n }\n}\nexport class OpenAIPipelineHandler extends OpenAI {\n constructor(_a) {\n var { pipelineRun, gentraceConfig } = _a, config = __rest(_a, [\"pipelineRun\", \"gentraceConfig\"]);\n super(config);\n this.config = config;\n this.pipelineRun = pipelineRun;\n this.gentraceConfig = gentraceConfig;\n }\n}\nexport class OpenAICreateChatCompletionStepRun extends StepRun {\n constructor(elapsedTime, startTime, endTime, inputs, modelParams, response, context) {\n super(\"openai\", \"openai_createChatCompletion\", elapsedTime, startTime, endTime, inputs, modelParams, response, context, undefined);\n }\n}\nexport class OpenAICreateCompletionStepRun extends StepRun {\n constructor(elapsedTime, startTime, endTime, inputs, modelParams, response, context) {\n super(\"openai\", \"openai_createCompletion\", elapsedTime, startTime, endTime, inputs, modelParams, response, context, undefined);\n }\n}\nexport class OpenAICreateEmbeddingStepRun extends StepRun {\n constructor(elapsedTime, startTime, endTime, inputs, modelParams, response, context) {\n super(\"openai\", \"openai_createEmbedding\", elapsedTime, startTime, endTime, inputs, modelParams, response, context, undefined);\n }\n}\nexport class OpenAICreateModerationStepRun extends StepRun {\n constructor(elapsedTime, startTime, endTime, inputs, modelParams, response, context) {\n super(\"openai\", \"openai_createModeration\", elapsedTime, startTime, endTime, inputs, modelParams, response, context, undefined);\n }\n}\nfunction createChatCompletionStreamResponse(streamList) {\n var _a, _b, _c, _d;\n let finalResponseString = \"\";\n const toolIdToInfoMap = {};\n let model = \"\";\n let id = \"\";\n let created = 0;\n for (const value of streamList) {\n model = value.model;\n id = value.id;\n created = value.created;\n if (value.choices && value.choices.length > 0) {\n const firstChoice = value.choices[0];\n if (firstChoice.delta && firstChoice.delta.tool_calls) {\n for (const toolCall of firstChoice.delta.tool_calls) {\n if (toolCall.id) {\n const existingToolInfo = toolIdToInfoMap[toolCall.id];\n if (!existingToolInfo) {\n toolIdToInfoMap[toolCall.id] = toolCall;\n }\n else if (isDefined((_a = existingToolInfo.function) === null || _a === void 0 ? void 0 : _a.arguments) &&\n isDefined((_b = toolCall.function) === null || _b === void 0 ? void 0 : _b.arguments)) {\n // Assume that the ID is provided to differentiate between different tool calls.\n existingToolInfo.function.arguments +=\n toolCall.function.arguments;\n }\n }\n else {\n // Associate with the tool call in the map\n const toolId = Object.keys(toolIdToInfoMap)[0];\n if (toolId) {\n const existingToolInfo = toolIdToInfoMap[toolId];\n if (isDefined((_c = existingToolInfo.function) === null || _c === void 0 ? void 0 : _c.arguments) &&\n isDefined((_d = toolCall.function) === null || _d === void 0 ? void 0 : _d.arguments)) {\n existingToolInfo.function.arguments +=\n toolCall.function.arguments;\n }\n }\n }\n }\n }\n if (firstChoice.delta && firstChoice.delta.content) {\n finalResponseString += firstChoice.delta.content;\n }\n else if (firstChoice.finish_reason) {\n break;\n }\n }\n }\n const finalResponse = {\n id,\n // Override this so it doesn't show chat.completion.chunk\n object: \"chat.completion\",\n created,\n model,\n choices: [\n {\n finish_reason: null,\n index: 0,\n message: {\n content: finalResponseString,\n role: \"assistant\",\n tool_calls: Object.values(toolIdToInfoMap),\n },\n },\n ],\n };\n return finalResponse;\n}\nfunction createCompletionStreamResponse(streamList) {\n let finalResponseString = \"\";\n let model = \"\";\n let id = \"\";\n let created = 0;\n for (const value of streamList) {\n model = value.model;\n id = value.id;\n created = value.created;\n if (value.choices && value.choices.length > 0) {\n const firstChoice = value.choices[0];\n if (firstChoice.text) {\n finalResponseString += firstChoice.text;\n }\n else if (firstChoice.delta && firstChoice.delta.content) {\n finalResponseString += firstChoice.delta.content;\n }\n else if (firstChoice.finish_reason &&\n firstChoice.finish_reason === \"stop\") {\n break;\n }\n }\n }\n const finalResponse = {\n id,\n // Override this so it doesn't show chat.completion.chunk.\n object: \"text_completion\",\n created,\n model,\n choices: [\n {\n text: finalResponseString,\n index: 0,\n logprobs: null,\n finish_reason: \"length\",\n },\n ],\n };\n return finalResponse;\n}\n"],"names":["this"],"mappings":"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