mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-15 06:52:45 -04:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ca50443f7b | |||
| 1b60005018 | |||
| d99d598491 | |||
| a0e6f57d9b | |||
| e0f6cc3be1 | |||
| bc3e840b85 | |||
| f73d4c335d | |||
| 24774b0477 | |||
| 8386510d86 | |||
| b504303c66 | |||
| cf9a9356e0 |
@@ -0,0 +1,6 @@
|
||||
---
|
||||
"llamaindex": patch
|
||||
"@llamaindex/env": patch
|
||||
---
|
||||
|
||||
Allow Node 18 again (throw run-time error if not possible) to make Stackblitz work
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@llamaindex/vercel": patch
|
||||
---
|
||||
|
||||
Add VercelLLM (adapter to use any model provider from Vercel AI in LlamaIndex)
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@llamaindex/core": patch
|
||||
---
|
||||
|
||||
The compact and refine response synthesizer (retrieved by using `getResponseSynthesizer('compact')`) has been fixed to return the original source nodes that were provided to it in its response. Previous to this it was returning the compacted text chunk documents.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"llamaindex": patch
|
||||
---
|
||||
|
||||
withLlamaIndex now passes through webpack options to the passed in customized NextJS webpack config. Before it was only passing through the config.
|
||||
@@ -23,7 +23,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [20.x, 22.x, 23.x]
|
||||
node-version: [18.x, 20.x, 22.x, 23.x]
|
||||
name: E2E on Node.js ${{ matrix.node-version }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -53,7 +53,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
node-version: [20.x, 22.x, 23.x]
|
||||
node-version: [18.x, 20.x, 22.x, 23.x]
|
||||
name: Test on Node.js ${{ matrix.node-version }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
@@ -3,7 +3,9 @@ title: Vercel
|
||||
description: Integrate LlamaIndex with Vercel's AI SDK
|
||||
---
|
||||
|
||||
LlamaIndex provides integration with Vercel's AI SDK, allowing you to create powerful search and retrieval applications. Below are examples of how to use LlamaIndex with `streamText` from the Vercel AI SDK.
|
||||
LlamaIndex provides integration with Vercel's AI SDK, allowing you to create powerful search and retrieval applications. You can:
|
||||
- Use any of Vercel AI's [model providers](https://sdk.vercel.ai/docs/foundations/providers-and-models) as LLMs in LlamaIndex
|
||||
- Use indexes (e.g. VectorStoreIndex, LlamaCloudIndex) from LlamaIndexTS in your Vercel AI applications
|
||||
|
||||
## Setup
|
||||
|
||||
@@ -13,7 +15,22 @@ First, install the required dependencies:
|
||||
npm install @llamaindex/vercel ai
|
||||
```
|
||||
|
||||
## Using Local Vector Store
|
||||
## Using Vercel AI's Model Providers
|
||||
|
||||
Using the `VercelLLM` adapter, it's easy to use any of Vercel AI's [model providers](https://sdk.vercel.ai/docs/foundations/providers-and-models) as LLMs in LlamaIndex. Here's an example of how to use OpenAI's GPT-4o model:
|
||||
|
||||
```typescript
|
||||
const llm = new VercelLLM({ model: openai("gpt-4o") });
|
||||
const result = await llm.complete({
|
||||
prompt: "What is the capital of France?",
|
||||
stream: false, // Set to true if you want streaming responses
|
||||
});
|
||||
console.log(result.text);
|
||||
```
|
||||
|
||||
## Use Indexes
|
||||
|
||||
### Using VectorStoreIndex
|
||||
|
||||
Here's how to create a simple vector store index and query it using Vercel's AI SDK:
|
||||
|
||||
@@ -29,22 +46,25 @@ const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
|
||||
// Create a query tool
|
||||
const queryTool = llamaindex({
|
||||
model: openai("gpt-4"),
|
||||
index,
|
||||
description: "Search through the documents", // optional
|
||||
});
|
||||
|
||||
// Use the tool with Vercel's AI SDK
|
||||
streamText({
|
||||
tools: { queryTool },
|
||||
prompt: "Your question here",
|
||||
model: openai("gpt-4"),
|
||||
prompt: "Your question here",
|
||||
tools: { queryTool },
|
||||
onFinish({ response }) {
|
||||
console.log("Response:", response.messages); // log the response
|
||||
},
|
||||
}).toDataStream();
|
||||
```
|
||||
|
||||
## Using LlamaCloud
|
||||
> Note: the Vercel AI model referenced in the `llamaindex` function is used by the response synthesizer to generate a response for the tool call.
|
||||
|
||||
### Using LlamaCloud
|
||||
|
||||
For production deployments, you can use LlamaCloud to store and manage your documents:
|
||||
|
||||
@@ -61,20 +81,21 @@ const index = await LlamaCloudIndex.fromDocuments({
|
||||
|
||||
// Use it the same way as VectorStoreIndex
|
||||
const queryTool = llamaindex({
|
||||
model: openai("gpt-4"),
|
||||
index,
|
||||
description: "Search through the documents",
|
||||
});
|
||||
|
||||
// Use the tool with Vercel's AI SDK
|
||||
streamText({
|
||||
tools: { queryTool },
|
||||
prompt: "Your question here",
|
||||
model: openai("gpt-4"),
|
||||
prompt: "Your question here",
|
||||
tools: { queryTool },
|
||||
}).toDataStream();
|
||||
```
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Explore [LlamaCloud](https://cloud.llamaindex.ai/) for managed document storage and retrieval
|
||||
2. Join our [Discord community](https://discord.gg/llamaindex) for support and discussions
|
||||
2. Join our [Discord community](https://discord.gg/dGcwcsnxhU) for support and discussions
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ Imaging you put output file into `/dist/openai.js` but you are importing `llamai
|
||||
}
|
||||
```
|
||||
|
||||
In old module resolution, TypeScript will not be able to find the module because it is not follow the file structure, even you run `node index.js` successfully. (on Node.js >=16)
|
||||
In old module resolution, TypeScript will not be able to find the module because it is not following the file structure, even you run `node index.js` successfully. (on Node.js >=16)
|
||||
|
||||
See more about [moduleResolution](https://www.typescriptlang.org/docs/handbook/modules/theory.html#module-resolution) or
|
||||
[TypeScript 5.0 blog](https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/#--moduleresolution-bundler7).
|
||||
|
||||
@@ -21,6 +21,11 @@ test.beforeEach(() => {
|
||||
});
|
||||
|
||||
await test("clip embedding", async (t) => {
|
||||
const major = parseInt(process.versions.node.split(".")[0] ?? "0", 10);
|
||||
if (major < 20) {
|
||||
t.skip("Skip CLIP tests on Node.js < 20");
|
||||
return;
|
||||
}
|
||||
await t.test("should trigger load transformer event", async () => {
|
||||
const nodes = [
|
||||
new ImageNode({
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
import {
|
||||
Document,
|
||||
IngestionPipeline,
|
||||
MetadataMode,
|
||||
OpenAIEmbedding,
|
||||
SentenceSplitter,
|
||||
VectorStoreIndex,
|
||||
} from "llamaindex";
|
||||
import fs from "node:fs/promises";
|
||||
|
||||
async function main() {
|
||||
// Load essay from abramov.txt in Node
|
||||
const path = "node_modules/llamaindex/examples/abramov.txt";
|
||||
const path = "../node_modules/llamaindex/examples/abramov.txt";
|
||||
|
||||
const essay = await fs.readFile(path, "utf-8");
|
||||
|
||||
@@ -22,14 +21,23 @@ async function main() {
|
||||
new OpenAIEmbedding(),
|
||||
],
|
||||
});
|
||||
console.time("Pipeline Run Time");
|
||||
|
||||
// run the pipeline
|
||||
const nodes = await pipeline.run({ documents: [document] });
|
||||
|
||||
// print out the result of the pipeline run
|
||||
for (const node of nodes) {
|
||||
console.log(node.getContent(MetadataMode.NONE));
|
||||
}
|
||||
console.timeEnd("Pipeline Run Time");
|
||||
|
||||
// initialize the VectorStoreIndex from nodes
|
||||
const index = await VectorStoreIndex.init({ nodes });
|
||||
|
||||
// Query the index
|
||||
const queryEngine = index.asQueryEngine();
|
||||
|
||||
const { message } = await queryEngine.query({
|
||||
query: "summarize the article in three sentence",
|
||||
});
|
||||
|
||||
console.log(message);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -14,6 +14,16 @@ npm i
|
||||
|
||||
Make sure to run the examples from the parent folder called `examples`. The following examples are available:
|
||||
|
||||
### Vercel LLM Example
|
||||
|
||||
Run the Vercel LLM example with:
|
||||
|
||||
```bash
|
||||
npx tsx vercel/llm.ts
|
||||
```
|
||||
|
||||
This example demonstrates using the `VercelLLM` adapter with Vercel's OpenAI model provider
|
||||
|
||||
### Vector Store Example
|
||||
|
||||
Run the local vector store example with:
|
||||
|
||||
@@ -22,6 +22,7 @@ async function main() {
|
||||
prompt: "Cost of moving cat from Russia to UK?",
|
||||
tools: {
|
||||
queryTool: llamaindex({
|
||||
model: openai("gpt-4o"),
|
||||
index,
|
||||
description:
|
||||
"get information from your knowledge base to answer questions.", // optional description
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { VercelLLM } from "@llamaindex/vercel";
|
||||
import { LLMAgent, WikipediaTool } from "llamaindex";
|
||||
|
||||
async function main() {
|
||||
// Create an instance of VercelLLM with the OpenAI model
|
||||
const vercelLLM = new VercelLLM({ model: openai("gpt-4o") });
|
||||
|
||||
console.log("\n=== Test 1: Using complete() for single response ===");
|
||||
const result = await vercelLLM.complete({
|
||||
prompt: "What is the capital of France?",
|
||||
stream: false, // Set to true if you want streaming responses
|
||||
});
|
||||
console.log(result.text);
|
||||
|
||||
console.log("\n=== Test 2: Using chat() for streaming response ===");
|
||||
const stream = await vercelLLM.chat({
|
||||
messages: [
|
||||
{ content: "You want to talk in rhymes.", role: "system" },
|
||||
{
|
||||
content:
|
||||
"How much wood would a woodchuck chuck if a woodchuck could chuck wood?",
|
||||
role: "user",
|
||||
},
|
||||
],
|
||||
stream: true,
|
||||
});
|
||||
for await (const chunk of stream) {
|
||||
process.stdout.write(chunk.delta);
|
||||
}
|
||||
|
||||
console.log("\n=== Test 3: Using LLMAgent with WikipediaTool ===");
|
||||
const agent = new LLMAgent({
|
||||
llm: vercelLLM,
|
||||
tools: [new WikipediaTool()],
|
||||
});
|
||||
|
||||
const { message } = await agent.chat({
|
||||
message: "What's the history of New York from Wikipedia in 3 sentences?",
|
||||
});
|
||||
|
||||
console.log(message);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -18,6 +18,7 @@ async function main() {
|
||||
prompt: "Cost of moving cat from Russia to UK?",
|
||||
tools: {
|
||||
queryTool: llamaindex({
|
||||
model: openai("gpt-4o"),
|
||||
index,
|
||||
description:
|
||||
"get information from your knowledge base to answer questions.", // optional description
|
||||
|
||||
@@ -77,6 +77,16 @@ class Refine extends BaseSynthesizer {
|
||||
}
|
||||
}
|
||||
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
stream: true,
|
||||
): Promise<AsyncIterable<EngineResponse>>;
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
stream: false,
|
||||
): Promise<EngineResponse>;
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
@@ -197,6 +207,16 @@ class Refine extends BaseSynthesizer {
|
||||
* CompactAndRefine is a slight variation of Refine that first compacts the text chunks into the smallest possible number of chunks.
|
||||
*/
|
||||
class CompactAndRefine extends Refine {
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
stream: true,
|
||||
): Promise<AsyncIterable<EngineResponse>>;
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
stream: false,
|
||||
): Promise<EngineResponse>;
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
@@ -216,17 +236,24 @@ class CompactAndRefine extends Refine {
|
||||
const newTexts = this.promptHelper.repack(maxPrompt, textChunks);
|
||||
const newNodes = newTexts.map((text) => new TextNode({ text }));
|
||||
if (stream) {
|
||||
return super.getResponse(
|
||||
const streamResponse = await super.getResponse(
|
||||
query,
|
||||
newNodes.map((node) => ({ node })),
|
||||
true,
|
||||
);
|
||||
return streamConverter(streamResponse, (chunk) => {
|
||||
chunk.sourceNodes = nodes;
|
||||
return chunk;
|
||||
});
|
||||
}
|
||||
return super.getResponse(
|
||||
|
||||
const originalResponse = await super.getResponse(
|
||||
query,
|
||||
newNodes.map((node) => ({ node })),
|
||||
false,
|
||||
);
|
||||
originalResponse.sourceNodes = nodes;
|
||||
return originalResponse;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
import { describe, expect, test, vi } from "vitest";
|
||||
import type { LLMMetadata } from "../../llms/dist/index.js";
|
||||
import { getResponseSynthesizer } from "../../response-synthesizers/dist/index.js";
|
||||
import { Document } from "../../schema/dist/index.js";
|
||||
|
||||
const mockLllm = () => ({
|
||||
complete: vi.fn().mockImplementation(({ stream }) => {
|
||||
const response = { text: "unimportant" };
|
||||
if (!stream) {
|
||||
return response;
|
||||
}
|
||||
|
||||
function* gen() {
|
||||
// yield a few times to make sure each chunk has the sourceNodes
|
||||
yield response;
|
||||
yield response;
|
||||
yield response;
|
||||
}
|
||||
|
||||
return gen();
|
||||
}),
|
||||
chat: vi.fn(),
|
||||
metadata: {} as unknown as LLMMetadata,
|
||||
});
|
||||
|
||||
describe("compact and refine response synthesizer", () => {
|
||||
describe("synthesize", () => {
|
||||
test("should return original sourceNodes with response when stream = false", async () => {
|
||||
const synthesizer = getResponseSynthesizer("compact", {
|
||||
llm: mockLllm(),
|
||||
});
|
||||
|
||||
const sourceNode = { node: new Document({}), score: 1 };
|
||||
|
||||
const response = await synthesizer.synthesize(
|
||||
{
|
||||
query: "test",
|
||||
nodes: [sourceNode],
|
||||
},
|
||||
false,
|
||||
);
|
||||
|
||||
expect(response.sourceNodes).toEqual([sourceNode]);
|
||||
});
|
||||
|
||||
test("should return original sourceNodes with response when stream = true", async () => {
|
||||
const synthesizer = getResponseSynthesizer("compact", {
|
||||
llm: mockLllm(),
|
||||
});
|
||||
|
||||
const sourceNode = { node: new Document({}), score: 1 };
|
||||
|
||||
const response = await synthesizer.synthesize(
|
||||
{
|
||||
query: "test",
|
||||
nodes: [sourceNode],
|
||||
},
|
||||
true,
|
||||
);
|
||||
|
||||
for await (const chunk of response) {
|
||||
expect(chunk.sourceNodes).toEqual([sourceNode]);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -7,6 +7,13 @@ export {
|
||||
} from "./shared.js";
|
||||
|
||||
export async function loadTransformers(onLoad: OnLoad) {
|
||||
const nodeVersions = process.versions.node.split(".");
|
||||
if (nodeVersions[0] && parseInt(nodeVersions[0], 10) < 20) {
|
||||
throw new Error(
|
||||
"@huggingface/transformers is not supported on Node.js versions below 20",
|
||||
);
|
||||
}
|
||||
|
||||
if (getTransformers() === null) {
|
||||
setTransformers(await import("@huggingface/transformers"));
|
||||
} else {
|
||||
|
||||
@@ -86,7 +86,6 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@huggingface/transformers": "^3.0.2",
|
||||
"@swc/cli": "^0.5.0",
|
||||
"@swc/core": "^1.9.2",
|
||||
"@vercel/postgres": "^0.10.0",
|
||||
@@ -98,7 +97,7 @@
|
||||
"typescript": "^5.6.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.0.0"
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"types": "./dist/type/index.d.ts",
|
||||
"main": "./dist/cjs/index.js",
|
||||
|
||||
@@ -41,7 +41,7 @@ export default function withLlamaIndex(config: any) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
config.webpack = function (webpackConfig: any, options: any) {
|
||||
if (userWebpack) {
|
||||
webpackConfig = userWebpack(webpackConfig);
|
||||
webpackConfig = userWebpack(webpackConfig, options);
|
||||
}
|
||||
webpackConfig.resolve.alias = {
|
||||
...webpackConfig.resolve.alias,
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
export { VercelLLM } from "./llm";
|
||||
export { llamaindex } from "./tool";
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
import { wrapEventCaller, wrapLLMEvent } from "@llamaindex/core/decorator";
|
||||
import {
|
||||
ToolCallLLM,
|
||||
type ChatMessage,
|
||||
type ChatResponse,
|
||||
type ChatResponseChunk,
|
||||
type LLMChatParamsNonStreaming,
|
||||
type LLMChatParamsStreaming,
|
||||
type LLMMetadata,
|
||||
type ToolCallLLMMessageOptions,
|
||||
} from "@llamaindex/core/llms";
|
||||
import { extractText } from "@llamaindex/core/utils";
|
||||
import {
|
||||
generateText,
|
||||
streamText,
|
||||
type CoreAssistantMessage,
|
||||
type CoreMessage,
|
||||
type CoreSystemMessage,
|
||||
type CoreToolMessage,
|
||||
type CoreUserMessage,
|
||||
type ImagePart,
|
||||
type LanguageModelV1,
|
||||
type TextPart,
|
||||
} from "ai";
|
||||
|
||||
export type VercelAdditionalChatOptions = ToolCallLLMMessageOptions;
|
||||
|
||||
export class VercelLLM extends ToolCallLLM<VercelAdditionalChatOptions> {
|
||||
supportToolCall: boolean = true;
|
||||
private model: LanguageModelV1;
|
||||
|
||||
constructor({ model }: { model: LanguageModelV1 }) {
|
||||
super();
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
get metadata(): LLMMetadata {
|
||||
return {
|
||||
model: this.model.modelId,
|
||||
temperature: 1,
|
||||
topP: 1,
|
||||
contextWindow: 128000,
|
||||
tokenizer: undefined,
|
||||
};
|
||||
}
|
||||
|
||||
private toVercelMessages(
|
||||
messages: ChatMessage<ToolCallLLMMessageOptions>[],
|
||||
): CoreMessage[] {
|
||||
return messages.map((message) => {
|
||||
const options = message.options ?? {};
|
||||
|
||||
if ("toolResult" in options) {
|
||||
return {
|
||||
role: "tool",
|
||||
content: [
|
||||
{
|
||||
type: "tool-result",
|
||||
toolCallId: options.toolResult.id,
|
||||
toolName: "", // XXX: tool result doesn't name
|
||||
isError: options.toolResult.isError,
|
||||
result: options.toolResult.result,
|
||||
},
|
||||
],
|
||||
} satisfies CoreToolMessage;
|
||||
} else if ("toolCall" in options) {
|
||||
return {
|
||||
role: "assistant",
|
||||
content: options.toolCall.map((toolCall) => ({
|
||||
type: "tool-call",
|
||||
toolName: toolCall.name,
|
||||
toolCallId: toolCall.id,
|
||||
args: toolCall.input,
|
||||
})),
|
||||
} satisfies CoreAssistantMessage;
|
||||
}
|
||||
|
||||
if (message.role === "system" || message.role === "assistant") {
|
||||
return {
|
||||
role: message.role,
|
||||
content: extractText(message.content),
|
||||
} satisfies CoreSystemMessage | CoreAssistantMessage;
|
||||
}
|
||||
|
||||
if (message.role === "user") {
|
||||
return {
|
||||
role: message.role,
|
||||
content:
|
||||
typeof message.content === "string"
|
||||
? message.content
|
||||
: message.content.map((contentDetail) => {
|
||||
if (contentDetail.type === "image_url") {
|
||||
return {
|
||||
type: "image",
|
||||
image: new URL(contentDetail.image_url.url),
|
||||
} satisfies ImagePart;
|
||||
}
|
||||
return {
|
||||
type: "text",
|
||||
text: contentDetail.text,
|
||||
} satisfies TextPart;
|
||||
}),
|
||||
} satisfies CoreUserMessage;
|
||||
}
|
||||
|
||||
throw new Error(`Can not convert message ${JSON.stringify(message)}`);
|
||||
});
|
||||
}
|
||||
|
||||
chat(
|
||||
params: LLMChatParamsStreaming<
|
||||
VercelAdditionalChatOptions,
|
||||
ToolCallLLMMessageOptions
|
||||
>,
|
||||
): Promise<AsyncIterable<ChatResponseChunk<ToolCallLLMMessageOptions>>>;
|
||||
chat(
|
||||
params: LLMChatParamsNonStreaming<
|
||||
VercelAdditionalChatOptions,
|
||||
ToolCallLLMMessageOptions
|
||||
>,
|
||||
): Promise<ChatResponse<ToolCallLLMMessageOptions>>;
|
||||
@wrapEventCaller
|
||||
@wrapLLMEvent
|
||||
async chat(
|
||||
params:
|
||||
| LLMChatParamsNonStreaming<
|
||||
VercelAdditionalChatOptions,
|
||||
ToolCallLLMMessageOptions
|
||||
>
|
||||
| LLMChatParamsStreaming<
|
||||
VercelAdditionalChatOptions,
|
||||
ToolCallLLMMessageOptions
|
||||
>,
|
||||
): Promise<
|
||||
| ChatResponse<ToolCallLLMMessageOptions>
|
||||
| AsyncIterable<ChatResponseChunk<ToolCallLLMMessageOptions>>
|
||||
> {
|
||||
const { messages, stream } = params;
|
||||
|
||||
// Streaming
|
||||
if (stream) {
|
||||
const result = streamText({
|
||||
model: this.model,
|
||||
messages: this.toVercelMessages(messages),
|
||||
});
|
||||
return result.fullStream.pipeThrough(
|
||||
new TransformStream({
|
||||
async transform(message, controller): Promise<void> {
|
||||
switch (message.type) {
|
||||
case "text-delta":
|
||||
controller.enqueue({ raw: message, delta: message.textDelta });
|
||||
}
|
||||
},
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
// Non-streaming
|
||||
const result = await generateText({
|
||||
model: this.model,
|
||||
messages: this.toVercelMessages(messages),
|
||||
});
|
||||
|
||||
return {
|
||||
raw: result,
|
||||
message: {
|
||||
content: result.text,
|
||||
role: "assistant",
|
||||
options: result.toolCalls?.length
|
||||
? {
|
||||
toolCall: result.toolCalls.map(
|
||||
({ toolCallId, toolName, args }) => ({
|
||||
id: toolCallId,
|
||||
name: toolName,
|
||||
input: args,
|
||||
}),
|
||||
),
|
||||
}
|
||||
: {},
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -1,29 +1,36 @@
|
||||
import { Settings } from "@llamaindex/core/global";
|
||||
import type { BaseQueryEngine } from "@llamaindex/core/query-engine";
|
||||
import { type CoreTool, tool } from "ai";
|
||||
import { type CoreTool, type LanguageModelV1, tool } from "ai";
|
||||
import { z } from "zod";
|
||||
import { VercelLLM } from "./llm";
|
||||
|
||||
interface DatasourceIndex {
|
||||
asQueryEngine: () => BaseQueryEngine;
|
||||
}
|
||||
|
||||
export function llamaindex({
|
||||
model,
|
||||
index,
|
||||
description,
|
||||
}: {
|
||||
model: LanguageModelV1;
|
||||
index: DatasourceIndex;
|
||||
description?: string;
|
||||
}): CoreTool {
|
||||
const queryEngine = index.asQueryEngine();
|
||||
return tool({
|
||||
description: description ?? "Get information about your documents.",
|
||||
parameters: z.object({
|
||||
query: z
|
||||
.string()
|
||||
.describe("The query to get information about your documents."),
|
||||
}),
|
||||
execute: async ({ query }) => {
|
||||
const result = await queryEngine?.query({ query });
|
||||
return result?.message.content ?? "No result found in documents.";
|
||||
},
|
||||
const llm = new VercelLLM({ model });
|
||||
return Settings.withLLM<CoreTool>(llm, () => {
|
||||
const queryEngine = index.asQueryEngine();
|
||||
return tool({
|
||||
description: description ?? "Get information about your documents.",
|
||||
parameters: z.object({
|
||||
query: z
|
||||
.string()
|
||||
.describe("The query to get information about your documents."),
|
||||
}),
|
||||
execute: async ({ query }) => {
|
||||
const result = await queryEngine?.query({ query });
|
||||
return result?.message.content ?? "No result found in documents.";
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -54,7 +54,11 @@
|
||||
"build": "bunchee"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@llamaindex/env": "workspace:*",
|
||||
"@types/node": "^22.9.0",
|
||||
"bunchee": "5.6.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@llamaindex/env": "workspace:*"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { CustomEvent, randomUUID } from "@llamaindex/env";
|
||||
import {
|
||||
type AnyWorkflowEventConstructor,
|
||||
StartEvent,
|
||||
@@ -231,7 +232,7 @@ export class WorkflowContext<Start = string, Stop = string, Data = unknown>
|
||||
#requireEvent = async <T extends AnyWorkflowEventConstructor>(
|
||||
event: T,
|
||||
): Promise<InstanceType<T>> => {
|
||||
const requestId = crypto.randomUUID();
|
||||
const requestId = randomUUID();
|
||||
this.#queue.push({
|
||||
type: "requestEvent",
|
||||
id: requestId,
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
"emitDeclarationOnly": true,
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "bundler",
|
||||
"skipLibCheck": true,
|
||||
"types": ["node"],
|
||||
"resolveJsonModule": true
|
||||
},
|
||||
|
||||
Generated
+25
-84
@@ -128,7 +128,7 @@ importers:
|
||||
version: 10.1.0(react@18.3.1)
|
||||
'@llamaindex/chat-ui':
|
||||
specifier: 0.0.9
|
||||
version: 0.0.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
version: 0.0.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@llamaindex/cloud':
|
||||
specifier: workspace:*
|
||||
version: link:../../packages/cloud
|
||||
@@ -173,10 +173,10 @@ importers:
|
||||
version: 1.1.4(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@vercel/functions':
|
||||
specifier: ^1.5.0
|
||||
version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.693.0(@aws-sdk/client-sts@3.693.0))
|
||||
version: 1.5.0(@aws-sdk/credential-provider-web-identity@3.693.0)
|
||||
ai:
|
||||
specifier: ^3.4.33
|
||||
version: 3.4.33(openai@4.73.1(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.2.3))(svelte@5.2.3)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
version: 3.4.33(openai@4.73.1(zod@3.23.8))(react@18.3.1)(sswr@2.1.0)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
class-variance-authority:
|
||||
specifier: ^0.7.0
|
||||
version: 0.7.0
|
||||
@@ -257,7 +257,7 @@ importers:
|
||||
version: 1.23.1
|
||||
shiki-magic-move:
|
||||
specifier: ^0.5.0
|
||||
version: 0.5.0(react@18.3.1)(shiki@1.23.1)(svelte@5.2.3)(vue@3.5.12(typescript@5.6.3))
|
||||
version: 0.5.0(react@18.3.1)(shiki@1.23.1)(vue@3.5.12(typescript@5.6.3))
|
||||
swr:
|
||||
specifier: ^2.2.5
|
||||
version: 2.2.5(react@18.3.1)
|
||||
@@ -1136,9 +1136,6 @@ importers:
|
||||
specifier: ^3.23.8
|
||||
version: 3.23.8
|
||||
devDependencies:
|
||||
'@huggingface/transformers':
|
||||
specifier: ^3.0.2
|
||||
version: 3.0.2
|
||||
'@swc/cli':
|
||||
specifier: ^0.5.0
|
||||
version: 0.5.0(@swc/core@1.9.2(@swc/helpers@0.5.13))(chokidar@3.6.0)
|
||||
@@ -1480,6 +1477,9 @@ importers:
|
||||
|
||||
packages/workflow:
|
||||
devDependencies:
|
||||
'@llamaindex/env':
|
||||
specifier: workspace:*
|
||||
version: link:../env
|
||||
'@types/node':
|
||||
specifier: ^22.9.0
|
||||
version: 22.9.0
|
||||
@@ -5910,11 +5910,6 @@ packages:
|
||||
resolution: {integrity: sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
|
||||
acorn-typescript@1.4.13:
|
||||
resolution: {integrity: sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==}
|
||||
peerDependencies:
|
||||
acorn: '>=8.9.0'
|
||||
|
||||
acorn-walk@8.3.4:
|
||||
resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
@@ -7561,9 +7556,6 @@ packages:
|
||||
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
|
||||
engines: {node: '>=0.10'}
|
||||
|
||||
esrap@1.2.2:
|
||||
resolution: {integrity: sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==}
|
||||
|
||||
esrecurse@4.3.0:
|
||||
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
|
||||
engines: {node: '>=4.0'}
|
||||
@@ -8796,9 +8788,6 @@ packages:
|
||||
is-reference@1.2.1:
|
||||
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
|
||||
|
||||
is-reference@3.0.3:
|
||||
resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
|
||||
|
||||
is-regex@1.1.4:
|
||||
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -9151,9 +9140,6 @@ packages:
|
||||
resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
|
||||
engines: {node: '>= 12.13.0'}
|
||||
|
||||
locate-character@3.0.0:
|
||||
resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
|
||||
|
||||
locate-path@3.0.0:
|
||||
resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -12261,10 +12247,6 @@ packages:
|
||||
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
||||
engines: {node: '>= 0.4'}
|
||||
|
||||
svelte@5.2.3:
|
||||
resolution: {integrity: sha512-DRrWXdzo6+gfX9H/hQofQYyAtsGqC99+CFBvttImGt6gAy4Xzh0hHBrCHw5OtBgaPOdVGNW+S+mDcYcEsvTPOw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
svg-parser@2.0.4:
|
||||
resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==}
|
||||
|
||||
@@ -13356,9 +13338,6 @@ packages:
|
||||
youch@3.3.4:
|
||||
resolution: {integrity: sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==}
|
||||
|
||||
zimmerframe@1.1.2:
|
||||
resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
|
||||
|
||||
zod-to-json-schema@3.23.5:
|
||||
resolution: {integrity: sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==}
|
||||
peerDependencies:
|
||||
@@ -13454,13 +13433,11 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- zod
|
||||
|
||||
'@ai-sdk/svelte@0.0.57(svelte@5.2.3)(zod@3.23.8)':
|
||||
'@ai-sdk/svelte@0.0.57(zod@3.23.8)':
|
||||
dependencies:
|
||||
'@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
|
||||
sswr: 2.1.0(svelte@5.2.3)
|
||||
optionalDependencies:
|
||||
svelte: 5.2.3
|
||||
sswr: 2.1.0
|
||||
transitivePeerDependencies:
|
||||
- zod
|
||||
|
||||
@@ -16806,9 +16783,9 @@ snapshots:
|
||||
|
||||
'@leichtgewicht/ip-codec@2.0.5': {}
|
||||
|
||||
'@llamaindex/chat-ui@0.0.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@llamaindex/chat-ui@0.0.9(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@llamaindex/pdf-viewer': 1.2.0(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@llamaindex/pdf-viewer': 1.2.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@radix-ui/react-collapsible': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@radix-ui/react-hover-card': 1.1.2(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@radix-ui/react-icons': 1.3.2(react@18.3.1)
|
||||
@@ -16836,7 +16813,7 @@ snapshots:
|
||||
- react-dom
|
||||
- supports-color
|
||||
|
||||
'@llamaindex/pdf-viewer@1.2.0(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@llamaindex/pdf-viewer@1.2.0(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@wojtekmaj/react-hooks': 1.17.2(react@18.3.1)
|
||||
clsx: 2.1.1
|
||||
@@ -16846,7 +16823,7 @@ snapshots:
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
react-intersection-observer: 9.5.1(react@18.3.1)
|
||||
react-pdf: 9.1.1(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
react-pdf: 9.1.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
react-window: 1.8.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.12
|
||||
@@ -18914,7 +18891,7 @@ snapshots:
|
||||
|
||||
'@upstash/vector@1.1.7': {}
|
||||
|
||||
'@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.693.0(@aws-sdk/client-sts@3.693.0))':
|
||||
'@vercel/functions@1.5.0(@aws-sdk/credential-provider-web-identity@3.693.0)':
|
||||
optionalDependencies:
|
||||
'@aws-sdk/credential-provider-web-identity': 3.693.0(@aws-sdk/client-sts@3.693.0)
|
||||
|
||||
@@ -19154,10 +19131,6 @@ snapshots:
|
||||
dependencies:
|
||||
acorn: 8.14.0
|
||||
|
||||
acorn-typescript@1.4.13(acorn@8.14.0):
|
||||
dependencies:
|
||||
acorn: 8.14.0
|
||||
|
||||
acorn-walk@8.3.4:
|
||||
dependencies:
|
||||
acorn: 8.14.0
|
||||
@@ -19192,13 +19165,13 @@ snapshots:
|
||||
clean-stack: 2.2.0
|
||||
indent-string: 4.0.0
|
||||
|
||||
ai@3.4.33(openai@4.73.1(encoding@0.1.13)(zod@3.23.8))(react@18.3.1)(sswr@2.1.0(svelte@5.2.3))(svelte@5.2.3)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8):
|
||||
ai@3.4.33(openai@4.73.1(zod@3.23.8))(react@18.3.1)(sswr@2.1.0)(vue@3.5.12(typescript@5.6.3))(zod@3.23.8):
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 0.0.26
|
||||
'@ai-sdk/provider-utils': 1.0.22(zod@3.23.8)
|
||||
'@ai-sdk/react': 0.0.70(react@18.3.1)(zod@3.23.8)
|
||||
'@ai-sdk/solid': 0.0.54(zod@3.23.8)
|
||||
'@ai-sdk/svelte': 0.0.57(svelte@5.2.3)(zod@3.23.8)
|
||||
'@ai-sdk/svelte': 0.0.57(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.50(zod@3.23.8)
|
||||
'@ai-sdk/vue': 0.0.59(vue@3.5.12(typescript@5.6.3))(zod@3.23.8)
|
||||
'@opentelemetry/api': 1.9.0
|
||||
@@ -19210,8 +19183,7 @@ snapshots:
|
||||
optionalDependencies:
|
||||
openai: 4.73.1(encoding@0.1.13)(zod@3.23.8)
|
||||
react: 18.3.1
|
||||
sswr: 2.1.0(svelte@5.2.3)
|
||||
svelte: 5.2.3
|
||||
sswr: 2.1.0
|
||||
zod: 3.23.8
|
||||
transitivePeerDependencies:
|
||||
- solid-js
|
||||
@@ -20983,7 +20955,7 @@ snapshots:
|
||||
debug: 4.3.7
|
||||
enhanced-resolve: 5.17.1
|
||||
eslint: 9.15.0(jiti@2.4.0)
|
||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0(jiti@2.4.0))
|
||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.15.0(jiti@2.4.0)))(eslint@9.15.0(jiti@2.4.0))
|
||||
fast-glob: 3.3.2
|
||||
get-tsconfig: 4.8.1
|
||||
is-bun-module: 1.2.1
|
||||
@@ -20996,7 +20968,7 @@ snapshots:
|
||||
- eslint-import-resolver-webpack
|
||||
- supports-color
|
||||
|
||||
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0(jiti@2.4.0)):
|
||||
eslint-module-utils@2.12.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.15.0(jiti@2.4.0)))(eslint@9.15.0(jiti@2.4.0)):
|
||||
dependencies:
|
||||
debug: 3.2.7
|
||||
optionalDependencies:
|
||||
@@ -21018,7 +20990,7 @@ snapshots:
|
||||
doctrine: 2.1.0
|
||||
eslint: 9.15.0(jiti@2.4.0)
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.15.0(jiti@2.4.0))
|
||||
eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@2.4.0))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@9.15.0(jiti@2.4.0)))(eslint@9.15.0(jiti@2.4.0))
|
||||
hasown: 2.0.2
|
||||
is-core-module: 2.15.1
|
||||
is-glob: 4.0.3
|
||||
@@ -21157,11 +21129,6 @@ snapshots:
|
||||
dependencies:
|
||||
estraverse: 5.3.0
|
||||
|
||||
esrap@1.2.2:
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
'@types/estree': 1.0.6
|
||||
|
||||
esrecurse@4.3.0:
|
||||
dependencies:
|
||||
estraverse: 5.3.0
|
||||
@@ -22692,10 +22659,6 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/estree': 1.0.6
|
||||
|
||||
is-reference@3.0.3:
|
||||
dependencies:
|
||||
'@types/estree': 1.0.6
|
||||
|
||||
is-regex@1.1.4:
|
||||
dependencies:
|
||||
call-bind: 1.0.7
|
||||
@@ -23059,8 +23022,6 @@ snapshots:
|
||||
|
||||
loader-utils@3.3.1: {}
|
||||
|
||||
locate-character@3.0.0: {}
|
||||
|
||||
locate-path@3.0.0:
|
||||
dependencies:
|
||||
p-locate: 3.0.0
|
||||
@@ -24974,7 +24935,7 @@ snapshots:
|
||||
|
||||
pathval@2.0.0: {}
|
||||
|
||||
pdfjs-dist@4.4.168(encoding@0.1.13):
|
||||
pdfjs-dist@4.4.168:
|
||||
optionalDependencies:
|
||||
canvas: 2.11.2(encoding@0.1.13)
|
||||
path2d: 0.2.2
|
||||
@@ -25754,14 +25715,14 @@ snapshots:
|
||||
prop-types: 15.8.1
|
||||
react: 18.3.1
|
||||
|
||||
react-pdf@9.1.1(@types/react@18.3.12)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||
react-pdf@9.1.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
|
||||
dependencies:
|
||||
clsx: 2.1.1
|
||||
dequal: 2.0.3
|
||||
make-cancellable-promise: 1.3.2
|
||||
make-event-props: 1.6.2
|
||||
merge-refs: 1.3.0(@types/react@18.3.12)
|
||||
pdfjs-dist: 4.4.168(encoding@0.1.13)
|
||||
pdfjs-dist: 4.4.168
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
tiny-invariant: 1.3.3
|
||||
@@ -26624,14 +26585,13 @@ snapshots:
|
||||
interpret: 1.4.0
|
||||
rechoir: 0.6.2
|
||||
|
||||
shiki-magic-move@0.5.0(react@18.3.1)(shiki@1.23.1)(svelte@5.2.3)(vue@3.5.12(typescript@5.6.3)):
|
||||
shiki-magic-move@0.5.0(react@18.3.1)(shiki@1.23.1)(vue@3.5.12(typescript@5.6.3)):
|
||||
dependencies:
|
||||
diff-match-patch-es: 0.1.1
|
||||
ohash: 1.1.4
|
||||
optionalDependencies:
|
||||
react: 18.3.1
|
||||
shiki: 1.23.1
|
||||
svelte: 5.2.3
|
||||
vue: 3.5.12(typescript@5.6.3)
|
||||
|
||||
shiki@1.23.1:
|
||||
@@ -26789,9 +26749,8 @@ snapshots:
|
||||
|
||||
srcset@4.0.0: {}
|
||||
|
||||
sswr@2.1.0(svelte@5.2.3):
|
||||
sswr@2.1.0:
|
||||
dependencies:
|
||||
svelte: 5.2.3
|
||||
swrev: 4.0.0
|
||||
|
||||
stack-trace@0.0.10: {}
|
||||
@@ -27021,22 +26980,6 @@ snapshots:
|
||||
|
||||
supports-preserve-symlinks-flag@1.0.0: {}
|
||||
|
||||
svelte@5.2.3:
|
||||
dependencies:
|
||||
'@ampproject/remapping': 2.3.0
|
||||
'@jridgewell/sourcemap-codec': 1.5.0
|
||||
'@types/estree': 1.0.6
|
||||
acorn: 8.14.0
|
||||
acorn-typescript: 1.4.13(acorn@8.14.0)
|
||||
aria-query: 5.3.2
|
||||
axobject-query: 4.1.0
|
||||
esm-env: 1.1.4
|
||||
esrap: 1.2.2
|
||||
is-reference: 3.0.3
|
||||
locate-character: 3.0.0
|
||||
magic-string: 0.30.12
|
||||
zimmerframe: 1.1.2
|
||||
|
||||
svg-parser@2.0.4: {}
|
||||
|
||||
svgo@3.3.2:
|
||||
@@ -28372,8 +28315,6 @@ snapshots:
|
||||
mustache: 4.2.0
|
||||
stacktracey: 2.1.8
|
||||
|
||||
zimmerframe@1.1.2: {}
|
||||
|
||||
zod-to-json-schema@3.23.5(zod@3.23.8):
|
||||
dependencies:
|
||||
zod: 3.23.8
|
||||
|
||||
Reference in New Issue
Block a user