@anvia/chroma 0.1.4 → 0.2.1
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/README.md +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ pnpm --filter @anvia/chroma build
|
|
|
19
19
|
## Usage
|
|
20
20
|
|
|
21
21
|
```ts
|
|
22
|
-
import { embedDocuments } from "@anvia/core";
|
|
22
|
+
import { embedDocuments } from "@anvia/core/embeddings";
|
|
23
23
|
import { OpenAIClient } from "@anvia/openai";
|
|
24
24
|
import { ChromaVectorStore } from "@anvia/chroma";
|
|
25
25
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { VectorMetadata,
|
|
1
|
+
import { VectorMetadata, EmbeddingModel, EmbeddedDocument } from '@anvia/core/embeddings';
|
|
2
|
+
import { Tool } from '@anvia/core/tool';
|
|
3
|
+
import { VectorSearchIndex, VectorSearchRequest, VectorSearchResult, VectorSearchToolOptions, VectorFilter } from '@anvia/core/vector-store';
|
|
2
4
|
|
|
3
5
|
type ChromaClientLike = {
|
|
4
6
|
getCollection(options: Record<string, unknown>): Promise<ChromaCollectionLike>;
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import {
|
|
3
|
-
createVectorSearchTool,
|
|
4
3
|
embedText
|
|
5
|
-
} from "@anvia/core";
|
|
4
|
+
} from "@anvia/core/embeddings";
|
|
5
|
+
import {
|
|
6
|
+
createVectorSearchTool
|
|
7
|
+
} from "@anvia/core/vector-store";
|
|
6
8
|
var ChromaVectorStore = class _ChromaVectorStore {
|
|
7
9
|
constructor(collection) {
|
|
8
10
|
this.collection = collection;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n createVectorSearchTool,\n type EmbeddedDocument,\n type EmbeddingModel,\n embedText,\n type Tool,\n type VectorFilter,\n type VectorMetadata,\n type VectorSearchIndex,\n type VectorSearchRequest,\n type VectorSearchResult,\n type VectorSearchToolOptions,\n} from \"@anvia/core\";\n\ntype ChromaClientLike = {\n getCollection(options: Record<string, unknown>): Promise<ChromaCollectionLike>;\n createCollection(options: Record<string, unknown>): Promise<ChromaCollectionLike>;\n getOrCreateCollection?(options: Record<string, unknown>): Promise<ChromaCollectionLike>;\n};\n\ntype ChromaCollectionLike = {\n upsert(options: Record<string, unknown>): Promise<unknown>;\n query(options: Record<string, unknown>): Promise<unknown>;\n};\n\nexport type ChromaVectorStoreConnectOptions = {\n client?: ChromaClientLike | undefined;\n collectionName: string;\n createIfMissing?: boolean | undefined;\n metadata?: Record<string, unknown> | undefined;\n configuration?: Record<string, unknown> | undefined;\n};\n\nexport class ChromaVectorStore<T, Metadata extends VectorMetadata = VectorMetadata> {\n private constructor(private readonly collection: ChromaCollectionLike) {}\n\n static async connect<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: ChromaVectorStoreConnectOptions,\n ): Promise<ChromaVectorStore<T, Metadata>> {\n const client = options.client ?? (await defaultChromaClient());\n const collectionOptions = {\n name: options.collectionName,\n metadata: options.metadata ?? { \"hnsw:space\": \"cosine\" },\n configuration: options.configuration,\n embeddingFunction: null,\n };\n const collection =\n options.createIfMissing === false\n ? await client.getCollection(collectionOptions)\n : client.getOrCreateCollection !== undefined\n ? await client.getOrCreateCollection(collectionOptions)\n : await getOrCreateCollection(client, collectionOptions);\n return new ChromaVectorStore<T, Metadata>(collection);\n }\n\n async upsertDocuments(documents: Array<EmbeddedDocument<T, Metadata>>): Promise<void> {\n const records = documents.flatMap((document) => chromaRecords(document));\n await this.collection.upsert({\n ids: records.map((record) => record.id),\n documents: records.map((record) => record.document),\n embeddings: records.map((record) => record.embedding),\n ...(records.some((record) => record.metadata !== undefined)\n ? { metadatas: records.map((record) => record.metadata ?? null) }\n : {}),\n });\n }\n\n index(model: EmbeddingModel): ChromaVectorIndex<T, Metadata> {\n return new ChromaVectorIndex(model, this.collection);\n }\n}\n\nexport class ChromaVectorIndex<T, Metadata extends VectorMetadata = VectorMetadata>\n implements VectorSearchIndex<T, Metadata>\n{\n constructor(\n private readonly model: EmbeddingModel,\n private readonly collection: ChromaCollectionLike,\n ) {}\n\n async search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>> {\n const queryEmbedding = await embedText(this.model, request.query);\n const response = await this.collection.query({\n queryEmbeddings: [queryEmbedding.vector],\n nResults: request.topK,\n where: filterToChromaWhere(request.filter),\n include: [\"documents\", \"metadatas\", \"distances\"],\n });\n return parseQueryResults<T, Metadata>(response, request.threshold);\n }\n\n async searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>> {\n return (await this.search(request)).map(({ score, id }) => ({ score, id }));\n }\n\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown> {\n return createVectorSearchTool(this, options);\n }\n}\n\nexport function filterToChromaWhere(filter: VectorFilter | undefined): unknown {\n if (filter === undefined) {\n return undefined;\n }\n\n switch (filter.type) {\n case \"eq\":\n return { [filter.key]: { $eq: filter.value } };\n case \"gt\":\n return { [filter.key]: { $gt: filter.value } };\n case \"lt\":\n return { [filter.key]: { $lt: filter.value } };\n case \"and\":\n return { $and: filter.filters.map(filterToChromaWhere) };\n case \"or\":\n return { $or: filter.filters.map(filterToChromaWhere) };\n }\n}\n\nasync function defaultChromaClient(): Promise<ChromaClientLike> {\n const chroma = await import(\"chromadb\");\n return new chroma.ChromaClient() as ChromaClientLike;\n}\n\nasync function getOrCreateCollection(\n client: ChromaClientLike,\n options: Record<string, unknown>,\n): Promise<ChromaCollectionLike> {\n try {\n return await client.getCollection(options);\n } catch {\n return await client.createCollection(options);\n }\n}\n\nfunction serializeDocument(document: unknown): string {\n return typeof document === \"string\" ? document : JSON.stringify(document);\n}\n\nfunction parseQueryResults<T, Metadata extends VectorMetadata>(\n response: unknown,\n threshold: number | undefined,\n): Array<VectorSearchResult<T, Metadata>> {\n const raw = response as {\n ids?: string[][];\n documents?: Array<Array<string | null>>;\n metadatas?: Array<Array<Metadata | null>>;\n distances?: number[][];\n };\n const ids = raw.ids?.[0] ?? [];\n const documents = raw.documents?.[0] ?? [];\n const metadatas = raw.metadatas?.[0] ?? [];\n const distances = raw.distances?.[0] ?? [];\n\n const results = ids.flatMap((id, index) => {\n const score = distanceToCosineScore(distances[index] ?? 0);\n if (threshold !== undefined && score < threshold) {\n return [];\n }\n return [\n {\n id: logicalDocumentId(id),\n score,\n document: parseDocument(documents[index]),\n ...(metadatas[index] === null || metadatas[index] === undefined\n ? {}\n : { metadata: metadatas[index] }),\n } as VectorSearchResult<T, Metadata>,\n ];\n });\n\n const byId = new Map<string, VectorSearchResult<T, Metadata>>();\n for (const result of results) {\n if (!byId.has(result.id)) {\n byId.set(result.id, result);\n }\n }\n return [...byId.values()];\n}\n\nfunction distanceToCosineScore(distance: number): number {\n return 1 - distance;\n}\n\nfunction parseDocument<T>(document: string | null | undefined): T {\n if (document === null || document === undefined) {\n return \"\" as T;\n }\n try {\n return JSON.parse(document) as T;\n } catch {\n return document as T;\n }\n}\n\nfunction chromaRecords<T, Metadata extends VectorMetadata>(\n document: EmbeddedDocument<T, Metadata>,\n): Array<{\n id: string;\n document: string;\n metadata: VectorMetadata | undefined;\n embedding: number[];\n}> {\n if (document.embeddings.length === 0) {\n throw new Error(`Document ${document.id} has no embeddings`);\n }\n\n return document.embeddings.map((embedding, index) => ({\n id: document.embeddings.length === 1 ? document.id : `${document.id}#embedding:${index}`,\n document: serializeDocument(document.document),\n metadata: document.metadata,\n embedding: embedding.vector,\n }));\n}\n\nfunction logicalDocumentId(id: string): string {\n return id.replace(/#embedding:\\d+$/, \"\");\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import {\n type EmbeddedDocument,\n type EmbeddingModel,\n embedText,\n type VectorMetadata,\n} from \"@anvia/core/embeddings\";\nimport type { Tool } from \"@anvia/core/tool\";\nimport {\n createVectorSearchTool,\n type VectorFilter,\n type VectorSearchIndex,\n type VectorSearchRequest,\n type VectorSearchResult,\n type VectorSearchToolOptions,\n} from \"@anvia/core/vector-store\";\n\ntype ChromaClientLike = {\n getCollection(options: Record<string, unknown>): Promise<ChromaCollectionLike>;\n createCollection(options: Record<string, unknown>): Promise<ChromaCollectionLike>;\n getOrCreateCollection?(options: Record<string, unknown>): Promise<ChromaCollectionLike>;\n};\n\ntype ChromaCollectionLike = {\n upsert(options: Record<string, unknown>): Promise<unknown>;\n query(options: Record<string, unknown>): Promise<unknown>;\n};\n\nexport type ChromaVectorStoreConnectOptions = {\n client?: ChromaClientLike | undefined;\n collectionName: string;\n createIfMissing?: boolean | undefined;\n metadata?: Record<string, unknown> | undefined;\n configuration?: Record<string, unknown> | undefined;\n};\n\nexport class ChromaVectorStore<T, Metadata extends VectorMetadata = VectorMetadata> {\n private constructor(private readonly collection: ChromaCollectionLike) {}\n\n static async connect<T, Metadata extends VectorMetadata = VectorMetadata>(\n options: ChromaVectorStoreConnectOptions,\n ): Promise<ChromaVectorStore<T, Metadata>> {\n const client = options.client ?? (await defaultChromaClient());\n const collectionOptions = {\n name: options.collectionName,\n metadata: options.metadata ?? { \"hnsw:space\": \"cosine\" },\n configuration: options.configuration,\n embeddingFunction: null,\n };\n const collection =\n options.createIfMissing === false\n ? await client.getCollection(collectionOptions)\n : client.getOrCreateCollection !== undefined\n ? await client.getOrCreateCollection(collectionOptions)\n : await getOrCreateCollection(client, collectionOptions);\n return new ChromaVectorStore<T, Metadata>(collection);\n }\n\n async upsertDocuments(documents: Array<EmbeddedDocument<T, Metadata>>): Promise<void> {\n const records = documents.flatMap((document) => chromaRecords(document));\n await this.collection.upsert({\n ids: records.map((record) => record.id),\n documents: records.map((record) => record.document),\n embeddings: records.map((record) => record.embedding),\n ...(records.some((record) => record.metadata !== undefined)\n ? { metadatas: records.map((record) => record.metadata ?? null) }\n : {}),\n });\n }\n\n index(model: EmbeddingModel): ChromaVectorIndex<T, Metadata> {\n return new ChromaVectorIndex(model, this.collection);\n }\n}\n\nexport class ChromaVectorIndex<T, Metadata extends VectorMetadata = VectorMetadata>\n implements VectorSearchIndex<T, Metadata>\n{\n constructor(\n private readonly model: EmbeddingModel,\n private readonly collection: ChromaCollectionLike,\n ) {}\n\n async search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>> {\n const queryEmbedding = await embedText(this.model, request.query);\n const response = await this.collection.query({\n queryEmbeddings: [queryEmbedding.vector],\n nResults: request.topK,\n where: filterToChromaWhere(request.filter),\n include: [\"documents\", \"metadatas\", \"distances\"],\n });\n return parseQueryResults<T, Metadata>(response, request.threshold);\n }\n\n async searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>> {\n return (await this.search(request)).map(({ score, id }) => ({ score, id }));\n }\n\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown> {\n return createVectorSearchTool(this, options);\n }\n}\n\nexport function filterToChromaWhere(filter: VectorFilter | undefined): unknown {\n if (filter === undefined) {\n return undefined;\n }\n\n switch (filter.type) {\n case \"eq\":\n return { [filter.key]: { $eq: filter.value } };\n case \"gt\":\n return { [filter.key]: { $gt: filter.value } };\n case \"lt\":\n return { [filter.key]: { $lt: filter.value } };\n case \"and\":\n return { $and: filter.filters.map(filterToChromaWhere) };\n case \"or\":\n return { $or: filter.filters.map(filterToChromaWhere) };\n }\n}\n\nasync function defaultChromaClient(): Promise<ChromaClientLike> {\n const chroma = await import(\"chromadb\");\n return new chroma.ChromaClient() as ChromaClientLike;\n}\n\nasync function getOrCreateCollection(\n client: ChromaClientLike,\n options: Record<string, unknown>,\n): Promise<ChromaCollectionLike> {\n try {\n return await client.getCollection(options);\n } catch {\n return await client.createCollection(options);\n }\n}\n\nfunction serializeDocument(document: unknown): string {\n return typeof document === \"string\" ? document : JSON.stringify(document);\n}\n\nfunction parseQueryResults<T, Metadata extends VectorMetadata>(\n response: unknown,\n threshold: number | undefined,\n): Array<VectorSearchResult<T, Metadata>> {\n const raw = response as {\n ids?: string[][];\n documents?: Array<Array<string | null>>;\n metadatas?: Array<Array<Metadata | null>>;\n distances?: number[][];\n };\n const ids = raw.ids?.[0] ?? [];\n const documents = raw.documents?.[0] ?? [];\n const metadatas = raw.metadatas?.[0] ?? [];\n const distances = raw.distances?.[0] ?? [];\n\n const results = ids.flatMap((id, index) => {\n const score = distanceToCosineScore(distances[index] ?? 0);\n if (threshold !== undefined && score < threshold) {\n return [];\n }\n return [\n {\n id: logicalDocumentId(id),\n score,\n document: parseDocument(documents[index]),\n ...(metadatas[index] === null || metadatas[index] === undefined\n ? {}\n : { metadata: metadatas[index] }),\n } as VectorSearchResult<T, Metadata>,\n ];\n });\n\n const byId = new Map<string, VectorSearchResult<T, Metadata>>();\n for (const result of results) {\n if (!byId.has(result.id)) {\n byId.set(result.id, result);\n }\n }\n return [...byId.values()];\n}\n\nfunction distanceToCosineScore(distance: number): number {\n return 1 - distance;\n}\n\nfunction parseDocument<T>(document: string | null | undefined): T {\n if (document === null || document === undefined) {\n return \"\" as T;\n }\n try {\n return JSON.parse(document) as T;\n } catch {\n return document as T;\n }\n}\n\nfunction chromaRecords<T, Metadata extends VectorMetadata>(\n document: EmbeddedDocument<T, Metadata>,\n): Array<{\n id: string;\n document: string;\n metadata: VectorMetadata | undefined;\n embedding: number[];\n}> {\n if (document.embeddings.length === 0) {\n throw new Error(`Document ${document.id} has no embeddings`);\n }\n\n return document.embeddings.map((embedding, index) => ({\n id: document.embeddings.length === 1 ? document.id : `${document.id}#embedding:${index}`,\n document: serializeDocument(document.document),\n metadata: document.metadata,\n embedding: embedding.vector,\n }));\n}\n\nfunction logicalDocumentId(id: string): string {\n return id.replace(/#embedding:\\d+$/, \"\");\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvia/chroma",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "ChromaDB vector store adapter for Anvia.",
|
|
5
5
|
"author": "anvia",
|
|
6
6
|
"maintainer": "Indra Zulfi",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
29
|
"chromadb": "^3.4.3",
|
|
30
|
-
"@anvia/core": "0.
|
|
30
|
+
"@anvia/core": "0.4.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/node": "^24.9.1",
|