diff --git a/js/packages/openinference-instrumentation-openai/package.json b/js/packages/openinference-instrumentation-openai/package.json index 5cc3c404a..19ae81f75 100644 --- a/js/packages/openinference-instrumentation-openai/package.json +++ b/js/packages/openinference-instrumentation-openai/package.json @@ -46,6 +46,6 @@ "@opentelemetry/sdk-trace-node": "^1.25.1", "@opentelemetry/semantic-conventions": "^1.25.1", "jest": "^29.7.0", - "openai": "^4.52.7" + "openai": "^4.86.2" } } diff --git a/js/packages/openinference-instrumentation-openai/src/instrumentation.ts b/js/packages/openinference-instrumentation-openai/src/instrumentation.ts index 16d029ca8..5db889e44 100644 --- a/js/packages/openinference-instrumentation-openai/src/instrumentation.ts +++ b/js/packages/openinference-instrumentation-openai/src/instrumentation.ts @@ -534,6 +534,9 @@ function getChatCompletionInputMessageAttributes( case "system": // There's nothing to add for the system. Content is captured above break; + case "developer": + // There's nothing to add for the developer. Content is captured above + break; default: assertUnreachable(role); break; diff --git a/js/packages/openinference-instrumentation-openai/test/openai.test.ts b/js/packages/openinference-instrumentation-openai/test/openai.test.ts index 85a826176..4915d36a5 100644 --- a/js/packages/openinference-instrumentation-openai/test/openai.test.ts +++ b/js/packages/openinference-instrumentation-openai/test/openai.test.ts @@ -712,23 +712,23 @@ describe("OpenAIInstrumentation", () => { const span = spans[0]; expect(span.name).toBe("OpenAI Chat Completions"); expect(span.attributes).toMatchInlineSnapshot(` -{ - "input.mime_type": "application/json", - "input.value": "{"messages":[{"role":"user","content":"What's the weather today?"}],"model":"gpt-3.5-turbo","functions":[{"name":"getWeather","description":"Get the weather for a location.","parameters":{"type":"object","properties":{"location":{"type":"string"}}}},{"name":"getCurrentLocation","description":"Get the current location of the user.","parameters":{"type":"object","properties":{}}}],"stream":true}", - "llm.input_messages.0.message.content": "What's the weather today?", - "llm.input_messages.0.message.role": "user", - "llm.invocation_parameters": "{"model":"gpt-3.5-turbo","functions":[{"name":"getWeather","description":"Get the weather for a location.","parameters":{"type":"object","properties":{"location":{"type":"string"}}}},{"name":"getCurrentLocation","description":"Get the current location of the user.","parameters":{"type":"object","properties":{}}}],"stream":true}", - "llm.model_name": "gpt-3.5-turbo", - "llm.output_messages.0.message.content": "", - "llm.output_messages.0.message.function_call_arguments_json": "{}", - "llm.output_messages.0.message.function_call_name": "getWeather", - "llm.output_messages.0.message.role": "assistant", - "llm.provider": "openai", - "llm.system": "openai", - "openinference.span.kind": "LLM", - "output.mime_type": "text/plain", - "output.value": "", -} + { + "input.mime_type": "application/json", + "input.value": "{"messages":[{"role":"user","content":"What's the weather today?"}],"model":"gpt-3.5-turbo","functions":[{"name":"getWeather","description":"Get the weather for a location.","parameters":{"type":"object","properties":{"location":{"type":"string"}}}},{"name":"getCurrentLocation","description":"Get the current location of the user.","parameters":{"type":"object","properties":{}}}],"stream":true}", + "llm.input_messages.0.message.content": "What's the weather today?", + "llm.input_messages.0.message.role": "user", + "llm.invocation_parameters": "{"model":"gpt-3.5-turbo","functions":[{"name":"getWeather","description":"Get the weather for a location.","parameters":{"type":"object","properties":{"location":{"type":"string"}}}},{"name":"getCurrentLocation","description":"Get the current location of the user.","parameters":{"type":"object","properties":{}}}],"stream":true}", + "llm.model_name": "gpt-3.5-turbo", + "llm.output_messages.0.message.content": "", + "llm.output_messages.0.message.function_call_arguments_json": "{}", + "llm.output_messages.0.message.function_call_name": "getWeather", + "llm.output_messages.0.message.role": "assistant", + "llm.provider": "openai", + "llm.system": "openai", + "openinference.span.kind": "LLM", + "output.mime_type": "text/plain", + "output.value": "", + } `); }); it("should not emit a span if tracing is suppressed", async () => { diff --git a/js/pnpm-lock.yaml b/js/pnpm-lock.yaml index a844cf8a9..e60e85db2 100644 --- a/js/pnpm-lock.yaml +++ b/js/pnpm-lock.yaml @@ -42,7 +42,7 @@ importers: version: 5.0.10 ts-jest: specifier: ^29.2.2 - version: 29.2.4(@babel/core@7.24.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.9))(jest@29.7.0)(typescript@5.5.4) + version: 29.2.4(@babel/core@7.24.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.9))(jest@29.7.0(@types/node@20.14.11))(typescript@5.5.4) tsc-alias: specifier: ^1.8.10 version: 1.8.10 @@ -194,8 +194,8 @@ importers: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.11) openai: - specifier: ^4.52.7 - version: 4.56.0(zod@3.23.8) + specifier: ^4.86.2 + version: 4.86.2(zod@3.23.8) packages/openinference-semantic-conventions: {} @@ -2698,6 +2698,18 @@ packages: zod: optional: true + openai@4.86.2: + resolution: {integrity: sha512-nvYeFjmjdSu6/msld+22JoUlCICNk/lUFpSMmc6KNhpeNLpqL70TqbD/8Vura/tFmYqHKW0trcjgPwUpKSPwaA==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} @@ -3874,6 +3886,23 @@ snapshots: - langchain - openai + '@langchain/core@0.2.30(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))(openai@4.68.3(zod@3.23.8))': + dependencies: + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.14 + langsmith: 0.1.45(@langchain/core@0.2.30(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))(openai@4.68.3(zod@3.23.8)))(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))(openai@4.68.3(zod@3.23.8)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.23.8 + zod-to-json-schema: 3.23.2(zod@3.23.8) + transitivePeerDependencies: + - langchain + - openai + '@langchain/core@0.2.36(openai@4.56.0(zod@3.23.8))': dependencies: ansi-styles: 5.2.0 @@ -3890,6 +3919,22 @@ snapshots: transitivePeerDependencies: - openai + '@langchain/core@0.2.36(openai@4.68.3(zod@3.23.8))': + dependencies: + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.14 + langsmith: 0.1.66(openai@4.68.3(zod@3.23.8)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.23.8 + zod-to-json-schema: 3.23.2(zod@3.23.8) + transitivePeerDependencies: + - openai + '@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8))': dependencies: ansi-styles: 5.2.0 @@ -3908,9 +3953,9 @@ snapshots: '@langchain/openai@0.0.34(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))': dependencies: - '@langchain/core': 0.2.30(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)) + '@langchain/core': 0.2.30(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))(openai@4.68.3(zod@3.23.8)) js-tiktoken: 1.0.14 - openai: 4.56.0(zod@3.23.8) + openai: 4.68.3(zod@3.23.8) zod: 3.23.8 zod-to-json-schema: 3.23.2(zod@3.23.8) transitivePeerDependencies: @@ -3919,9 +3964,9 @@ snapshots: '@langchain/openai@0.2.8': dependencies: - '@langchain/core': 0.2.36(openai@4.56.0(zod@3.23.8)) + '@langchain/core': 0.2.36(openai@4.68.3(zod@3.23.8)) js-tiktoken: 1.0.14 - openai: 4.56.0(zod@3.23.8) + openai: 4.68.3(zod@3.23.8) zod: 3.23.8 zod-to-json-schema: 3.23.2(zod@3.23.8) transitivePeerDependencies: @@ -5548,6 +5593,19 @@ snapshots: langchain: 0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)) openai: 4.56.0(zod@3.23.8) + langsmith@0.1.45(@langchain/core@0.2.30(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))(openai@4.68.3(zod@3.23.8)))(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))(openai@4.68.3(zod@3.23.8)): + dependencies: + '@types/uuid': 9.0.8 + commander: 10.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.6.3 + uuid: 9.0.1 + optionalDependencies: + '@langchain/core': 0.2.30(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))(openai@4.68.3(zod@3.23.8)) + langchain: 0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)) + openai: 4.68.3(zod@3.23.8) + langsmith@0.1.45(@langchain/core@0.2.36(openai@4.56.0(zod@3.23.8)))(langchain@0.3.3(@langchain/core@0.3.13(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)))(openai@4.56.0(zod@3.23.8)): dependencies: '@types/uuid': 9.0.8 @@ -5572,6 +5630,17 @@ snapshots: optionalDependencies: openai: 4.56.0(zod@3.23.8) + langsmith@0.1.66(openai@4.68.3(zod@3.23.8)): + dependencies: + '@types/uuid': 10.0.0 + commander: 10.0.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.6.3 + uuid: 10.0.0 + optionalDependencies: + openai: 4.68.3(zod@3.23.8) + leven@3.1.0: {} levn@0.4.1: @@ -5741,6 +5810,20 @@ snapshots: transitivePeerDependencies: - encoding + openai@4.86.2(zod@3.23.8): + dependencies: + '@types/node': 18.19.45 + '@types/node-fetch': 2.6.11 + abort-controller: 3.0.0 + agentkeepalive: 4.5.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0 + optionalDependencies: + zod: 3.23.8 + transitivePeerDependencies: + - encoding + openapi-types@12.1.3: {} optionator@0.9.4: @@ -6060,7 +6143,7 @@ snapshots: dependencies: typescript: 5.5.4 - ts-jest@29.2.4(@babel/core@7.24.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.9))(jest@29.7.0)(typescript@5.5.4): + ts-jest@29.2.4(@babel/core@7.24.9)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.9))(jest@29.7.0(@types/node@20.14.11))(typescript@5.5.4): dependencies: bs-logger: 0.2.6 ejs: 3.1.10