diff --git a/.changeset/happy-lamps-rush.md b/.changeset/happy-lamps-rush.md new file mode 100644 index 0000000000000000000000000000000000000000..b47deeb2cfc1e4486c3ee1abcd416b7388c32240 --- /dev/null +++ b/.changeset/happy-lamps-rush.md @@ -0,0 +1,5 @@ +--- +"create-llama": patch +--- + +chore: update to llamaindex 0.4.3 diff --git a/templates/types/streaming/express/package.json b/templates/types/streaming/express/package.json index 4f6a3a4ca9683949e0837121e468af393922afe3..32a8f5334b8748ec186c027ce67c5c358338f304 100644 --- a/templates/types/streaming/express/package.json +++ b/templates/types/streaming/express/package.json @@ -20,7 +20,7 @@ "dotenv": "^16.3.1", "duck-duck-scrape": "^2.2.5", "express": "^4.18.2", - "llamaindex": "0.3.16", + "llamaindex": "0.4.3", "pdf2json": "3.0.5", "ajv": "^8.12.0", "@e2b/code-interpreter": "^0.0.5", diff --git a/templates/types/streaming/express/src/controllers/llamaindex-stream.ts b/templates/types/streaming/express/src/controllers/llamaindex-stream.ts index f2f4b5a33f60aedb4fb8598e3e2757328280af7c..d01e7d91afb9cd2afa50aec03dee47ef3de8f65f 100644 --- a/templates/types/streaming/express/src/controllers/llamaindex-stream.ts +++ b/templates/types/streaming/express/src/controllers/llamaindex-stream.ts @@ -7,20 +7,12 @@ import { type AIStreamCallbacksAndOptions, } from "ai"; import { + EngineResponse, MessageContent, MessageContentDetail, - Metadata, - NodeWithScore, - Response, - ToolCallLLMMessageOptions, } from "llamaindex"; -import { AgentStreamChatResponse } from "llamaindex/agent/base"; -import { CsvFile, appendSourceData } from "./stream-helper"; - -type LlamaIndexResponse = - | AgentStreamChatResponse<ToolCallLLMMessageOptions> - | Response; +import { CsvFile } from "./stream-helper"; export const convertMessageContent = ( content: string, @@ -86,39 +78,19 @@ const convertAnnotations = ( return content; }; -function createParser( - res: AsyncIterable<LlamaIndexResponse>, - data: StreamData, -) { +function createParser(res: AsyncIterable<EngineResponse>, data: StreamData) { const it = res[Symbol.asyncIterator](); const trimStartOfStream = trimStartOfStreamHelper(); - let sourceNodes: NodeWithScore<Metadata>[] | undefined; return new ReadableStream<string>({ async pull(controller): Promise<void> { const { value, done } = await it.next(); if (done) { - if (sourceNodes) { - appendSourceData(data, sourceNodes); - } controller.close(); data.close(); return; } - - let delta; - if (value instanceof Response) { - // handle Response type - if (value.sourceNodes) { - // get source nodes from the first response - sourceNodes = value.sourceNodes; - } - delta = value.response ?? ""; - } else { - // handle other types - delta = value.response.delta; - } - const text = trimStartOfStream(delta ?? ""); + const text = trimStartOfStream(value.delta ?? ""); if (text) { controller.enqueue(text); } @@ -127,7 +99,7 @@ function createParser( } export function LlamaIndexStream( - response: AsyncIterable<LlamaIndexResponse>, + response: AsyncIterable<EngineResponse>, data: StreamData, opts?: { callbacks?: AIStreamCallbacksAndOptions; diff --git a/templates/types/streaming/express/src/controllers/stream-helper.ts b/templates/types/streaming/express/src/controllers/stream-helper.ts index 15527ba8701eb7eede244426d20055c536cb9cba..e74610ed1a9f912a6051786dd51e224bd1a52a91 100644 --- a/templates/types/streaming/express/src/controllers/stream-helper.ts +++ b/templates/types/streaming/express/src/controllers/stream-helper.ts @@ -84,8 +84,9 @@ export function createStreamTimeout(stream: StreamData) { export function createCallbackManager(stream: StreamData) { const callbackManager = new CallbackManager(); - callbackManager.on("retrieve", (data) => { - const { nodes, query } = data.detail; + callbackManager.on("retrieve-end", (data) => { + const { nodes, query } = data.detail.payload; + appendSourceData(stream, nodes); appendEventData(stream, `Retrieving context for query: '${query}'`); appendEventData( stream, diff --git a/templates/types/streaming/nextjs/app/api/chat/llamaindex-stream.ts b/templates/types/streaming/nextjs/app/api/chat/llamaindex-stream.ts index f2f4b5a33f60aedb4fb8598e3e2757328280af7c..d01e7d91afb9cd2afa50aec03dee47ef3de8f65f 100644 --- a/templates/types/streaming/nextjs/app/api/chat/llamaindex-stream.ts +++ b/templates/types/streaming/nextjs/app/api/chat/llamaindex-stream.ts @@ -7,20 +7,12 @@ import { type AIStreamCallbacksAndOptions, } from "ai"; import { + EngineResponse, MessageContent, MessageContentDetail, - Metadata, - NodeWithScore, - Response, - ToolCallLLMMessageOptions, } from "llamaindex"; -import { AgentStreamChatResponse } from "llamaindex/agent/base"; -import { CsvFile, appendSourceData } from "./stream-helper"; - -type LlamaIndexResponse = - | AgentStreamChatResponse<ToolCallLLMMessageOptions> - | Response; +import { CsvFile } from "./stream-helper"; export const convertMessageContent = ( content: string, @@ -86,39 +78,19 @@ const convertAnnotations = ( return content; }; -function createParser( - res: AsyncIterable<LlamaIndexResponse>, - data: StreamData, -) { +function createParser(res: AsyncIterable<EngineResponse>, data: StreamData) { const it = res[Symbol.asyncIterator](); const trimStartOfStream = trimStartOfStreamHelper(); - let sourceNodes: NodeWithScore<Metadata>[] | undefined; return new ReadableStream<string>({ async pull(controller): Promise<void> { const { value, done } = await it.next(); if (done) { - if (sourceNodes) { - appendSourceData(data, sourceNodes); - } controller.close(); data.close(); return; } - - let delta; - if (value instanceof Response) { - // handle Response type - if (value.sourceNodes) { - // get source nodes from the first response - sourceNodes = value.sourceNodes; - } - delta = value.response ?? ""; - } else { - // handle other types - delta = value.response.delta; - } - const text = trimStartOfStream(delta ?? ""); + const text = trimStartOfStream(value.delta ?? ""); if (text) { controller.enqueue(text); } @@ -127,7 +99,7 @@ function createParser( } export function LlamaIndexStream( - response: AsyncIterable<LlamaIndexResponse>, + response: AsyncIterable<EngineResponse>, data: StreamData, opts?: { callbacks?: AIStreamCallbacksAndOptions; diff --git a/templates/types/streaming/nextjs/app/api/chat/stream-helper.ts b/templates/types/streaming/nextjs/app/api/chat/stream-helper.ts index 15527ba8701eb7eede244426d20055c536cb9cba..e74610ed1a9f912a6051786dd51e224bd1a52a91 100644 --- a/templates/types/streaming/nextjs/app/api/chat/stream-helper.ts +++ b/templates/types/streaming/nextjs/app/api/chat/stream-helper.ts @@ -84,8 +84,9 @@ export function createStreamTimeout(stream: StreamData) { export function createCallbackManager(stream: StreamData) { const callbackManager = new CallbackManager(); - callbackManager.on("retrieve", (data) => { - const { nodes, query } = data.detail; + callbackManager.on("retrieve-end", (data) => { + const { nodes, query } = data.detail.payload; + appendSourceData(stream, nodes); appendEventData(stream, `Retrieving context for query: '${query}'`); appendEventData( stream, diff --git a/templates/types/streaming/nextjs/package.json b/templates/types/streaming/nextjs/package.json index 74f2b852cdd5d2e610e8925478d01c1840496f5b..f4d003a28b01682c11f505aeebd4ca131efff0fe 100644 --- a/templates/types/streaming/nextjs/package.json +++ b/templates/types/streaming/nextjs/package.json @@ -10,6 +10,9 @@ "lint": "next lint" }, "dependencies": { + "@apidevtools/swagger-parser": "^10.1.0", + "@e2b/code-interpreter": "^0.0.5", + "@llamaindex/pdf-viewer": "^1.1.1", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-hover-card": "^1.0.7", "@radix-ui/react-slot": "^1.0.2", @@ -19,45 +22,43 @@ "clsx": "^2.1.1", "dotenv": "^16.3.1", "duck-duck-scrape": "^2.2.5", - "llamaindex": "0.3.16", + "formdata-node": "^6.0.3", + "got": "^14.4.1", + "llamaindex": "0.4.3", "lucide-react": "^0.294.0", - "next": "^14.0.3", + "next": "^14.2.4", "pdf2json": "3.0.5", "react": "^18.2.0", "react-dom": "^18.2.0", "react-markdown": "^8.0.7", "react-syntax-highlighter": "^15.5.0", + "rehype-katex": "^7.0.0", "remark": "^14.0.3", "remark-code-import": "^1.2.0", "remark-gfm": "^3.0.1", "remark-math": "^5.1.1", - "rehype-katex": "^7.0.0", "supports-color": "^8.1.1", "tailwind-merge": "^2.1.0", - "vaul": "^0.9.1", - "@llamaindex/pdf-viewer": "^1.1.1", - "@e2b/code-interpreter": "^0.0.5", + "tiktoken": "^1.0.15", "uuid": "^9.0.1", - "got": "^14.4.1", - "@apidevtools/swagger-parser": "^10.1.0", - "formdata-node": "^6.0.3" + "vaul": "^0.9.1" }, "devDependencies": { "@types/node": "^20.10.3", "@types/react": "^18.2.42", "@types/react-dom": "^18.2.17", "@types/react-syntax-highlighter": "^15.5.11", + "@types/uuid": "^9.0.8", "autoprefixer": "^10.4.16", "cross-env": "^7.0.3", "eslint": "^8.55.0", - "eslint-config-next": "^14.0.3", + "eslint-config-next": "^14.2.4", "eslint-config-prettier": "^8.10.0", "postcss": "^8.4.32", "prettier": "^3.2.5", "prettier-plugin-organize-imports": "^3.2.4", "tailwindcss": "^3.3.6", "tsx": "^4.7.2", - "typescript": "^5.3.2", - "@types/uuid": "^9.0.8" + "typescript": "^5.3.2" } }