Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,10 @@ describe('LangChainProvider', () => {
describe('getAIMetricsFromResponse', () => {
it('creates metrics with success=true and token usage', () => {
const mockResponse = new AIMessage('Test response');
mockResponse.response_metadata = {
tokenUsage: {
totalTokens: 100,
promptTokens: 50,
completionTokens: 50,
},
mockResponse.usage_metadata = {
total_tokens: 100,
input_tokens: 50,
output_tokens: 50,
};

const result = LangChainProvider.getAIMetricsFromResponse(mockResponse);
Expand Down
14 changes: 6 additions & 8 deletions packages/ai-providers/server-ai-langchain/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,10 @@
"author": "LaunchDarkly",
"license": "Apache-2.0",
"devDependencies": {
"@langchain/community": "^0.3.0",
"@langchain/core": "^0.3.0",
"@langchain/core": "^1.1.41",
"@launchdarkly/server-sdk-ai": "^0.17.1",
"@opentelemetry/api": "^1.9.0",
"@traceloop/instrumentation-langchain": "^0.22.0",
"@traceloop/instrumentation-langchain": "^0.26.0",
"@trivago/prettier-plugin-sort-imports": "^4.1.1",
"@types/jest": "^29.5.3",
"@typescript-eslint/eslint-plugin": "^6.20.0",
Expand All @@ -58,19 +57,18 @@
"eslint-plugin-jest": "^27.6.3",
"eslint-plugin-prettier": "^5.0.0",
"jest": "^29.6.1",
"langchain": "^0.3.0",
"langchain": "^1.3.4",
"prettier": "^3.0.0",
"ts-jest": "^29.1.1",
"tsup": "^8.5.1",
"typescript": "5.1.6"
},
"peerDependencies": {
"@langchain/community": "^0.2.0 || ^0.3.0",
"@langchain/core": "^0.2.0 || ^0.3.0",
"@langchain/core": "^1.0.0",
"@launchdarkly/server-sdk-ai": "^0.17.0",
"@opentelemetry/api": "^1.0.0",
"@traceloop/instrumentation-langchain": "^0.22.0",
"langchain": "^0.2.0 || ^0.3.0"
"@traceloop/instrumentation-langchain": "^0.26.0",
"langchain": "^1.0.0"
},
"peerDependenciesMeta": {
"@opentelemetry/api": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -213,12 +213,11 @@ export class LangChainProvider extends AIProvider {
static getAIMetricsFromResponse(response: AIMessage): LDAIMetrics {
// Extract token usage if available
let usage: LDTokenUsage | undefined;
if (response?.response_metadata?.tokenUsage) {
const { tokenUsage } = response.response_metadata;
if (response?.usage_metadata) {
usage = {
total: tokenUsage.totalTokens || 0,
input: tokenUsage.promptTokens || 0,
output: tokenUsage.completionTokens || 0,
total: response.usage_metadata.total_tokens,
input: response.usage_metadata.input_tokens,
output: response.usage_metadata.output_tokens,
};
}

Expand Down
Loading