Skip to content

Commit d175f66

Browse files
tlhunterszegedi
authored andcommitted
openai: remove String#replaceAll for Node.js <=14 (#3432)
1 parent 9ecc004 commit d175f66

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

packages/datadog-plugin-openai/src/index.js

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ const services = require('./services')
88
const Sampler = require('../../dd-trace/src/sampler')
99
const { MEASURED } = require('../../../ext/tags')
1010

11+
// String#replaceAll unavailable on Node.js@v14 (dd-trace@<=v3)
12+
const RE_NEWLINE = /\n/g
13+
const RE_TAB = /\t/g
14+
1115
// TODO: In the future we should refactor config.js to make it requirable
1216
let MAX_TEXT_LEN = 128
1317

@@ -85,11 +89,11 @@ class OpenApiPlugin extends TracingPlugin {
8589
store.prompt = prompt
8690
if (typeof prompt === 'string' || (Array.isArray(prompt) && typeof prompt[0] === 'number')) {
8791
// This is a single prompt, either String or [Number]
88-
tags[`openai.request.prompt`] = normalizeStringOrTokenArray(prompt)
92+
tags[`openai.request.prompt`] = normalizeStringOrTokenArray(prompt, true)
8993
} else if (Array.isArray(prompt)) {
9094
// This is multiple prompts, either [String] or [[Number]]
9195
for (let i = 0; i < prompt.length; i++) {
92-
tags[`openai.request.prompt.${i}`] = normalizeStringOrTokenArray(prompt[i])
96+
tags[`openai.request.prompt.${i}`] = normalizeStringOrTokenArray(prompt[i], true)
9397
}
9498
}
9599
}
@@ -559,8 +563,8 @@ function truncateText (text) {
559563
if (!text) return
560564

561565
text = text
562-
.replaceAll('\n', '\\n')
563-
.replaceAll('\t', '\\t')
566+
.replace(RE_NEWLINE, '\\n')
567+
.replace(RE_TAB, '\\t')
564568

565569
if (text.length > MAX_TEXT_LEN) {
566570
return text.substring(0, MAX_TEXT_LEN) + '...'
@@ -690,7 +694,7 @@ function normalizeRequestPayload (methodName, args) {
690694
* "foo" -> "foo"
691695
* [1,2,3] -> "[1, 2, 3]"
692696
*/
693-
function normalizeStringOrTokenArray (input, truncate = true) {
697+
function normalizeStringOrTokenArray (input, truncate) {
694698
const normalized = Array.isArray(input)
695699
? `[${input.join(', ')}]` // "[1, 2, 999]"
696700
: input // "foo"

packages/datadog-plugin-openai/test/index.spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ describe('Plugin', () => {
125125
expect(traces[0][0].meta).to.have.property('openai.api_base', 'https://api.openai.com/v1')
126126
expect(traces[0][0].meta).to.have.property('openai.organization.name', 'kill-9')
127127
expect(traces[0][0].meta).to.have.property('openai.request.model', 'text-davinci-002')
128-
expect(traces[0][0].meta).to.have.property('openai.request.prompt', 'Hello, ')
128+
expect(traces[0][0].meta).to.have.property('openai.request.prompt', 'Hello, \\n\\nFriend\\t\\tHi')
129129
expect(traces[0][0].meta).to.have.property('openai.request.stop', 'time')
130130
expect(traces[0][0].meta).to.have.property('openai.request.suffix', 'foo')
131131
expect(traces[0][0].meta).to.have.property('openai.request.user', 'hunter2')
@@ -151,7 +151,7 @@ describe('Plugin', () => {
151151

152152
const result = await openai.createCompletion({
153153
model: 'text-davinci-002',
154-
prompt: 'Hello, ',
154+
prompt: 'Hello, \n\nFriend\t\tHi',
155155
suffix: 'foo',
156156
max_tokens: 7,
157157
temperature: 1.01,
@@ -194,7 +194,7 @@ describe('Plugin', () => {
194194
expect(externalLoggerStub).to.have.been.calledWith({
195195
status: 'info',
196196
message: 'sampled createCompletion',
197-
prompt: 'Hello, ',
197+
prompt: 'Hello, \n\nFriend\t\tHi',
198198
choices: [
199199
{
200200
text: 'FOO BAR BAZ',

0 commit comments

Comments
 (0)