Compare commits

...

6 Commits

Author SHA1 Message Date
github-actions[bot] fdad3d66ac Release 0.8.5 (#1446)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-11-07 15:57:54 -08:00
Rozstone a6db5dd29b feat: add baseUrl and timeout option in cohere rerank (#1445)
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-07 15:13:13 -08:00
Laurie Voss 7b684c4480 docs: home page tweaks (#1447) 2024-11-07 15:12:54 -08:00
Alex Yang c66868a98a chore: fix turbo cache 2024-11-07 15:05:41 -08:00
Alex Yang 14cc9ebe59 chore: move multi-model into single sub module (#1443) 2024-11-07 15:01:17 -08:00
Aman Rao 396b1e1474 feat: integrate with azure cosmos db (#1444)
Co-authored-by: Wassim Chegham <github@wassim.dev>
Co-authored-by: Alex Yang <himself65@outlook.com>
2024-11-07 14:43:19 -08:00
90 changed files with 2094 additions and 652 deletions
+9
View File
@@ -1,5 +1,14 @@
# docs
## 0.0.109
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
## 0.0.108
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "docs",
"version": "0.0.108",
"version": "0.0.109",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
+14
View File
@@ -1,5 +1,19 @@
# @llamaindex/doc
## 0.0.7
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
- @llamaindex/cloud@2.0.2
- @llamaindex/core@0.4.2
- @llamaindex/node-parser@0.0.3
- @llamaindex/openai@0.1.27
- @llamaindex/readers@1.0.3
## 0.0.6
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.0.6",
"version": "0.0.7",
"private": true,
"scripts": {
"build": "pnpm run build:docs && next build",
+16 -15
View File
@@ -25,15 +25,16 @@ export default function HomePage() {
return (
<main className="container mx-auto px-4 py-12">
<h1 className="text-4xl md:text-6xl font-bold text-center mb-4">
Build RAG Web App using
Build context-augmented web apps using
<br /> <span className="text-blue-500">LlamaIndex.TS</span>
</h1>
<p className="text-xl text-center text-fd-muted-foreground mb-12 ">
LlamaIndex.TS is the JS/TS library from our popular Python library
llama-index for building LLM applications
LlamaIndex.TS is the JS/TS version of{" "}
<a href="https://llamaindex.ai">LlamaIndex</a>, the framework for
building agentic generative AI applications connected to your data.
</p>
<div className="text-center text-lg text-fd-muted-foreground mb-12">
<span>Designed for building web applications under </span>
<span>Designed for building web applications in </span>
<TextEffect />
</div>
@@ -58,8 +59,8 @@ export default function HomePage() {
<Feature
icon={Footprints}
subheading="Progressive"
heading="Adding AI feature from simple to complex"
description="LlamaIndex.TS is designed to be simple to start with and can be extended to build complex AI applications."
heading="From the simplest to the most complex"
description="LlamaIndex.TS is designed to be simple to get started, but powerful enough to build complex, agentic AI applications."
>
<Suspense
fallback={
@@ -113,9 +114,9 @@ const response = await agent.chat({
</Feature>
<Feature
icon={Bot}
subheading="Agent"
heading="Build agent for RAG"
description="Build agents for RAG using LlamaIndex.TS. Agents are the core building blocks of RAG applications."
subheading="Agents"
heading="Build agentic RAG applications"
description="Truly powerful retrieval-augmented generation applications use agentic techniques, and LlamaIndex.TS makes it easy to build them."
>
<CodeBlock
code={`import { FunctionTool } from "llamaindex";
@@ -137,19 +138,19 @@ await agent.chat('...');`}
<Feature
icon={Blocks}
subheading="Providers"
heading="LLM / Data Loader / Vector Store"
description="LlamaIndex.TS provides various providers to turn your data into valuable insights."
heading="LLMs, Data Loaders, Vector Stores and more!"
description="LlamaIndex.TS has hundreds of integrations to connect to your data, index it, and query it with LLMs."
>
<div className="mt-8 flex flex-col gap-8">
<div>
<h3 className="text-lg font-semibold text-fd-muted-foreground mb-2">
LLM
LLMs
</h3>
<InfiniteLLMProviders />
</div>
<div>
<h3 className="text-lg font-semibold text-fd-muted-foreground mb-2">
Vector Store
Vector Stores
</h3>
<InfiniteVectorStoreProviders />
</div>
@@ -157,8 +158,8 @@ await agent.chat('...');`}
</Feature>
<Feature
icon={Terminal}
subheading="Create Llama CLI"
heading="CLI for starting RAG app with one line"
subheading="create-llama CLI"
heading="Build a RAG app with a single command"
description="A command line tool to generate LlamaIndex apps, the easiest way to get started with LlamaIndex."
>
<div className="my-6">
+1 -2
View File
@@ -7,9 +7,8 @@ import { ReactElement } from "react";
export function Contributing(): ReactElement {
return (
<div className="flex flex-col items-center border-x border-t px-4 py-16 text-center">
<Heart className="mb-4" />
<h2 className="mb-4 text-xl font-semibold sm:text-2xl">
Made Possible by You.
Made possible by you <Heart className="inline align-middle" />
</h2>
<p className="mb-4 text-fd-muted-foreground">
LlamaIndex.TS is powered by the open source community.
@@ -53,9 +53,6 @@ export default async function ContributorCounter({
</div>
) : null}
</div>
<div className="text-center text-sm text-fd-muted-foreground">
Some of our best contributors.
</div>
</div>
);
}
+71
View File
@@ -0,0 +1,71 @@
import "dotenv/config";
import {
DefaultAzureCredential,
getBearerTokenProvider,
} from "@azure/identity";
import {
AzureCosmosDBNoSqlVectorStore,
AzureCosmosNoSqlDocumentStore,
AzureCosmosNoSqlIndexStore,
Document,
OpenAI,
OpenAIEmbedding,
Settings,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
/**
* This example demonstrates how to use Azure CosmosDB with LlamaIndex.
* It uses Azure CosmosDB as IndexStore, DocumentStore, and VectorStore.
*
* To run this example, create an .env file under /examples and set the following environment variables:
*
* AZURE_OPENAI_ENDPOINT="https://AOAI-ACCOUNT.openai.azure.com" // Sample Azure OpenAI endpoint.
* AZURE_DEPLOYMENT_NAME="gpt-4o" // Sample Azure OpenAI deployment name.
* EMBEDDING_MODEL="text-embedding-3-large" // Sample Azure OpenAI embedding model.
* AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT = "https://DB-ACCOUNT.documents.azure.com:443/" // Sample CosmosDB account endpoint.
*
* This example uses managed identity to authenticate with Azure CosmosDB and Azure OpenAI. Make sure to assign the required roles to the managed identity.
* You can also use connectionString for Azure CosmosDB and Keys with Azure OpenAI for authentication.
*/
(async () => {
const credential = new DefaultAzureCredential();
const azureADTokenProvider = getBearerTokenProvider(
credential,
"https://cognitiveservices.azure.com/.default",
);
const azure = {
azureADTokenProvider,
deployment: process.env.AZURE_DEPLOYMENT_NAME,
};
Settings.llm = new OpenAI({ azure });
Settings.embedModel = new OpenAIEmbedding({
model: process.env.EMBEDDING_MODEL,
azure: {
...azure,
deployment: process.env.EMBEDDING_MODEL,
},
});
const docStore = AzureCosmosNoSqlDocumentStore.fromAadToken();
console.log({ docStore });
const indexStore = AzureCosmosNoSqlIndexStore.fromAadToken();
console.log({ indexStore });
const vectorStore = AzureCosmosDBNoSqlVectorStore.fromUriAndManagedIdentity();
console.log({ vectorStore });
const storageContext = await storageContextFromDefaults({
docStore,
indexStore,
vectorStore,
});
console.log({ storageContext });
const document = new Document({ text: "Test Text" });
const index = await VectorStoreIndex.fromDocuments([document], {
storageContext,
logProgress: true,
});
console.log({ index });
})();
+50 -23
View File
@@ -6,17 +6,21 @@ import {
} from "@llamaindex/readers/cosmosdb";
import * as dotenv from "dotenv";
import {
AzureCosmosDBNoSqlVectorStore,
AzureCosmosDBNoSQLConfig,
OpenAI,
OpenAIEmbedding,
Settings,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
import {
createStoresFromConnectionString,
createStoresFromManagedIdentity,
} from "./utils";
// Load environment variables from local .env file
dotenv.config();
const cosmosEndpoint = process.env.AZURE_COSMOSDB_NOSQL_ENDPOINT!;
const cosmosEndpoint = process.env.AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT!;
const cosmosConnectionString =
process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING!;
const databaseName =
@@ -26,7 +30,7 @@ const collectionName =
const vectorCollectionName =
process.env.AZURE_COSMOSDB_VECTOR_CONTAINER_NAME || "vectorContainer";
// This exampple uses Azure OpenAI llm and embedding models
// This example uses Azure OpenAI llm and embedding models
const llmInit = {
azure: {
apiVersion: process.env.AZURE_OPENAI_LLM_API_VERSION,
@@ -46,24 +50,48 @@ const embedModelInit = {
Settings.llm = new OpenAI(llmInit);
Settings.embedModel = new OpenAIEmbedding(embedModelInit);
// Initialize the CosmosDB client
async function initializeCosmosClient() {
if (cosmosConnectionString) {
return new CosmosClient(cosmosConnectionString);
} else {
const credential = new DefaultAzureCredential();
return new CosmosClient({
endpoint: cosmosEndpoint,
aadCredentials: credential,
});
}
}
// Initialize CosmosDB to be used as a vectorStore, docStore, and indexStore
async function initializeStores() {
// Create a configuration object for the Azure CosmosDB NoSQL Vector Store
const dbConfig: AzureCosmosDBNoSQLConfig = {
databaseName,
containerName: vectorCollectionName,
flatMetadata: false,
};
if (cosmosConnectionString) {
return createStoresFromConnectionString(cosmosConnectionString, dbConfig);
} else {
// Use managed identity to authenticate with Azure CosmosDB
const credential = new DefaultAzureCredential();
return createStoresFromManagedIdentity(
cosmosEndpoint,
credential,
dbConfig,
);
}
}
async function loadVectorData() {
if (!cosmosConnectionString && !cosmosEndpoint) {
throw new Error(
"Azure CosmosDB connection string or endpoint must be set.",
);
}
let cosmosClient: CosmosClient;
// initialize the cosmos client
if (cosmosConnectionString) {
cosmosClient = new CosmosClient(cosmosConnectionString);
} else {
cosmosClient = new CosmosClient({
endpoint: cosmosEndpoint,
aadCredentials: new DefaultAzureCredential(),
});
}
const cosmosClient = await initializeCosmosClient();
const reader = new SimpleCosmosDBReader(cosmosClient);
// create a configuration object for the reader
const simpleCosmosReaderConfig: SimpleCosmosDBReaderLoaderConfig = {
@@ -76,16 +104,15 @@ async function loadVectorData() {
// load objects from cosmos and convert them into LlamaIndex Document objects
const documents = await reader.loadData(simpleCosmosReaderConfig);
// create Azure CosmosDB as a vector store
const vectorStore = new AzureCosmosDBNoSqlVectorStore({
client: cosmosClient,
databaseName,
containerName: vectorCollectionName,
flatMetadata: false,
});
// use Azure CosmosDB as a vectorStore, docStore, and indexStore
const { vectorStore, docStore, indexStore } = await initializeStores();
// Store the embeddings in the CosmosDB container
const storageContext = await storageContextFromDefaults({ vectorStore });
const storageContext = await storageContextFromDefaults({
vectorStore,
docStore,
indexStore,
});
await VectorStoreIndex.fromDocuments(documents, { storageContext });
console.log(
`Successfully created embeddings in the CosmosDB container ${vectorCollectionName}.`,
+38 -4
View File
@@ -3,17 +3,21 @@ import { DefaultAzureCredential } from "@azure/identity";
import * as dotenv from "dotenv";
import {
AzureCosmosDBNoSQLConfig,
AzureCosmosDBNoSqlVectorStore,
OpenAI,
OpenAIEmbedding,
Settings,
storageContextFromDefaults,
VectorStoreIndex,
} from "llamaindex";
import {
createStoresFromConnectionString,
createStoresFromManagedIdentity,
} from "./utils";
// Load environment variables from local .env file
dotenv.config();
const cosmosEndpoint = process.env.AZURE_COSMOSDB_NOSQL_ENDPOINT!;
const cosmosEndpoint = process.env.AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT!;
const cosmosConnectionString =
process.env.AZURE_COSMOSDB_NOSQL_CONNECTION_STRING!;
const databaseName =
@@ -40,6 +44,27 @@ const embedModelInit = {
Settings.llm = new OpenAI(llmInit);
Settings.embedModel = new OpenAIEmbedding(embedModelInit);
async function initializeStores() {
// Create a configuration object for the Azure CosmosDB NoSQL Vector Store
const dbConfig: AzureCosmosDBNoSQLConfig = {
databaseName,
containerName,
flatMetadata: false,
};
if (cosmosConnectionString) {
return createStoresFromConnectionString(cosmosConnectionString, dbConfig);
} else {
// Use managed identity to authenticate with Azure CosmosDB
const credential = new DefaultAzureCredential();
return createStoresFromManagedIdentity(
cosmosEndpoint,
credential,
dbConfig,
);
}
}
async function query() {
if (!cosmosConnectionString && !cosmosEndpoint) {
throw new Error(
@@ -65,10 +90,19 @@ async function query() {
containerName,
flatMetadata: false,
};
const store = new AzureCosmosDBNoSqlVectorStore(dbConfig);
// use Azure CosmosDB as a vectorStore, docStore, and indexStore
const { vectorStore, docStore, indexStore } = await initializeStores();
// Store the embeddings in the CosmosDB container
const storageContext = await storageContextFromDefaults({
vectorStore,
docStore,
indexStore,
});
// create an index from the Azure CosmosDB NoSQL Vector Store
const index = await VectorStoreIndex.fromVectorStore(store);
const index = await VectorStoreIndex.init({ storageContext });
// create a retriever and a query engine from the index
const retriever = index.asRetriever({ similarityTopK: 20 });
+51
View File
@@ -0,0 +1,51 @@
import { TokenCredential } from "@azure/identity";
import {
AzureCosmosDBNoSQLConfig,
AzureCosmosDBNoSqlVectorStore,
AzureCosmosNoSqlDocumentStore,
AzureCosmosNoSqlIndexStore,
} from "llamaindex";
/**
* Util function to create AzureCosmosDB vectorStore, docStore, indexStore from connection string.
*/
export const createStoresFromConnectionString = (
connectionString: string,
dbConfig: AzureCosmosDBNoSQLConfig,
) => {
const vectorStore = AzureCosmosDBNoSqlVectorStore.fromConnectionString({
connectionString,
...dbConfig,
});
const docStore = AzureCosmosNoSqlDocumentStore.fromConnectionString({
connectionString,
});
const indexStore = AzureCosmosNoSqlIndexStore.fromConnectionString({
connectionString,
});
return { vectorStore, docStore, indexStore };
};
/**
* Util function to create AzureCosmosDB vectorStore, docStore, indexStore from connection string.
*/
export const createStoresFromManagedIdentity = (
endpoint: string,
credential: TokenCredential,
dbConfig: AzureCosmosDBNoSQLConfig,
) => {
const vectorStore = AzureCosmosDBNoSqlVectorStore.fromUriAndManagedIdentity({
endpoint,
credential,
...dbConfig,
});
const docStore = AzureCosmosNoSqlDocumentStore.fromAadToken({
endpoint,
credential,
});
const indexStore = AzureCosmosNoSqlIndexStore.fromAadToken({
endpoint,
credential,
});
return { vectorStore, docStore, indexStore };
};
+9
View File
@@ -1,5 +1,14 @@
# @llamaindex/autotool
## 5.0.5
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
## 5.0.4
### Patch Changes
@@ -1,5 +1,15 @@
# @llamaindex/autotool-01-node-example
## 0.0.48
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
- @llamaindex/autotool@5.0.5
## 0.0.47
### Patch Changes
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.47"
"version": "0.0.48"
}
@@ -1,5 +1,15 @@
# @llamaindex/autotool-02-next-example
## 0.1.92
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
- @llamaindex/autotool@5.0.5
## 0.1.91
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool-02-next-example",
"private": true,
"version": "0.1.91",
"version": "0.1.92",
"scripts": {
"dev": "next dev",
"build": "next build",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool",
"type": "module",
"version": "5.0.4",
"version": "5.0.5",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/cloud
## 2.0.2
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 2.0.1
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloud",
"version": "2.0.1",
"version": "2.0.2",
"type": "module",
"license": "MIT",
"scripts": {
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/community
## 0.0.60
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 0.0.59
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS",
"version": "0.0.59",
"version": "0.0.60",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+7
View File
@@ -1,5 +1,12 @@
# @llamaindex/core
## 0.4.2
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
## 0.4.1
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/core",
"type": "module",
"version": "0.4.1",
"version": "0.4.2",
"description": "LlamaIndex Core Module",
"exports": {
"./agent": {
+6
View File
@@ -1,5 +1,11 @@
# @llamaindex/env
## 0.1.17
### Patch Changes
- 14cc9eb: chore: move multi-model into single sub module
## 0.1.16
### Patch Changes
+12
View File
@@ -0,0 +1,12 @@
{
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": {
"browser": "./dist/index.browser.js",
"edge-light": "./dist/index.edge-light.js",
"workerd": "./dist/index.workerd.js"
},
"private": true
}
+29 -2
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/env",
"description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
"version": "0.1.16",
"version": "0.1.17",
"type": "module",
"types": "dist/index.d.ts",
"module": "dist/index.js",
@@ -28,7 +28,7 @@
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"require": "./dist/index.cjs",
"default": "./dist/index.cjs"
"default": "./dist/index.js"
},
"workerd": {
"types": "./dist/index.workerd.d.ts",
@@ -50,9 +50,36 @@
"types": "./dist/index.d.cts",
"default": "./dist/index.cjs"
}
},
"./multi-model": {
"workerd": {
"types": "./multi-model/dist/multi-model.workerd.d.ts",
"default": "./multi-model/dist/multi-model.workerd.js"
},
"edge-light": {
"types": "./multi-model/dist/multi-model.edge-light.d.ts",
"default": "./multi-model/dist/multi-model.edge-light.js"
},
"browser": {
"types": "./multi-model/dist/multi-model.browser.d.ts",
"default": "./multi-model/dist/multi-model.browser.js"
},
"import": {
"types": "./multi-model/dist/multi-model.d.ts",
"default": "./multi-model/dist/multi-model.js"
},
"require": {
"types": "./multi-model/dist/multi-model.d.cts",
"default": "./multi-model/dist/multi-model.cjs"
},
"default": {
"types": "./multi-model/dist/multi-model.d.ts",
"default": "./multi-model/dist/multi-model.js"
}
}
},
"files": [
"multi-model",
"dist",
"CHANGELOG.md",
"!**/*.tsbuildinfo"
-6
View File
@@ -6,12 +6,6 @@
import "./global-check.js";
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
export {
loadTransformers,
setTransformers,
type LoadTransformerEvent,
type OnLoad,
} from "./multi-model/index.browser.js";
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/js.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
export * from "./web-polyfill.js";
-6
View File
@@ -5,12 +5,6 @@
*/
import "./global-check.js";
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
export {
loadTransformers,
setTransformers,
type LoadTransformerEvent,
type OnLoad,
} from "./multi-model/index.non-nodejs.js";
export * from "./node-polyfill.js";
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/js.js";
export { NotSupportCurrentRuntimeClass } from "./utils/shared.js";
-6
View File
@@ -35,12 +35,6 @@ export function createSHA256(): SHA256 {
}
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
export {
loadTransformers,
setTransformers,
type LoadTransformerEvent,
type OnLoad,
} from "./multi-model/index.js";
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/node.js";
export {
AsyncLocalStorage,
-6
View File
@@ -16,10 +16,4 @@ export function getEnv(name: string): string | undefined {
}
export { consoleLogger, emptyLogger, type Logger } from "./logger/index.js";
export {
loadTransformers,
setTransformers,
type LoadTransformerEvent,
type OnLoad,
} from "./multi-model/index.non-nodejs.js";
export { Tokenizers, tokenizers, type Tokenizer } from "./tokenizers/js.js";
+6
View File
@@ -0,0 +1,6 @@
export {
loadTransformers,
setTransformers,
type LoadTransformerEvent,
type OnLoad,
} from "./internal/multi-model/browser.js";
+6
View File
@@ -0,0 +1,6 @@
export {
loadTransformers,
setTransformers,
type LoadTransformerEvent,
type OnLoad,
} from "./internal/multi-model/non-node.js";
+6
View File
@@ -0,0 +1,6 @@
export {
loadTransformers,
setTransformers,
type LoadTransformerEvent,
type OnLoad,
} from "./internal/multi-model/node.js";
+6
View File
@@ -0,0 +1,6 @@
export {
loadTransformers,
setTransformers,
type LoadTransformerEvent,
type OnLoad,
} from "./internal/multi-model/non-node.js";
+8
View File
@@ -0,0 +1,8 @@
{
"extends": ["//"],
"tasks": {
"build": {
"outputs": ["**/dist/**"]
}
}
}
+9
View File
@@ -1,5 +1,14 @@
# @llamaindex/experimental
## 0.0.117
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
## 0.0.116
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.116",
"version": "0.0.117",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+23
View File
@@ -1,5 +1,28 @@
# llamaindex
## 0.8.5
### Patch Changes
- 14cc9eb: chore: move multi-model into single sub module
- a6db5dd: feat: add baseUrl and timeout option in cohere rerank
- 396b1e1: feat: add Azure Cosmos DB DocumentStore, IndexStore, KVStore, update vectorStore and examples
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/clip@0.0.11
- @llamaindex/huggingface@0.0.11
- @llamaindex/cloud@2.0.2
- @llamaindex/core@0.4.2
- @llamaindex/node-parser@0.0.3
- @llamaindex/anthropic@0.0.11
- @llamaindex/deepinfra@0.0.11
- @llamaindex/groq@0.0.26
- @llamaindex/ollama@0.0.18
- @llamaindex/openai@0.1.27
- @llamaindex/portkey-ai@0.0.11
- @llamaindex/replicate@0.0.11
- @llamaindex/readers@1.0.3
## 0.8.4
### Patch Changes
@@ -1,5 +1,14 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.101
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
## 0.0.100
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.100",
"version": "0.0.101",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,11 @@
# @llamaindex/llama-parse-browser-test
## 0.0.22
### Patch Changes
- @llamaindex/cloud@2.0.2
## 0.0.21
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.21",
"version": "0.0.22",
"type": "module",
"scripts": {
"dev": "vite",
@@ -1,5 +1,14 @@
# @llamaindex/next-agent-test
## 0.1.101
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
## 0.1.100
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.100",
"version": "0.1.101",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,14 @@
# test-edge-runtime
## 0.1.100
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
## 0.1.99
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.99",
"version": "0.1.100",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,14 @@
# @llamaindex/next-node-runtime
## 0.0.82
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
## 0.0.81
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.0.81",
"version": "0.0.82",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,14 @@
# @llamaindex/waku-query-engine-test
## 0.0.101
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
## 0.0.100
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.100",
"version": "0.0.101",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,5 @@
import type { LoadTransformerEvent } from "@llamaindex/env";
import { setTransformers } from "@llamaindex/env";
import type { LoadTransformerEvent } from "@llamaindex/env/multi-model";
import { setTransformers } from "@llamaindex/env/multi-model";
import { ClipEmbedding, ImageNode, Settings } from "llamaindex";
import assert from "node:assert";
import { type Mock, test } from "node:test";
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "llamaindex",
"version": "0.8.4",
"version": "0.8.5",
"license": "MIT",
"type": "module",
"keywords": [
@@ -10,12 +10,16 @@ type CohereRerankOptions = {
topN?: number;
model?: string;
apiKey: string | null;
baseUrl?: string;
timeout?: number;
};
export class CohereRerank implements BaseNodePostprocessor {
topN: number = 2;
model: string = "rerank-english-v2.0";
apiKey: string | null = null;
baseUrl: string | undefined;
timeout: number | undefined;
private client: CohereClient | null = null;
@@ -27,6 +31,8 @@ export class CohereRerank implements BaseNodePostprocessor {
topN = 2,
model = "rerank-english-v2.0",
apiKey = null,
baseUrl,
timeout,
}: CohereRerankOptions) {
if (apiKey === null) {
throw new Error("CohereRerank requires an API key");
@@ -35,10 +41,19 @@ export class CohereRerank implements BaseNodePostprocessor {
this.topN = topN;
this.model = model;
this.apiKey = apiKey;
this.baseUrl = baseUrl;
this.timeout = timeout;
this.client = new CohereClient({
token: this.apiKey,
});
this.client = new CohereClient(
this.baseUrl
? {
token: this.apiKey,
environment: this.baseUrl,
}
: {
token: this.apiKey,
},
);
}
/**
@@ -62,12 +77,17 @@ export class CohereRerank implements BaseNodePostprocessor {
throw new Error("CohereRerank requires a query");
}
const results = await this.client.rerank({
query: extractText(query),
model: this.model,
topN: this.topN,
documents: nodes.map((n) => n.node.getContent(MetadataMode.ALL)),
});
const results = await this.client.rerank(
{
query: extractText(query),
model: this.model,
topN: this.topN,
documents: nodes.map((n) => n.node.getContent(MetadataMode.ALL)),
},
this.timeout !== undefined
? { timeoutInSeconds: this.timeout }
: undefined,
);
const newNodes: NodeWithScore[] = [];
@@ -0,0 +1,77 @@
import {
AzureCosmosNoSqlKVStore,
type AadTokenOptions,
type AccountAndKeyOptions,
type ConnectionStringOptions,
} from "../kvStore/AzureCosmosNoSqlKVStore.js";
import { KVDocumentStore } from "./KVDocumentStore.js";
const DEFAULT_DATABASE = "DocumentStoreDB";
const DEFAULT_CONTAINER = "DocumentStoreContainer";
export interface AzureCosmosNoSqlDocumentStoreArgs {
azureCosmosNoSqlKVStore: AzureCosmosNoSqlKVStore;
namespace?: string;
}
export class AzureCosmosNoSqlDocumentStore extends KVDocumentStore {
constructor({
azureCosmosNoSqlKVStore,
namespace,
}: AzureCosmosNoSqlDocumentStoreArgs) {
super(azureCosmosNoSqlKVStore, namespace);
}
/**
* Static method for creating an instance using a connection string.
* If no connection string is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_CONNECTION_STRING` as connection string.
* @returns Instance of AzureCosmosNoSqlDocumentStore
*/
static fromConnectionString(options: ConnectionStringOptions = {}) {
options.dbName = options.dbName || DEFAULT_DATABASE;
options.containerName = options.containerName || DEFAULT_CONTAINER;
const azureCosmosNoSqlKVStore =
AzureCosmosNoSqlKVStore.fromConnectionString(options);
const namespace = `${options.dbName}.${options.containerName}`;
return new AzureCosmosNoSqlDocumentStore({
azureCosmosNoSqlKVStore,
namespace,
});
}
/**
* Static method for creating an instance using a account endpoint and key.
* If no endpoint and key is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as enpoint and `AZURE_COSMOSDB_NOSQL_ACCOUNT_KEY` as key.
* @returns Instance of AzureCosmosNoSqlDocumentStore
*/
static fromAccountAndKey(options: AccountAndKeyOptions = {}) {
options.dbName = options.dbName || DEFAULT_DATABASE;
options.containerName = options.containerName || DEFAULT_CONTAINER;
const azureCosmosNoSqlKVStore =
AzureCosmosNoSqlKVStore.fromAccountAndKey(options);
const namespace = `${options.dbName}.${options.containerName}`;
return new AzureCosmosNoSqlDocumentStore({
azureCosmosNoSqlKVStore,
namespace,
});
}
/**
* Static method for creating an instance using AAD token.
* If no endpoint and credentials are provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as endpoint and use DefaultAzureCredential() as credentials.
* @returns Instance of AzureCosmosNoSqlDocumentStore
*/
static fromAadToken(options: AadTokenOptions = {}) {
options.dbName = options.dbName || DEFAULT_DATABASE;
options.containerName = options.containerName || DEFAULT_CONTAINER;
const azureCosmosNoSqlKVStore =
AzureCosmosNoSqlKVStore.fromAadToken(options);
const namespace = `${options.dbName}.${options.containerName}`;
return new AzureCosmosNoSqlDocumentStore({
azureCosmosNoSqlKVStore,
namespace,
});
}
}
+3
View File
@@ -1,11 +1,14 @@
export * from "@llamaindex/core/storage/chat-store";
export * from "./docStore/AzureCosmosNoSqlDocumentStore.js";
export { PostgresDocumentStore } from "./docStore/PostgresDocumentStore.js";
export { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js";
export * from "./docStore/types.js";
export * from "./FileSystem.js";
export * from "./indexStore/AzureCosmosNoSqlIndexStore.js";
export { PostgresIndexStore } from "./indexStore/PostgresIndexStore.js";
export { SimpleIndexStore } from "./indexStore/SimpleIndexStore.js";
export * from "./indexStore/types.js";
export * from "./kvStore/AzureCosmosNoSqlKVStore.js";
export { PostgresKVStore } from "./kvStore/PostgresKVStore.js";
export { SimpleKVStore } from "./kvStore/SimpleKVStore.js";
export * from "./kvStore/types.js";
@@ -0,0 +1,77 @@
import {
AzureCosmosNoSqlKVStore,
type AadTokenOptions,
type AccountAndKeyOptions,
type ConnectionStringOptions,
} from "../kvStore/AzureCosmosNoSqlKVStore.js";
import { KVIndexStore } from "./KVIndexStore.js";
const DEFAULT_DATABASE = "IndexStoreDB";
const DEFAULT_CONTAINER = "IndexStoreContainer";
export interface AzureCosmosNoSqlIndexStoreArgs {
azureCosmosNoSqlKVStore: AzureCosmosNoSqlKVStore;
namespace?: string;
}
export class AzureCosmosNoSqlIndexStore extends KVIndexStore {
constructor({
azureCosmosNoSqlKVStore,
namespace,
}: AzureCosmosNoSqlIndexStoreArgs) {
super(azureCosmosNoSqlKVStore, namespace);
}
/**
* Static method for creating an instance using a connection string.
* If no connection string is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_CONNECTION_STRING` as connection string.
* @returns Instance of AzureCosmosNoSqlIndexStore
*/
static fromConnectionString(options: ConnectionStringOptions = {}) {
options.dbName = options.dbName || DEFAULT_DATABASE;
options.containerName = options.containerName || DEFAULT_CONTAINER;
const azureCosmosNoSqlKVStore =
AzureCosmosNoSqlKVStore.fromConnectionString(options);
const namespace = `${options.dbName}.${options.containerName}`;
return new AzureCosmosNoSqlIndexStore({
azureCosmosNoSqlKVStore,
namespace,
});
}
/**
* Static method for creating an instance using a account endpoint and key.
* If no endpoint and key is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as enpoint and `AZURE_COSMOSDB_NOSQL_ACCOUNT_KEY` as key.
* @returns Instance of AzureCosmosNoSqlIndexStore
*/
static fromAccountAndKey(options: AccountAndKeyOptions = {}) {
options.dbName = options.dbName || DEFAULT_DATABASE;
options.containerName = options.containerName || DEFAULT_CONTAINER;
const azureCosmosNoSqlKVStore =
AzureCosmosNoSqlKVStore.fromAccountAndKey(options);
const namespace = `${options.dbName}.${options.containerName}`;
return new AzureCosmosNoSqlIndexStore({
azureCosmosNoSqlKVStore,
namespace,
});
}
/**
* Static method for creating an instance using AAD token.
* If no endpoint and credentials are provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as endpoint and use DefaultAzureCredential() as credentials.
* @returns Instance of AzureCosmosNoSqlIndexStore
*/
static fromAadToken(options: AadTokenOptions = {}) {
options.dbName = options.dbName || DEFAULT_DATABASE;
options.containerName = options.containerName || DEFAULT_CONTAINER;
const azureCosmosNoSqlKVStore =
AzureCosmosNoSqlKVStore.fromAadToken(options);
const namespace = `${options.dbName}.${options.containerName}`;
return new AzureCosmosNoSqlIndexStore({
azureCosmosNoSqlKVStore,
namespace,
});
}
}
@@ -0,0 +1,274 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import { Container, CosmosClient, Database } from "@azure/cosmos";
import { DefaultAzureCredential, type TokenCredential } from "@azure/identity";
import { getEnv } from "@llamaindex/env";
import { BaseKVStore } from "./types.js";
const USER_AGENT_SUFFIX = "LlamaIndex-CDBNoSQL-KVStore-JavaScript";
const DEFAULT_CHAT_DATABASE = "KVStoreDB";
const DEFAULT_CHAT_CONTAINER = "KVStoreContainer";
const DEFAULT_OFFER_THROUGHPUT = 400;
function parseConnectionString(connectionString: string): {
endpoint: string;
key: string;
} {
const parts = connectionString.split(";");
let endpoint = "";
let accountKey = "";
parts.forEach((part) => {
const [key, value] = part.split("=");
if (key && key.trim() === "AccountEndpoint") {
endpoint = value?.trim() ?? "";
} else if ((key ?? "").trim() === "AccountKey") {
accountKey = value?.trim() ?? "";
}
});
if (!endpoint || !accountKey) {
throw new Error(
"Invalid connection string: missing AccountEndpoint or AccountKey.",
);
}
return { endpoint, key: accountKey };
}
export interface CosmosDatabaseProperties {
throughput?: number;
}
export interface CosmosContainerProperties {
partitionKey: any;
[key: string]: any;
}
export interface ConnectionStringOptions extends AzureCosmosNoSqlKVStoreConfig {
connectionString?: string;
}
export interface AccountAndKeyOptions extends AzureCosmosNoSqlKVStoreConfig {
endpoint?: string;
key?: string;
}
export interface AadTokenOptions extends AzureCosmosNoSqlKVStoreConfig {
endpoint?: string;
credential?: TokenCredential;
}
export interface AzureCosmosNoSqlKVStoreConfig {
cosmosClient?: CosmosClient;
dbName?: string;
containerName?: string;
cosmosContainerProperties?: CosmosContainerProperties;
cosmosDatabaseProperties?: CosmosDatabaseProperties;
}
export class AzureCosmosNoSqlKVStore extends BaseKVStore {
private cosmosClient: CosmosClient;
private database!: Database;
private container!: Container;
private initPromise?: Promise<void>;
private dbName: string;
private containerName: string;
private cosmosContainerProperties: CosmosContainerProperties;
private cosmosDatabaseProperties: CosmosDatabaseProperties;
private initialize: () => Promise<void>;
constructor({
cosmosClient,
dbName = DEFAULT_CHAT_DATABASE,
containerName = DEFAULT_CHAT_CONTAINER,
cosmosContainerProperties = { partitionKey: "/id" },
cosmosDatabaseProperties = {},
}: AzureCosmosNoSqlKVStoreConfig) {
super();
if (!cosmosClient) {
throw new Error(
"CosmosClient is required for AzureCosmosDBNoSQLVectorStore initialization",
);
}
this.cosmosClient = cosmosClient;
this.dbName = dbName;
this.containerName = containerName;
this.cosmosContainerProperties = cosmosContainerProperties;
this.cosmosDatabaseProperties = cosmosDatabaseProperties;
this.initialize = () => {
if (this.initPromise === undefined) {
this.initPromise = this.init().catch((error) => {
console.error(
"Error during AzureCosmosDBNoSQLKVStore initialization",
error,
);
});
}
return this.initPromise;
};
}
client(): CosmosClient {
return this.cosmosClient;
}
// Asynchronous initialization method to create database and container
private async init(): Promise<void> {
// Set default throughput if not provided
const throughput =
this.cosmosDatabaseProperties?.throughput || DEFAULT_OFFER_THROUGHPUT;
// Create the database if it doesn't exist
const { database } = await this.cosmosClient.databases.createIfNotExists({
id: this.dbName,
throughput,
});
this.database = database;
// Create the container if it doesn't exist
const { container } = await this.database.containers.createIfNotExists({
id: this.containerName,
throughput: this.cosmosContainerProperties?.throughput,
partitionKey: this.cosmosContainerProperties?.partitionKey,
indexingPolicy: this.cosmosContainerProperties?.indexingPolicy,
defaultTtl: this.cosmosContainerProperties?.defaultTtl,
uniqueKeyPolicy: this.cosmosContainerProperties?.uniqueKeyPolicy,
conflictResolutionPolicy:
this.cosmosContainerProperties?.conflictResolutionPolicy,
computedProperties: this.cosmosContainerProperties?.computedProperties,
});
this.container = container;
}
/**
* Static method for creating an instance using a connection string.
* If no connection string is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_CONNECTION_STRING` as connection string.
* @returns Instance of AzureCosmosNoSqlKVStore
*/
static fromConnectionString(
config: { connectionString?: string } & AzureCosmosNoSqlKVStoreConfig = {},
): AzureCosmosNoSqlKVStore {
const cosmosConnectionString =
config.connectionString ||
(getEnv("AZURE_COSMOSDB_NOSQL_CONNECTION_STRING") as string);
if (!cosmosConnectionString) {
throw new Error("Azure CosmosDB connection string must be provided");
}
const { endpoint, key } = parseConnectionString(cosmosConnectionString);
const cosmosClient = new CosmosClient({
endpoint,
key,
userAgentSuffix: USER_AGENT_SUFFIX,
});
return new AzureCosmosNoSqlKVStore({
...config,
cosmosClient,
});
}
/**
* Static method for creating an instance using a account endpoint and key.
* If no endpoint and key is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as enpoint and `AZURE_COSMOSDB_NOSQL_ACCOUNT_KEY` as key.
* @returns Instance of AzureCosmosNoSqlKVStore
*/
static fromAccountAndKey(
config: {
endpoint?: string;
key?: string;
} & AzureCosmosNoSqlKVStoreConfig = {},
): AzureCosmosNoSqlKVStore {
const cosmosEndpoint =
config.endpoint ||
(getEnv("AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT") as string);
const cosmosKey =
config.key || (getEnv("AZURE_COSMOSDB_NOSQL_ACCOUNT_KEY") as string);
if (!cosmosEndpoint || !cosmosKey) {
throw new Error(
"Azure CosmosDB account endpoint and key must be provided",
);
}
const cosmosClient = new CosmosClient({
endpoint: cosmosEndpoint,
key: cosmosKey,
userAgentSuffix: USER_AGENT_SUFFIX,
});
return new AzureCosmosNoSqlKVStore({
...config,
cosmosClient,
});
}
/**
* Static method for creating an instance using AAD token.
* If no endpoint and credentials are provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as endpoint and use DefaultAzureCredential() as credentials.
* @returns Instance of AzureCosmosNoSqlKVStore
*/
static fromAadToken(
config: {
endpoint?: string;
credential?: TokenCredential;
} & AzureCosmosNoSqlKVStoreConfig = {},
): AzureCosmosNoSqlKVStore {
const cosmosEndpoint =
config.endpoint ||
(getEnv("AZURE_COSMOSDB_NOSQL_CONNECTION_STRING") as string);
if (!cosmosEndpoint) {
throw new Error("Azure CosmosDB account endpoint must be provided");
}
const credentials = config.credential ?? new DefaultAzureCredential();
const cosmosClient = new CosmosClient({
endpoint: cosmosEndpoint,
aadCredentials: credentials,
userAgentSuffix: USER_AGENT_SUFFIX,
});
return new AzureCosmosNoSqlKVStore({
...config,
cosmosClient,
});
}
async put(key: string, val: Record<string, any>): Promise<void> {
await this.initialize();
await this.container.items.upsert({
id: key,
messages: val,
});
}
async get(key: string): Promise<Record<string, any> | null> {
await this.initialize();
try {
const { resource } = await this.container.item(key).read();
return resource?.messages || null;
} catch (error) {
console.error(`Error retrieving item with key ${key}:`, error);
return null;
}
}
async getAll(): Promise<Record<string, Record<string, any>>> {
await this.initialize();
const querySpec = {
query: "SELECT * from c",
};
const { resources } = await this.container.items
.query(querySpec)
.fetchAll();
const output: Record<string, Record<string, any>> = resources.reduce(
(res, item) => {
res[item.id] = item.messages;
return res;
},
{},
);
return output;
}
async delete(key: string): Promise<boolean> {
await this.initialize();
try {
await this.container.item(key).delete();
return true;
} catch (error) {
console.error(`Error deleting item with key ${key}:`, error);
return false;
}
}
}
@@ -5,7 +5,6 @@ import {
VectorEmbeddingDistanceFunction,
VectorIndexType,
type ContainerRequest,
type CosmosClientOptions,
type DatabaseRequest,
type IndexingPolicy,
type VectorEmbeddingPolicy,
@@ -48,10 +47,7 @@ export interface AzureCosmosDBNoSQLInitOptions {
*/
export interface AzureCosmosDBNoSQLConfig
extends AzureCosmosDBNoSQLInitOptions {
readonly client?: CosmosClient;
readonly connectionString?: string;
readonly endpoint?: string;
readonly credentials?: TokenCredential;
client?: CosmosClient;
readonly databaseName?: string;
readonly containerName?: string;
readonly textKey?: string;
@@ -60,7 +56,7 @@ export interface AzureCosmosDBNoSQLConfig
readonly idKey?: string;
}
const USER_AGENT_PREFIX = "LlamaIndex-CDBNoSQL-VectorStore-JavaScript";
const USER_AGENT_SUFFIX = "LlamaIndex-CDBNoSQL-VectorStore-JavaScript";
const DEFAULT_VECTOR_EMBEDDING_POLICY = {
vectorEmbeddings: [
@@ -148,40 +144,12 @@ export class AzureCosmosDBNoSqlVectorStore extends BaseVectorStore {
constructor(dbConfig: AzureCosmosDBNoSQLConfig & VectorStoreBaseParams) {
super(dbConfig);
const connectionString =
dbConfig.connectionString ??
getEnv("AZURE_COSMOSDB_NOSQL_CONNECTION_STRING");
const endpoint =
dbConfig.endpoint ?? getEnv("AZURE_COSMOSDB_NOSQL_ENDPOINT");
if (!dbConfig.client && !connectionString && !endpoint) {
if (!dbConfig.client) {
throw new Error(
"CosmosDB client, connection string or endpoint must be set in the configuration.",
"CosmosClient is required for AzureCosmosDBNoSQLVectorStore initialization",
);
}
if (!dbConfig.client) {
if (connectionString) {
const { endpoint, key } = parseConnectionString(connectionString);
this.cosmosClient = new CosmosClient({
endpoint,
key,
userAgentSuffix: USER_AGENT_PREFIX,
} as CosmosClientOptions);
} else {
// Use managed identity
this.cosmosClient = new CosmosClient({
endpoint,
aadCredentials: dbConfig.credentials ?? new DefaultAzureCredential(),
userAgentSuffix: USER_AGENT_PREFIX,
} as CosmosClientOptions);
}
} else {
this.cosmosClient = dbConfig.client;
}
const client = this.cosmosClient;
this.cosmosClient = dbConfig.client;
const databaseName = dbConfig.databaseName ?? "vectorSearchDB";
const containerName = dbConfig.containerName ?? "vectorSearchContainer";
this.idKey = dbConfig.idKey ?? "id";
@@ -206,12 +174,17 @@ export class AzureCosmosDBNoSqlVectorStore extends BaseVectorStore {
// Deferring initialization to the first call to `initialize`
this.initialize = () => {
if (this.initPromise === undefined) {
this.initPromise = this.init(client, databaseName, containerName, {
vectorEmbeddingPolicy,
indexingPolicy,
createContainerOptions: dbConfig.createContainerOptions,
createDatabaseOptions: dbConfig.createDatabaseOptions,
}).catch((error) => {
this.initPromise = this.init(
this.cosmosClient,
databaseName,
containerName,
{
vectorEmbeddingPolicy,
indexingPolicy,
createContainerOptions: dbConfig.createContainerOptions,
createDatabaseOptions: dbConfig.createDatabaseOptions,
},
).catch((error) => {
console.error(
"Error during AzureCosmosDBNoSQLVectorStore initialization",
error,
@@ -222,6 +195,84 @@ export class AzureCosmosDBNoSqlVectorStore extends BaseVectorStore {
};
}
/**
* Static method for creating an instance using a connection string.
* If no connection string is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_CONNECTION_STRING` as connection string.
* @returns Instance of AzureCosmosDBNoSqlVectorStore
*/
static fromConnectionString(
config: { connectionString?: string } & AzureCosmosDBNoSQLConfig &
VectorStoreBaseParams = {},
): AzureCosmosDBNoSqlVectorStore {
const cosmosConnectionString =
config.connectionString ||
(getEnv("AZURE_COSMOSDB_NOSQL_CONNECTION_STRING") as string);
if (!cosmosConnectionString) {
throw new Error("Azure CosmosDB connection string must be provided");
}
const { endpoint, key } = parseConnectionString(cosmosConnectionString);
const client = new CosmosClient({
endpoint,
key,
userAgentSuffix: USER_AGENT_SUFFIX,
});
return new AzureCosmosDBNoSqlVectorStore({ ...config, client });
}
/**
* Static method for creating an instance using a account endpoint and key.
* If no endpoint and key is provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as enpoint and `AZURE_COSMOSDB_NOSQL_ACCOUNT_KEY` as key.
* @returns Instance of AzureCosmosDBNoSqlVectorStore
*/
static fromAccountAndKey(
config: { endpoint?: string; key?: string } & AzureCosmosDBNoSQLConfig &
VectorStoreBaseParams = {},
): AzureCosmosDBNoSqlVectorStore {
const cosmosEndpoint =
config.endpoint || (getEnv("AZURE_COSMOSDB_NOSQL_ENDPOINT") as string);
const cosmosKey =
config.key || (getEnv("AZURE_COSMOSDB_NOSQL_KEY") as string);
if (!cosmosEndpoint || !cosmosKey) {
throw new Error(
"Azure CosmosDB account endpoint and key must be provided",
);
}
const client = new CosmosClient({
endpoint: cosmosEndpoint,
key: cosmosKey,
userAgentSuffix: USER_AGENT_SUFFIX,
});
return new AzureCosmosDBNoSqlVectorStore({ ...config, client });
}
/**
* Static method for creating an instance using account endpoint and managed identity.
* If no endpoint and credentials are provided, it will attempt to use the env variable `AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT` as endpoint and use DefaultAzureCredential() as credentials.
* @returns Instance of AzureCosmosDBNoSqlVectorStore
*/
static fromUriAndManagedIdentity(
config: {
endpoint?: string;
credential?: TokenCredential;
} & AzureCosmosDBNoSQLConfig &
VectorStoreBaseParams = {},
): AzureCosmosDBNoSqlVectorStore {
const cosmosEndpoint =
config.endpoint ||
(getEnv("AZURE_COSMOSDB_NOSQL_ACCOUNT_ENDPOINT") as string);
if (!cosmosEndpoint) {
throw new Error("Azure CosmosDB account endpoint must be provided");
}
const credentials = config.credential ?? new DefaultAzureCredential();
const client = new CosmosClient({
endpoint: cosmosEndpoint,
aadCredentials: credentials,
userAgentSuffix: USER_AGENT_SUFFIX,
});
return new AzureCosmosDBNoSqlVectorStore({ ...config, client });
}
/**
* Adds document to the CosmosDB container.
*
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/node-parser
## 0.0.3
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 0.0.2
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/node-parser",
"version": "0.0.2",
"version": "0.0.3",
"description": "Node parser for LlamaIndex",
"type": "module",
"exports": {
@@ -1,5 +1,13 @@
# @llamaindex/anthropic
## 0.0.11
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 0.0.10
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/anthropic",
"description": "Anthropic Adapter for LlamaIndex",
"version": "0.0.10",
"version": "0.0.11",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+10
View File
@@ -1,5 +1,15 @@
# @llamaindex/clip
## 0.0.11
### Patch Changes
- 14cc9eb: chore: move multi-model into single sub module
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
- @llamaindex/openai@0.1.27
## 0.0.10
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/clip",
"description": "Clip Embedding Adapter for LlamaIndex",
"version": "0.0.10",
"version": "0.0.11",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
+4 -1
View File
@@ -2,7 +2,10 @@ import { MultiModalEmbedding } from "@llamaindex/core/embeddings";
import type { ImageType } from "@llamaindex/core/schema";
// only import type, to avoid bundling error
import { Settings } from "@llamaindex/core/global";
import { type LoadTransformerEvent, loadTransformers } from "@llamaindex/env";
import {
type LoadTransformerEvent,
loadTransformers,
} from "@llamaindex/env/multi-model";
import type {
CLIPTextModelWithProjection,
CLIPVisionModelWithProjection,
@@ -1,5 +1,14 @@
# @llamaindex/deepinfra
## 0.0.11
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
- @llamaindex/openai@0.1.27
## 0.0.10
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/deepinfra",
"description": "Deepinfra Adapter for LlamaIndex",
"version": "0.0.10",
"version": "0.0.11",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/groq
## 0.0.26
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/openai@0.1.27
## 0.0.25
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/groq",
"description": "Groq Adapter for LlamaIndex",
"version": "0.0.25",
"version": "0.0.26",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,15 @@
# @llamaindex/huggingface
## 0.0.11
### Patch Changes
- 14cc9eb: chore: move multi-model into single sub module
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
- @llamaindex/openai@0.1.27
## 0.0.10
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/huggingface",
"description": "Huggingface Adapter for LlamaIndex",
"version": "0.0.10",
"version": "0.0.11",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
@@ -1,6 +1,9 @@
import { BaseEmbedding } from "@llamaindex/core/embeddings";
import { Settings } from "@llamaindex/core/global";
import { type LoadTransformerEvent, loadTransformers } from "@llamaindex/env";
import {
type LoadTransformerEvent,
loadTransformers,
} from "@llamaindex/env/multi-model";
import type { pipeline } from "@xenova/transformers";
import { HuggingFaceEmbeddingModelType } from "./shared";
+1 -1
View File
@@ -9,7 +9,7 @@ import {
type LLMChatParamsStreaming,
type LLMMetadata,
} from "@llamaindex/core/llms";
import { loadTransformers } from "@llamaindex/env";
import { loadTransformers } from "@llamaindex/env/multi-model";
import type {
PreTrainedModel,
PreTrainedTokenizer,
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/ollama
## 0.0.18
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 0.0.17
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/ollama",
"description": "Ollama Adapter for LlamaIndex",
"version": "0.0.17",
"version": "0.0.18",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/openai
## 0.1.27
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 0.1.26
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/openai",
"description": "OpenAI Adapter for LlamaIndex",
"version": "0.1.26",
"version": "0.1.27",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,13 @@
# @llamaindex/portkey-ai
## 0.0.11
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 0.0.10
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/portkey-ai",
"description": "Portkey Adapter for LlamaIndex",
"version": "0.0.10",
"version": "0.0.11",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,5 +1,13 @@
# @llamaindex/replicate
## 0.0.11
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 0.0.10
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/replicate",
"description": "Replicate Adapter for LlamaIndex",
"version": "0.0.10",
"version": "0.0.11",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
+8
View File
@@ -1,5 +1,13 @@
# @llamaindex/readers
## 1.0.3
### Patch Changes
- Updated dependencies [14cc9eb]
- @llamaindex/env@0.1.17
- @llamaindex/core@0.4.2
## 1.0.2
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/readers",
"description": "LlamaIndex Readers",
"version": "1.0.2",
"version": "1.0.3",
"type": "module",
"exports": {
"./node/hook": "./node/dist/hook.js",
+930 -494
View File
File diff suppressed because it is too large Load Diff
+14
View File
@@ -1,5 +1,19 @@
# @llamaindex/unit-test
## 0.0.14
### Patch Changes
- Updated dependencies [14cc9eb]
- Updated dependencies [a6db5dd]
- Updated dependencies [396b1e1]
- llamaindex@0.8.5
- @llamaindex/cloud@2.0.2
- @llamaindex/core@0.4.2
- @llamaindex/node-parser@0.0.3
- @llamaindex/openai@0.1.27
- @llamaindex/readers@1.0.3
## 0.0.13
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/unit-test",
"private": true,
"version": "0.0.13",
"version": "0.0.14",
"type": "module",
"scripts": {
"test": "vitest run"