Skip to content
Snippets Groups Projects
Unverified Commit ee697fb1 authored by Thuc Pham's avatar Thuc Pham Committed by GitHub
Browse files

fix: generate uuid when inserting to Qdrant (#1301)

parent cf3320a4
No related branches found
No related tags found
No related merge requests found
---
"@llamaindex/core": patch
"llamaindex": patch
---
fix: generate uuid when inserting to Qdrant
...@@ -80,3 +80,4 @@ export { ...@@ -80,3 +80,4 @@ export {
} from "./llms"; } from "./llms";
export { objectEntries } from "./object-entries"; export { objectEntries } from "./object-entries";
export { UUIDFromString } from "./uuid";
import { createSHA256 } from "@llamaindex/env";
export function UUIDFromString(input: string) {
const hashFunction = createSHA256();
hashFunction.update(input);
const base64Hash = hashFunction.digest();
// Convert base64 to hex
const hexHash = Buffer.from(base64Hash, "base64").toString("hex");
// Format the hash to resemble a UUID (version 5 style)
const uuid = [
hexHash.substring(0, 8),
hexHash.substring(8, 12),
"5" + hexHash.substring(12, 15), // Set the version to 5 (name-based)
((parseInt(hexHash.substring(15, 17), 16) & 0x3f) | 0x80).toString(16) +
hexHash.substring(17, 19), // Set the variant
hexHash.substring(19, 31),
].join("-");
return uuid;
}
import { UUIDFromString } from "@llamaindex/core/utils";
import { describe, expect, it } from "vitest";
const UUID_REGEX =
/^[0-9a-f]{8}-[0-9a-f]{4}-5[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
describe("UUIDFromString", () => {
it("should convert string to UUID", () => {
const string = "document_id_1";
const result = UUIDFromString(string);
expect(result).toBeDefined();
expect(result).toMatch(UUID_REGEX);
});
it("should return the same UUID for the same input string", () => {
const string = "document_id_1";
const result1 = UUIDFromString(string);
const result2 = UUIDFromString(string);
expect(result1).toEqual(result2);
});
it("should return the different UUID for different input strings", () => {
const string1 = "document_id_1";
const string2 = "document_id_2";
const result1 = UUIDFromString(string1);
const result2 = UUIDFromString(string2);
expect(result1).not.toEqual(result2);
});
it("should handle case-sensitive input strings", () => {
const string1 = "document_id_1";
const string2 = "Document_Id_1";
const result1 = UUIDFromString(string1);
const result2 = UUIDFromString(string2);
expect(result1).not.toEqual(result2);
});
});
...@@ -10,6 +10,7 @@ import { ...@@ -10,6 +10,7 @@ import {
type VectorStoreQueryResult, type VectorStoreQueryResult,
} from "./types.js"; } from "./types.js";
import { UUIDFromString } from "@llamaindex/core/utils";
import type { QdrantClientParams, Schemas } from "@qdrant/js-client-rest"; import type { QdrantClientParams, Schemas } from "@qdrant/js-client-rest";
import { QdrantClient } from "@qdrant/js-client-rest"; import { QdrantClient } from "@qdrant/js-client-rest";
import { metadataDictToNode, nodeToMetadata } from "./utils.js"; import { metadataDictToNode, nodeToMetadata } from "./utils.js";
...@@ -170,7 +171,7 @@ export class QdrantVectorStore ...@@ -170,7 +171,7 @@ export class QdrantVectorStore
for (let k = 0; k < nodeIds.length; k++) { for (let k = 0; k < nodeIds.length; k++) {
const point: PointStruct = { const point: PointStruct = {
id: nodeIds[k]!.id_, id: UUIDFromString(nodeIds[k]!.id_),
payload: payloads[k]!, payload: payloads[k]!,
vector: vectors[k]!, vector: vectors[k]!,
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment