Compare commits

...

8 Commits

Author SHA1 Message Date
github-actions[bot] 449274ca5a Release 0.6.12 (#1273)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2024-09-30 16:34:14 -07:00
Alex Yang 78037a664c chore: update changelog 2024-09-30 16:13:22 -07:00
Alex Yang 1d9e3b1000 fix: export llama reader in non-nodejs runtime (#1279) 2024-09-30 16:13:07 -07:00
Alex Yang df83e32107 fix: bypass service context embed model (#1280) 2024-09-30 16:02:48 -07:00
Thuc Pham f7b4e94231 feat: add filters for pinecone (#1272) 2024-09-30 17:04:43 +07:00
Marcus Schiesser 4c07a2655d text: add cycle test (#1270) 2024-09-29 23:13:59 -07:00
Marcus Schiesser 5c0c8b2ec4 test: add concurrent test for workflows (#1269) 2024-09-29 22:10:21 -07:00
Emmanuel Ferdman e5e18688a6 fix: update reader reference (#1268)
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2024-09-28 14:44:44 -07:00
28 changed files with 249 additions and 21 deletions
+9
View File
@@ -1,5 +1,14 @@
# docs
## 0.0.81
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
## 0.0.80
### Patch Changes
@@ -13,7 +13,7 @@ Official documentation for LlamaParse can be found [here](https://docs.cloud.lla
## Usage
You can then use the `LlamaParseReader` class to load local files and convert them into a parsed document that can be used by LlamaIndex.
See [LlamaParseReader.ts](https://github.com/run-llama/LlamaIndexTS/blob/main/packages/llamaindex/src/readers/LlamaParseReader.ts) for a list of supported file types:
See [reader.ts](https://github.com/run-llama/LlamaIndexTS/blob/main/packages/cloud/src/reader.ts) for a list of supported file types:
<CodeBlock language="ts">{CodeSource}</CodeBlock>
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "docs",
"version": "0.0.80",
"version": "0.0.81",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
+9
View File
@@ -1,5 +1,14 @@
# @llamaindex/autotool
## 3.0.12
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
## 3.0.11
### Patch Changes
@@ -1,5 +1,15 @@
# @llamaindex/autotool-01-node-example
## 0.0.21
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
- @llamaindex/autotool@3.0.12
## 0.0.20
### Patch Changes
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.20"
"version": "0.0.21"
}
@@ -1,5 +1,15 @@
# @llamaindex/autotool-02-next-example
## 0.1.65
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
- @llamaindex/autotool@3.0.12
## 0.1.64
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool-02-next-example",
"private": true,
"version": "0.1.64",
"version": "0.1.65",
"scripts": {
"dev": "next dev",
"build": "next build",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool",
"type": "module",
"version": "3.0.11",
"version": "3.0.12",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
+64
View File
@@ -166,4 +166,68 @@ describe("Workflow", () => {
greeting: "Hello Alice, you are 30 years old!",
});
});
test("workflow with two concurrent steps", async () => {
const concurrentFlow = new Workflow({ verbose: true });
const step1 = vi.fn(async (_context, _ev: StartEvent) => {
await new Promise((resolve) => setTimeout(resolve, 200));
return new StopEvent({ result: "Step 1 completed" });
});
const step2 = vi.fn(async (_context, _ev: StartEvent) => {
await new Promise((resolve) => setTimeout(resolve, 100));
return new StopEvent({ result: "Step 2 completed" });
});
concurrentFlow.addStep(StartEvent, step1);
concurrentFlow.addStep(StartEvent, step2);
const startTime = new Date();
const result = await concurrentFlow.run("start");
const endTime = new Date();
const duration = endTime.getTime() - startTime.getTime();
expect(step1).toHaveBeenCalledTimes(1);
expect(step2).toHaveBeenCalledTimes(1);
expect(duration).toBeLessThan(200);
expect(result.data.result).toBe("Step 2 completed");
});
test("workflow with two concurrent cyclic steps", async () => {
const concurrentCyclicFlow = new Workflow({ verbose: true });
class Step1Event extends WorkflowEvent {}
class Step2Event extends WorkflowEvent {}
let step2Count = 0;
const step1 = vi.fn(async (_context, ev: StartEvent | Step1Event) => {
await new Promise((resolve) => setTimeout(resolve, 1000));
return new Step1Event({ result: "Step 1 completed" });
});
const step2 = vi.fn(async (_context, ev: StartEvent | Step2Event) => {
await new Promise((resolve) => setTimeout(resolve, 100));
step2Count++;
if (step2Count >= 5) {
return new StopEvent({ result: "Step 2 completed 5 times" });
}
return new Step2Event({ result: "Step 2 completed" });
});
concurrentCyclicFlow.addStep([StartEvent, Step1Event], step1);
concurrentCyclicFlow.addStep([StartEvent, Step2Event], step2);
const startTime = new Date();
const result = await concurrentCyclicFlow.run("start");
const endTime = new Date();
const duration = endTime.getTime() - startTime.getTime();
expect(step1).toHaveBeenCalledTimes(1);
expect(step2).toHaveBeenCalledTimes(5);
expect(duration).toBeGreaterThan(500); // At least 5 * 100ms for step2
expect(duration).toBeLessThan(1000); // Less than 1 second
expect(result.data.result).toBe("Step 2 completed 5 times");
});
});
+9
View File
@@ -1,5 +1,14 @@
# @llamaindex/experimental
## 0.0.90
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
## 0.0.89
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.89",
"version": "0.0.90",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
+8
View File
@@ -1,5 +1,13 @@
# llamaindex
## 0.6.12
### Patch Changes
- f7b4e94: feat: add filters for pinecone
- 78037a6: fix: bypass service context embed model
- 1d9e3b1: fix: export llama reader in non-nodejs runtime
## 0.6.11
### Patch Changes
@@ -1,5 +1,14 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.74
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
## 0.0.73
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.73",
"version": "0.0.74",
"type": "module",
"private": true,
"scripts": {
@@ -1,5 +1,14 @@
# @llamaindex/next-agent-test
## 0.1.74
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
## 0.1.73
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.73",
"version": "0.1.74",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,14 @@
# test-edge-runtime
## 0.1.73
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
## 0.1.72
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.72",
"version": "0.1.73",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,14 @@
# @llamaindex/next-node-runtime
## 0.0.55
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
## 0.0.54
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.0.54",
"version": "0.0.55",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,5 +1,14 @@
# @llamaindex/waku-query-engine-test
## 0.0.74
### Patch Changes
- Updated dependencies [f7b4e94]
- Updated dependencies [78037a6]
- Updated dependencies [1d9e3b1]
- llamaindex@0.6.12
## 0.0.73
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.73",
"version": "0.0.74",
"type": "module",
"private": true,
"scripts": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "llamaindex",
"version": "0.6.11",
"version": "0.6.12",
"license": "MIT",
"type": "module",
"keywords": [
+5
View File
@@ -1,3 +1,8 @@
export {
LlamaParseReader,
type Language,
type ResultType,
} from "@llamaindex/cloud/reader";
export * from "@llamaindex/core/agent";
export * from "@llamaindex/core/chat-engine";
export {
@@ -203,7 +203,10 @@ export class VectorStoreIndex extends BaseIndex<IndexDict> {
} = {},
): Promise<VectorStoreIndex> {
args.storageContext =
args.storageContext ?? (await storageContextFromDefaults({}));
args.storageContext ??
(await storageContextFromDefaults({
serviceContext: args.serviceContext,
}));
args.vectorStores = args.vectorStores ?? args.storageContext.vectorStores;
args.docStoreStrategy =
args.docStoreStrategy ??
@@ -5,6 +5,7 @@ import {
import { ModalityType, ObjectType } from "@llamaindex/core/schema";
import { path } from "@llamaindex/env";
import { getImageEmbedModel } from "../internal/settings/image-embed-model.js";
import type { ServiceContext } from "../ServiceContext.js";
import { SimpleVectorStore } from "../vector-store/SimpleVectorStore.js";
import type { VectorStore, VectorStoreByType } from "../vector-store/types.js";
import { SimpleDocumentStore } from "./docStore/SimpleDocumentStore.js";
@@ -25,6 +26,10 @@ type BuilderParams = {
vectorStores: VectorStoreByType;
storeImages: boolean;
persistDir: string;
/**
* @deprecated Please use `Settings` instead
*/
serviceContext?: ServiceContext | undefined;
};
export async function storageContextFromDefaults({
@@ -34,6 +39,7 @@ export async function storageContextFromDefaults({
vectorStores,
storeImages,
persistDir,
serviceContext,
}: Partial<BuilderParams>): Promise<StorageContext> {
vectorStores = vectorStores ?? {};
if (!persistDir) {
@@ -48,6 +54,7 @@ export async function storageContextFromDefaults({
});
}
} else {
const embedModel = serviceContext?.embedModel;
docStore =
docStore ||
(await SimpleDocumentStore.fromPersistDir(persistDir, DEFAULT_NAMESPACE));
@@ -55,7 +62,8 @@ export async function storageContextFromDefaults({
indexStore || (await SimpleIndexStore.fromPersistDir(persistDir));
if (!(ObjectType.TEXT in vectorStores)) {
vectorStores[ModalityType.TEXT] =
vectorStore ?? (await SimpleVectorStore.fromPersistDir(persistDir));
vectorStore ??
(await SimpleVectorStore.fromPersistDir(persistDir, embedModel));
}
if (storeImages && !(ObjectType.IMAGE in vectorStores)) {
vectorStores[ModalityType.IMAGE] = await SimpleVectorStore.fromPersistDir(
@@ -1,4 +1,6 @@
import {
FilterCondition,
FilterOperator,
VectorStoreBase,
type IEmbedModel,
type MetadataFilter,
@@ -198,14 +200,60 @@ export class PineconeVectorStore
}
toPineconeFilter(stdFilters?: MetadataFilters) {
return stdFilters?.filters?.reduce((carry: any, item: MetadataFilter) => {
// Use MetadataFilter with EQ operator to replace ExactMatchFilter
// TODO: support filter with other operators
if (item.operator === "==") {
carry[item.key] = item.value;
if (!stdFilters) return undefined;
const transformCondition = (
condition: `${FilterCondition}` = "and",
): string => {
if (condition === "and") return "$and";
if (condition === "or") return "$or";
throw new Error(`Filter condition ${condition} not supported`);
};
const transformOperator = (operator: `${FilterOperator}`): string => {
switch (operator) {
case "!=":
return "$ne";
case "==":
return "$eq";
case ">":
return "$gt";
case "<":
return "$lt";
case ">=":
return "$gte";
case "<=":
return "$lte";
case "in":
return "$in";
case "nin":
return "$nin";
default:
throw new Error(`Filter operator ${operator} not supported`);
}
return carry;
}, {});
};
const convertFilterItem = (filter: MetadataFilter) => {
return {
[filter.key]: {
[transformOperator(filter.operator)]: filter.value,
},
};
};
const convertFilter = (filter: MetadataFilters) => {
const filtersList = filter.filters
.map((f) => convertFilterItem(f))
.filter((f) => Object.keys(f).length > 0);
if (filtersList.length === 0) return undefined;
if (filtersList.length === 1) return filtersList[0];
const condition = transformCondition(filter.condition);
return { [condition]: filtersList };
};
return convertFilter(stdFilters);
}
textFromResultRow(row: ScoredPineconeRecord<Metadata>): string {