Version Bump/Formatting (#2923)

This commit is contained in:
Saket Aryan
2025-06-06 21:49:03 +05:30
committed by GitHub
parent e10a509645
commit 9a12ea7b3c
5 changed files with 74 additions and 30 deletions

View File

@@ -288,6 +288,14 @@ mode: "wide"
<Tab title="TypeScript"> <Tab title="TypeScript">
<Update label="2025-06-06" description="v2.1.30">
**New Features:**
- **OSS:** Added Cloudflare support
**Improvements:**
- **OSS:** Fixed baseURL param in LLM Config.
</Update>
<Update label="2025-05-30" description="v2.1.29"> <Update label="2025-05-30" description="v2.1.29">
**Improvements:** **Improvements:**
- **Client:** Added Async Mode Param for `add` method. - **Client:** Added Async Mode Param for `add` method.

View File

@@ -1,6 +1,6 @@
{ {
"name": "mem0ai", "name": "mem0ai",
"version": "2.1.29", "version": "2.1.30",
"description": "The Memory Layer For Your AI Apps", "description": "The Memory Layer For Your AI Apps",
"main": "./dist/index.js", "main": "./dist/index.js",
"module": "./dist/index.mjs", "module": "./dist/index.mjs",
@@ -107,6 +107,8 @@
"@types/sqlite3": "3.1.11", "@types/sqlite3": "3.1.11",
"groq-sdk": "0.3.0", "groq-sdk": "0.3.0",
"@langchain/core": "^0.3.44", "@langchain/core": "^0.3.44",
"cloudflare": "^4.2.0",
"@cloudflare/workers-types": "^4.20250504.0",
"neo4j-driver": "^5.28.1", "neo4j-driver": "^5.28.1",
"ollama": "^0.5.14", "ollama": "^0.5.14",
"pg": "8.11.3", "pg": "8.11.3",

32
mem0-ts/pnpm-lock.yaml generated
View File

@@ -10,6 +10,9 @@ importers:
"@anthropic-ai/sdk": "@anthropic-ai/sdk":
specifier: ^0.40.1 specifier: ^0.40.1
version: 0.40.1(encoding@0.1.13) version: 0.40.1(encoding@0.1.13)
"@cloudflare/workers-types":
specifier: ^4.20250504.0
version: 4.20250606.0
"@google/genai": "@google/genai":
specifier: ^1.2.0 specifier: ^1.2.0
version: 1.2.0(@modelcontextprotocol/sdk@1.12.1)(encoding@0.1.13) version: 1.2.0(@modelcontextprotocol/sdk@1.12.1)(encoding@0.1.13)
@@ -37,6 +40,9 @@ importers:
axios: axios:
specifier: 1.7.7 specifier: 1.7.7
version: 1.7.7 version: 1.7.7
cloudflare:
specifier: ^4.2.0
version: 4.3.0(encoding@0.1.13)
groq-sdk: groq-sdk:
specifier: 0.3.0 specifier: 0.3.0
version: 0.3.0(encoding@0.1.13) version: 0.3.0(encoding@0.1.13)
@@ -385,6 +391,12 @@ packages:
integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==, integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==,
} }
"@cloudflare/workers-types@4.20250606.0":
resolution:
{
integrity: sha512-9T/Y/Mxe57UVzqgfjJKheiMplnStj/3CmCHlgoZNLU8JW2waRbXvpY3EEeliiYAJfeHZTjeAaKO2pCabxAoyCw==,
}
"@cspotcode/source-map-support@0.8.1": "@cspotcode/source-map-support@0.8.1":
resolution: resolution:
{ {
@@ -1811,6 +1823,12 @@ packages:
} }
engines: { node: ">=12" } engines: { node: ">=12" }
cloudflare@4.3.0:
resolution:
{
integrity: sha512-C+4Jhsl/OY4V5sykRB1yJxComDld5BkKW1xd3s0MDJ1yYamT2sFAoC2FEUQg5zipyxMaaGU4N7hZ6il+gfJxZg==,
}
cluster-key-slot@1.1.2: cluster-key-slot@1.1.2:
resolution: resolution:
{ {
@@ -5465,6 +5483,8 @@ snapshots:
"@cfworker/json-schema@4.1.1": {} "@cfworker/json-schema@4.1.1": {}
"@cloudflare/workers-types@4.20250606.0": {}
"@cspotcode/source-map-support@0.8.1": "@cspotcode/source-map-support@0.8.1":
dependencies: dependencies:
"@jridgewell/trace-mapping": 0.3.9 "@jridgewell/trace-mapping": 0.3.9
@@ -6397,6 +6417,18 @@ snapshots:
strip-ansi: 6.0.1 strip-ansi: 6.0.1
wrap-ansi: 7.0.0 wrap-ansi: 7.0.0
cloudflare@4.3.0(encoding@0.1.13):
dependencies:
"@types/node": 18.19.76
"@types/node-fetch": 2.6.12
abort-controller: 3.0.0
agentkeepalive: 4.6.0
form-data-encoder: 1.7.2
formdata-node: 4.4.1
node-fetch: 2.7.0(encoding@0.1.13)
transitivePeerDependencies:
- encoding
cluster-key-slot@1.1.2: {} cluster-key-slot@1.1.2: {}
co@4.6.0: {} co@4.6.0: {}

View File

@@ -117,6 +117,7 @@ export const MemoryConfigSchema = z.object({
modelProperties: z.record(z.string(), z.any()).optional(), modelProperties: z.record(z.string(), z.any()).optional(),
apiKey: z.string().optional(), apiKey: z.string().optional(),
model: z.union([z.string(), z.any()]).optional(), model: z.union([z.string(), z.any()]).optional(),
baseURL: z.string().optional(),
}), }),
}), }),
vectorStore: z.object({ vectorStore: z.object({
@@ -135,6 +136,7 @@ export const MemoryConfigSchema = z.object({
apiKey: z.string().optional(), apiKey: z.string().optional(),
model: z.union([z.string(), z.any()]).optional(), model: z.union([z.string(), z.any()]).optional(),
modelProperties: z.record(z.string(), z.any()).optional(), modelProperties: z.record(z.string(), z.any()).optional(),
baseURL: z.string().optional(),
}), }),
}), }),
historyDbPath: z.string().optional(), historyDbPath: z.string().optional(),

View File

@@ -32,7 +32,7 @@ export class VectorizeDB implements VectorStore {
async insert( async insert(
vectors: number[][], vectors: number[][],
ids: string[], ids: string[],
payloads: Record<string, any>[] payloads: Record<string, any>[],
): Promise<void> { ): Promise<void> {
try { try {
const vectorObjects: CloudflareVector[] = vectors.map( const vectorObjects: CloudflareVector[] = vectors.map(
@@ -40,7 +40,7 @@ export class VectorizeDB implements VectorStore {
id: ids[index], id: ids[index],
values: vector, values: vector,
metadata: payloads[index] || {}, metadata: payloads[index] || {},
}) }),
); );
const ndjsonPayload = vectorObjects const ndjsonPayload = vectorObjects
@@ -56,19 +56,19 @@ export class VectorizeDB implements VectorStore {
Authorization: `Bearer ${this.client?.apiToken}`, Authorization: `Bearer ${this.client?.apiToken}`,
}, },
body: ndjsonPayload, body: ndjsonPayload,
} },
); );
if (!response.ok) { if (!response.ok) {
const errorText = await response.text(); const errorText = await response.text();
throw new Error( throw new Error(
`Failed to insert vectors: ${response.status} ${errorText}` `Failed to insert vectors: ${response.status} ${errorText}`,
); );
} }
} catch (error) { } catch (error) {
console.error("Error inserting vectors:", error); console.error("Error inserting vectors:", error);
throw new Error( throw new Error(
`Failed to insert vectors: ${error instanceof Error ? error.message : String(error)}` `Failed to insert vectors: ${error instanceof Error ? error.message : String(error)}`,
); );
} }
} }
@@ -76,7 +76,7 @@ export class VectorizeDB implements VectorStore {
async search( async search(
query: number[], query: number[],
limit: number = 5, limit: number = 5,
filters?: SearchFilters filters?: SearchFilters,
): Promise<VectorStoreResult[]> { ): Promise<VectorStoreResult[]> {
try { try {
const result = await this.client?.vectorize.indexes.query( const result = await this.client?.vectorize.indexes.query(
@@ -87,7 +87,7 @@ export class VectorizeDB implements VectorStore {
filter: filters, filter: filters,
returnMetadata: "all", returnMetadata: "all",
topK: limit, topK: limit,
} },
); );
return ( return (
@@ -100,7 +100,7 @@ export class VectorizeDB implements VectorStore {
} catch (error) { } catch (error) {
console.error("Error searching vectors:", error); console.error("Error searching vectors:", error);
throw new Error( throw new Error(
`Failed to search vectors: ${error instanceof Error ? error.message : String(error)}` `Failed to search vectors: ${error instanceof Error ? error.message : String(error)}`,
); );
} }
} }
@@ -112,7 +112,7 @@ export class VectorizeDB implements VectorStore {
{ {
account_id: this.accountId, account_id: this.accountId,
ids: [vectorId], ids: [vectorId],
} },
)) as any; )) as any;
if (!result?.length) return null; if (!result?.length) return null;
@@ -124,7 +124,7 @@ export class VectorizeDB implements VectorStore {
} catch (error) { } catch (error) {
console.error("Error getting vector:", error); console.error("Error getting vector:", error);
throw new Error( throw new Error(
`Failed to get vector: ${error instanceof Error ? error.message : String(error)}` `Failed to get vector: ${error instanceof Error ? error.message : String(error)}`,
); );
} }
} }
@@ -132,7 +132,7 @@ export class VectorizeDB implements VectorStore {
async update( async update(
vectorId: string, vectorId: string,
vector: number[], vector: number[],
payload: Record<string, any> payload: Record<string, any>,
): Promise<void> { ): Promise<void> {
try { try {
const data: VectorizeVector = { const data: VectorizeVector = {
@@ -150,19 +150,19 @@ export class VectorizeDB implements VectorStore {
Authorization: `Bearer ${this.client?.apiToken}`, Authorization: `Bearer ${this.client?.apiToken}`,
}, },
body: JSON.stringify(data) + "\n", // ndjson format body: JSON.stringify(data) + "\n", // ndjson format
} },
); );
if (!response.ok) { if (!response.ok) {
const errorText = await response.text(); const errorText = await response.text();
throw new Error( throw new Error(
`Failed to update vector: ${response.status} ${errorText}` `Failed to update vector: ${response.status} ${errorText}`,
); );
} }
} catch (error) { } catch (error) {
console.error("Error updating vector:", error); console.error("Error updating vector:", error);
throw new Error( throw new Error(
`Failed to update vector: ${error instanceof Error ? error.message : String(error)}` `Failed to update vector: ${error instanceof Error ? error.message : String(error)}`,
); );
} }
} }
@@ -176,7 +176,7 @@ export class VectorizeDB implements VectorStore {
} catch (error) { } catch (error) {
console.error("Error deleting vector:", error); console.error("Error deleting vector:", error);
throw new Error( throw new Error(
`Failed to delete vector: ${error instanceof Error ? error.message : String(error)}` `Failed to delete vector: ${error instanceof Error ? error.message : String(error)}`,
); );
} }
} }
@@ -189,14 +189,14 @@ export class VectorizeDB implements VectorStore {
} catch (error) { } catch (error) {
console.error("Error deleting collection:", error); console.error("Error deleting collection:", error);
throw new Error( throw new Error(
`Failed to delete collection: ${error instanceof Error ? error.message : String(error)}` `Failed to delete collection: ${error instanceof Error ? error.message : String(error)}`,
); );
} }
} }
async list( async list(
filters?: SearchFilters, filters?: SearchFilters,
limit: number = 20 limit: number = 20,
): Promise<[VectorStoreResult[], number]> { ): Promise<[VectorStoreResult[], number]> {
try { try {
const result = await this.client?.vectorize.indexes.query( const result = await this.client?.vectorize.indexes.query(
@@ -207,7 +207,7 @@ export class VectorizeDB implements VectorStore {
filter: filters, filter: filters,
topK: limit, topK: limit,
returnMetadata: "all", returnMetadata: "all",
} },
); );
const matches = const matches =
@@ -221,7 +221,7 @@ export class VectorizeDB implements VectorStore {
} catch (error) { } catch (error) {
console.error("Error listing vectors:", error); console.error("Error listing vectors:", error);
throw new Error( throw new Error(
`Failed to list vectors: ${error instanceof Error ? error.message : String(error)}` `Failed to list vectors: ${error instanceof Error ? error.message : String(error)}`,
); );
} }
} }
@@ -233,7 +233,7 @@ export class VectorizeDB implements VectorStore {
const r = (Math.random() * 16) | 0; const r = (Math.random() * 16) | 0;
const v = c === "x" ? r : (r & 0x3) | 0x8; const v = c === "x" ? r : (r & 0x3) | 0x8;
return v.toString(16); return v.toString(16);
} },
); );
} }
@@ -267,7 +267,7 @@ export class VectorizeDB implements VectorStore {
vector: [0], vector: [0],
topK: 1, topK: 1,
returnMetadata: "all", returnMetadata: "all",
} },
); );
if (result.matches.length > 0) { if (result.matches.length > 0) {
return result.matches[0].metadata.userId as string; return result.matches[0].metadata.userId as string;
@@ -292,13 +292,13 @@ export class VectorizeDB implements VectorStore {
Authorization: `Bearer ${this.client?.apiToken}`, Authorization: `Bearer ${this.client?.apiToken}`,
}, },
body: JSON.stringify(data) + "\n", // ndjson format body: JSON.stringify(data) + "\n", // ndjson format
} },
); );
return randomUserId; return randomUserId;
} catch (error) { } catch (error) {
console.error("Error getting user ID:", error); console.error("Error getting user ID:", error);
throw new Error( throw new Error(
`Failed to get user ID: ${error instanceof Error ? error.message : String(error)}` `Failed to get user ID: ${error instanceof Error ? error.message : String(error)}`,
); );
} }
} }
@@ -313,7 +313,7 @@ export class VectorizeDB implements VectorStore {
vector: [0], vector: [0],
topK: 1, topK: 1,
returnMetadata: "all", returnMetadata: "all",
} },
); );
const pointId = const pointId =
result.matches.length > 0 ? result.matches[0].id : this.generateUUID(); result.matches.length > 0 ? result.matches[0].id : this.generateUUID();
@@ -332,12 +332,12 @@ export class VectorizeDB implements VectorStore {
Authorization: `Bearer ${this.client?.apiToken}`, Authorization: `Bearer ${this.client?.apiToken}`,
}, },
body: JSON.stringify(data) + "\n", // ndjson format body: JSON.stringify(data) + "\n", // ndjson format
} },
); );
} catch (error) { } catch (error) {
console.error("Error setting user ID:", error); console.error("Error setting user ID:", error);
throw new Error( throw new Error(
`Failed to set user ID: ${error instanceof Error ? error.message : String(error)}` `Failed to set user ID: ${error instanceof Error ? error.message : String(error)}`,
); );
} }
} }
@@ -375,7 +375,7 @@ export class VectorizeDB implements VectorStore {
account_id: this.accountId, account_id: this.accountId,
indexType: "string", indexType: "string",
propertyName, propertyName,
} },
); );
} }
} catch (err: any) { } catch (err: any) {
@@ -389,7 +389,7 @@ export class VectorizeDB implements VectorStore {
this.indexName, this.indexName,
{ {
account_id: this.accountId, account_id: this.accountId,
} },
); );
const existingMetadataIndexes = new Set<string>(); const existingMetadataIndexes = new Set<string>();
for (const metadataIndex of metadataIndexes?.metadataIndexes || []) { for (const metadataIndex of metadataIndexes?.metadataIndexes || []) {
@@ -404,7 +404,7 @@ export class VectorizeDB implements VectorStore {
account_id: this.accountId, account_id: this.accountId,
indexType: "string", indexType: "string",
propertyName, propertyName,
} },
); );
} }
} }