Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
},
"devDependencies": {
"orval": "^7.13.2",
"zod": "^3.25.76",
"zod": "^4.1.12",
"@changesets/cli": "^2.29.7",
"@jest/globals": "^30.2.0",
"@sap-ai-sdk/ai-api": "workspace:^",
Expand Down
4 changes: 2 additions & 2 deletions packages/langchain/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@
"lint:fix": "eslint \"**/*.ts\" --fix && prettier . --config ../../.prettierrc --ignore-path ../../.prettierignore -w --log-level error"
},
"dependencies": {
"@langchain/core": "^1.0.1",
"@sap-ai-sdk/ai-api": "workspace:^",
"@sap-ai-sdk/core": "workspace:^",
"@sap-ai-sdk/foundation-models": "workspace:^",
"@sap-ai-sdk/orchestration": "workspace:^",
"@sap-cloud-sdk/connectivity": "^4.1.2",
"@sap-cloud-sdk/util": "^4.1.2",
"uuid": "^13.0.0",
"@langchain/core": "0.3.78"
"uuid": "^13.0.0"
}
}
4 changes: 4 additions & 0 deletions packages/langchain/src/openai/__snapshots__/chat.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ exports[`Chat client streaming supports streaming responses 1`] = `
"tool_call_chunks": [],
"tool_calls": [],
"usage_metadata": {
"input_token_details": {},
"input_tokens": 14,
"output_token_details": {},
"output_tokens": 7,
"total_tokens": 21,
},
Expand Down Expand Up @@ -98,7 +100,9 @@ exports[`Chat client streaming supports streaming responses with tool calls 1`]
},
],
"usage_metadata": {
"input_token_details": {},
"input_tokens": 52,
"output_token_details": {},
"output_tokens": 18,
"total_tokens": 70,
},
Expand Down
16 changes: 10 additions & 6 deletions packages/langchain/src/openai/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -248,19 +248,23 @@ function mapSystemMessageToAzureOpenAiSystemMessage(
function mapBaseMessageToAzureOpenAiChatMessage(
message: BaseMessage
): AzureOpenAiChatCompletionRequestMessage {
switch (message.getType()) {
switch (message.type) {
case 'ai':
return mapAiMessageToAzureOpenAiAssistantMessage(message);
return mapAiMessageToAzureOpenAiAssistantMessage(message as AIMessage);
case 'human':
return mapHumanMessageToAzureOpenAiUserMessage(message);
return mapHumanMessageToAzureOpenAiUserMessage(message as HumanMessage);
case 'system':
return mapSystemMessageToAzureOpenAiSystemMessage(message);
return mapSystemMessageToAzureOpenAiSystemMessage(
message as SystemMessage
);
case 'function':
return mapFunctionMessageToAzureOpenAiFunctionMessage(message);
return mapFunctionMessageToAzureOpenAiFunctionMessage(
message as FunctionMessage
);
case 'tool':
return mapToolMessageToAzureOpenAiToolMessage(message as ToolMessage);
default:
throw new Error(`Unsupported message type: ${message.getType()}`);
throw new Error(`Unsupported message type: ${message.type}`);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,9 @@ Overall, the SAP Cloud SDK is an essential tool for developers looking to build
"tool_call_chunks": [],
"tool_calls": [],
"usage_metadata": {
"input_token_details": {},
"input_tokens": 17,
"output_token_details": {},
"output_tokens": 271,
"total_tokens": 288,
},
Expand Down
2 changes: 1 addition & 1 deletion packages/langchain/src/orchestration/client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ describe('orchestration service client', () => {
);
const client = new OrchestrationClient(config, { maxRetries: 0 });
await expect(client.stream('Hello!', { timeout: 1000 })).rejects.toThrow(
'AbortError'
'Aborted'
);
});
});
Expand Down
12 changes: 7 additions & 5 deletions packages/langchain/src/orchestration/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,17 +108,19 @@ export function isTemplateRef(
*/
// TODO: Add mapping of refusal property, once LangChain base class supports it natively.
function mapBaseMessageToChatMessage(message: BaseMessage): ChatMessage {
switch (message.getType()) {
switch (message.type) {
case 'ai':
return mapAiMessageToOrchestrationAssistantMessage(message);
return mapAiMessageToOrchestrationAssistantMessage(message as AIMessage);
case 'human':
return mapHumanMessageToChatMessage(message);
return mapHumanMessageToChatMessage(message as HumanMessage);
case 'system':
return mapSystemMessageToOrchestrationSystemMessage(message);
return mapSystemMessageToOrchestrationSystemMessage(
message as SystemMessage
);
case 'tool':
return mapToolMessageToOrchestrationToolMessage(message as ToolMessage);
default:
throw new Error(`Unsupported message type: ${message.getType()}`);
throw new Error(`Unsupported message type: ${message.type}`);
}
}

Expand Down
5 changes: 2 additions & 3 deletions packages/orchestration/src/orchestration-client.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -597,13 +597,12 @@ describe('orchestration service client', () => {
).toThrowErrorMatchingInlineSnapshot(`
"Prompt Template YAML does not conform to the defined type. Validation errors: [
{
"code": "invalid_type",
"expected": "object",
"received": "undefined",
"code": "invalid_type",
"path": [
"spec"
],
"message": "Required"
"message": "Invalid input: expected object, received undefined"
}
]"
`);
Expand Down
2 changes: 1 addition & 1 deletion packages/prompt-registry/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@
},
"dependencies": {
"@sap-ai-sdk/core": "workspace:^",
"zod": "^3.25.76"
"zod": "^4.1.12"
}
}
22 changes: 11 additions & 11 deletions packages/prompt-registry/src/zod/prompt-registry.zod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ export const registryControllerPromptControllerCreateUpdatePromptTemplateBody =
export const registryControllerPromptControllerCreateUpdatePromptTemplateResponse =
zod.object({
message: zod.string(),
id: zod.string().uuid(),
id: zod.uuid(),
scenario: zod.string(),
name: zod.string(),
version: zod.string()
Expand Down Expand Up @@ -227,7 +227,7 @@ export const registryControllerPromptControllerListPromptTemplatesResponse =
count: zod.number(),
resources: zod.array(
zod.object({
id: zod.string().uuid().optional(),
id: zod.uuid().optional(),
name: zod.string().optional(),
version: zod.string().optional(),
scenario: zod.string().optional(),
Expand Down Expand Up @@ -407,7 +407,7 @@ export const registryControllerPromptControllerListPromptTemplateHistoryResponse
count: zod.number(),
resources: zod.array(
zod.object({
id: zod.string().uuid().optional(),
id: zod.uuid().optional(),
name: zod.string().optional(),
version: zod.string().optional(),
scenario: zod.string().optional(),
Expand Down Expand Up @@ -566,7 +566,7 @@ export const registryControllerPromptControllerListPromptTemplateHistoryResponse
*/
export const registryControllerPromptControllerGetPromptTemplateByUuidParams =
zod.object({
promptTemplateId: zod.string().uuid()
promptTemplateId: zod.uuid()
});

export const registryControllerPromptControllerGetPromptTemplateByUuidResponseSpecTemplateItemContentItemImageUrlDetailDefault =
Expand All @@ -582,7 +582,7 @@ export const registryControllerPromptControllerGetPromptTemplateByUuidResponseSp

export const registryControllerPromptControllerGetPromptTemplateByUuidResponse =
zod.object({
id: zod.string().uuid().optional(),
id: zod.uuid().optional(),
name: zod.string().optional(),
version: zod.string().optional(),
scenario: zod.string().optional(),
Expand Down Expand Up @@ -737,7 +737,7 @@ export const registryControllerPromptControllerGetPromptTemplateByUuidResponse =
*/
export const registryControllerPromptControllerDeletePromptTemplateParams =
zod.object({
promptTemplateId: zod.string().uuid()
promptTemplateId: zod.uuid()
});

export const registryControllerPromptControllerDeletePromptTemplateResponse =
Expand All @@ -756,7 +756,7 @@ export const registryControllerPromptControllerImportPromptTemplateBody =
export const registryControllerPromptControllerImportPromptTemplateResponse =
zod.object({
message: zod.string(),
id: zod.string().uuid(),
id: zod.uuid(),
scenario: zod.string(),
name: zod.string(),
version: zod.string()
Expand All @@ -767,15 +767,15 @@ export const registryControllerPromptControllerImportPromptTemplateResponse =
*/
export const registryControllerPromptControllerExportPromptTemplateParams =
zod.object({
promptTemplateId: zod.string().uuid()
promptTemplateId: zod.uuid()
});

/**
* Parse prompt template by ID.
*/
export const registryControllerPromptControllerParsePromptTemplateByIdParams =
zod.object({
promptTemplateId: zod.string().uuid()
promptTemplateId: zod.uuid()
});

export const registryControllerPromptControllerParsePromptTemplateByIdQueryMetadataDefault = false;
Expand Down Expand Up @@ -839,7 +839,7 @@ export const registryControllerPromptControllerParsePromptTemplateByIdResponse =
.optional(),
resource: zod
.object({
id: zod.string().uuid().optional(),
id: zod.uuid().optional(),
name: zod.string().optional(),
version: zod.string().optional(),
scenario: zod.string().optional(),
Expand Down Expand Up @@ -1064,7 +1064,7 @@ export const registryControllerPromptControllerParsePromptTemplateByNameVersionR
.optional(),
resource: zod
.object({
id: zod.string().uuid().optional(),
id: zod.uuid().optional(),
name: zod.string().optional(),
version: zod.string().optional(),
scenario: zod.string().optional(),
Expand Down
Loading