@langchain/google-cloud-sql-pg 1.0.22 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/README.md +37 -23
- package/dist/_virtual/{rolldown_runtime.cjs → _rolldown/runtime.cjs} +2 -4
- package/dist/chat_message_history.cjs +9 -11
- package/dist/chat_message_history.cjs.map +1 -1
- package/dist/chat_message_history.d.cts.map +1 -1
- package/dist/chat_message_history.d.ts.map +1 -1
- package/dist/chat_message_history.js +2 -4
- package/dist/chat_message_history.js.map +1 -1
- package/dist/engine.cjs +23 -32
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.cts.map +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +15 -25
- package/dist/engine.js.map +1 -1
- package/dist/index.cjs +9 -9
- package/dist/index.js +3 -4
- package/dist/indexes.cjs +1 -2
- package/dist/indexes.cjs.map +1 -1
- package/dist/indexes.d.cts.map +1 -1
- package/dist/indexes.d.ts.map +1 -1
- package/dist/indexes.js +1 -1
- package/dist/indexes.js.map +1 -1
- package/dist/loader.cjs +6 -8
- package/dist/loader.cjs.map +1 -1
- package/dist/loader.d.cts.map +1 -1
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +2 -4
- package/dist/loader.js.map +1 -1
- package/dist/utils/utils.cjs +1 -2
- package/dist/utils/utils.cjs.map +1 -1
- package/dist/utils/utils.js +1 -1
- package/dist/utils/utils.js.map +1 -1
- package/dist/vectorstore.cjs +24 -32
- package/dist/vectorstore.cjs.map +1 -1
- package/dist/vectorstore.d.cts.map +1 -1
- package/dist/vectorstore.d.ts.map +1 -1
- package/dist/vectorstore.js +13 -21
- package/dist/vectorstore.js.map +1 -1
- package/package.json +15 -25
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# @langchain/google-cloud-sql-pg
|
|
2
2
|
|
|
3
|
+
## 1.0.23
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#10776](https://github.com/langchain-ai/langchainjs/pull/10776) [`20a9abe`](https://github.com/langchain-ai/langchainjs/commit/20a9abea23ffacf4ae8dc9a7aeec217143bbdeb6) Thanks [@hntrl](https://github.com/hntrl)! - fix(deps): remediate uuid vulnerability by removing direct uuid usage
|
|
8
|
+
|
|
9
|
+
- Updated dependencies [[`20a9abe`](https://github.com/langchain-ai/langchainjs/commit/20a9abea23ffacf4ae8dc9a7aeec217143bbdeb6)]:
|
|
10
|
+
- @langchain/core@1.1.42
|
|
11
|
+
|
|
3
12
|
## 1.0.22
|
|
4
13
|
|
|
5
14
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
The LangChain package for CloudSQL for Postgres provides a way to connect to Cloud SQL instances from the LangChain ecosystem.
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
Main features:
|
|
7
|
-
* The package creates a shared connection pool to connect to Google Cloud Postgres databases utilizing different ways for authentication such as IAM, user and password authorization.
|
|
8
|
-
* Store metadata in columns instead of JSON, resulting in significant performance improvements.
|
|
9
6
|
|
|
10
|
-
|
|
7
|
+
- The package creates a shared connection pool to connect to Google Cloud Postgres databases utilizing different ways for authentication such as IAM, user and password authorization.
|
|
8
|
+
- Store metadata in columns instead of JSON, resulting in significant performance improvements.
|
|
9
|
+
|
|
10
|
+
## Before you begin
|
|
11
11
|
|
|
12
12
|
In order to use this package, you first need to go through the following steps:
|
|
13
|
+
|
|
13
14
|
1. [Select or create a Cloud Platform project.](https://console.cloud.google.com/project)
|
|
14
15
|
2. [Enable billing for your project.](https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project)
|
|
15
16
|
3. [Enable the Cloud SQL Admin API.](https://cloud.google.com/sql/docs/postgres/admin-api)
|
|
@@ -53,9 +54,9 @@ const embeddingService = new SyntheticEmbeddings({ vectorSize: 768 });
|
|
|
53
54
|
|
|
54
55
|
```
|
|
55
56
|
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
57
|
+
- You can pass the ipType, user, password and iamAccountEmail through the PostgresEngineArgs interface to the PostgresEngine creation.
|
|
58
|
+
- You can pass the schemaName, contentColumn, embeddingColum, metadataColumns and others through the VectorStoreTableArgs interface to the init_vectorstore_table method.
|
|
59
|
+
- Passing an empty object to these methods allows you to use the default values.
|
|
59
60
|
|
|
60
61
|
### Vector Store usage
|
|
61
62
|
|
|
@@ -71,15 +72,16 @@ const pvectorArgs: PostgresVectorStoreArgs = {
|
|
|
71
72
|
|
|
72
73
|
const vectorStoreInstance = await PostgresVectorStore.initialize(engine, embeddingService, "my-table", pvectorArgs)
|
|
73
74
|
```
|
|
74
|
-
|
|
75
|
-
-
|
|
75
|
+
|
|
76
|
+
- You can pass the schemaName, contentColumn, embeddingColumn, distanceStrategy and others through the PostgresVectorStoreArgs interface to the PostgresVectorStore creation.
|
|
77
|
+
- Passing an empty object to these methods allows you to use the default values.
|
|
76
78
|
|
|
77
79
|
PostgresVectorStore interface methods available:
|
|
78
80
|
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
-
|
|
81
|
+
- addDocuments
|
|
82
|
+
- addVectors
|
|
83
|
+
- similaritySearch
|
|
84
|
+
- and others.
|
|
83
85
|
|
|
84
86
|
See the full [Vector Store](https://js.langchain.com/docs/integrations/vectorstores/google_cloudsql_pg) tutorial.
|
|
85
87
|
|
|
@@ -93,17 +95,21 @@ First, initialize the Chat History Table and then create the ChatMessageHistory
|
|
|
93
95
|
// ChatHistory table initialization
|
|
94
96
|
await engine.initChatHistoryTable("chat_message_table");
|
|
95
97
|
|
|
96
|
-
const historyInstance = await PostgresChatMessageHistory.initialize(
|
|
98
|
+
const historyInstance = await PostgresChatMessageHistory.initialize(
|
|
99
|
+
engine,
|
|
100
|
+
"test",
|
|
101
|
+
"chat_message_table"
|
|
102
|
+
);
|
|
97
103
|
```
|
|
98
104
|
|
|
99
105
|
The create method of the PostgresChatMessageHistory receives the engine, the session Id and the table name.
|
|
100
106
|
|
|
101
107
|
PostgresChatMessageHistory interface methods available:
|
|
102
108
|
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
109
|
+
- addMessage
|
|
110
|
+
- addMessages
|
|
111
|
+
- getMessages
|
|
112
|
+
- clear
|
|
107
113
|
|
|
108
114
|
See the full [Chat Message History](https://js.langchain.com/docs/integrations/memory/google_cloudsql_pg) tutorial.
|
|
109
115
|
|
|
@@ -116,14 +122,22 @@ import { PostgresEngine, PostgresLoader } from "@langchain/google-cloud-sql-pg";
|
|
|
116
122
|
|
|
117
123
|
const documentLoaderArgs: PostgresLoaderOptions = {
|
|
118
124
|
tableName: "test_table_custom",
|
|
119
|
-
contentColumns: [
|
|
120
|
-
metadataColumns: [
|
|
121
|
-
|
|
125
|
+
contentColumns: ["fruit_name", "variety"],
|
|
126
|
+
metadataColumns: [
|
|
127
|
+
"fruit_id",
|
|
128
|
+
"quantity_in_stock",
|
|
129
|
+
"price_per_unit",
|
|
130
|
+
"organic",
|
|
131
|
+
],
|
|
132
|
+
format: "text",
|
|
122
133
|
};
|
|
123
134
|
|
|
124
|
-
const documentLoaderInstance = await PostgresLoader.initialize(
|
|
135
|
+
const documentLoaderInstance = await PostgresLoader.initialize(
|
|
136
|
+
PEInstance,
|
|
137
|
+
documentLoaderArgs
|
|
138
|
+
);
|
|
125
139
|
|
|
126
140
|
const documents = await documentLoaderInstance.load();
|
|
127
141
|
```
|
|
128
142
|
|
|
129
|
-
See the full [Loader](https://js.langchain.com/docs/integrations/document_loaders/web_loaders/google_cloudsql_pg) tutorial.
|
|
143
|
+
See the full [Loader](https://js.langchain.com/docs/integrations/document_loaders/web_loaders/google_cloudsql_pg) tutorial.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
2
|
var __create = Object.create;
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -19,7 +19,5 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
19
19
|
value: mod,
|
|
20
20
|
enumerable: true
|
|
21
21
|
}) : target, mod));
|
|
22
|
-
|
|
23
22
|
//#endregion
|
|
24
|
-
|
|
25
|
-
exports.__toESM = __toESM;
|
|
23
|
+
exports.__toESM = __toESM;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
require("./_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
let _langchain_core_chat_history = require("@langchain/core/chat_history");
|
|
3
|
+
let _langchain_core_messages = require("@langchain/core/messages");
|
|
5
4
|
//#region src/chat_message_history.ts
|
|
6
|
-
var PostgresChatMessageHistory = class PostgresChatMessageHistory extends
|
|
5
|
+
var PostgresChatMessageHistory = class PostgresChatMessageHistory extends _langchain_core_chat_history.BaseChatMessageHistory {
|
|
7
6
|
lc_namespace = [
|
|
8
7
|
"langchain",
|
|
9
8
|
"stores",
|
|
@@ -31,8 +30,7 @@ var PostgresChatMessageHistory = class PostgresChatMessageHistory extends __lang
|
|
|
31
30
|
* @returns PostgresChatMessageHistory instance.
|
|
32
31
|
*/
|
|
33
32
|
static async initialize(engine, sessionId, tableName, schemaName = "public") {
|
|
34
|
-
const
|
|
35
|
-
const { rows } = await engine.pool.raw(query, {
|
|
33
|
+
const { rows } = await engine.pool.raw(`SELECT column_name, data_type FROM information_schema.columns WHERE table_name = :tableName AND table_schema = :schemaName`, {
|
|
36
34
|
tableName,
|
|
37
35
|
schemaName
|
|
38
36
|
});
|
|
@@ -61,10 +59,10 @@ var PostgresChatMessageHistory = class PostgresChatMessageHistory extends __lang
|
|
|
61
59
|
});
|
|
62
60
|
}
|
|
63
61
|
addUserMessage(message) {
|
|
64
|
-
return this.addMessage(new
|
|
62
|
+
return this.addMessage(new _langchain_core_messages.HumanMessage(message));
|
|
65
63
|
}
|
|
66
64
|
addAIChatMessage(message) {
|
|
67
|
-
return this.addMessage(new
|
|
65
|
+
return this.addMessage(new _langchain_core_messages.AIMessage(message));
|
|
68
66
|
}
|
|
69
67
|
/**
|
|
70
68
|
* Returns a list of messages stored in the store.
|
|
@@ -79,7 +77,7 @@ var PostgresChatMessageHistory = class PostgresChatMessageHistory extends __lang
|
|
|
79
77
|
data: row.data.data,
|
|
80
78
|
type: row.type
|
|
81
79
|
});
|
|
82
|
-
return (0,
|
|
80
|
+
return (0, _langchain_core_messages.mapStoredMessagesToChatMessages)(items);
|
|
83
81
|
}
|
|
84
82
|
/**
|
|
85
83
|
* Add a message object to the store.
|
|
@@ -110,7 +108,7 @@ var PostgresChatMessageHistory = class PostgresChatMessageHistory extends __lang
|
|
|
110
108
|
await this.engine.pool.raw(query, values);
|
|
111
109
|
}
|
|
112
110
|
};
|
|
113
|
-
|
|
114
111
|
//#endregion
|
|
115
112
|
exports.PostgresChatMessageHistory = PostgresChatMessageHistory;
|
|
113
|
+
|
|
116
114
|
//# sourceMappingURL=chat_message_history.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat_message_history.cjs","names":["BaseChatMessageHistory","
|
|
1
|
+
{"version":3,"file":"chat_message_history.cjs","names":["BaseChatMessageHistory","HumanMessage","AIMessage"],"sources":["../src/chat_message_history.ts"],"sourcesContent":["import { BaseChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n AIMessage,\n BaseMessage,\n HumanMessage,\n StoredMessage,\n mapStoredMessagesToChatMessages,\n} from \"@langchain/core/messages\";\nimport PostgresEngine from \"./engine.js\";\n\nexport interface PostgresChatMessageHistoryInput {\n engine: PostgresEngine;\n sessionId: string;\n tableName: string;\n schemaName: string;\n}\n\nexport class PostgresChatMessageHistory extends BaseChatMessageHistory {\n lc_namespace: string[] = [\n \"langchain\",\n \"stores\",\n \"message\",\n \"google-cloud-sql-pg\",\n ];\n\n engine: PostgresEngine;\n\n sessionId: string;\n\n tableName: string;\n\n schemaName: string;\n\n constructor({\n engine,\n sessionId,\n tableName,\n schemaName = \"public\",\n }: PostgresChatMessageHistoryInput) {\n super();\n this.engine = engine;\n this.sessionId = sessionId;\n this.tableName = tableName;\n this.schemaName = schemaName;\n }\n\n /**\n * Create a new PostgresChatMessageHistory instance.\n *\n * @param {PostgresEngine} engine Postgres engine instance to use.\n * @param {string} sessionId Retrieve the table content with this session ID.\n * @param {string} tableName Table name that stores that chat message history. Parameter is not escaped. Do not use with end user input.\n * @param {string} schemaName Schema name for the chat message history table. Default: \"public\". Parameter is not escaped. Do not use with end user input.\n * @returns PostgresChatMessageHistory instance.\n */\n static async initialize(\n engine: PostgresEngine,\n sessionId: string,\n tableName: string,\n schemaName: string = \"public\"\n ) {\n const query = `SELECT column_name, data_type FROM information_schema.columns WHERE table_name = :tableName AND table_schema = :schemaName`;\n const { rows } = await engine.pool.raw(query, { tableName, schemaName });\n const columnNames: string[] = [];\n\n for (const index in rows) {\n if (Object.prototype.hasOwnProperty.call(rows, index)) {\n columnNames.push(rows[index].column_name);\n }\n }\n\n const requiredColumns = [\"id\", \"session_id\", \"data\", \"type\"];\n\n if (!requiredColumns.every((x) => columnNames.includes(x))) {\n throw new Error(\n `Table '${schemaName}'.'${tableName}' has incorrect schema.\n Got column names ${columnNames} but required column names ${requiredColumns}.\n Please create table with following schema: CREATE TABLE '${schemaName}'.'${tableName}' (\n id SERIAL AUTO_INCREMENT PRIMARY KEY,\n session_id TEXT NOT NULL,\n data JSONB NOT NULL,\n type TEXT NOT NULL\n );\n `\n );\n }\n\n return new PostgresChatMessageHistory({\n engine,\n sessionId,\n tableName,\n schemaName,\n });\n }\n\n addUserMessage(message: string): Promise<void> {\n return this.addMessage(new HumanMessage(message));\n }\n\n addAIChatMessage(message: string): Promise<void> {\n return this.addMessage(new AIMessage(message));\n }\n\n /**\n * Returns a list of messages stored in the store.\n */\n async getMessages(): Promise<BaseMessage[]> {\n const query = `SELECT data, type FROM \"${this.schemaName}\".\"${this.tableName}\" WHERE session_id = :session_id ORDER BY id;`;\n const values: { [key: string]: string } = {\n session_id: this.sessionId,\n };\n const items: StoredMessage[] = [];\n const { rows } = await this.engine.pool.raw(query, values);\n\n if (rows.length === 0) {\n return [];\n }\n\n for (const row of rows) {\n items.push({\n data: row.data.data,\n type: row.type,\n });\n }\n\n return mapStoredMessagesToChatMessages(items);\n }\n\n /**\n * Add a message object to the store.\n * @param {BaseMessage} message Message to be added to the store\n */\n async addMessage(message: BaseMessage): Promise<void> {\n const query = `INSERT INTO \"${this.schemaName}\".\"${this.tableName}\"(\"session_id\", \"data\", \"type\") VALUES (:session_id, :data, :type)`;\n const values: { [key: string]: string } = {\n session_id: this.sessionId,\n data: JSON.stringify(message.toDict()),\n type: message.getType(),\n };\n\n await this.engine.pool.raw(query, values);\n }\n\n /**\n * Add a list of messages object to the store.\n * @param {Array<BaseMessage>} messages List of messages to be added to the store\n */\n async addMessages(messages: BaseMessage[]): Promise<void> {\n for (const msg of messages) {\n await this.addMessage(msg);\n }\n }\n\n /**\n * Remove all messages from the store.\n */\n async clear(): Promise<void> {\n const query = `DELETE FROM \"${this.schemaName}\".\"${this.tableName}\" WHERE session_id = :session_id;`;\n const values: { [key: string]: string } = {\n session_id: this.sessionId,\n };\n\n await this.engine.pool.raw(query, values);\n }\n}\n"],"mappings":";;;;AAiBA,IAAa,6BAAb,MAAa,mCAAmCA,6BAAAA,uBAAuB;CACrE,eAAyB;EACvB;EACA;EACA;EACA;EACD;CAED;CAEA;CAEA;CAEA;CAEA,YAAY,EACV,QACA,WACA,WACA,aAAa,YACqB;AAClC,SAAO;AACP,OAAK,SAAS;AACd,OAAK,YAAY;AACjB,OAAK,YAAY;AACjB,OAAK,aAAa;;;;;;;;;;;CAYpB,aAAa,WACX,QACA,WACA,WACA,aAAqB,UACrB;EAEA,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,IADrB,8HACgC;GAAE;GAAW;GAAY,CAAC;EACxE,MAAM,cAAwB,EAAE;AAEhC,OAAK,MAAM,SAAS,KAClB,KAAI,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CACnD,aAAY,KAAK,KAAK,OAAO,YAAY;EAI7C,MAAM,kBAAkB;GAAC;GAAM;GAAc;GAAQ;GAAO;AAE5D,MAAI,CAAC,gBAAgB,OAAO,MAAM,YAAY,SAAS,EAAE,CAAC,CACxD,OAAM,IAAI,MACR,UAAU,WAAW,KAAK,UAAU;2BACjB,YAAY,6BAA6B,gBAAgB;mEACjB,WAAW,KAAK,UAAU;;;;;;QAOtF;AAGH,SAAO,IAAI,2BAA2B;GACpC;GACA;GACA;GACA;GACD,CAAC;;CAGJ,eAAe,SAAgC;AAC7C,SAAO,KAAK,WAAW,IAAIC,yBAAAA,aAAa,QAAQ,CAAC;;CAGnD,iBAAiB,SAAgC;AAC/C,SAAO,KAAK,WAAW,IAAIC,yBAAAA,UAAU,QAAQ,CAAC;;;;;CAMhD,MAAM,cAAsC;EAC1C,MAAM,QAAQ,2BAA2B,KAAK,WAAW,KAAK,KAAK,UAAU;EAC7E,MAAM,SAAoC,EACxC,YAAY,KAAK,WAClB;EACD,MAAM,QAAyB,EAAE;EACjC,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,KAAK,IAAI,OAAO,OAAO;AAE1D,MAAI,KAAK,WAAW,EAClB,QAAO,EAAE;AAGX,OAAK,MAAM,OAAO,KAChB,OAAM,KAAK;GACT,MAAM,IAAI,KAAK;GACf,MAAM,IAAI;GACX,CAAC;AAGJ,UAAA,GAAA,yBAAA,iCAAuC,MAAM;;;;;;CAO/C,MAAM,WAAW,SAAqC;EACpD,MAAM,QAAQ,gBAAgB,KAAK,WAAW,KAAK,KAAK,UAAU;EAClE,MAAM,SAAoC;GACxC,YAAY,KAAK;GACjB,MAAM,KAAK,UAAU,QAAQ,QAAQ,CAAC;GACtC,MAAM,QAAQ,SAAS;GACxB;AAED,QAAM,KAAK,OAAO,KAAK,IAAI,OAAO,OAAO;;;;;;CAO3C,MAAM,YAAY,UAAwC;AACxD,OAAK,MAAM,OAAO,SAChB,OAAM,KAAK,WAAW,IAAI;;;;;CAO9B,MAAM,QAAuB;EAC3B,MAAM,QAAQ,gBAAgB,KAAK,WAAW,KAAK,KAAK,UAAU;EAClE,MAAM,SAAoC,EACxC,YAAY,KAAK,WAClB;AAED,QAAM,KAAK,OAAO,KAAK,IAAI,OAAO,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat_message_history.d.cts","names":[
|
|
1
|
+
{"version":3,"file":"chat_message_history.d.cts","names":[],"sources":["../src/chat_message_history.ts"],"mappings":";;;;;UAUiB,+BAAA;EACf,MAAA,EAAQ,cAAA;EACR,SAAA;EACA,SAAA;EACA,UAAA;AAAA;AAAA,cAGW,0BAAA,SAAmC,sBAAA;EAC9C,YAAA;EAOA,MAAA,EAAQ,cAAA;EAER,SAAA;EAEA,SAAA;EAEA,UAAA;EAEA,WAAA,CAAA;IACE,MAAA;IACA,SAAA;IACA,SAAA;IACA;EAAA,GACC,+BAAA;EArBQ;;;;;;;;;EAAA,OAsCE,UAAA,CACX,MAAA,EAAQ,cAAA,EACR,SAAA,UACA,SAAA,UACA,UAAA,YAA6B,OAAA,CAAA,0BAAA;EAoC/B,cAAA,CAAe,OAAA,WAAkB,OAAA;EAIjC,gBAAA,CAAiB,OAAA,WAAkB,OAAA;EAJF;;;EAW3B,WAAA,CAAA,GAAe,OAAA,CAAQ,WAAA;EA0BH;;;;EAApB,UAAA,CAAW,OAAA,EAAS,WAAA,GAAc,OAAA;EAnHM;;;;EAkIxC,WAAA,CAAY,QAAA,EAAU,WAAA,KAAgB,OAAA;EA1H5C;;;EAmIM,KAAA,CAAA,GAAS,OAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat_message_history.d.ts","names":[
|
|
1
|
+
{"version":3,"file":"chat_message_history.d.ts","names":[],"sources":["../src/chat_message_history.ts"],"mappings":";;;;;UAUiB,+BAAA;EACf,MAAA,EAAQ,cAAA;EACR,SAAA;EACA,SAAA;EACA,UAAA;AAAA;AAAA,cAGW,0BAAA,SAAmC,sBAAA;EAC9C,YAAA;EAOA,MAAA,EAAQ,cAAA;EAER,SAAA;EAEA,SAAA;EAEA,UAAA;EAEA,WAAA,CAAA;IACE,MAAA;IACA,SAAA;IACA,SAAA;IACA;EAAA,GACC,+BAAA;EArBQ;;;;;;;;;EAAA,OAsCE,UAAA,CACX,MAAA,EAAQ,cAAA,EACR,SAAA,UACA,SAAA,UACA,UAAA,YAA6B,OAAA,CAAA,0BAAA;EAoC/B,cAAA,CAAe,OAAA,WAAkB,OAAA;EAIjC,gBAAA,CAAiB,OAAA,WAAkB,OAAA;EAJF;;;EAW3B,WAAA,CAAA,GAAe,OAAA,CAAQ,WAAA;EA0BH;;;;EAApB,UAAA,CAAW,OAAA,EAAS,WAAA,GAAc,OAAA;EAnHM;;;;EAkIxC,WAAA,CAAY,QAAA,EAAU,WAAA,KAAgB,OAAA;EA1H5C;;;EAmIM,KAAA,CAAA,GAAS,OAAA;AAAA"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { BaseChatMessageHistory } from "@langchain/core/chat_history";
|
|
2
2
|
import { AIMessage, HumanMessage, mapStoredMessagesToChatMessages } from "@langchain/core/messages";
|
|
3
|
-
|
|
4
3
|
//#region src/chat_message_history.ts
|
|
5
4
|
var PostgresChatMessageHistory = class PostgresChatMessageHistory extends BaseChatMessageHistory {
|
|
6
5
|
lc_namespace = [
|
|
@@ -30,8 +29,7 @@ var PostgresChatMessageHistory = class PostgresChatMessageHistory extends BaseCh
|
|
|
30
29
|
* @returns PostgresChatMessageHistory instance.
|
|
31
30
|
*/
|
|
32
31
|
static async initialize(engine, sessionId, tableName, schemaName = "public") {
|
|
33
|
-
const
|
|
34
|
-
const { rows } = await engine.pool.raw(query, {
|
|
32
|
+
const { rows } = await engine.pool.raw(`SELECT column_name, data_type FROM information_schema.columns WHERE table_name = :tableName AND table_schema = :schemaName`, {
|
|
35
33
|
tableName,
|
|
36
34
|
schemaName
|
|
37
35
|
});
|
|
@@ -109,7 +107,7 @@ var PostgresChatMessageHistory = class PostgresChatMessageHistory extends BaseCh
|
|
|
109
107
|
await this.engine.pool.raw(query, values);
|
|
110
108
|
}
|
|
111
109
|
};
|
|
112
|
-
|
|
113
110
|
//#endregion
|
|
114
111
|
export { PostgresChatMessageHistory };
|
|
112
|
+
|
|
115
113
|
//# sourceMappingURL=chat_message_history.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat_message_history.js","names":[
|
|
1
|
+
{"version":3,"file":"chat_message_history.js","names":[],"sources":["../src/chat_message_history.ts"],"sourcesContent":["import { BaseChatMessageHistory } from \"@langchain/core/chat_history\";\nimport {\n AIMessage,\n BaseMessage,\n HumanMessage,\n StoredMessage,\n mapStoredMessagesToChatMessages,\n} from \"@langchain/core/messages\";\nimport PostgresEngine from \"./engine.js\";\n\nexport interface PostgresChatMessageHistoryInput {\n engine: PostgresEngine;\n sessionId: string;\n tableName: string;\n schemaName: string;\n}\n\nexport class PostgresChatMessageHistory extends BaseChatMessageHistory {\n lc_namespace: string[] = [\n \"langchain\",\n \"stores\",\n \"message\",\n \"google-cloud-sql-pg\",\n ];\n\n engine: PostgresEngine;\n\n sessionId: string;\n\n tableName: string;\n\n schemaName: string;\n\n constructor({\n engine,\n sessionId,\n tableName,\n schemaName = \"public\",\n }: PostgresChatMessageHistoryInput) {\n super();\n this.engine = engine;\n this.sessionId = sessionId;\n this.tableName = tableName;\n this.schemaName = schemaName;\n }\n\n /**\n * Create a new PostgresChatMessageHistory instance.\n *\n * @param {PostgresEngine} engine Postgres engine instance to use.\n * @param {string} sessionId Retrieve the table content with this session ID.\n * @param {string} tableName Table name that stores that chat message history. Parameter is not escaped. Do not use with end user input.\n * @param {string} schemaName Schema name for the chat message history table. Default: \"public\". Parameter is not escaped. Do not use with end user input.\n * @returns PostgresChatMessageHistory instance.\n */\n static async initialize(\n engine: PostgresEngine,\n sessionId: string,\n tableName: string,\n schemaName: string = \"public\"\n ) {\n const query = `SELECT column_name, data_type FROM information_schema.columns WHERE table_name = :tableName AND table_schema = :schemaName`;\n const { rows } = await engine.pool.raw(query, { tableName, schemaName });\n const columnNames: string[] = [];\n\n for (const index in rows) {\n if (Object.prototype.hasOwnProperty.call(rows, index)) {\n columnNames.push(rows[index].column_name);\n }\n }\n\n const requiredColumns = [\"id\", \"session_id\", \"data\", \"type\"];\n\n if (!requiredColumns.every((x) => columnNames.includes(x))) {\n throw new Error(\n `Table '${schemaName}'.'${tableName}' has incorrect schema.\n Got column names ${columnNames} but required column names ${requiredColumns}.\n Please create table with following schema: CREATE TABLE '${schemaName}'.'${tableName}' (\n id SERIAL AUTO_INCREMENT PRIMARY KEY,\n session_id TEXT NOT NULL,\n data JSONB NOT NULL,\n type TEXT NOT NULL\n );\n `\n );\n }\n\n return new PostgresChatMessageHistory({\n engine,\n sessionId,\n tableName,\n schemaName,\n });\n }\n\n addUserMessage(message: string): Promise<void> {\n return this.addMessage(new HumanMessage(message));\n }\n\n addAIChatMessage(message: string): Promise<void> {\n return this.addMessage(new AIMessage(message));\n }\n\n /**\n * Returns a list of messages stored in the store.\n */\n async getMessages(): Promise<BaseMessage[]> {\n const query = `SELECT data, type FROM \"${this.schemaName}\".\"${this.tableName}\" WHERE session_id = :session_id ORDER BY id;`;\n const values: { [key: string]: string } = {\n session_id: this.sessionId,\n };\n const items: StoredMessage[] = [];\n const { rows } = await this.engine.pool.raw(query, values);\n\n if (rows.length === 0) {\n return [];\n }\n\n for (const row of rows) {\n items.push({\n data: row.data.data,\n type: row.type,\n });\n }\n\n return mapStoredMessagesToChatMessages(items);\n }\n\n /**\n * Add a message object to the store.\n * @param {BaseMessage} message Message to be added to the store\n */\n async addMessage(message: BaseMessage): Promise<void> {\n const query = `INSERT INTO \"${this.schemaName}\".\"${this.tableName}\"(\"session_id\", \"data\", \"type\") VALUES (:session_id, :data, :type)`;\n const values: { [key: string]: string } = {\n session_id: this.sessionId,\n data: JSON.stringify(message.toDict()),\n type: message.getType(),\n };\n\n await this.engine.pool.raw(query, values);\n }\n\n /**\n * Add a list of messages object to the store.\n * @param {Array<BaseMessage>} messages List of messages to be added to the store\n */\n async addMessages(messages: BaseMessage[]): Promise<void> {\n for (const msg of messages) {\n await this.addMessage(msg);\n }\n }\n\n /**\n * Remove all messages from the store.\n */\n async clear(): Promise<void> {\n const query = `DELETE FROM \"${this.schemaName}\".\"${this.tableName}\" WHERE session_id = :session_id;`;\n const values: { [key: string]: string } = {\n session_id: this.sessionId,\n };\n\n await this.engine.pool.raw(query, values);\n }\n}\n"],"mappings":";;;AAiBA,IAAa,6BAAb,MAAa,mCAAmC,uBAAuB;CACrE,eAAyB;EACvB;EACA;EACA;EACA;EACD;CAED;CAEA;CAEA;CAEA;CAEA,YAAY,EACV,QACA,WACA,WACA,aAAa,YACqB;AAClC,SAAO;AACP,OAAK,SAAS;AACd,OAAK,YAAY;AACjB,OAAK,YAAY;AACjB,OAAK,aAAa;;;;;;;;;;;CAYpB,aAAa,WACX,QACA,WACA,WACA,aAAqB,UACrB;EAEA,MAAM,EAAE,SAAS,MAAM,OAAO,KAAK,IADrB,8HACgC;GAAE;GAAW;GAAY,CAAC;EACxE,MAAM,cAAwB,EAAE;AAEhC,OAAK,MAAM,SAAS,KAClB,KAAI,OAAO,UAAU,eAAe,KAAK,MAAM,MAAM,CACnD,aAAY,KAAK,KAAK,OAAO,YAAY;EAI7C,MAAM,kBAAkB;GAAC;GAAM;GAAc;GAAQ;GAAO;AAE5D,MAAI,CAAC,gBAAgB,OAAO,MAAM,YAAY,SAAS,EAAE,CAAC,CACxD,OAAM,IAAI,MACR,UAAU,WAAW,KAAK,UAAU;2BACjB,YAAY,6BAA6B,gBAAgB;mEACjB,WAAW,KAAK,UAAU;;;;;;QAOtF;AAGH,SAAO,IAAI,2BAA2B;GACpC;GACA;GACA;GACA;GACD,CAAC;;CAGJ,eAAe,SAAgC;AAC7C,SAAO,KAAK,WAAW,IAAI,aAAa,QAAQ,CAAC;;CAGnD,iBAAiB,SAAgC;AAC/C,SAAO,KAAK,WAAW,IAAI,UAAU,QAAQ,CAAC;;;;;CAMhD,MAAM,cAAsC;EAC1C,MAAM,QAAQ,2BAA2B,KAAK,WAAW,KAAK,KAAK,UAAU;EAC7E,MAAM,SAAoC,EACxC,YAAY,KAAK,WAClB;EACD,MAAM,QAAyB,EAAE;EACjC,MAAM,EAAE,SAAS,MAAM,KAAK,OAAO,KAAK,IAAI,OAAO,OAAO;AAE1D,MAAI,KAAK,WAAW,EAClB,QAAO,EAAE;AAGX,OAAK,MAAM,OAAO,KAChB,OAAM,KAAK;GACT,MAAM,IAAI,KAAK;GACf,MAAM,IAAI;GACX,CAAC;AAGJ,SAAO,gCAAgC,MAAM;;;;;;CAO/C,MAAM,WAAW,SAAqC;EACpD,MAAM,QAAQ,gBAAgB,KAAK,WAAW,KAAK,KAAK,UAAU;EAClE,MAAM,SAAoC;GACxC,YAAY,KAAK;GACjB,MAAM,KAAK,UAAU,QAAQ,QAAQ,CAAC;GACtC,MAAM,QAAQ,SAAS;GACxB;AAED,QAAM,KAAK,OAAO,KAAK,IAAI,OAAO,OAAO;;;;;;CAO3C,MAAM,YAAY,UAAwC;AACxD,OAAK,MAAM,OAAO,SAChB,OAAM,KAAK,WAAW,IAAI;;;;;CAO9B,MAAM,QAAuB;EAC3B,MAAM,QAAQ,gBAAgB,KAAK,WAAW,KAAK,KAAK,UAAU;EAClE,MAAM,SAAoC,EACxC,YAAY,KAAK,WAClB;AAED,QAAM,KAAK,OAAO,KAAK,IAAI,OAAO,OAAO"}
|
package/dist/engine.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const
|
|
2
|
-
const require_utils = require(
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
const require_runtime = require("./_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_utils = require("./utils/utils.cjs");
|
|
3
|
+
let _google_cloud_cloud_sql_connector = require("@google-cloud/cloud-sql-connector");
|
|
4
|
+
let google_auth_library = require("google-auth-library");
|
|
5
|
+
let knex = require("knex");
|
|
6
|
+
knex = require_runtime.__toESM(knex);
|
|
7
7
|
//#region src/engine.ts
|
|
8
8
|
var Column = class {
|
|
9
9
|
name;
|
|
@@ -70,7 +70,7 @@ var PostgresEngine = class PostgresEngine {
|
|
|
70
70
|
* @param iamAccountEmail Optional - IAM service account email. Defaults to undefined
|
|
71
71
|
* @returns PostgresEngine instance
|
|
72
72
|
*/
|
|
73
|
-
static async fromInstance(projectId, region, instance, database, { ipType =
|
|
73
|
+
static async fromInstance(projectId, region, instance, database, { ipType = _google_cloud_cloud_sql_connector.IpAddressTypes.PUBLIC, user, password, iamAccountEmail } = {}) {
|
|
74
74
|
let dbUser;
|
|
75
75
|
let enableIAMAuth;
|
|
76
76
|
if (!user && password || user && !password) throw Error("Only one of 'user' or 'password' were specified. Either both should be specified to use basic user/password authentication or neither for IAM DB authentication.");
|
|
@@ -80,27 +80,22 @@ var PostgresEngine = class PostgresEngine {
|
|
|
80
80
|
} else {
|
|
81
81
|
enableIAMAuth = true;
|
|
82
82
|
if (iamAccountEmail !== void 0) dbUser = iamAccountEmail;
|
|
83
|
-
else {
|
|
84
|
-
const auth = new google_auth_library.GoogleAuth({ scopes: "https://www.googleapis.com/auth/cloud-platform" });
|
|
85
|
-
dbUser = await require_utils.getIAMPrincipalEmail(auth);
|
|
86
|
-
}
|
|
83
|
+
else dbUser = await require_utils.getIAMPrincipalEmail(new google_auth_library.GoogleAuth({ scopes: "https://www.googleapis.com/auth/cloud-platform" }));
|
|
87
84
|
}
|
|
88
|
-
PostgresEngine.connector = new
|
|
89
|
-
const
|
|
90
|
-
instanceConnectionName: `${projectId}:${region}:${instance}`,
|
|
91
|
-
ipType,
|
|
92
|
-
authType: enableIAMAuth ? __google_cloud_cloud_sql_connector.AuthTypes.IAM : __google_cloud_cloud_sql_connector.AuthTypes.PASSWORD
|
|
93
|
-
});
|
|
94
|
-
const dbConfig = {
|
|
85
|
+
PostgresEngine.connector = new _google_cloud_cloud_sql_connector.Connector({ userAgent: USER_AGENT });
|
|
86
|
+
const engine = (0, knex.default)({
|
|
95
87
|
client: "pg",
|
|
96
88
|
connection: {
|
|
97
|
-
...
|
|
89
|
+
...await PostgresEngine.connector.getOptions({
|
|
90
|
+
instanceConnectionName: `${projectId}:${region}:${instance}`,
|
|
91
|
+
ipType,
|
|
92
|
+
authType: enableIAMAuth ? _google_cloud_cloud_sql_connector.AuthTypes.IAM : _google_cloud_cloud_sql_connector.AuthTypes.PASSWORD
|
|
93
|
+
}),
|
|
98
94
|
...password ? { password } : {},
|
|
99
95
|
user: dbUser,
|
|
100
96
|
database
|
|
101
97
|
}
|
|
102
|
-
};
|
|
103
|
-
const engine = (0, knex.default)(dbConfig);
|
|
98
|
+
});
|
|
104
99
|
return new PostgresEngine(PostgresEngine._createKey, engine);
|
|
105
100
|
}
|
|
106
101
|
/**
|
|
@@ -120,9 +115,8 @@ var PostgresEngine = class PostgresEngine {
|
|
|
120
115
|
* @returns PostgresEngine instance
|
|
121
116
|
*/
|
|
122
117
|
static async fromConnectionString(url, poolConfig) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
const dbConfig = {
|
|
118
|
+
if (typeof url === "string" && !url.startsWith("postgresql+asyncpg")) throw Error("Driver must be type 'postgresql+asyncpg'");
|
|
119
|
+
const engine = (0, knex.default)({
|
|
126
120
|
client: "pg",
|
|
127
121
|
connection: url,
|
|
128
122
|
acquireConnectionTimeout: 1e6,
|
|
@@ -130,8 +124,7 @@ var PostgresEngine = class PostgresEngine {
|
|
|
130
124
|
...poolConfig,
|
|
131
125
|
acquireTimeoutMillis: 6e5
|
|
132
126
|
}
|
|
133
|
-
};
|
|
134
|
-
const engine = (0, knex.default)(dbConfig);
|
|
127
|
+
});
|
|
135
128
|
return new PostgresEngine(PostgresEngine._createKey, engine);
|
|
136
129
|
}
|
|
137
130
|
/**
|
|
@@ -153,9 +146,8 @@ var PostgresEngine = class PostgresEngine {
|
|
|
153
146
|
await this.pool.raw("CREATE EXTENSION IF NOT EXISTS vector");
|
|
154
147
|
if (overwriteExisting) await this.pool.schema.withSchema(schemaName).dropTableIfExists(tableName);
|
|
155
148
|
const idDataType = typeof idColumn === "string" ? "UUID" : idColumn.dataType;
|
|
156
|
-
const idColumnName = typeof idColumn === "string" ? idColumn : idColumn.name;
|
|
157
149
|
let query = `CREATE TABLE ${schemaName}.${tableName}(
|
|
158
|
-
${
|
|
150
|
+
${typeof idColumn === "string" ? idColumn : idColumn.name} ${idDataType} PRIMARY KEY,
|
|
159
151
|
${contentColumn} TEXT NOT NULL,
|
|
160
152
|
${embeddingColumn} ${embeddingColumnType}(${vectorSize}) NOT NULL`;
|
|
161
153
|
for (const column of metadataColumns) {
|
|
@@ -187,12 +179,11 @@ var PostgresEngine = class PostgresEngine {
|
|
|
187
179
|
if (PostgresEngine.connector !== void 0) PostgresEngine.connector.close();
|
|
188
180
|
}
|
|
189
181
|
testConnection() {
|
|
190
|
-
|
|
191
|
-
return now;
|
|
182
|
+
return this.pool.raw("SELECT NOW() as currentTimestamp");
|
|
192
183
|
}
|
|
193
184
|
};
|
|
194
|
-
|
|
195
185
|
//#endregion
|
|
196
186
|
exports.Column = Column;
|
|
197
|
-
exports.
|
|
187
|
+
exports.default = PostgresEngine;
|
|
188
|
+
|
|
198
189
|
//# sourceMappingURL=engine.cjs.map
|
package/dist/engine.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.cjs","names":["name: string","dataType: string","nullable: boolean","key: symbol","pool: knex.Knex","projectId: string","region: string","instance: string","database: string","IpAddressTypes","dbUser: string","enableIAMAuth: boolean","GoogleAuth","getIAMPrincipalEmail","Connector","AuthTypes","dbConfig: knex.Knex.Config","engine: knex.Knex","url: string | knex.Knex.StaticConnectionConfig","poolConfig?: knex.Knex.PoolConfig","tableName: string","vectorSize: number","schemaName: string"],"sources":["../src/engine.ts"],"sourcesContent":["import {\n AuthTypes,\n Connector,\n IpAddressTypes,\n} from \"@google-cloud/cloud-sql-connector\";\nimport { GoogleAuth } from \"google-auth-library\";\nimport knex from \"knex\";\nimport { getIAMPrincipalEmail } from \"./utils/utils.js\";\n\nexport interface PostgresEngineArgs {\n ipType?: IpAddressTypes;\n user?: string;\n password?: string;\n iamAccountEmail?: string;\n}\n\nexport interface VectorStoreTableArgs {\n schemaName?: string;\n contentColumn?: string;\n embeddingColumn?: string;\n embeddingColumnType?: \"vector\" | \"halfvec\" | \"bit\" | \"sparsevec\";\n metadataColumns?: Column[];\n metadataJsonColumn?: string;\n idColumn?: string | Column;\n overwriteExisting?: boolean;\n storeMetadata?: boolean;\n}\n\nexport class Column {\n name: string;\n\n dataType: string;\n\n nullable: boolean;\n\n constructor(name: string, dataType: string, nullable: boolean = true) {\n this.name = name;\n this.dataType = dataType;\n this.nullable = nullable;\n\n this.postInitilization();\n }\n\n private postInitilization() {\n if (typeof this.name !== \"string\") {\n throw Error(\"Column name must be type string\");\n }\n\n if (typeof this.dataType !== \"string\") {\n throw Error(\"Column data_type must be type string\");\n }\n }\n}\n\nconst USER_AGENT = \"langchain-google-cloud-sql-pg-js\";\n\n/**\n * Cloud SQL shared connection pool\n *\n * Setup:\n * Install `@langchain/google-cloud-sql-pg`\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { Column, PostgresEngine, PostgresEngineArgs } from \"@langchain/google-cloud-sql-pg\";\n *\n * const pgArgs: PostgresEngineArgs = {\n * user: \"db-user\",\n * password: \"password\"\n *}\n *\n * const engine: PostgresEngine = await PostgresEngine.fromInstance(\n * \"project-id\",\n * \"region\",\n * \"instance-name\",\n * \"database-name\",\n * pgArgs\n * );\n * ```\n * </details>\n *\n * <br />\n *\n */\nexport class PostgresEngine {\n private static _createKey = Symbol(\"key\");\n\n pool: knex.Knex;\n\n static connector: Connector;\n\n constructor(key: symbol, pool: knex.Knex) {\n if (key !== PostgresEngine._createKey) {\n throw Error(\"Only create class through 'create' method!\");\n }\n this.pool = pool;\n }\n\n /**\n * @param projectId Required - GCP Project ID\n * @param region Required - Postgres Instance Region\n * @param instance Required - Postgres Instance name\n * @param database Required - Database name\n * @param ipType Optional - IP address type. Defaults to IPAddressType.PUBLIC\n * @param user Optional - Postgres user name. Defaults to undefined\n * @param password Optional - Postgres user password. Defaults to undefined\n * @param iamAccountEmail Optional - IAM service account email. Defaults to undefined\n * @returns PostgresEngine instance\n */\n\n static async fromInstance(\n projectId: string,\n region: string,\n instance: string,\n database: string,\n {\n ipType = IpAddressTypes.PUBLIC,\n user,\n password,\n iamAccountEmail,\n }: PostgresEngineArgs = {}\n ): Promise<PostgresEngine> {\n let dbUser: string;\n let enableIAMAuth: boolean;\n\n if ((!user && password) || (user && !password)) {\n // XOR for strings\n throw Error(\n \"Only one of 'user' or 'password' were specified. Either \" +\n \"both should be specified to use basic user/password \" +\n \"authentication or neither for IAM DB authentication.\"\n );\n }\n\n // User and password are given so we use the basic auth\n if (user !== undefined && password !== undefined) {\n enableIAMAuth = false;\n dbUser = user!;\n } else {\n enableIAMAuth = true;\n if (iamAccountEmail !== undefined) {\n dbUser = iamAccountEmail;\n } else {\n // Get application default credentials\n const auth = new GoogleAuth({\n scopes: \"https://www.googleapis.com/auth/cloud-platform\",\n });\n // dbUser should be the iam principal email by passing the credentials obtained\n dbUser = await getIAMPrincipalEmail(auth);\n }\n }\n\n PostgresEngine.connector = new Connector({ userAgent: USER_AGENT });\n const clientOpts = await PostgresEngine.connector.getOptions({\n instanceConnectionName: `${projectId}:${region}:${instance}`,\n ipType,\n authType: enableIAMAuth ? AuthTypes.IAM : AuthTypes.PASSWORD,\n });\n\n const dbConfig: knex.Knex.Config = {\n client: \"pg\",\n connection: {\n ...clientOpts,\n ...(password ? { password } : {}),\n user: dbUser,\n database,\n },\n };\n\n const engine = knex(dbConfig);\n\n return new PostgresEngine(PostgresEngine._createKey, engine);\n }\n\n /**\n * Create a PostgresEngine instance from an Knex instance.\n *\n * @param engine knex instance\n * @returns PostgresEngine instance from a knex instance\n */\n static async fromPool(engine: knex.Knex) {\n return new PostgresEngine(PostgresEngine._createKey, engine);\n }\n\n /**\n * Create a PostgresEngine instance from arguments.\n *\n * @param url URL use to connect to a database\n * @param poolConfig Optional - Configuration pool to use in the Knex configuration\n * @returns PostgresEngine instance\n */\n static async fromConnectionString(\n url: string | knex.Knex.StaticConnectionConfig,\n poolConfig?: knex.Knex.PoolConfig\n ) {\n const driver = \"postgresql+asyncpg\";\n\n if (typeof url === \"string\" && !url.startsWith(driver)) {\n throw Error(\"Driver must be type 'postgresql+asyncpg'\");\n }\n\n const dbConfig: knex.Knex.Config = {\n client: \"pg\",\n connection: url,\n acquireConnectionTimeout: 1000000,\n pool: {\n ...poolConfig,\n acquireTimeoutMillis: 600000,\n },\n };\n\n const engine = knex(dbConfig);\n\n return new PostgresEngine(PostgresEngine._createKey, engine);\n }\n\n /**\n * Create a table for saving of vectors to be used with PostgresVectorStore.\n *\n * @param tableName Postgres database table name. Parameter is not escaped. Do not use with end user input.\n * @param vectorSize Vector size for the embedding model to be used.\n * @param schemaName The schema name to store Postgres database table. Default: \"public\". Parameter is not escaped. Do not use with end user input.\n * @param contentColumn Name of the column to store document content. Default: \"content\".\n * @param embeddingColumn Name of the column to store vector embeddings. Default: \"embedding\".\n * @param embeddingColumnType Type of the embedding column (\"vector\" | \"halfvec\" | \"bit\" | \"sparsevec\"). Default: \"vector\". More info on HNSW-supported types: https://github.com/pgvector/pgvector#hnsw\n * @param metadataColumns Optional - A list of Columns to create for custom metadata. Default: [].\n * @param metadataJsonColumn Optional - The column to store extra metadata in JSON format. Default: \"langchain_metadata\".\n * @param idColumn Optional - Column to store ids. Default: \"langchain_id\" column name with data type UUID.\n * @param overwriteExisting Whether to drop existing table. Default: False.\n * @param storeMetadata Whether to store metadata in the table. Default: True.\n */\n async initVectorstoreTable(\n tableName: string,\n vectorSize: number,\n {\n schemaName = \"public\",\n contentColumn = \"content\",\n embeddingColumn = \"embedding\",\n embeddingColumnType = \"vector\",\n metadataColumns = [],\n metadataJsonColumn = \"langchain_metadata\",\n idColumn = \"langchain_id\",\n overwriteExisting = false,\n storeMetadata = true,\n }: VectorStoreTableArgs = {}\n ): Promise<void> {\n await this.pool.raw(\"CREATE EXTENSION IF NOT EXISTS vector\");\n\n if (overwriteExisting) {\n await this.pool.schema\n .withSchema(schemaName)\n .dropTableIfExists(tableName);\n }\n\n const idDataType =\n typeof idColumn === \"string\" ? \"UUID\" : idColumn.dataType;\n const idColumnName =\n typeof idColumn === \"string\" ? idColumn : idColumn.name;\n\n let query = `CREATE TABLE ${schemaName}.${tableName}(\n ${idColumnName} ${idDataType} PRIMARY KEY,\n ${contentColumn} TEXT NOT NULL,\n ${embeddingColumn} ${embeddingColumnType}(${vectorSize}) NOT NULL`;\n\n for (const column of metadataColumns) {\n const nullable = !column.nullable ? \"NOT NULL\" : \"\";\n query += `,\\n ${column.name} ${column.dataType} ${nullable}`;\n }\n\n if (storeMetadata) {\n query += `,\\n${metadataJsonColumn} JSON`;\n }\n\n query += `\\n);`;\n\n await this.pool.raw(query);\n }\n\n /**\n * Create a Cloud SQL table to store chat history.\n *\n * @param tableName Table name to store chat history\n * @param schemaName Schema name to store chat history table\n */\n\n async initChatHistoryTable(\n tableName: string,\n schemaName: string = \"public\"\n ): Promise<void> {\n await this.pool.raw(\n `CREATE TABLE IF NOT EXISTS ${schemaName}.${tableName}(\n id SERIAL PRIMARY KEY,\n session_id TEXT NOT NULL,\n data JSONB NOT NULL,\n type TEXT NOT NULL);`\n );\n }\n\n /**\n * Dispose of connection pool\n */\n async closeConnection(): Promise<void> {\n await this.pool.destroy();\n if (PostgresEngine.connector !== undefined) {\n PostgresEngine.connector.close();\n }\n }\n\n // Just to test the connection to the database\n testConnection() {\n const now = this.pool.raw(\"SELECT NOW() as currentTimestamp\");\n return now;\n }\n}\n\nexport default PostgresEngine;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine.cjs","names":["IpAddressTypes","getIAMPrincipalEmail","GoogleAuth","Connector","AuthTypes"],"sources":["../src/engine.ts"],"sourcesContent":["import {\n AuthTypes,\n Connector,\n IpAddressTypes,\n} from \"@google-cloud/cloud-sql-connector\";\nimport { GoogleAuth } from \"google-auth-library\";\nimport knex from \"knex\";\nimport { getIAMPrincipalEmail } from \"./utils/utils.js\";\n\nexport interface PostgresEngineArgs {\n ipType?: IpAddressTypes;\n user?: string;\n password?: string;\n iamAccountEmail?: string;\n}\n\nexport interface VectorStoreTableArgs {\n schemaName?: string;\n contentColumn?: string;\n embeddingColumn?: string;\n embeddingColumnType?: \"vector\" | \"halfvec\" | \"bit\" | \"sparsevec\";\n metadataColumns?: Column[];\n metadataJsonColumn?: string;\n idColumn?: string | Column;\n overwriteExisting?: boolean;\n storeMetadata?: boolean;\n}\n\nexport class Column {\n name: string;\n\n dataType: string;\n\n nullable: boolean;\n\n constructor(name: string, dataType: string, nullable: boolean = true) {\n this.name = name;\n this.dataType = dataType;\n this.nullable = nullable;\n\n this.postInitilization();\n }\n\n private postInitilization() {\n if (typeof this.name !== \"string\") {\n throw Error(\"Column name must be type string\");\n }\n\n if (typeof this.dataType !== \"string\") {\n throw Error(\"Column data_type must be type string\");\n }\n }\n}\n\nconst USER_AGENT = \"langchain-google-cloud-sql-pg-js\";\n\n/**\n * Cloud SQL shared connection pool\n *\n * Setup:\n * Install `@langchain/google-cloud-sql-pg`\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { Column, PostgresEngine, PostgresEngineArgs } from \"@langchain/google-cloud-sql-pg\";\n *\n * const pgArgs: PostgresEngineArgs = {\n * user: \"db-user\",\n * password: \"password\"\n *}\n *\n * const engine: PostgresEngine = await PostgresEngine.fromInstance(\n * \"project-id\",\n * \"region\",\n * \"instance-name\",\n * \"database-name\",\n * pgArgs\n * );\n * ```\n * </details>\n *\n * <br />\n *\n */\nexport class PostgresEngine {\n private static _createKey = Symbol(\"key\");\n\n pool: knex.Knex;\n\n static connector: Connector;\n\n constructor(key: symbol, pool: knex.Knex) {\n if (key !== PostgresEngine._createKey) {\n throw Error(\"Only create class through 'create' method!\");\n }\n this.pool = pool;\n }\n\n /**\n * @param projectId Required - GCP Project ID\n * @param region Required - Postgres Instance Region\n * @param instance Required - Postgres Instance name\n * @param database Required - Database name\n * @param ipType Optional - IP address type. Defaults to IPAddressType.PUBLIC\n * @param user Optional - Postgres user name. Defaults to undefined\n * @param password Optional - Postgres user password. Defaults to undefined\n * @param iamAccountEmail Optional - IAM service account email. Defaults to undefined\n * @returns PostgresEngine instance\n */\n\n static async fromInstance(\n projectId: string,\n region: string,\n instance: string,\n database: string,\n {\n ipType = IpAddressTypes.PUBLIC,\n user,\n password,\n iamAccountEmail,\n }: PostgresEngineArgs = {}\n ): Promise<PostgresEngine> {\n let dbUser: string;\n let enableIAMAuth: boolean;\n\n if ((!user && password) || (user && !password)) {\n // XOR for strings\n throw Error(\n \"Only one of 'user' or 'password' were specified. Either \" +\n \"both should be specified to use basic user/password \" +\n \"authentication or neither for IAM DB authentication.\"\n );\n }\n\n // User and password are given so we use the basic auth\n if (user !== undefined && password !== undefined) {\n enableIAMAuth = false;\n dbUser = user!;\n } else {\n enableIAMAuth = true;\n if (iamAccountEmail !== undefined) {\n dbUser = iamAccountEmail;\n } else {\n // Get application default credentials\n const auth = new GoogleAuth({\n scopes: \"https://www.googleapis.com/auth/cloud-platform\",\n });\n // dbUser should be the iam principal email by passing the credentials obtained\n dbUser = await getIAMPrincipalEmail(auth);\n }\n }\n\n PostgresEngine.connector = new Connector({ userAgent: USER_AGENT });\n const clientOpts = await PostgresEngine.connector.getOptions({\n instanceConnectionName: `${projectId}:${region}:${instance}`,\n ipType,\n authType: enableIAMAuth ? AuthTypes.IAM : AuthTypes.PASSWORD,\n });\n\n const dbConfig: knex.Knex.Config = {\n client: \"pg\",\n connection: {\n ...clientOpts,\n ...(password ? { password } : {}),\n user: dbUser,\n database,\n },\n };\n\n const engine = knex(dbConfig);\n\n return new PostgresEngine(PostgresEngine._createKey, engine);\n }\n\n /**\n * Create a PostgresEngine instance from an Knex instance.\n *\n * @param engine knex instance\n * @returns PostgresEngine instance from a knex instance\n */\n static async fromPool(engine: knex.Knex) {\n return new PostgresEngine(PostgresEngine._createKey, engine);\n }\n\n /**\n * Create a PostgresEngine instance from arguments.\n *\n * @param url URL use to connect to a database\n * @param poolConfig Optional - Configuration pool to use in the Knex configuration\n * @returns PostgresEngine instance\n */\n static async fromConnectionString(\n url: string | knex.Knex.StaticConnectionConfig,\n poolConfig?: knex.Knex.PoolConfig\n ) {\n const driver = \"postgresql+asyncpg\";\n\n if (typeof url === \"string\" && !url.startsWith(driver)) {\n throw Error(\"Driver must be type 'postgresql+asyncpg'\");\n }\n\n const dbConfig: knex.Knex.Config = {\n client: \"pg\",\n connection: url,\n acquireConnectionTimeout: 1000000,\n pool: {\n ...poolConfig,\n acquireTimeoutMillis: 600000,\n },\n };\n\n const engine = knex(dbConfig);\n\n return new PostgresEngine(PostgresEngine._createKey, engine);\n }\n\n /**\n * Create a table for saving of vectors to be used with PostgresVectorStore.\n *\n * @param tableName Postgres database table name. Parameter is not escaped. Do not use with end user input.\n * @param vectorSize Vector size for the embedding model to be used.\n * @param schemaName The schema name to store Postgres database table. Default: \"public\". Parameter is not escaped. Do not use with end user input.\n * @param contentColumn Name of the column to store document content. Default: \"content\".\n * @param embeddingColumn Name of the column to store vector embeddings. Default: \"embedding\".\n * @param embeddingColumnType Type of the embedding column (\"vector\" | \"halfvec\" | \"bit\" | \"sparsevec\"). Default: \"vector\". More info on HNSW-supported types: https://github.com/pgvector/pgvector#hnsw\n * @param metadataColumns Optional - A list of Columns to create for custom metadata. Default: [].\n * @param metadataJsonColumn Optional - The column to store extra metadata in JSON format. Default: \"langchain_metadata\".\n * @param idColumn Optional - Column to store ids. Default: \"langchain_id\" column name with data type UUID.\n * @param overwriteExisting Whether to drop existing table. Default: False.\n * @param storeMetadata Whether to store metadata in the table. Default: True.\n */\n async initVectorstoreTable(\n tableName: string,\n vectorSize: number,\n {\n schemaName = \"public\",\n contentColumn = \"content\",\n embeddingColumn = \"embedding\",\n embeddingColumnType = \"vector\",\n metadataColumns = [],\n metadataJsonColumn = \"langchain_metadata\",\n idColumn = \"langchain_id\",\n overwriteExisting = false,\n storeMetadata = true,\n }: VectorStoreTableArgs = {}\n ): Promise<void> {\n await this.pool.raw(\"CREATE EXTENSION IF NOT EXISTS vector\");\n\n if (overwriteExisting) {\n await this.pool.schema\n .withSchema(schemaName)\n .dropTableIfExists(tableName);\n }\n\n const idDataType =\n typeof idColumn === \"string\" ? \"UUID\" : idColumn.dataType;\n const idColumnName =\n typeof idColumn === \"string\" ? idColumn : idColumn.name;\n\n let query = `CREATE TABLE ${schemaName}.${tableName}(\n ${idColumnName} ${idDataType} PRIMARY KEY,\n ${contentColumn} TEXT NOT NULL,\n ${embeddingColumn} ${embeddingColumnType}(${vectorSize}) NOT NULL`;\n\n for (const column of metadataColumns) {\n const nullable = !column.nullable ? \"NOT NULL\" : \"\";\n query += `,\\n ${column.name} ${column.dataType} ${nullable}`;\n }\n\n if (storeMetadata) {\n query += `,\\n${metadataJsonColumn} JSON`;\n }\n\n query += `\\n);`;\n\n await this.pool.raw(query);\n }\n\n /**\n * Create a Cloud SQL table to store chat history.\n *\n * @param tableName Table name to store chat history\n * @param schemaName Schema name to store chat history table\n */\n\n async initChatHistoryTable(\n tableName: string,\n schemaName: string = \"public\"\n ): Promise<void> {\n await this.pool.raw(\n `CREATE TABLE IF NOT EXISTS ${schemaName}.${tableName}(\n id SERIAL PRIMARY KEY,\n session_id TEXT NOT NULL,\n data JSONB NOT NULL,\n type TEXT NOT NULL);`\n );\n }\n\n /**\n * Dispose of connection pool\n */\n async closeConnection(): Promise<void> {\n await this.pool.destroy();\n if (PostgresEngine.connector !== undefined) {\n PostgresEngine.connector.close();\n }\n }\n\n // Just to test the connection to the database\n testConnection() {\n const now = this.pool.raw(\"SELECT NOW() as currentTimestamp\");\n return now;\n }\n}\n\nexport default PostgresEngine;\n"],"mappings":"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"}
|
package/dist/engine.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.cts","names":[
|
|
1
|
+
{"version":3,"file":"engine.d.cts","names":[],"sources":["../src/engine.ts"],"mappings":";;;;UASiB,kBAAA;EACf,MAAA,GAAS,cAAA;EACT,IAAA;EACA,QAAA;EACA,eAAA;AAAA;AAAA,UAGe,oBAAA;EACf,UAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,eAAA,GAAkB,MAAA;EAClB,kBAAA;EACA,QAAA,YAAoB,MAAA;EACpB,iBAAA;EACA,aAAA;AAAA;AAAA,cAGW,MAAA;EACX,IAAA;EAEA,QAAA;EAEA,QAAA;EAEA,WAAA,CAAY,IAAA,UAAc,QAAA,UAAkB,QAAA;EAAA,QAQpC,iBAAA;AAAA;;;;;;;AAfV;;;;;;;;;;;;;;AA0DA;;;;;;;;;;cAAa,cAAA;EAAA,eACI,UAAA;EAEf,IAAA,EAAM,IAAA,CAAK,IAAA;EAAA,OAEJ,SAAA,EAAW,SAAA;EAElB,WAAA,CAAY,GAAA,UAAa,IAAA,EAAM,IAAA,CAAK,IAAA;EAyFG;;;;;;;;;;;EAAA,OAtE1B,YAAA,CACX,SAAA,UACA,MAAA,UACA,QAAA,UACA,QAAA;IAEE,MAAA;IACA,IAAA;IACA,QAAA;IACA;EAAA,IACC,kBAAA,GACF,OAAA,CAAQ,cAAA;EAyHP;;;;;;EAAA,OA9DS,QAAA,CAAS,MAAA,EAAQ,IAAA,CAAK,IAAA,GAAI,OAAA,CAAA,cAAA;EAiIzB;;;;;;;EAAA,OAtHD,oBAAA,CACX,GAAA,WAAc,IAAA,CAAK,IAAA,CAAK,sBAAA,EACxB,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,UAAA,GAAU,OAAA,CAAA,cAAA;EAtGnC;;;;;;;;;;;;;;;EA4IM,oBAAA,CACJ,SAAA,UACA,UAAA;IAEE,UAAA;IACA,aAAA;IACA,eAAA;IACA,mBAAA;IACA,eAAA;IACA,kBAAA;IACA,QAAA;IACA,iBAAA;IACA;EAAA,IACC,oBAAA,GACF,OAAA;EA9HC;;;;;;EAsKE,oBAAA,CACJ,SAAA,UACA,UAAA,YACC,OAAA;EA5GgC;;;EAyH7B,eAAA,CAAA,GAAmB,OAAA;EAQzB,cAAA,CAAA,GAAc,IAAA,CAAA,IAAA,CAAA,GAAA;AAAA"}
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","names":[
|
|
1
|
+
{"version":3,"file":"engine.d.ts","names":[],"sources":["../src/engine.ts"],"mappings":";;;;UASiB,kBAAA;EACf,MAAA,GAAS,cAAA;EACT,IAAA;EACA,QAAA;EACA,eAAA;AAAA;AAAA,UAGe,oBAAA;EACf,UAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,eAAA,GAAkB,MAAA;EAClB,kBAAA;EACA,QAAA,YAAoB,MAAA;EACpB,iBAAA;EACA,aAAA;AAAA;AAAA,cAGW,MAAA;EACX,IAAA;EAEA,QAAA;EAEA,QAAA;EAEA,WAAA,CAAY,IAAA,UAAc,QAAA,UAAkB,QAAA;EAAA,QAQpC,iBAAA;AAAA;;;;;;;AAfV;;;;;;;;;;;;;;AA0DA;;;;;;;;;;cAAa,cAAA;EAAA,eACI,UAAA;EAEf,IAAA,EAAM,IAAA,CAAK,IAAA;EAAA,OAEJ,SAAA,EAAW,SAAA;EAElB,WAAA,CAAY,GAAA,UAAa,IAAA,EAAM,IAAA,CAAK,IAAA;EAyFG;;;;;;;;;;;EAAA,OAtE1B,YAAA,CACX,SAAA,UACA,MAAA,UACA,QAAA,UACA,QAAA;IAEE,MAAA;IACA,IAAA;IACA,QAAA;IACA;EAAA,IACC,kBAAA,GACF,OAAA,CAAQ,cAAA;EAyHP;;;;;;EAAA,OA9DS,QAAA,CAAS,MAAA,EAAQ,IAAA,CAAK,IAAA,GAAI,OAAA,CAAA,cAAA;EAiIzB;;;;;;;EAAA,OAtHD,oBAAA,CACX,GAAA,WAAc,IAAA,CAAK,IAAA,CAAK,sBAAA,EACxB,UAAA,GAAa,IAAA,CAAK,IAAA,CAAK,UAAA,GAAU,OAAA,CAAA,cAAA;EAtGnC;;;;;;;;;;;;;;;EA4IM,oBAAA,CACJ,SAAA,UACA,UAAA;IAEE,UAAA;IACA,aAAA;IACA,eAAA;IACA,mBAAA;IACA,eAAA;IACA,kBAAA;IACA,QAAA;IACA,iBAAA;IACA;EAAA,IACC,oBAAA,GACF,OAAA;EA9HC;;;;;;EAsKE,oBAAA,CACJ,SAAA,UACA,UAAA,YACC,OAAA;EA5GgC;;;EAyH7B,eAAA,CAAA,GAAmB,OAAA;EAQzB,cAAA,CAAA,GAAc,IAAA,CAAA,IAAA,CAAA,GAAA;AAAA"}
|