Skip to content

Commit 452a0d5

Browse files
sf-sahil-jassalvinaygupta-sourcefuseopencode-agent[bot]
authored
chore(deps): upgrade langchain dependencies to v1.x (#18)
* chore(deps): upgraded to latest dependencies * chore(deps): upgraded to latest dependencies, comment fixes * chore(deps): upgraded to latest dependencies, comment fixes * chore(deps): upgraded to latest dependencies, ci test issue fixed * chore(deps): upgrade langchain dependencies to v1.x and fix compatibility Upgrade 13 langchain packages from 0.3.x/0.4.x to latest 1.x versions: - @langchain/core, @langchain/community, @langchain/langgraph, langchain - All provider packages (@langchain/openai, @Anthropic, @aws, etc) - @langfuse packages to v5.x Fix type compatibility in chat graph nodes: - Change MemoryVectorStore import path to @langchain/classic/vectorstores/memory - Update message type handling to use SavedMessage union instead of BaseMessage - Adjust trimMessages tokenCounter signature - Export LangGraphRunnableConfig from graphs/types.ts - Fix run-tool.node optional chaining for tool_calls check Co-authored-by: opencode <opencode-agent[bot]@users.noreply.github.com> * feat: add @langchain/openrouter provider support - Create OpenRouter provider with static createInstance() factory - Add env vars: OPENROUTER_MODEL, OPENROUTER_API_KEY, OPENROUTER_TEMPERATURE, OPENROUTER_BASE_URL - Update LLMProviderType union to include ChatOpenRouter - Add package.json exports and typesVersions entries Co-authored-by: opencode <opencode-agent[bot]@users.noreply.github.com> * chore(deps): upgraded to latest dependencies * chore(deps): upgraded to latest dependencies, comment fixes * chore(deps): resolving package release issues --------- Co-authored-by: Vinay Gupta <vinay.gupta@sourcefuse.com> Co-authored-by: opencode <opencode-agent[bot]@users.noreply.github.com>
1 parent c1d0e04 commit 452a0d5

16 files changed

Lines changed: 3195 additions & 4948 deletions

File tree

package-lock.json

Lines changed: 3073 additions & 4881 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 55 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@
4141
"type": "./dist/sub-modules/providers/groq/index.d.ts",
4242
"default": "./dist/sub-modules/providers/groq/index.js"
4343
},
44+
"./openrouter": {
45+
"type": "./dist/sub-modules/providers/openrouter/index.d.ts",
46+
"default": "./dist/sub-modules/providers/openrouter/index.js"
47+
},
4448
"./pg": {
4549
"type": "./dist/sub-modules/providers/pg/index.d.ts",
4650
"default": "./dist/sub-modules/providers/pg/index.js"
@@ -77,6 +81,9 @@
7781
"groq": [
7882
"dist/sub-modules/providers/groq/index.d.ts"
7983
],
84+
"openrouter": [
85+
"dist/sub-modules/providers/openrouter/index.d.ts"
86+
],
8087
"pg": [
8188
"dist/sub-modules/providers/pg/index.d.ts"
8289
],
@@ -124,69 +131,73 @@
124131
"!*/__tests__"
125132
],
126133
"peerDependencies": {
127-
"@loopback/core": "^6.1.11"
134+
"@loopback/core": "^7.0.11"
128135
},
129136
"dependencies": {
130-
"@langchain/community": "^0.3.50",
131-
"@langchain/core": "^0.3.80",
132-
"@langchain/langgraph": "^0.4.4",
133-
"@loopback/repository": "^7.0.14",
134-
"@sourceloop/chat-service": "15.0.3",
135-
"@sourceloop/core": "17.0.3",
136-
"@sourceloop/file-utils": "0.3.7",
137-
"langchain": "^0.3.37",
138-
"loopback4-authentication": "^12.2.0",
139-
"loopback4-authorization": "^7.0.3",
140-
"tslib": "^2.8.0",
141-
"winston": "^3.15.0"
137+
"@langchain/community": "^1.1.27",
138+
"@langchain/core": "^1.1.40",
139+
"@langchain/langgraph": "^1.2.9",
140+
"@loopback/context": "^8.0.11",
141+
"@loopback/repository": "^8.0.11",
142+
"@loopback/sequelize": "^0.8.8",
143+
"@sourceloop/chat-service": "^17.0.6",
144+
"@sourceloop/core": "^20.0.6",
145+
"@sourceloop/file-utils": "^0.5.6",
146+
"langchain": "^1.3.3",
147+
"loopback4-authentication": "^13.0.4",
148+
"loopback4-authorization": "^8.1.5",
149+
"prom-client": "^15.1.3",
150+
"tslib": "^2.8.1",
151+
"winston": "^3.19.0"
142152
},
143153
"devDependencies": {
144-
"@commitlint/cli": "^19.8.1",
145-
"@commitlint/config-conventional": "^16.2.1",
154+
"@commitlint/cli": "^20.5.0",
155+
"@commitlint/config-conventional": "^20.5.0",
146156
"@google/generative-ai": "^0.24.1",
147157
"@istanbuljs/nyc-config-typescript": "^1.0.2",
148-
"@langchain/anthropic": "^0.3.26",
149-
"@langchain/aws": "^0.1.13",
150-
"@langchain/cerebras": "^0.0.2",
151-
"@langchain/google-genai": "^0.2.16",
152-
"@langchain/groq": "^0.2.3",
153-
"@langchain/ollama": "^0.2.3",
154-
"@langchain/openai": "^0.6.11",
155-
"@langfuse/core": "^4.4.2",
156-
"@langfuse/langchain": "^4.4.2",
157-
"@loopback/build": "^11.0.9",
158-
"@loopback/eslint-config": "^15.0.5",
159-
"@loopback/testlab": "^7.0.9",
158+
"@langchain/anthropic": "^1.3.26",
159+
"@langchain/aws": "^1.3.5",
160+
"@langchain/cerebras": "^1.0.4",
161+
"@langchain/google-genai": "^2.1.27",
162+
"@langchain/groq": "^1.2.0",
163+
"@langchain/ollama": "^1.2.6",
164+
"@langchain/openai": "^1.4.4",
165+
"@langchain/openrouter": "^0.2.2",
166+
"@langfuse/core": "^5.1.0",
167+
"@langfuse/langchain": "^5.1.0",
168+
"@loopback/build": "^12.0.11",
169+
"@loopback/eslint-config": "^16.0.1",
170+
"@loopback/testlab": "^8.0.11",
160171
"@semantic-release/changelog": "^6.0.3",
161172
"@semantic-release/commit-analyzer": "^13.0.1",
162173
"@semantic-release/git": "^10.0.1",
163-
"@semantic-release/github": "^12.0.1",
164-
"@semantic-release/npm": "^13.1.1",
165-
"@semantic-release/release-notes-generator": "^14.0.3",
166-
"@types/dotenv": "^8.2.0",
174+
"@semantic-release/github": "^12.0.6",
175+
"@semantic-release/npm": "^13.1.5",
176+
"@semantic-release/release-notes-generator": "^14.1.0",
177+
"@types/dotenv": "^8.2.3",
167178
"@types/jsonwebtoken": "^9.0.10",
168179
"@types/node": "^20.16.14",
169180
"commitizen": "^4.3.1",
170-
"cz-format-extension": "1.5.0",
171-
"db-migrate": "^1.0.0-beta.21",
181+
"cz-format-extension": "^1.6.0",
182+
"db-migrate": "^1.0.0-beta.35",
172183
"dotenv": "^16.6.1",
173184
"eslint": "^8.57.1",
174-
"husky": "^9.1.7",
175-
"jsonwebtoken": "^9.0.2",
185+
"husky": "^7.0.4",
186+
"jsonwebtoken": "^9.0.3",
176187
"loopback-connector-sqlite3": "^3.0.0",
177-
"mochawesome": "^7.1.3",
178-
"pg": "^8.16.3",
179-
"semantic-release": "^25.0.1",
188+
"mochawesome": "^7.1.4",
189+
"pg": "^8.20.0",
190+
"semantic-release": "^25.0.3",
180191
"source-map-support": "^0.5.21",
181192
"ts-node": "^10.9.2",
182-
"typescript": "^5.6.3"
193+
"typescript": "^5.5.4"
183194
},
184195
"overrides": {
185196
"glob": "11.1.0",
186197
"jws": "3.2.3",
187198
"node-forge": "1.4.0",
188199
"validator": "13.15.22",
189-
"axios": "1.13.6",
200+
"axios": "1.15.0",
190201
"fast-xml-parser": "5.5.8",
191202
"simple-git": "3.33.0",
192203
"flatted": "3.4.2",
@@ -197,6 +208,10 @@
197208
"tar": "7.5.12",
198209
"minimatch": "10.2.4",
199210
"undici": "6.24.1",
211+
"ignore": "7.0.5",
212+
"@sourceloop/file-utils": {
213+
"@loopback/context": "8.0.11"
214+
},
200215
"swagger-stats": {
201216
"send": "^1.1.0"
202217
},

src/components/db-query/providers/datasets.retriever.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import {Document} from '@langchain/core/documents';
12
import {BaseRetriever} from '@langchain/core/retrievers';
23
import {VectorStore} from '@langchain/core/vectorstores';
34
import {inject, Provider, ValueOrPromise} from '@loopback/core';
45
import {AnyObject} from '@loopback/repository';
5-
import {MemoryVectorStore} from 'langchain/vectorstores/memory';
6+
import {MemoryVectorStore} from '@langchain/classic/vectorstores/memory';
67
import {AiIntegrationBindings} from '../../../keys';
78
import {DbQueryStoredTypes} from '../types';
89
import {AuthenticationBindings} from 'loopback4-authentication';
@@ -19,7 +20,7 @@ export class DatasetRetriever implements Provider<BaseRetriever> {
1920
if (this.vectorStore instanceof MemoryVectorStore) {
2021
return this.vectorStore.asRetriever({
2122
k: 5,
22-
filter: doc =>
23+
filter: (doc: Document) =>
2324
doc.metadata.type === DbQueryStoredTypes.DataSet &&
2425
doc.metadata.tenantId === this.user.tenantId,
2526
searchType: 'similarity',

src/components/db-query/providers/templates.retriever.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import {Document} from '@langchain/core/documents';
12
import {BaseRetriever} from '@langchain/core/retrievers';
23
import {VectorStore} from '@langchain/core/vectorstores';
34
import {inject, Provider, ValueOrPromise} from '@loopback/core';
45
import {AnyObject} from '@loopback/repository';
5-
import {MemoryVectorStore} from 'langchain/vectorstores/memory';
6+
import {MemoryVectorStore} from '@langchain/classic/vectorstores/memory';
67
import {AiIntegrationBindings} from '../../../keys';
78
import {DbQueryStoredTypes} from '../types';
89
import {AuthenticationBindings} from 'loopback4-authentication';
@@ -19,7 +20,7 @@ export class TemplateRetriever implements Provider<BaseRetriever> {
1920
if (this.vectorStore instanceof MemoryVectorStore) {
2021
return this.vectorStore.asRetriever({
2122
k: 5,
22-
filter: doc =>
23+
filter: (doc: Document) =>
2324
doc.metadata.type === DbQueryStoredTypes.Template &&
2425
doc.metadata.tenantId === this.user.tenantId,
2526
searchType: 'similarity',

src/graphs/chat/nodes/context-compression.node.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {trimMessages} from '@langchain/core/messages';
1+
import {BaseMessage, trimMessages} from '@langchain/core/messages';
22
import {inject} from '@loopback/core';
33
import {DEFAULT_MAX_TOKEN_COUNT} from '../../../constant';
44
import {graphNode} from '../../../decorators';
@@ -36,7 +36,11 @@ export class ContextCompressionNode implements IGraphNode<ChatState> {
3636
const trimmed = await trimMessages(state.messages, {
3737
maxTokens: maxTokenCount,
3838
strategy: 'last',
39-
tokenCounter: approxTokenCounter,
39+
tokenCounter: (messages: BaseMessage[]) =>
40+
messages.reduce(
41+
(count, message) => count + approxTokenCounter(message.content),
42+
0,
43+
),
4044
includeSystem: true,
4145
});
4246
return {

src/graphs/chat/nodes/init-session.node.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
1-
import {
2-
BaseMessage,
3-
HumanMessage,
4-
SystemMessage,
5-
} from '@langchain/core/messages';
1+
import {HumanMessage, SystemMessage} from '@langchain/core/messages';
62
import {LangGraphRunnableConfig} from '@langchain/langgraph';
73
import {inject, service} from '@loopback/core';
84
import {graphNode} from '../../../decorators';
5+
import {AiIntegrationBindings} from '../../../keys';
96
import {Message} from '../../../models';
107
import {LLMStreamEventType} from '../../event.types';
118
import {ChatState} from '../../state';
12-
import {IGraphNode} from '../../types';
9+
import {IGraphNode, SavedMessage} from '../../types';
1310
import {ChatStore} from '../chat.store';
1411
import {ChatNodes} from '../nodes.enum';
15-
import {AiIntegrationBindings} from '../../../keys';
1612
const debug = require('debug')('ai-integration:chat:init-session.node');
1713
@graphNode(ChatNodes.InitSession)
1814
export class InitSessionNode implements IGraphNode<ChatState> {
@@ -67,15 +63,15 @@ export class InitSessionNode implements IGraphNode<ChatState> {
6763
};
6864
}
6965

70-
private async _formatMessage(messages: Message[]): Promise<BaseMessage[]> {
66+
private async _formatMessage(messages: Message[]): Promise<SavedMessage[]> {
7167
if (!messages) {
7268
return [];
7369
}
7470
const graphMessages = await Promise.all(
7571
messages.map(message => this.chatStore.toMessage(message)),
7672
);
7773
return graphMessages.filter(
78-
(message): message is BaseMessage => message !== undefined,
74+
(message): message is SavedMessage => message !== undefined,
7975
);
8076
}
8177
}

src/graphs/chat/nodes/run-tool.node.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,8 @@ export class RunToolNode implements IGraphNode<ChatState> {
3333
}
3434
const newMessages: ToolMessage[] = [];
3535
const tools = this.tools.map;
36-
const lastMessage = state.messages[state.messages.length - 1] as AIMessage &
37-
ToolMessage;
38-
if (
39-
!lastMessage ||
40-
lastMessage.tool_call_id ||
41-
!lastMessage.tool_calls?.length
42-
) {
36+
const lastMessage = state.messages[state.messages.length - 1] as AIMessage;
37+
if (!lastMessage?.tool_calls?.length) {
4338
return state;
4439
}
4540
const toolCalls = lastMessage.tool_calls!;

src/graphs/chat/nodes/summarise-file.node.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {HumanMessage} from '@langchain/core/messages';
1+
import {ContentBlock, HumanMessage} from '@langchain/core/messages';
22
import {PromptTemplate} from '@langchain/core/prompts';
33
import {RunnableSequence} from '@langchain/core/runnables';
44
import {LangGraphRunnableConfig, Messages} from '@langchain/langgraph';
@@ -76,7 +76,7 @@ export class SummariseFileNode implements IGraphNode<ChatState> {
7676
type: 'text',
7777
text: state.prompt,
7878
},
79-
fileContent,
79+
fileContent as unknown as ContentBlock,
8080
],
8181
},
8282
];

src/graphs/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {LangGraphRunnableConfig} from '@langchain/langgraph';
55
import {AnyObject, Command} from '@loopback/repository';
66
import {LLMStreamEvent} from './event.types';
77

8+
export type {LangGraphRunnableConfig} from '@langchain/langgraph';
9+
810
export type RunnableConfig = LangGraphRunnableConfig & {
911
writer?: (event: LLMStreamEvent) => void;
1012
};

src/providers/vector-stores/inmemory.vector.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {inject, Provider, ValueOrPromise} from '@loopback/core';
2-
import {MemoryVectorStore} from 'langchain/vectorstores/memory';
2+
import {MemoryVectorStore} from '@langchain/classic/vectorstores/memory';
33
import {AiIntegrationBindings} from '../../keys';
44
import {EmbeddingProvider} from '../../types';
55
import {AnyObject} from '@loopback/repository';

0 commit comments

Comments
 (0)