mirror of
https://github.com/run-llama/LlamaIndexTS.git
synced 2026-07-09 03:23:09 -04:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 93f56fb6a9 | |||
| ac06859b8e | |||
| 5cf2735d39 | |||
| c08dc73bb0 | |||
| bb4f176408 | |||
| bfa31eef65 |
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@llamaindex/cloud": patch
|
||||
---
|
||||
|
||||
chore: bump sdk openapi.json
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
"@llamaindex/azure": patch
|
||||
---
|
||||
|
||||
Add `fromConnectionString` method to azure storage libs to track the usage vCore.
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
"@llamaindex/cloud": patch
|
||||
"@llamaindex/community": patch
|
||||
"@llamaindex/core": patch
|
||||
"@llamaindex/readers": patch
|
||||
---
|
||||
|
||||
fix: add retry handling logic to parser reader and fix lint issues
|
||||
@@ -1,75 +1,5 @@
|
||||
# @llamaindex/doc
|
||||
|
||||
## 0.2.4
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 9c63f3f: Add support for openai responses api
|
||||
- Updated dependencies [9c63f3f]
|
||||
- Updated dependencies [c515a32]
|
||||
- @llamaindex/openai@0.3.0
|
||||
- @llamaindex/core@0.6.2
|
||||
- @llamaindex/workflow@1.0.2
|
||||
- llamaindex@0.9.15
|
||||
- @llamaindex/cloud@4.0.2
|
||||
- @llamaindex/node-parser@2.0.2
|
||||
- @llamaindex/readers@3.0.2
|
||||
|
||||
## 0.2.3
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 648cfb5: Add support for supabase vector store
|
||||
Added doc for the supbase vector store
|
||||
- Updated dependencies [1b6f368]
|
||||
- Updated dependencies [eaf326e]
|
||||
- Updated dependencies [9d951b2]
|
||||
- @llamaindex/core@0.6.1
|
||||
- llamaindex@0.9.14
|
||||
- @llamaindex/cloud@4.0.1
|
||||
- @llamaindex/node-parser@2.0.1
|
||||
- @llamaindex/openai@0.2.1
|
||||
- @llamaindex/readers@3.0.1
|
||||
- @llamaindex/workflow@1.0.1
|
||||
|
||||
## 0.2.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- e98033e: docs: correct the number of indexes
|
||||
|
||||
## 0.2.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
|
||||
## 0.2.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- f1db9b3: Adding an options parameter to vercel tool to tailor responses
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 21bebfc: Expose more content to fix the issue with unavailable documentation links, and adjust the documentation based on the latest code.
|
||||
- 2b39cef: Added documentation for structured output in openai and ollama
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [93bc0ff]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [bf56fc0]
|
||||
- Updated dependencies [f8a86e4]
|
||||
- Updated dependencies [5189b44]
|
||||
- Updated dependencies [58a9446]
|
||||
- @llamaindex/readers@3.0.0
|
||||
- @llamaindex/core@0.6.0
|
||||
- @llamaindex/openai@0.2.0
|
||||
- @llamaindex/cloud@4.0.0
|
||||
- @llamaindex/workflow@1.0.0
|
||||
- llamaindex@0.9.12
|
||||
- @llamaindex/node-parser@2.0.0
|
||||
|
||||
## 0.1.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -4,8 +4,6 @@ const withMDX = createMDX();
|
||||
|
||||
/** @type {import('next').NextConfig} */
|
||||
const config = {
|
||||
// default timeout for static generation is 60s, but we need to increase it to 10 minutes due to the large number of document pages
|
||||
staticPageGenerationTimeout: 600,
|
||||
reactStrictMode: true,
|
||||
eslint: {
|
||||
ignoreDuringBuilds: true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/doc",
|
||||
"version": "0.2.4",
|
||||
"version": "0.1.11",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"postinstall": "fumadocs-mdx",
|
||||
|
||||
@@ -162,12 +162,7 @@ async function validateLinks(): Promise<LinkValidationResult[]> {
|
||||
const invalidLinks = links.filter(({ link }) => {
|
||||
// Check if the link exists in valid routes
|
||||
// First normalize the link (remove any query string or hash)
|
||||
const baseLink = link.split("?")[0].split("#")[0];
|
||||
// Remove the trailing slash if present.
|
||||
// This works with links like "api/interfaces/MetadataFilter#operator" and "api/interfaces/MetadataFilter/#operator".
|
||||
const normalizedLink = baseLink.endsWith("/")
|
||||
? baseLink.slice(0, -1)
|
||||
: baseLink;
|
||||
const normalizedLink = link.split("#")[0].split("?")[0];
|
||||
|
||||
// Remove llamaindex/ prefix if it exists as it's the root of the docs
|
||||
let routePath = normalizedLink;
|
||||
@@ -197,7 +192,8 @@ async function main() {
|
||||
|
||||
try {
|
||||
// Check for invalid internal links
|
||||
const validationResults: LinkValidationResult[] = await validateLinks();
|
||||
const validationResults: LinkValidationResult[] = [];
|
||||
await validateLinks();
|
||||
// Check for relative links
|
||||
const relativeLinksResults = await findRelativeLinks();
|
||||
|
||||
|
||||
@@ -84,7 +84,6 @@ const queryTool = llamaindex({
|
||||
model: openai("gpt-4"),
|
||||
index,
|
||||
description: "Search through the documents",
|
||||
options: { fields: ["sourceNodes", "messages"]}
|
||||
});
|
||||
|
||||
// Use the tool with Vercel's AI SDK
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
title: Index
|
||||
---
|
||||
|
||||
An index is the basic container and organization for your data. LlamaIndex.TS supports three indexes:
|
||||
An index is the basic container and organization for your data. LlamaIndex.TS supports two indexes:
|
||||
|
||||
- `VectorStoreIndex` - will send the top-k `Node`s to the LLM when generating a response. The default top-k is 2.
|
||||
- `SummaryIndex` - will send every `Node` in the index to the LLM in order to generate a response
|
||||
|
||||
@@ -35,7 +35,7 @@ Currently, the following readers are mapped to specific file types:
|
||||
|
||||
- [TextFileReader](/docs/api/classes/TextFileReader): `.txt`
|
||||
- [PDFReader](/docs/api/classes/PDFReader): `.pdf`
|
||||
- [CSVReader](/docs/api/classes/CSVReader): `.csv`
|
||||
- [PapaCSVReader](/docs/api/classes/PapaCSVReader): `.csv`
|
||||
- [MarkdownReader](/docs/api/classes/MarkdownReader): `.md`
|
||||
- [DocxReader](/docs/api/classes/DocxReader): `.docx`
|
||||
- [HTMLReader](/docs/api/classes/HTMLReader): `.htm`, `.html`
|
||||
|
||||
@@ -12,5 +12,5 @@ Check the [LlamaIndexTS Github](https://github.com/run-llama/LlamaIndexTS) for t
|
||||
|
||||
## API Reference
|
||||
|
||||
- [BaseChatStore](/docs/api/classes/BaseChatStore)
|
||||
- [BaseChatStore](/docs/api/interfaces/BaseChatStore)
|
||||
|
||||
|
||||
@@ -56,10 +56,10 @@ const vectorStore = new QdrantVectorStore({
|
||||
|
||||
```ts
|
||||
const document = new Document({ text: essay, id_: path });
|
||||
const storageContext = await storageContextFromDefaults({ vectorStore });
|
||||
const index = await VectorStoreIndex.fromDocuments([document], {
|
||||
storageContext,
|
||||
});
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([document], {
|
||||
vectorStore,
|
||||
});
|
||||
```
|
||||
|
||||
## Query the index
|
||||
@@ -91,11 +91,11 @@ async function main() {
|
||||
});
|
||||
|
||||
const document = new Document({ text: essay, id_: path });
|
||||
const storageContext = await storageContextFromDefaults({ vectorStore });
|
||||
|
||||
const index = await VectorStoreIndex.fromDocuments([document], {
|
||||
storageContext,
|
||||
vectorStore,
|
||||
});
|
||||
|
||||
|
||||
const queryEngine = index.asQueryEngine();
|
||||
|
||||
const response = await queryEngine.query({
|
||||
|
||||
@@ -1,166 +0,0 @@
|
||||
---
|
||||
title: Supabase Vector Store
|
||||
---
|
||||
|
||||
[supabase.com](https://supabase.com/)
|
||||
|
||||
To use this vector store, you need a Supabase project. You can create one at [supabase.com](https://supabase.com/).
|
||||
|
||||
## Installation
|
||||
|
||||
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
|
||||
|
||||
<Tabs groupId="install" items={["npm", "yarn", "pnpm"]} persist>
|
||||
```shell tab="npm"
|
||||
npm install llamaindex @llamaindex/supabase
|
||||
```
|
||||
|
||||
```shell tab="yarn"
|
||||
yarn add llamaindex @llamaindex/supabase
|
||||
```
|
||||
|
||||
```shell tab="pnpm"
|
||||
pnpm add llamaindex @llamaindex/supabase
|
||||
```
|
||||
</Tabs>
|
||||
|
||||
## Database Setup
|
||||
|
||||
Before using the vector store, you need to:
|
||||
1. Enable the `pgvector` extension
|
||||
2. Create a table for storing vectors
|
||||
3. Create a vector similarity search function
|
||||
|
||||
```sql
|
||||
create table documents (
|
||||
id uuid primary key,
|
||||
content text,
|
||||
metadata jsonb,
|
||||
embedding vector(1536)
|
||||
);
|
||||
```
|
||||
|
||||
-- Create a function for similarity search
|
||||
```sql
|
||||
create function match_documents (
|
||||
query_embedding vector(1536),
|
||||
match_count int
|
||||
) returns table (
|
||||
id uuid,
|
||||
content text,
|
||||
metadata jsonb,
|
||||
embedding vector(1536),
|
||||
similarity float
|
||||
)
|
||||
language plpgsql
|
||||
as $$
|
||||
begin
|
||||
return query
|
||||
select
|
||||
id,
|
||||
content,
|
||||
metadata,
|
||||
embedding,
|
||||
1 - (embedding <=> query_embedding) as similarity
|
||||
from documents
|
||||
order by embedding <=> query_embedding
|
||||
limit match_count;
|
||||
end;
|
||||
$$;
|
||||
```
|
||||
|
||||
## Importing the modules
|
||||
|
||||
```ts
|
||||
import { Document, VectorStoreIndex } from "llamaindex";
|
||||
import { SupabaseVectorStore } from "@llamaindex/supabase";
|
||||
```
|
||||
|
||||
## Setup Supabase
|
||||
|
||||
```ts
|
||||
const vectorStore = new SupabaseVectorStore({
|
||||
supabaseUrl: process.env.SUPABASE_URL,
|
||||
supabaseKey: process.env.SUPABASE_KEY,
|
||||
table: "documents",
|
||||
});
|
||||
```
|
||||
|
||||
## Setup the index
|
||||
|
||||
```ts
|
||||
const documents = [
|
||||
new Document({
|
||||
text: "Sample document text",
|
||||
metadata: { source: "example" }
|
||||
})
|
||||
];
|
||||
|
||||
const storageContext = await storageContextFromDefaults({ vectorStore });
|
||||
const index = await VectorStoreIndex.fromDocuments(documents, {
|
||||
storageContext,
|
||||
});
|
||||
```
|
||||
|
||||
## Query the index
|
||||
|
||||
```ts
|
||||
const queryEngine = index.asQueryEngine();
|
||||
|
||||
const response = await queryEngine.query({
|
||||
query: "What is in the document?",
|
||||
});
|
||||
|
||||
// Output response
|
||||
console.log(response.toString());
|
||||
```
|
||||
|
||||
## Full code
|
||||
|
||||
```ts
|
||||
import { Document, VectorStoreIndex, storageContextFromDefaults } from "llamaindex";
|
||||
import { SupabaseVectorStore } from "@llamaindex/supabase";
|
||||
|
||||
async function main() {
|
||||
// Initialize the vector store
|
||||
const vectorStore = new SupabaseVectorStore({
|
||||
supabaseUrl: process.env.SUPABASE_URL,
|
||||
supabaseKey: process.env.SUPABASE_KEY,
|
||||
table: "documents",
|
||||
});
|
||||
|
||||
// Create sample documents
|
||||
const documents = [
|
||||
new Document({
|
||||
text: "Vector search enables semantic similarity search",
|
||||
metadata: {
|
||||
source: "research_paper",
|
||||
author: "Jane Smith",
|
||||
},
|
||||
}),
|
||||
];
|
||||
|
||||
// Create storage context
|
||||
const storageContext = await storageContextFromDefaults({ vectorStore });
|
||||
|
||||
// Create and store embeddings
|
||||
const index = await VectorStoreIndex.fromDocuments(documents, {
|
||||
storageContext,
|
||||
});
|
||||
|
||||
// Query the index
|
||||
const queryEngine = index.asQueryEngine();
|
||||
const response = await queryEngine.query({
|
||||
query: "What is vector search?",
|
||||
});
|
||||
|
||||
// Output response
|
||||
console.log(response.toString());
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
- [SupabaseVectorStore](/docs/api/classes/SupabaseVectorStore)
|
||||
@@ -74,4 +74,4 @@ the response is not correct with a score of 2.5
|
||||
|
||||
## API Reference
|
||||
|
||||
- [CorrectnessEvaluator](/docs/api/classes/CorrectnessEvaluator)
|
||||
- [CorrectnessEvaluator](/docs/api/classes/CorrectnessEvaluator)
|
||||
|
||||
@@ -55,35 +55,6 @@ const results = await queryEngine.query({
|
||||
});
|
||||
```
|
||||
|
||||
## Using JSON Response Format
|
||||
|
||||
You can configure Ollama to return responses in JSON format:
|
||||
|
||||
```ts
|
||||
import { Ollama } from "@llamaindex/llms/ollama";
|
||||
import { z } from "zod";
|
||||
|
||||
// Simple JSON format
|
||||
const llm = new Ollama({
|
||||
model: "llama2",
|
||||
temperature: 0,
|
||||
responseFormat: { type: "json_object" }
|
||||
});
|
||||
|
||||
// Using Zod schema for validation
|
||||
const responseSchema = z.object({
|
||||
summary: z.string(),
|
||||
topics: z.array(z.string()),
|
||||
sentiment: z.enum(["positive", "negative", "neutral"])
|
||||
});
|
||||
|
||||
const llm = new Ollama({
|
||||
model: "llama2",
|
||||
temperature: 0,
|
||||
responseFormat: responseSchema
|
||||
});
|
||||
```
|
||||
|
||||
## Full Example
|
||||
|
||||
```ts
|
||||
|
||||
@@ -46,289 +46,6 @@ or
|
||||
Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0, apiKey: <YOUR_API_KEY>, baseURL: "https://api.scaleway.ai/v1" });
|
||||
```
|
||||
|
||||
## Using OpenAI Responses API
|
||||
|
||||
The OpenAI Responses API provides enhanced functionality for handling complex interactions, including built-in tools, annotations, and streaming responses. Here's how to use it:
|
||||
|
||||
### Basic Setup
|
||||
|
||||
```ts
|
||||
import { openaiResponses } from "@llamaindex/openai";
|
||||
|
||||
const llm = openaiResponses({
|
||||
model: "gpt-4o",
|
||||
temperature: 0.1,
|
||||
maxOutputTokens: 1000
|
||||
});
|
||||
```
|
||||
|
||||
### Message Content Types
|
||||
|
||||
The API supports different types of message content, including text and images:
|
||||
|
||||
```ts
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: [
|
||||
{
|
||||
type: "input_text",
|
||||
text: "What's in this image?"
|
||||
},
|
||||
{
|
||||
type: "input_image",
|
||||
image_url: "https://example.com/image.jpg",
|
||||
detail: "auto" // Optional: can be "auto", "low", or "high"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
```
|
||||
|
||||
### Advanced Features
|
||||
|
||||
#### Built-in Tools
|
||||
|
||||
```ts
|
||||
const llm = openaiResponses({
|
||||
model: "gpt-4o",
|
||||
builtInTools: [
|
||||
{
|
||||
type: "function",
|
||||
name: "search_files",
|
||||
description: "Search through available files"
|
||||
}
|
||||
],
|
||||
strict: true // Enable strict mode for tool calls
|
||||
});
|
||||
```
|
||||
|
||||
#### Response Tracking and Storage
|
||||
|
||||
```ts
|
||||
const llm = openaiResponses({
|
||||
trackPreviousResponses: true, // Enable response tracking
|
||||
store: true, // Store responses for future reference
|
||||
user: "user-123", // Associate responses with a user
|
||||
callMetadata: { // Add custom metadata
|
||||
sessionId: "session-123",
|
||||
context: "customer-support"
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
#### Streaming Responses
|
||||
|
||||
```ts
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: "Generate a long response"
|
||||
}
|
||||
],
|
||||
stream: true // Enable streaming
|
||||
});
|
||||
|
||||
for await (const chunk of response) {
|
||||
console.log(chunk.delta); // Process each chunk of the response
|
||||
}
|
||||
```
|
||||
|
||||
### Configuration Options
|
||||
|
||||
The OpenAI Responses API supports various configuration options:
|
||||
|
||||
```ts
|
||||
const llm = openaiResponses({
|
||||
// Model and basic settings
|
||||
model: "gpt-4o",
|
||||
temperature: 0.1,
|
||||
topP: 1,
|
||||
maxOutputTokens: 1000,
|
||||
|
||||
// API configuration
|
||||
apiKey: "your-api-key",
|
||||
baseURL: "custom-endpoint",
|
||||
maxRetries: 10,
|
||||
timeout: 60000,
|
||||
|
||||
// Response handling
|
||||
trackPreviousResponses: false,
|
||||
store: false,
|
||||
strict: false,
|
||||
|
||||
// Additional options
|
||||
instructions: "Custom instructions for the model",
|
||||
truncation: "auto", // Can be "auto", "disabled", or null
|
||||
include: ["citations", "reasoning"] // Specify what to include in responses
|
||||
});
|
||||
```
|
||||
|
||||
### Response Structure
|
||||
|
||||
The API returns responses with rich metadata and optional annotations:
|
||||
|
||||
```ts
|
||||
interface ResponseStructure {
|
||||
message: {
|
||||
content: string;
|
||||
role: "assistant";
|
||||
options: {
|
||||
built_in_tool_calls: Array<ToolCall>;
|
||||
annotations?: Array<Citation | URLCitation | FilePath>;
|
||||
refusal?: string;
|
||||
reasoning?: ReasoningItem;
|
||||
usage?: ResponseUsage;
|
||||
toolCall?: Array<PartialToolCall>;
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Best Practices
|
||||
|
||||
1. Use `trackPreviousResponses` when you need conversation continuity
|
||||
2. Enable `strict` mode when using tools to ensure accurate function calls
|
||||
3. Set appropriate `maxOutputTokens` to control response length
|
||||
4. Use `annotations` to track citations and references in responses
|
||||
5. Implement error handling for potential API failures and retries
|
||||
|
||||
## Using JSON Response Format
|
||||
|
||||
You can configure OpenAI to return responses in JSON format:
|
||||
|
||||
```ts
|
||||
Settings.llm = new OpenAI({
|
||||
model: "gpt-4o",
|
||||
temperature: 0,
|
||||
responseFormat: { type: "json_object" }
|
||||
});
|
||||
|
||||
// You can also use a Zod schema to validate the response structure
|
||||
import { z } from "zod";
|
||||
|
||||
const responseSchema = z.object({
|
||||
summary: z.string(),
|
||||
topics: z.array(z.string()),
|
||||
sentiment: z.enum(["positive", "negative", "neutral"])
|
||||
});
|
||||
|
||||
Settings.llm = new OpenAI({
|
||||
model: "gpt-4o",
|
||||
temperature: 0,
|
||||
responseFormat: responseSchema
|
||||
});
|
||||
```
|
||||
|
||||
## Response Formats
|
||||
|
||||
The OpenAI LLM supports different response formats to structure the output in specific ways. There are two main approaches to formatting responses:
|
||||
|
||||
### 1. JSON Object Format
|
||||
|
||||
The simplest way to get structured JSON responses is using the `json_object` response format:
|
||||
|
||||
```ts
|
||||
Settings.llm = new OpenAI({
|
||||
model: "gpt-4o",
|
||||
temperature: 0,
|
||||
responseFormat: { type: "json_object" }
|
||||
});
|
||||
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content: "You are a helpful assistant that outputs JSON."
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: "Summarize this meeting transcript"
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// Response will be valid JSON
|
||||
console.log(response.message.content);
|
||||
```
|
||||
|
||||
### 2. Schema Validation with Zod
|
||||
|
||||
For more robust type safety and validation, you can use Zod schemas to define the expected response structure:
|
||||
|
||||
```ts
|
||||
import { z } from "zod";
|
||||
|
||||
// Define the response schema
|
||||
const meetingSchema = z.object({
|
||||
summary: z.string(),
|
||||
participants: z.array(z.string()),
|
||||
actionItems: z.array(z.string()),
|
||||
nextSteps: z.string()
|
||||
});
|
||||
|
||||
// Configure the LLM with the schema
|
||||
Settings.llm = new OpenAI({
|
||||
model: "gpt-4o",
|
||||
temperature: 0,
|
||||
responseFormat: meetingSchema
|
||||
});
|
||||
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: "Summarize this meeting transcript"
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
// Response will be typed and validated according to the schema
|
||||
const result = response.message.content;
|
||||
console.log(result.summary);
|
||||
console.log(result.actionItems);
|
||||
```
|
||||
|
||||
### Response Format Options
|
||||
|
||||
The response format can be configured in two ways:
|
||||
|
||||
1. At LLM initialization:
|
||||
```ts
|
||||
const llm = new OpenAI({
|
||||
model: "gpt-4o",
|
||||
responseFormat: { type: "json_object" } // or a Zod schema
|
||||
});
|
||||
```
|
||||
|
||||
2. Per request:
|
||||
```ts
|
||||
const response = await llm.chat({
|
||||
messages: [...],
|
||||
responseFormat: { type: "json_object" } // or a Zod schema
|
||||
});
|
||||
```
|
||||
|
||||
The response format options are:
|
||||
|
||||
- `{ type: "json_object" }` - Returns responses as JSON objects
|
||||
- `zodSchema` - A Zod schema that defines and validates the response structure
|
||||
|
||||
### Best Practices
|
||||
|
||||
1. Use JSON object format for simple structured responses
|
||||
2. Use Zod schemas when you need:
|
||||
- Type safety
|
||||
- Response validation
|
||||
- Complex nested structures
|
||||
- Specific field constraints
|
||||
3. Set a low temperature (e.g. 0) when using structured outputs for more reliable formatting
|
||||
4. Include clear instructions in system or user messages about the expected response format
|
||||
5. Handle potential parsing errors when working with JSON responses
|
||||
|
||||
## Load and index documents
|
||||
|
||||
For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index.
|
||||
|
||||
@@ -28,21 +28,14 @@ Answer:`;
|
||||
|
||||
### 1. Customizing the default prompt on initialization
|
||||
|
||||
The first method is to create a new instance of a Response Synthesizer (or the module you would like to update the prompt) by using the getResponseSynthesizer function. Instead of passing the custom prompt to the deprecated responseBuilder parameter, call getResponseSynthesizer with the mode as the first argument and supply the new prompt via the options parameter.
|
||||
The first method is to create a new instance of `ResponseSynthesizer` (or the module you would like to update the prompt) and pass the custom prompt to the `responseBuilder` parameter. Then, pass the instance to the `asQueryEngine` method of the index.
|
||||
|
||||
```ts
|
||||
// Create an instance of Response Synthesizer
|
||||
|
||||
// Deprecated usage:
|
||||
// Create an instance of response synthesizer
|
||||
const responseSynthesizer = new ResponseSynthesizer({
|
||||
responseBuilder: new CompactAndRefine(undefined, newTextQaPrompt),
|
||||
});
|
||||
|
||||
// Current usage:
|
||||
const responseSynthesizer = getResponseSynthesizer('compact', {
|
||||
textQATemplate: newTextQaPrompt
|
||||
})
|
||||
|
||||
// Create index
|
||||
const index = await VectorStoreIndex.fromDocuments([document]);
|
||||
|
||||
@@ -82,5 +75,5 @@ const response = await queryEngine.query({
|
||||
|
||||
## API Reference
|
||||
|
||||
- [Response Synthesizer](/docs/llamaindex/modules/response_synthesizer)
|
||||
- [ResponseSynthesizer](/docs/api/classes/ResponseSynthesizer)
|
||||
- [CompactAndRefine](/docs/api/classes/CompactAndRefine)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Response Synthesizer
|
||||
title: ResponseSynthesizer
|
||||
---
|
||||
|
||||
The ResponseSynthesizer is responsible for sending the query, nodes, and prompt templates to the LLM to generate a response. There are a few key modes for generating a response:
|
||||
@@ -12,17 +12,15 @@ The ResponseSynthesizer is responsible for sending the query, nodes, and prompt
|
||||
multiple compact prompts. The same as `refine`, but should result in less LLM calls.
|
||||
- `TreeSummarize`: Given a set of text chunks and the query, recursively construct a tree
|
||||
and return the root node as the response. Good for summarization purposes.
|
||||
- `MultiModal`: Combines textual inputs with additional modality-specific metadata to generate an integrated response.
|
||||
It leverages a text QA template to build a prompt that incorporates various input types and produces either streaming or complete responses.
|
||||
This approach is ideal for use cases where enriching the answer with multi-modal context (such as images, audio, or other data)
|
||||
can enhance the output quality.
|
||||
- `SimpleResponseBuilder`: Given a set of text chunks and the query, apply the query to each text
|
||||
chunk while accumulating the responses into an array. Returns a concatenated string of all
|
||||
responses. Good for when you need to run the same query separately against each text
|
||||
chunk.
|
||||
|
||||
```typescript
|
||||
import { NodeWithScore, TextNode, getResponseSynthesizer, responseModeSchema } from "llamaindex";
|
||||
import { NodeWithScore, TextNode, ResponseSynthesizer } from "llamaindex";
|
||||
|
||||
// you can also use responseModeSchema.Enum.refine, responseModeSchema.Enum.tree_summarize, responseModeSchema.Enum.multi_modal
|
||||
// or you can use the CompactAndRefine, Refine, TreeSummarize, or MultiModal classes directly
|
||||
const responseSynthesizer = getResponseSynthesizer(responseModeSchema.Enum.compact);
|
||||
const responseSynthesizer = new ResponseSynthesizer();
|
||||
|
||||
const nodesWithScore: NodeWithScore[] = [
|
||||
{
|
||||
@@ -57,9 +55,8 @@ for await (const chunk of stream) {
|
||||
|
||||
## API Reference
|
||||
|
||||
- [getResponseSynthesizer](/docs/api/functions/getResponseSynthesizer)
|
||||
- [responseModeSchema](/docs/api/variables/responseModeSchema)
|
||||
- [ResponseSynthesizer](/docs/api/classes/ResponseSynthesizer)
|
||||
- [Refine](/docs/api/classes/Refine)
|
||||
- [CompactAndRefine](/docs/api/classes/CompactAndRefine)
|
||||
- [TreeSummarize](/docs/api/classes/TreeSummarize)
|
||||
- [MultiModal](/docs/api/classes/MultiModal)
|
||||
- [SimpleResponseBuilder](/docs/api/classes/SimpleResponseBuilder)
|
||||
|
||||
@@ -7,59 +7,9 @@ A tool can be called to perform custom actions, or retrieve extra information ba
|
||||
A result from a tool call can be used by subsequent steps in a workflow, or to compute a final answer.
|
||||
For example, a "weather tool" could fetch some live weather information from a geographical location.
|
||||
|
||||
## Tool Function
|
||||
|
||||
The `tool` function is a utility provided to define a tool that can be used by an agent. It takes a function and a configuration object as arguments. The configuration object includes the tool's name, description, and parameters.
|
||||
|
||||
### Parameters with Zod
|
||||
|
||||
The `parameters` field in the tool configuration is defined using `zod`, a TypeScript-first schema declaration and validation library. `zod` allows you to specify the expected structure and types of the input parameters, ensuring that the data passed to the tool is valid.
|
||||
|
||||
Example:
|
||||
```ts
|
||||
import { agent, tool } from "llamaindex";
|
||||
import { z } from "zod";
|
||||
|
||||
// first arg is LLM input, second is bound arg
|
||||
const queryKnowledgeBase = async ({ question }, { userToken }) => {
|
||||
const response = await fetch(`https://knowledge-base.com?token=${userToken}&query=${question}`);
|
||||
// ...
|
||||
};
|
||||
|
||||
// define tool with zod validation
|
||||
const kbTool = tool(queryKnowledgeBase, {
|
||||
name: 'queryKnowledgeBase',
|
||||
description: 'Query knowledge base',
|
||||
parameters: z.object({
|
||||
question: z.string({
|
||||
description: 'The user question',
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
```
|
||||
In this example, `z.object` is used to define a schema for the `parameters` where `question` is expected to be a string. This ensures that any input to the tool adheres to the specified structure, providing a layer of type safety and validation.
|
||||
|
||||
|
||||
## Built-in tools
|
||||
|
||||
You can import built-in tools from the `@llamaindex/tools` package.
|
||||
|
||||
```ts
|
||||
import { agent } from "llamaindex";
|
||||
import { wiki } from "@llamaindex/tools";
|
||||
|
||||
const researchAgent = agent({
|
||||
name: "WikiAgent",
|
||||
description: "Gathering information from the internet",
|
||||
systemPrompt: `You are a research agent. Your role is to gather information from the internet using the provided tools.`,
|
||||
tools: [wiki()],
|
||||
});
|
||||
```
|
||||
|
||||
## Function tool
|
||||
|
||||
You can still use the `FunctionTool` class to define a tool.
|
||||
Function tools are implemented with the `FunctionTool` class.
|
||||
A `FunctionTool` is constructed from a function with signature
|
||||
```ts
|
||||
(input: T, additionalArg?: AdditionalToolArgument) => R
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
{
|
||||
"plugin": ["typedoc-plugin-markdown", "typedoc-plugin-merge-modules"],
|
||||
"entryPoints": [
|
||||
"../../packages/{,**/}index.ts",
|
||||
"../../packages/readers/src/*.ts",
|
||||
"../../packages/cloud/src/{reader,utils}.ts"
|
||||
],
|
||||
"entryPoints": ["../../packages/**/src/index.ts"],
|
||||
"exclude": [
|
||||
"../../packages/autotool/**/src/index.ts",
|
||||
"../../packages/cloud/src/client/index.ts",
|
||||
"**/node_modules/**",
|
||||
"**/dist/**",
|
||||
"**/test/**",
|
||||
|
||||
@@ -1,31 +1,5 @@
|
||||
# @llamaindex/cloudflare-worker-agent-test
|
||||
|
||||
## 0.0.149
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.15
|
||||
|
||||
## 0.0.148
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9d951b2]
|
||||
- llamaindex@0.9.14
|
||||
|
||||
## 0.0.147
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
|
||||
## 0.0.146
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.12
|
||||
|
||||
## 0.0.145
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloudflare-worker-agent-test",
|
||||
"version": "0.0.149",
|
||||
"version": "0.0.145",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -1,25 +1,5 @@
|
||||
# @llamaindex/llama-parse-browser-test
|
||||
|
||||
## 0.0.57
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@4.0.2
|
||||
|
||||
## 0.0.56
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- @llamaindex/cloud@4.0.1
|
||||
|
||||
## 0.0.55
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [bf56fc0]
|
||||
- Updated dependencies [5189b44]
|
||||
- @llamaindex/cloud@4.0.0
|
||||
|
||||
## 0.0.54
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/llama-parse-browser-test",
|
||||
"private": true,
|
||||
"version": "0.0.57",
|
||||
"version": "0.0.54",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
@@ -10,7 +10,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.7.3",
|
||||
"vite": "^5.4.16",
|
||||
"vite": "^5.4.12",
|
||||
"vite-plugin-wasm": "^3.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,31 +1,5 @@
|
||||
# @llamaindex/next-agent-test
|
||||
|
||||
## 0.1.149
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.15
|
||||
|
||||
## 0.1.148
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9d951b2]
|
||||
- llamaindex@0.9.14
|
||||
|
||||
## 0.1.147
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
|
||||
## 0.1.146
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.12
|
||||
|
||||
## 0.1.145
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-agent-test",
|
||||
"version": "0.1.149",
|
||||
"version": "0.1.145",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,31 +1,5 @@
|
||||
# test-edge-runtime
|
||||
|
||||
## 0.1.148
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.15
|
||||
|
||||
## 0.1.147
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9d951b2]
|
||||
- llamaindex@0.9.14
|
||||
|
||||
## 0.1.146
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
|
||||
## 0.1.145
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.12
|
||||
|
||||
## 0.1.144
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/nextjs-edge-runtime-test",
|
||||
"version": "0.1.148",
|
||||
"version": "0.1.144",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,40 +1,5 @@
|
||||
# @llamaindex/next-node-runtime
|
||||
|
||||
## 0.1.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.15
|
||||
- @llamaindex/huggingface@0.1.2
|
||||
- @llamaindex/readers@3.0.2
|
||||
|
||||
## 0.1.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9d951b2]
|
||||
- llamaindex@0.9.14
|
||||
- @llamaindex/huggingface@0.1.1
|
||||
- @llamaindex/readers@3.0.1
|
||||
|
||||
## 0.1.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
|
||||
## 0.1.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [5189b44]
|
||||
- @llamaindex/readers@3.0.0
|
||||
- @llamaindex/huggingface@0.1.0
|
||||
- llamaindex@0.9.12
|
||||
|
||||
## 0.1.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/next-node-runtime-test",
|
||||
"version": "0.1.15",
|
||||
"version": "0.1.11",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
|
||||
@@ -1,31 +1,5 @@
|
||||
# vite-import-llamaindex
|
||||
|
||||
## 0.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.15
|
||||
|
||||
## 0.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9d951b2]
|
||||
- llamaindex@0.9.14
|
||||
|
||||
## 0.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
|
||||
## 0.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.12
|
||||
|
||||
## 0.0.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "vite-import-llamaindex",
|
||||
"private": true,
|
||||
"version": "0.0.15",
|
||||
"version": "0.0.11",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
@@ -16,7 +16,7 @@
|
||||
"@size-limit/preset-big-lib": "^11.1.6",
|
||||
"size-limit": "^11.1.6",
|
||||
"typescript": "^5.7.3",
|
||||
"vite": "^5.4.16"
|
||||
"vite": "^6.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"llamaindex": "workspace:*"
|
||||
|
||||
@@ -1,31 +1,5 @@
|
||||
# @llamaindex/waku-query-engine-test
|
||||
|
||||
## 0.0.149
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.15
|
||||
|
||||
## 0.0.148
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9d951b2]
|
||||
- llamaindex@0.9.14
|
||||
|
||||
## 0.0.147
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
|
||||
## 0.0.146
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.12
|
||||
|
||||
## 0.0.145
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/waku-query-engine-test",
|
||||
"version": "0.0.149",
|
||||
"version": "0.0.145",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -42,7 +42,6 @@ export class OpenAI implements LLM {
|
||||
contextWindow: 2048,
|
||||
tokenizer: undefined,
|
||||
isFunctionCallingModel: true,
|
||||
structuredOutput: false,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
20
|
||||
@@ -1,178 +1,5 @@
|
||||
# examples
|
||||
|
||||
## 0.3.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 9c63f3f: Add support for openai responses api
|
||||
- Updated dependencies [9c63f3f]
|
||||
- Updated dependencies [c515a32]
|
||||
- @llamaindex/openai@0.3.0
|
||||
- @llamaindex/google@0.2.2
|
||||
- @llamaindex/core@0.6.2
|
||||
- @llamaindex/workflow@1.0.2
|
||||
- llamaindex@0.9.15
|
||||
- @llamaindex/clip@0.0.48
|
||||
- @llamaindex/deepinfra@0.0.48
|
||||
- @llamaindex/deepseek@0.0.8
|
||||
- @llamaindex/fireworks@0.0.8
|
||||
- @llamaindex/groq@0.0.63
|
||||
- @llamaindex/huggingface@0.1.2
|
||||
- @llamaindex/jinaai@0.0.8
|
||||
- @llamaindex/perplexity@0.0.5
|
||||
- @llamaindex/azure@0.1.11
|
||||
- @llamaindex/elastic-search@0.1.2
|
||||
- @llamaindex/milvus@0.1.11
|
||||
- @llamaindex/qdrant@0.1.11
|
||||
- @llamaindex/supabase@0.1.1
|
||||
- @llamaindex/together@0.0.8
|
||||
- @llamaindex/vllm@0.0.34
|
||||
- @llamaindex/cloud@4.0.2
|
||||
- @llamaindex/node-parser@2.0.2
|
||||
- @llamaindex/anthropic@0.3.2
|
||||
- @llamaindex/cohere@0.0.16
|
||||
- @llamaindex/mistral@0.1.2
|
||||
- @llamaindex/mixedbread@0.0.16
|
||||
- @llamaindex/ollama@0.1.2
|
||||
- @llamaindex/portkey-ai@0.0.44
|
||||
- @llamaindex/replicate@0.0.44
|
||||
- @llamaindex/astra@0.0.16
|
||||
- @llamaindex/chroma@0.0.16
|
||||
- @llamaindex/firestore@1.0.9
|
||||
- @llamaindex/mongodb@0.0.16
|
||||
- @llamaindex/pinecone@0.1.2
|
||||
- @llamaindex/postgres@0.0.44
|
||||
- @llamaindex/upstash@0.0.16
|
||||
- @llamaindex/weaviate@0.0.16
|
||||
- @llamaindex/vercel@0.1.2
|
||||
- @llamaindex/voyage-ai@1.0.8
|
||||
- @llamaindex/readers@3.0.2
|
||||
- @llamaindex/tools@0.0.4
|
||||
|
||||
## 0.3.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 648cfb5: Add support for supabase vector store
|
||||
Added doc for the supbase vector store
|
||||
- Updated dependencies [648cfb5]
|
||||
- Updated dependencies [1b6f368]
|
||||
- Updated dependencies [eaf326e]
|
||||
- Updated dependencies [9d951b2]
|
||||
- @llamaindex/supabase@0.1.0
|
||||
- @llamaindex/core@0.6.1
|
||||
- llamaindex@0.9.14
|
||||
- @llamaindex/tools@0.0.3
|
||||
- @llamaindex/cloud@4.0.1
|
||||
- @llamaindex/node-parser@2.0.1
|
||||
- @llamaindex/anthropic@0.3.1
|
||||
- @llamaindex/clip@0.0.47
|
||||
- @llamaindex/cohere@0.0.15
|
||||
- @llamaindex/deepinfra@0.0.47
|
||||
- @llamaindex/google@0.2.1
|
||||
- @llamaindex/huggingface@0.1.1
|
||||
- @llamaindex/jinaai@0.0.7
|
||||
- @llamaindex/mistral@0.1.1
|
||||
- @llamaindex/mixedbread@0.0.15
|
||||
- @llamaindex/ollama@0.1.1
|
||||
- @llamaindex/openai@0.2.1
|
||||
- @llamaindex/perplexity@0.0.4
|
||||
- @llamaindex/portkey-ai@0.0.43
|
||||
- @llamaindex/replicate@0.0.43
|
||||
- @llamaindex/astra@0.0.15
|
||||
- @llamaindex/azure@0.1.10
|
||||
- @llamaindex/chroma@0.0.15
|
||||
- @llamaindex/elastic-search@0.1.1
|
||||
- @llamaindex/firestore@1.0.8
|
||||
- @llamaindex/milvus@0.1.10
|
||||
- @llamaindex/mongodb@0.0.15
|
||||
- @llamaindex/pinecone@0.1.1
|
||||
- @llamaindex/postgres@0.0.43
|
||||
- @llamaindex/qdrant@0.1.10
|
||||
- @llamaindex/upstash@0.0.15
|
||||
- @llamaindex/weaviate@0.0.15
|
||||
- @llamaindex/vercel@0.1.1
|
||||
- @llamaindex/voyage-ai@1.0.7
|
||||
- @llamaindex/readers@3.0.1
|
||||
- @llamaindex/workflow@1.0.1
|
||||
- @llamaindex/deepseek@0.0.7
|
||||
- @llamaindex/fireworks@0.0.7
|
||||
- @llamaindex/groq@0.0.62
|
||||
- @llamaindex/together@0.0.7
|
||||
- @llamaindex/vllm@0.0.33
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 91a18e7: Added support for structured output in the chat api of openai and ollama
|
||||
Added structured output parameter in the provider
|
||||
- d1c1f99: Added support for function calling in mistral provider
|
||||
Update model list for mistral provider
|
||||
Added example for the tool call in mistral
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 2509353: Added support for elastic search vector store
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [77e24ce]
|
||||
- Updated dependencies [93bc0ff]
|
||||
- Updated dependencies [2509353]
|
||||
- Updated dependencies [da06e45]
|
||||
- Updated dependencies [2a0a899]
|
||||
- Updated dependencies [050cd53]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [bf56fc0]
|
||||
- Updated dependencies [f1db9b3]
|
||||
- Updated dependencies [da8068e]
|
||||
- Updated dependencies [c7ff323]
|
||||
- Updated dependencies [f8a86e4]
|
||||
- Updated dependencies [d1c1f99]
|
||||
- Updated dependencies [5189b44]
|
||||
- Updated dependencies [3fd4cc3]
|
||||
- Updated dependencies [04f8c96]
|
||||
- Updated dependencies [58a9446]
|
||||
- @llamaindex/readers@3.0.0
|
||||
- @llamaindex/core@0.6.0
|
||||
- @llamaindex/tools@0.0.2
|
||||
- @llamaindex/elastic-search@0.1.0
|
||||
- @llamaindex/google@0.2.0
|
||||
- @llamaindex/pinecone@0.1.0
|
||||
- @llamaindex/huggingface@0.1.0
|
||||
- @llamaindex/anthropic@0.3.0
|
||||
- @llamaindex/mistral@0.1.0
|
||||
- @llamaindex/ollama@0.1.0
|
||||
- @llamaindex/openai@0.2.0
|
||||
- @llamaindex/cloud@4.0.0
|
||||
- @llamaindex/vercel@0.1.0
|
||||
- @llamaindex/azure@0.1.9
|
||||
- @llamaindex/workflow@1.0.0
|
||||
- @llamaindex/mongodb@0.0.14
|
||||
- llamaindex@0.9.12
|
||||
- @llamaindex/node-parser@2.0.0
|
||||
- @llamaindex/clip@0.0.46
|
||||
- @llamaindex/cohere@0.0.14
|
||||
- @llamaindex/deepinfra@0.0.46
|
||||
- @llamaindex/jinaai@0.0.6
|
||||
- @llamaindex/mixedbread@0.0.14
|
||||
- @llamaindex/perplexity@0.0.3
|
||||
- @llamaindex/portkey-ai@0.0.42
|
||||
- @llamaindex/replicate@0.0.42
|
||||
- @llamaindex/astra@0.0.14
|
||||
- @llamaindex/chroma@0.0.14
|
||||
- @llamaindex/firestore@1.0.7
|
||||
- @llamaindex/milvus@0.1.9
|
||||
- @llamaindex/postgres@0.0.42
|
||||
- @llamaindex/qdrant@0.1.9
|
||||
- @llamaindex/upstash@0.0.14
|
||||
- @llamaindex/weaviate@0.0.14
|
||||
- @llamaindex/voyage-ai@1.0.6
|
||||
- @llamaindex/deepseek@0.0.6
|
||||
- @llamaindex/fireworks@0.0.6
|
||||
- @llamaindex/groq@0.0.61
|
||||
- @llamaindex/together@0.0.6
|
||||
- @llamaindex/vllm@0.0.32
|
||||
|
||||
## 0.2.10
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
import {
|
||||
AgentStream,
|
||||
AgentToolCallResult,
|
||||
Document,
|
||||
VectorStoreIndex,
|
||||
agent,
|
||||
openai,
|
||||
} from "llamaindex";
|
||||
|
||||
async function main() {
|
||||
const index = await VectorStoreIndex.fromDocuments([
|
||||
new Document({
|
||||
text: "Cats have a specialized collarbone that allows them to always land on their feet when they fall.",
|
||||
}),
|
||||
new Document({
|
||||
text: "Dogs have a sense of smell that is 10,000 to 100,000 times more acute than humans.",
|
||||
}),
|
||||
new Document({
|
||||
text: "Cats are known for their agility and ability to jump high.",
|
||||
}),
|
||||
]);
|
||||
|
||||
const myAgent = agent({
|
||||
llm: openai({ model: "gpt-4o" }),
|
||||
tools: [
|
||||
index.queryTool({
|
||||
options: { similarityTopK: 2 },
|
||||
includeSourceNodes: true,
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
const context = myAgent.run("The fact about cats");
|
||||
|
||||
for await (const event of context) {
|
||||
if (event instanceof AgentToolCallResult) {
|
||||
console.log(
|
||||
"Using these retrieved information to answer the question:\n",
|
||||
event.data.toolOutput.result,
|
||||
);
|
||||
} else if (event instanceof AgentStream) {
|
||||
for (const chunk of event.data.delta) {
|
||||
process.stdout.write(chunk);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main().then(() => {
|
||||
console.log("Done");
|
||||
});
|
||||
@@ -1,12 +1,13 @@
|
||||
import { OpenAI } from "@llamaindex/openai";
|
||||
import { wiki } from "@llamaindex/tools";
|
||||
import { AgentStream, agent } from "llamaindex";
|
||||
import { WikipediaTool } from "../wiki";
|
||||
|
||||
async function main() {
|
||||
const llm = new OpenAI({ model: "gpt-4-turbo" });
|
||||
const wikiTool = new WikipediaTool();
|
||||
|
||||
const workflow = agent({
|
||||
tools: [wiki()],
|
||||
tools: [wikiTool],
|
||||
llm,
|
||||
verbose: false,
|
||||
});
|
||||
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
import os from "os";
|
||||
import { z } from "zod";
|
||||
|
||||
import { wiki } from "@llamaindex/tools";
|
||||
import { WikipediaTool } from "../wiki";
|
||||
const llm = openai({
|
||||
model: "gpt-4o-mini",
|
||||
});
|
||||
@@ -46,7 +46,7 @@ async function main() {
|
||||
description:
|
||||
"Responsible for gathering relevant information from the internet",
|
||||
systemPrompt: `You are a research agent. Your role is to gather information from the internet using the provided tools and then transfer this information to the report agent for content creation.`,
|
||||
tools: [wiki()],
|
||||
tools: [new WikipediaTool()],
|
||||
canHandoffTo: [reportAgent],
|
||||
llm,
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { anthropic } from "@llamaindex/anthropic";
|
||||
import { wiki } from "@llamaindex/tools";
|
||||
import { agent, tool } from "llamaindex";
|
||||
import { z } from "zod";
|
||||
import { WikipediaTool } from "../wiki";
|
||||
|
||||
const workflow = agent({
|
||||
tools: [
|
||||
@@ -13,7 +13,7 @@ const workflow = agent({
|
||||
}),
|
||||
execute: ({ location }) => `The weather in ${location} is sunny`,
|
||||
}),
|
||||
wiki(),
|
||||
new WikipediaTool(),
|
||||
],
|
||||
llm: anthropic({
|
||||
apiKey: process.env.ANTHROPIC_API_KEY,
|
||||
|
||||
+12
-39
@@ -1,5 +1,4 @@
|
||||
import { OpenAI } from "@llamaindex/openai";
|
||||
import { z } from "zod";
|
||||
|
||||
// Example using OpenAI's chat API to extract JSON from a sales call transcript
|
||||
// using json_mode see https://platform.openai.com/docs/guides/text-generation/json-mode for more details
|
||||
@@ -7,47 +6,22 @@ import { z } from "zod";
|
||||
const transcript =
|
||||
"[Phone rings]\n\nJohn: Hello, this is John.\n\nSarah: Hi John, this is Sarah from XYZ Company. I'm calling to discuss our new product, the XYZ Widget, and see if it might be a good fit for your business.\n\nJohn: Hi Sarah, thanks for reaching out. I'm definitely interested in learning more about the XYZ Widget. Can you give me a quick overview of what it does?\n\nSarah: Of course! The XYZ Widget is a cutting-edge tool that helps businesses streamline their workflow and improve productivity. It's designed to automate repetitive tasks and provide real-time data analytics to help you make informed decisions.\n\nJohn: That sounds really interesting. I can see how that could benefit our team. Do you have any case studies or success stories from other companies who have used the XYZ Widget?\n\nSarah: Absolutely, we have several case studies that I can share with you. I'll send those over along with some additional information about the product. I'd also love to schedule a demo for you and your team to see the XYZ Widget in action.\n\nJohn: That would be great. I'll make sure to review the case studies and then we can set up a time for the demo. In the meantime, are there any specific action items or next steps we should take?\n\nSarah: Yes, I'll send over the information and then follow up with you to schedule the demo. In the meantime, feel free to reach out if you have any questions or need further information.\n\nJohn: Sounds good, I appreciate your help Sarah. I'm looking forward to learning more about the XYZ Widget and seeing how it can benefit our business.\n\nSarah: Thank you, John. I'll be in touch soon. Have a great day!\n\nJohn: You too, bye.";
|
||||
|
||||
const exampleSchema = z.object({
|
||||
summary: z.string(),
|
||||
products: z.array(z.string()),
|
||||
rep_name: z.string(),
|
||||
prospect_name: z.string(),
|
||||
action_items: z.array(z.string()),
|
||||
});
|
||||
|
||||
const example = {
|
||||
summary:
|
||||
"High-level summary of the call transcript. Should not exceed 3 sentences.",
|
||||
products: ["product 1", "product 2"],
|
||||
rep_name: "Name of the sales rep",
|
||||
prospect_name: "Name of the prospect",
|
||||
action_items: ["action item 1", "action item 2"],
|
||||
};
|
||||
|
||||
async function main() {
|
||||
const llm = new OpenAI({
|
||||
model: "gpt-4o",
|
||||
model: "gpt-4-1106-preview",
|
||||
additionalChatOptions: { response_format: { type: "json_object" } },
|
||||
});
|
||||
|
||||
//response format as zod schema
|
||||
const example = {
|
||||
summary:
|
||||
"High-level summary of the call transcript. Should not exceed 3 sentences.",
|
||||
products: ["product 1", "product 2"],
|
||||
rep_name: "Name of the sales rep",
|
||||
prospect_name: "Name of the prospect",
|
||||
action_items: ["action item 1", "action item 2"],
|
||||
};
|
||||
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
content: `You are an expert assistant for summarizing and extracting insights from sales call transcripts.`,
|
||||
},
|
||||
{
|
||||
role: "user",
|
||||
content: `Here is the transcript: \n------\n${transcript}\n------`,
|
||||
},
|
||||
],
|
||||
responseFormat: exampleSchema,
|
||||
});
|
||||
|
||||
console.log(response.message.content);
|
||||
|
||||
//response format as json_object
|
||||
const response2 = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
@@ -60,10 +34,9 @@ async function main() {
|
||||
content: `Here is the transcript: \n------\n${transcript}\n------`,
|
||||
},
|
||||
],
|
||||
responseFormat: { type: "json_object" },
|
||||
});
|
||||
|
||||
console.log(response2.message.content);
|
||||
console.log(response.message.content);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
import { mistral } from "@llamaindex/mistral";
|
||||
import { wiki } from "@llamaindex/tools";
|
||||
import { agent, tool } from "llamaindex";
|
||||
import { z } from "zod";
|
||||
|
||||
const workflow = agent({
|
||||
tools: [
|
||||
tool({
|
||||
name: "weather",
|
||||
description: "Get the weather",
|
||||
parameters: z.object({
|
||||
location: z.string().describe("The location to get the weather for"),
|
||||
}),
|
||||
execute: ({ location }) => `The weather in ${location} is sunny`,
|
||||
}),
|
||||
wiki(),
|
||||
],
|
||||
llm: mistral({
|
||||
apiKey: process.env.MISTRAL_API_KEY,
|
||||
model: "mistral-small-latest",
|
||||
}),
|
||||
});
|
||||
|
||||
async function main() {
|
||||
const result = await workflow.run(
|
||||
"What is the weather in New York? What's the history of New York from Wikipedia in 3 sentences?",
|
||||
);
|
||||
console.log(result.data);
|
||||
}
|
||||
|
||||
void main();
|
||||
@@ -1,30 +0,0 @@
|
||||
import { openaiResponses } from "@llamaindex/openai";
|
||||
import { wiki } from "@llamaindex/tools";
|
||||
import { agent, tool } from "llamaindex";
|
||||
import { z } from "zod";
|
||||
|
||||
const workflow = agent({
|
||||
tools: [
|
||||
tool({
|
||||
name: "weather",
|
||||
description: "Get the weather",
|
||||
parameters: z.object({
|
||||
location: z.string().describe("The location to get the weather for"),
|
||||
}),
|
||||
execute: ({ location }) => `The weather in ${location} is sunny`,
|
||||
}),
|
||||
wiki(),
|
||||
],
|
||||
llm: openaiResponses({
|
||||
model: "gpt-4o-mini",
|
||||
}),
|
||||
});
|
||||
|
||||
async function main() {
|
||||
const result = await workflow.run(
|
||||
"What is the weather in New York? What's the history of New York from Wikipedia in 3 sentences?",
|
||||
);
|
||||
console.log(result.data);
|
||||
}
|
||||
|
||||
void main();
|
||||
@@ -1,33 +0,0 @@
|
||||
import { openaiResponses } from "@llamaindex/openai";
|
||||
|
||||
async function main() {
|
||||
const llm = openaiResponses({
|
||||
model: "gpt-4o",
|
||||
maxOutputTokens: 1000,
|
||||
apiKey: process.env.MY_OPENAI_API_KEY,
|
||||
});
|
||||
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: "What's in this image? Describe it in detail.",
|
||||
},
|
||||
{
|
||||
type: "image_url",
|
||||
image_url: {
|
||||
url: "https://storage.googleapis.com/cloud-samples-data/vision/face/faces.jpeg",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
console.log("Single Image Analysis:", response.message.content);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -1,22 +0,0 @@
|
||||
import { openaiResponses } from "@llamaindex/openai";
|
||||
|
||||
async function main() {
|
||||
const llm = openaiResponses({
|
||||
model: "gpt-4o-mini",
|
||||
temperature: 0.1,
|
||||
});
|
||||
|
||||
// Basic chat example
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: "What is the capital of France?",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
console.log(response.message.content);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -1,26 +0,0 @@
|
||||
import { openaiResponses } from "@llamaindex/openai";
|
||||
|
||||
async function main() {
|
||||
const llm = openaiResponses({
|
||||
model: "gpt-4o-mini",
|
||||
temperature: 0.1,
|
||||
});
|
||||
|
||||
const stream = await llm.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);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -1,37 +0,0 @@
|
||||
import { openaiResponses } from "@llamaindex/openai";
|
||||
import { tool } from "llamaindex";
|
||||
|
||||
import { z } from "zod";
|
||||
async function main() {
|
||||
const weatherTool = tool({
|
||||
name: "weather",
|
||||
description: "Get the weather",
|
||||
parameters: z.object({
|
||||
location: z.string({
|
||||
description: "The location to get the weather for",
|
||||
}),
|
||||
}),
|
||||
execute: ({ location }) => {
|
||||
return `The weather in ${location} is sunny`;
|
||||
},
|
||||
});
|
||||
|
||||
const llm = openaiResponses({
|
||||
model: "gpt-4o-mini",
|
||||
temperature: 0.1,
|
||||
});
|
||||
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: "What is the weather in New York?",
|
||||
},
|
||||
],
|
||||
tools: [weatherTool],
|
||||
});
|
||||
|
||||
console.log(response.message.options);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -1,23 +0,0 @@
|
||||
import { openaiResponses } from "@llamaindex/openai";
|
||||
|
||||
async function main() {
|
||||
const llm = openaiResponses({
|
||||
model: "gpt-4o",
|
||||
temperature: 0.1,
|
||||
builtInTools: [{ type: "web_search_preview" }],
|
||||
});
|
||||
|
||||
// Streaming chat example
|
||||
const response = await llm.chat({
|
||||
messages: [
|
||||
{
|
||||
role: "user",
|
||||
content: "What are the latest developments in AI?",
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
console.log(response.message.content);
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
+39
-42
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/examples",
|
||||
"version": "0.3.2",
|
||||
"version": "0.2.10",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"lint": "eslint .",
|
||||
@@ -11,47 +11,44 @@
|
||||
"@azure/cosmos": "^4.1.1",
|
||||
"@azure/identity": "^4.4.1",
|
||||
"@azure/search-documents": "^12.1.0",
|
||||
"@llamaindex/anthropic": "^0.3.2",
|
||||
"@llamaindex/astra": "^0.0.16",
|
||||
"@llamaindex/azure": "^0.1.11",
|
||||
"@llamaindex/chroma": "^0.0.16",
|
||||
"@llamaindex/clip": "^0.0.48",
|
||||
"@llamaindex/cloud": "^4.0.2",
|
||||
"@llamaindex/cohere": "^0.0.16",
|
||||
"@llamaindex/core": "^0.6.2",
|
||||
"@llamaindex/deepinfra": "^0.0.48",
|
||||
"@llamaindex/anthropic": "^0.2.6",
|
||||
"@llamaindex/astra": "^0.0.13",
|
||||
"@llamaindex/azure": "^0.1.8",
|
||||
"@llamaindex/chroma": "^0.0.13",
|
||||
"@llamaindex/clip": "^0.0.45",
|
||||
"@llamaindex/cloud": "^3.0.9",
|
||||
"@llamaindex/cohere": "^0.0.13",
|
||||
"@llamaindex/core": "^0.5.8",
|
||||
"@llamaindex/deepinfra": "^0.0.45",
|
||||
"@llamaindex/env": "^0.1.29",
|
||||
"@llamaindex/firestore": "^1.0.9",
|
||||
"@llamaindex/google": "^0.2.2",
|
||||
"@llamaindex/groq": "^0.0.63",
|
||||
"@llamaindex/huggingface": "^0.1.2",
|
||||
"@llamaindex/milvus": "^0.1.11",
|
||||
"@llamaindex/mistral": "^0.1.2",
|
||||
"@llamaindex/mixedbread": "^0.0.16",
|
||||
"@llamaindex/mongodb": "^0.0.16",
|
||||
"@llamaindex/elastic-search": "^0.1.2",
|
||||
"@llamaindex/node-parser": "^2.0.2",
|
||||
"@llamaindex/ollama": "^0.1.2",
|
||||
"@llamaindex/openai": "^0.3.0",
|
||||
"@llamaindex/pinecone": "^0.1.2",
|
||||
"@llamaindex/portkey-ai": "^0.0.44",
|
||||
"@llamaindex/postgres": "^0.0.44",
|
||||
"@llamaindex/qdrant": "^0.1.11",
|
||||
"@llamaindex/readers": "^3.0.2",
|
||||
"@llamaindex/replicate": "^0.0.44",
|
||||
"@llamaindex/upstash": "^0.0.16",
|
||||
"@llamaindex/vercel": "^0.1.2",
|
||||
"@llamaindex/vllm": "^0.0.34",
|
||||
"@llamaindex/voyage-ai": "^1.0.8",
|
||||
"@llamaindex/weaviate": "^0.0.16",
|
||||
"@llamaindex/workflow": "^1.0.2",
|
||||
"@llamaindex/deepseek": "^0.0.8",
|
||||
"@llamaindex/fireworks": "^0.0.8",
|
||||
"@llamaindex/together": "^0.0.8",
|
||||
"@llamaindex/jinaai": "^0.0.8",
|
||||
"@llamaindex/perplexity": "^0.0.5",
|
||||
"@llamaindex/supabase": "^0.1.1",
|
||||
"@llamaindex/tools": "^0.0.4",
|
||||
"@llamaindex/firestore": "^1.0.6",
|
||||
"@llamaindex/google": "^0.1.2",
|
||||
"@llamaindex/groq": "^0.0.60",
|
||||
"@llamaindex/huggingface": "^0.0.45",
|
||||
"@llamaindex/milvus": "^0.1.8",
|
||||
"@llamaindex/mistral": "^0.0.14",
|
||||
"@llamaindex/mixedbread": "^0.0.13",
|
||||
"@llamaindex/mongodb": "^0.0.13",
|
||||
"@llamaindex/node-parser": "^1.0.8",
|
||||
"@llamaindex/ollama": "^0.0.48",
|
||||
"@llamaindex/openai": "^0.1.61",
|
||||
"@llamaindex/pinecone": "^0.0.13",
|
||||
"@llamaindex/portkey-ai": "^0.0.41",
|
||||
"@llamaindex/postgres": "^0.0.41",
|
||||
"@llamaindex/qdrant": "^0.1.8",
|
||||
"@llamaindex/readers": "^2.0.8",
|
||||
"@llamaindex/replicate": "^0.0.41",
|
||||
"@llamaindex/upstash": "^0.0.13",
|
||||
"@llamaindex/vercel": "^0.0.19",
|
||||
"@llamaindex/vllm": "^0.0.31",
|
||||
"@llamaindex/voyage-ai": "^1.0.5",
|
||||
"@llamaindex/weaviate": "^0.0.13",
|
||||
"@llamaindex/workflow": "^0.0.16",
|
||||
"@llamaindex/deepseek": "^0.0.5",
|
||||
"@llamaindex/fireworks": "^0.0.5",
|
||||
"@llamaindex/together": "^0.0.5",
|
||||
"@llamaindex/jinaai": "^0.0.5",
|
||||
"@llamaindex/perplexity": "^0.0.2",
|
||||
"@notionhq/client": "^2.2.15",
|
||||
"@pinecone-database/pinecone": "^4.0.0",
|
||||
"@vercel/postgres": "^0.10.0",
|
||||
@@ -60,7 +57,7 @@
|
||||
"commander": "^12.1.0",
|
||||
"dotenv": "^16.4.5",
|
||||
"js-tiktoken": "^1.0.14",
|
||||
"llamaindex": "^0.9.15",
|
||||
"llamaindex": "^0.9.11",
|
||||
"mongodb": "6.7.0",
|
||||
"postgres": "^3.4.4",
|
||||
"wikipedia": "^2.1.2",
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
import { ElasticSearchVectorStore } from "@llamaindex/elastic-search";
|
||||
import {
|
||||
gemini,
|
||||
GEMINI_EMBEDDING_MODEL,
|
||||
GEMINI_MODEL,
|
||||
GeminiEmbedding,
|
||||
} from "@llamaindex/google";
|
||||
import {
|
||||
Document,
|
||||
Settings,
|
||||
storageContextFromDefaults,
|
||||
VectorStoreIndex,
|
||||
} from "llamaindex";
|
||||
async function main() {
|
||||
Settings.embedModel = new GeminiEmbedding({
|
||||
model: GEMINI_EMBEDDING_MODEL.TEXT_EMBEDDING_004,
|
||||
});
|
||||
Settings.llm = gemini({
|
||||
model: GEMINI_MODEL.GEMINI_PRO_1_5_FLASH,
|
||||
});
|
||||
// Create sample documents
|
||||
const documents = [
|
||||
new Document({
|
||||
text: "Elastic search is a powerful search engine",
|
||||
metadata: {
|
||||
source: "tech_docs",
|
||||
author: "John Doe",
|
||||
},
|
||||
}),
|
||||
new Document({
|
||||
text: "Vector search enables semantic similarity search",
|
||||
metadata: {
|
||||
source: "research_paper",
|
||||
author: "Jane Smith",
|
||||
},
|
||||
}),
|
||||
new Document({
|
||||
text: "Elasticsearch supports various distance metrics for vector search",
|
||||
metadata: {
|
||||
source: "tech_docs",
|
||||
author: "Bob Wilson",
|
||||
},
|
||||
}),
|
||||
];
|
||||
|
||||
// Initialize ElasticSearch Vector Store
|
||||
const vectorStore = new ElasticSearchVectorStore({
|
||||
indexName: "llamaindex-demo",
|
||||
esCloudId: process.env.ES_CLOUD_ID,
|
||||
esApiKey: process.env.ES_API_KEY,
|
||||
});
|
||||
|
||||
// Create storage context with the vector store
|
||||
const storageContext = await storageContextFromDefaults({
|
||||
vectorStore,
|
||||
});
|
||||
|
||||
// Create and store embeddings in ElasticSearch
|
||||
const index = await VectorStoreIndex.fromDocuments(documents, {
|
||||
storageContext,
|
||||
});
|
||||
|
||||
// Query the index
|
||||
const queryEngine = index.asQueryEngine();
|
||||
|
||||
// Simple query
|
||||
const response = await queryEngine.query({
|
||||
query: "What is vector search?",
|
||||
});
|
||||
console.log("Basic Query Response:", response.toString());
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"name": "elastic-search-vector-store",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "npx tsx index.ts"
|
||||
}
|
||||
}
|
||||
@@ -1,75 +0,0 @@
|
||||
import {
|
||||
gemini,
|
||||
GEMINI_EMBEDDING_MODEL,
|
||||
GEMINI_MODEL,
|
||||
GeminiEmbedding,
|
||||
} from "@llamaindex/google";
|
||||
import { SupabaseVectorStore } from "@llamaindex/supabase";
|
||||
import {
|
||||
Document,
|
||||
Settings,
|
||||
storageContextFromDefaults,
|
||||
VectorStoreIndex,
|
||||
} from "llamaindex";
|
||||
async function main() {
|
||||
Settings.embedModel = new GeminiEmbedding({
|
||||
model: GEMINI_EMBEDDING_MODEL.TEXT_EMBEDDING_004,
|
||||
});
|
||||
Settings.llm = gemini({
|
||||
model: GEMINI_MODEL.GEMINI_PRO_1_5_FLASH,
|
||||
});
|
||||
// Create sample documents
|
||||
const documents = [
|
||||
new Document({
|
||||
text: "Supbase is a powerful Database engine",
|
||||
metadata: {
|
||||
source: "tech_docs",
|
||||
author: "John Doe",
|
||||
},
|
||||
}),
|
||||
new Document({
|
||||
text: "Vector search enables semantic similarity search",
|
||||
metadata: {
|
||||
source: "research_paper",
|
||||
author: "Jane Smith",
|
||||
},
|
||||
}),
|
||||
new Document({
|
||||
text: "Supbase vector store supports various distance metrics for vector search",
|
||||
metadata: {
|
||||
source: "tech_docs",
|
||||
author: "Bob Wilson",
|
||||
},
|
||||
}),
|
||||
];
|
||||
|
||||
// Initialize ElasticSearch Vector Store
|
||||
const vectorStore = new SupabaseVectorStore({
|
||||
supabaseUrl: process.env.SUPABASE_URL,
|
||||
supabaseKey: process.env.SUPABASE_KEY,
|
||||
table: "document",
|
||||
});
|
||||
|
||||
// await vectorStore.delete("fc079c38-2af4-4782-96e4-955c28608fcf");
|
||||
|
||||
// Create storage context with the vector store
|
||||
const storageContext = await storageContextFromDefaults({
|
||||
vectorStore,
|
||||
});
|
||||
|
||||
// Create and store embeddings in ElasticSearch
|
||||
const index = await VectorStoreIndex.fromDocuments(documents, {
|
||||
storageContext,
|
||||
});
|
||||
|
||||
// Query the index
|
||||
const queryEngine = index.asQueryEngine();
|
||||
|
||||
// Simple query
|
||||
const response = await queryEngine.query({
|
||||
query: "What is vector search?",
|
||||
});
|
||||
console.log("Basic Query Response:", response.toString());
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"name": "vector-store-supabase",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "npx tsx index.ts"
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import { openai } from "@ai-sdk/openai";
|
||||
import { wiki } from "@llamaindex/tools";
|
||||
import { VercelLLM } from "@llamaindex/vercel";
|
||||
import { LLMAgent } from "llamaindex";
|
||||
import { WikipediaTool } from "../wiki";
|
||||
|
||||
async function main() {
|
||||
// Create an instance of VercelLLM with the OpenAI model
|
||||
@@ -33,7 +33,7 @@ async function main() {
|
||||
console.log("\n=== Test 3: Using LLMAgent with WikipediaTool ===");
|
||||
const agent = new LLMAgent({
|
||||
llm: vercelLLM,
|
||||
tools: [wiki()],
|
||||
tools: [new WikipediaTool()],
|
||||
});
|
||||
|
||||
const { message } = await agent.chat({
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
/** Example of a tool that uses Wikipedia */
|
||||
|
||||
import type { JSONSchemaType } from "ajv";
|
||||
import type { BaseTool, ToolMetadata } from "llamaindex";
|
||||
import { default as wiki } from "wikipedia";
|
||||
|
||||
type WikipediaParameter = {
|
||||
query: string;
|
||||
lang?: string;
|
||||
};
|
||||
|
||||
type WikipediaToolParams = {
|
||||
metadata?: ToolMetadata<JSONSchemaType<WikipediaParameter>>;
|
||||
};
|
||||
|
||||
const DEFAULT_META_DATA: ToolMetadata<JSONSchemaType<WikipediaParameter>> = {
|
||||
name: "wikipedia_search",
|
||||
description: "A tool that uses a query engine to search Wikipedia.",
|
||||
parameters: {
|
||||
type: "object",
|
||||
properties: {
|
||||
query: {
|
||||
type: "string",
|
||||
description: "The query to search for",
|
||||
},
|
||||
lang: {
|
||||
type: "string",
|
||||
description: "The language to search in",
|
||||
nullable: true,
|
||||
},
|
||||
},
|
||||
required: ["query"],
|
||||
},
|
||||
};
|
||||
|
||||
export class WikipediaTool implements BaseTool<WikipediaParameter> {
|
||||
private readonly DEFAULT_LANG = "en";
|
||||
metadata: ToolMetadata<JSONSchemaType<WikipediaParameter>>;
|
||||
|
||||
constructor(params?: WikipediaToolParams) {
|
||||
this.metadata = params?.metadata || DEFAULT_META_DATA;
|
||||
}
|
||||
|
||||
async loadData(
|
||||
page: string,
|
||||
lang: string = this.DEFAULT_LANG,
|
||||
): Promise<string> {
|
||||
wiki.setLang(lang);
|
||||
const pageResult = await wiki.page(page, { autoSuggest: false });
|
||||
const content = await pageResult.content();
|
||||
return content;
|
||||
}
|
||||
|
||||
async call({
|
||||
query,
|
||||
lang = this.DEFAULT_LANG,
|
||||
}: WikipediaParameter): Promise<string> {
|
||||
const searchResult = await wiki.search(query);
|
||||
if (searchResult.results.length === 0) return "No search results.";
|
||||
return await this.loadData(searchResult.results[0].title, lang);
|
||||
}
|
||||
}
|
||||
+1
-2
@@ -35,8 +35,7 @@
|
||||
"prettier-plugin-tailwindcss": "^0.6.11",
|
||||
"turbo": "^2.4.4",
|
||||
"typescript": "^5.7.3",
|
||||
"typescript-eslint": "^8.18.0",
|
||||
"vitest": "^3.1.1"
|
||||
"typescript-eslint": "^8.18.0"
|
||||
},
|
||||
"packageManager": "pnpm@9.12.3",
|
||||
"lint-staged": {
|
||||
|
||||
@@ -1,31 +1,5 @@
|
||||
# @llamaindex/autotool
|
||||
|
||||
## 6.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.15
|
||||
|
||||
## 6.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9d951b2]
|
||||
- llamaindex@0.9.14
|
||||
|
||||
## 6.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
|
||||
## 6.0.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.12
|
||||
|
||||
## 6.0.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,35 +1,5 @@
|
||||
# @llamaindex/autotool-01-node-example
|
||||
|
||||
## 0.0.96
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.15
|
||||
- @llamaindex/autotool@6.0.15
|
||||
|
||||
## 0.0.95
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9d951b2]
|
||||
- llamaindex@0.9.14
|
||||
- @llamaindex/autotool@6.0.14
|
||||
|
||||
## 0.0.94
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
- @llamaindex/autotool@6.0.13
|
||||
|
||||
## 0.0.93
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.12
|
||||
- @llamaindex/autotool@6.0.12
|
||||
|
||||
## 0.0.92
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -13,5 +13,5 @@
|
||||
"scripts": {
|
||||
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
|
||||
},
|
||||
"version": "0.0.96"
|
||||
"version": "0.0.92"
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"url": "git+https://github.com/run-llama/LlamaIndexTS.git",
|
||||
"directory": "packages/autotool"
|
||||
},
|
||||
"version": "6.0.15",
|
||||
"version": "6.0.11",
|
||||
"description": "auto transpile your JS function to LLM Agent compatible",
|
||||
"files": [
|
||||
"dist",
|
||||
|
||||
@@ -1,32 +1,5 @@
|
||||
# @llamaindex/cloud
|
||||
|
||||
## 4.0.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9c63f3f]
|
||||
- @llamaindex/core@0.6.2
|
||||
|
||||
## 4.0.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b6f368]
|
||||
- Updated dependencies [eaf326e]
|
||||
- @llamaindex/core@0.6.1
|
||||
|
||||
## 4.0.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- bf56fc0: chore: bump sdk openapi.json
|
||||
- 5189b44: fix: add retry handling logic to parser reader and fix lint issues
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [93bc0ff]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [5189b44]
|
||||
- @llamaindex/core@0.6.0
|
||||
|
||||
## 3.0.9
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/cloud",
|
||||
"version": "4.0.2",
|
||||
"version": "3.0.9",
|
||||
"type": "module",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,38 +1,5 @@
|
||||
# @llamaindex/community
|
||||
|
||||
## 0.0.94
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9c63f3f]
|
||||
- @llamaindex/core@0.6.2
|
||||
|
||||
## 0.0.93
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b6f368]
|
||||
- Updated dependencies [eaf326e]
|
||||
- @llamaindex/core@0.6.1
|
||||
|
||||
## 0.0.92
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1325178: fix: stringify all tool results for anthropic on bedrock
|
||||
|
||||
## 0.0.91
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 5189b44: fix: add retry handling logic to parser reader and fix lint issues
|
||||
- 3fd4cc3: feat: use google's new gen ai library to support multimodal output
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [93bc0ff]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [5189b44]
|
||||
- @llamaindex/core@0.6.0
|
||||
|
||||
## 0.0.90
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/community",
|
||||
"description": "Community package for LlamaIndexTS",
|
||||
"version": "0.0.94",
|
||||
"version": "0.0.90",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
|
||||
@@ -10,10 +10,12 @@ import type {
|
||||
MessageContentDetail,
|
||||
ToolCallLLMMessageOptions,
|
||||
} from "@llamaindex/core/llms";
|
||||
import { extractDataUrlComponents } from "../utils";
|
||||
import {
|
||||
extractDataUrlComponents,
|
||||
mapMessageContentToMessageContentDetails,
|
||||
} from "../utils";
|
||||
|
||||
import type { JSONObject } from "@llamaindex/core/global";
|
||||
import { mapMessageContentToMessageContentDetails } from "../../utils";
|
||||
import type { AmazonMessage, AmazonMessages } from "./types";
|
||||
|
||||
const ACCEPTED_IMAGE_MIME_TYPES = [
|
||||
|
||||
@@ -6,8 +6,10 @@ import type {
|
||||
MessageContentDetail,
|
||||
ToolCallLLMMessageOptions,
|
||||
} from "@llamaindex/core/llms";
|
||||
import { mapMessageContentToMessageContentDetails } from "../../utils";
|
||||
import { extractDataUrlComponents } from "../utils";
|
||||
import {
|
||||
extractDataUrlComponents,
|
||||
mapMessageContentToMessageContentDetails,
|
||||
} from "../utils";
|
||||
import type {
|
||||
AnthropicContent,
|
||||
AnthropicImageContent,
|
||||
@@ -111,7 +113,7 @@ export const mapChatMessagesToAnthropicMessages = <
|
||||
{
|
||||
type: "tool_result",
|
||||
tool_use_id: msg.options.toolResult.id,
|
||||
content: JSON.stringify(msg.options.toolResult.result),
|
||||
content: msg.options.toolResult.result,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -22,9 +22,9 @@ import {
|
||||
type BedrockChatStreamResponse,
|
||||
Provider,
|
||||
} from "./provider";
|
||||
import { mapMessageContentToMessageContentDetails } from "./utils";
|
||||
|
||||
import { wrapLLMEvent } from "@llamaindex/core/decorator";
|
||||
import { mapMessageContentToMessageContentDetails } from "../utils";
|
||||
import { AmazonProvider } from "./amazon/provider";
|
||||
import { AnthropicProvider } from "./anthropic/provider";
|
||||
import { MetaProvider } from "./meta/provider";
|
||||
@@ -381,7 +381,6 @@ export class Bedrock extends ToolCallLLM<BedrockAdditionalChatOptions> {
|
||||
maxTokens: this.maxTokens,
|
||||
contextWindow: BEDROCK_FOUNDATION_LLMS[this.model] ?? 128000,
|
||||
tokenizer: undefined,
|
||||
structuredOutput: false,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,14 @@
|
||||
import type {
|
||||
MessageContent,
|
||||
MessageContentDetail,
|
||||
} from "@llamaindex/core/llms";
|
||||
|
||||
export const mapMessageContentToMessageContentDetails = (
|
||||
content: MessageContent,
|
||||
): MessageContentDetail[] => {
|
||||
return Array.isArray(content) ? content : [{ type: "text", text: content }];
|
||||
};
|
||||
|
||||
export const toUtf8 = (input: Uint8Array): string =>
|
||||
new TextDecoder("utf-8").decode(input);
|
||||
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
import type {
|
||||
MessageContent,
|
||||
MessageContentDetail,
|
||||
} from "@llamaindex/core/llms";
|
||||
|
||||
export const mapMessageContentToMessageContentDetails = (
|
||||
content: MessageContent,
|
||||
): MessageContentDetail[] => {
|
||||
return Array.isArray(content) ? content : [{ type: "text", text: content }];
|
||||
};
|
||||
@@ -1,31 +1,5 @@
|
||||
# @llamaindex/core
|
||||
|
||||
## 0.6.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 9c63f3f: Add support for openai responses api
|
||||
|
||||
## 0.6.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 1b6f368: Support loading from URLs for all readers extending FileReader
|
||||
- eaf326e: Fix passing right llm setting from SimpleChatEngine to ChatMemoryBuffer
|
||||
|
||||
## 0.6.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 91a18e7: Added support for structured output in the chat api of openai and ollama
|
||||
Added structured output parameter in the provider
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 21bebfc: Expose more content to fix the issue with unavailable documentation links, and adjust the documentation based on the latest code.
|
||||
- 93bc0ff: fix: include additional options for context chat engine
|
||||
- 5189b44: fix: add retry handling logic to parser reader and fix lint issues
|
||||
|
||||
## 0.5.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/core",
|
||||
"type": "module",
|
||||
"version": "0.6.2",
|
||||
"version": "0.5.8",
|
||||
"description": "LlamaIndex Core Module",
|
||||
"exports": {
|
||||
"./agent": {
|
||||
|
||||
@@ -102,7 +102,6 @@ export class ContextChatEngine extends PromptMixin implements BaseChatEngine {
|
||||
const stream = await this.chatModel.chat({
|
||||
messages: requestMessages.messages,
|
||||
stream: true,
|
||||
additionalChatOptions: params.chatOptions as object,
|
||||
});
|
||||
return streamConverter(
|
||||
streamReducer({
|
||||
@@ -118,7 +117,6 @@ export class ContextChatEngine extends PromptMixin implements BaseChatEngine {
|
||||
}
|
||||
const response = await this.chatModel.chat({
|
||||
messages: requestMessages.messages,
|
||||
additionalChatOptions: params.chatOptions as object,
|
||||
});
|
||||
chatHistory.put(response.message);
|
||||
return EngineResponse.fromChatResponse(response, requestMessages.nodes);
|
||||
|
||||
@@ -24,12 +24,8 @@ export class SimpleChatEngine implements BaseChatEngine {
|
||||
}
|
||||
|
||||
constructor(init?: Partial<SimpleChatEngine>) {
|
||||
this.memory = init?.memory ?? new ChatMemoryBuffer();
|
||||
this.llm = init?.llm ?? Settings.llm;
|
||||
this.memory =
|
||||
init?.memory ??
|
||||
new ChatMemoryBuffer({
|
||||
llm: this.llm,
|
||||
});
|
||||
}
|
||||
|
||||
chat(params: NonStreamingChatEngineParams): Promise<EngineResponse>;
|
||||
@@ -44,7 +40,6 @@ export class SimpleChatEngine implements BaseChatEngine {
|
||||
|
||||
const chatHistory = params.chatHistory
|
||||
? new ChatMemoryBuffer({
|
||||
llm: this.llm,
|
||||
chatHistory:
|
||||
params.chatHistory instanceof BaseMemory
|
||||
? await params.chatHistory.getMessages()
|
||||
|
||||
@@ -28,12 +28,11 @@ export abstract class BaseLLM<
|
||||
async complete(
|
||||
params: LLMCompletionParamsStreaming | LLMCompletionParamsNonStreaming,
|
||||
): Promise<CompletionResponse | AsyncIterable<CompletionResponse>> {
|
||||
const { prompt, stream, responseFormat } = params;
|
||||
const { prompt, stream } = params;
|
||||
if (stream) {
|
||||
const stream = await this.chat({
|
||||
messages: [{ content: prompt, role: "user" }],
|
||||
stream: true,
|
||||
...(responseFormat ? { responseFormat } : {}),
|
||||
});
|
||||
return streamConverter(stream, (chunk) => {
|
||||
return {
|
||||
@@ -42,12 +41,9 @@ export abstract class BaseLLM<
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
const chatResponse = await this.chat({
|
||||
messages: [{ content: prompt, role: "user" }],
|
||||
...(responseFormat ? { responseFormat } : {}),
|
||||
});
|
||||
|
||||
return {
|
||||
text: extractText(chatResponse.message.content),
|
||||
raw: chatResponse.raw,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import type { Tokenizers } from "@llamaindex/env/tokenizers";
|
||||
import type { JSONSchemaType } from "ajv";
|
||||
import { z } from "zod";
|
||||
import type { JSONObject, JSONValue } from "../global";
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
@@ -54,12 +54,7 @@ export interface LLM<
|
||||
): Promise<CompletionResponse>;
|
||||
}
|
||||
|
||||
export type MessageType =
|
||||
| "user"
|
||||
| "assistant"
|
||||
| "system"
|
||||
| "memory"
|
||||
| "developer";
|
||||
export type MessageType = "user" | "assistant" | "system" | "memory";
|
||||
|
||||
export type TextChatMessage<AdditionalMessageOptions extends object = object> =
|
||||
{
|
||||
@@ -111,7 +106,6 @@ export type LLMMetadata = {
|
||||
maxTokens?: number | undefined;
|
||||
contextWindow: number;
|
||||
tokenizer: Tokenizers | undefined;
|
||||
structuredOutput: boolean;
|
||||
};
|
||||
|
||||
export interface LLMChatParamsBase<
|
||||
@@ -121,7 +115,6 @@ export interface LLMChatParamsBase<
|
||||
messages: ChatMessage<AdditionalMessageOptions>[];
|
||||
additionalChatOptions?: AdditionalChatOptions;
|
||||
tools?: BaseTool[];
|
||||
responseFormat?: z.ZodType | object;
|
||||
}
|
||||
|
||||
export interface LLMChatParamsStreaming<
|
||||
@@ -140,7 +133,6 @@ export interface LLMChatParamsNonStreaming<
|
||||
|
||||
export interface LLMCompletionParamsBase {
|
||||
prompt: MessageContent;
|
||||
responseFormat?: z.ZodType | object;
|
||||
}
|
||||
|
||||
export interface LLMCompletionParamsStreaming extends LLMCompletionParamsBase {
|
||||
@@ -160,7 +152,6 @@ export type MessageContentTextDetail = {
|
||||
export type MessageContentImageDetail = {
|
||||
type: "image_url";
|
||||
image_url: { url: string };
|
||||
detail?: "high" | "low" | "auto";
|
||||
};
|
||||
|
||||
export type MessageContentDetail =
|
||||
|
||||
@@ -23,7 +23,7 @@ import {
|
||||
} from "./base-synthesizer";
|
||||
import { createMessageContent } from "./utils";
|
||||
|
||||
export const responseModeSchema = z.enum([
|
||||
const responseModeSchema = z.enum([
|
||||
"refine",
|
||||
"compact",
|
||||
"tree_summarize",
|
||||
@@ -35,7 +35,7 @@ export type ResponseMode = z.infer<typeof responseModeSchema>;
|
||||
/**
|
||||
* A response builder that uses the query to ask the LLM generate a better response using multiple text chunks.
|
||||
*/
|
||||
export class Refine extends BaseSynthesizer {
|
||||
class Refine extends BaseSynthesizer {
|
||||
textQATemplate: TextQAPrompt;
|
||||
refineTemplate: RefinePrompt;
|
||||
|
||||
@@ -213,7 +213,7 @@ export class Refine extends BaseSynthesizer {
|
||||
/**
|
||||
* CompactAndRefine is a slight variation of Refine that first compacts the text chunks into the smallest possible number of chunks.
|
||||
*/
|
||||
export class CompactAndRefine extends Refine {
|
||||
class CompactAndRefine extends Refine {
|
||||
async getResponse(
|
||||
query: MessageContent,
|
||||
nodes: NodeWithScore[],
|
||||
@@ -267,7 +267,7 @@ export class CompactAndRefine extends Refine {
|
||||
/**
|
||||
* TreeSummarize repacks the text chunks into the smallest possible number of chunks and then summarizes them, then recursively does so until there's one chunk left.
|
||||
*/
|
||||
export class TreeSummarize extends BaseSynthesizer {
|
||||
class TreeSummarize extends BaseSynthesizer {
|
||||
summaryTemplate: TreeSummarizePrompt;
|
||||
|
||||
constructor(
|
||||
@@ -370,7 +370,7 @@ export class TreeSummarize extends BaseSynthesizer {
|
||||
}
|
||||
}
|
||||
|
||||
export class MultiModal extends BaseSynthesizer {
|
||||
class MultiModal extends BaseSynthesizer {
|
||||
metadataMode: MetadataMode;
|
||||
textQATemplate: TextQAPrompt;
|
||||
|
||||
|
||||
@@ -2,15 +2,7 @@ export {
|
||||
BaseSynthesizer,
|
||||
type BaseSynthesizerOptions,
|
||||
} from "./base-synthesizer";
|
||||
export {
|
||||
CompactAndRefine,
|
||||
MultiModal,
|
||||
Refine,
|
||||
TreeSummarize,
|
||||
getResponseSynthesizer,
|
||||
responseModeSchema,
|
||||
type ResponseMode,
|
||||
} from "./factory";
|
||||
export { getResponseSynthesizer, type ResponseMode } from "./factory";
|
||||
export type {
|
||||
SynthesizeEndEvent,
|
||||
SynthesizeQuery,
|
||||
|
||||
@@ -63,29 +63,8 @@ export abstract class FileReader<T extends BaseNode = Document>
|
||||
): Promise<T[]>;
|
||||
|
||||
async loadData(filePath: string): Promise<T[]> {
|
||||
let fileContent: Uint8Array;
|
||||
let filename: string;
|
||||
|
||||
// Check if filePath is a URL
|
||||
if (filePath.startsWith("http://") || filePath.startsWith("https://")) {
|
||||
// Handle URL
|
||||
const response = await fetch(filePath);
|
||||
if (!response.ok) {
|
||||
throw new Error(
|
||||
`Failed to fetch URL: ${filePath}, status: ${response.status}`,
|
||||
);
|
||||
}
|
||||
const buffer = await response.arrayBuffer();
|
||||
fileContent = new Uint8Array(buffer);
|
||||
// Extract filename from URL
|
||||
const url = new URL(filePath);
|
||||
filename = path.basename(url.pathname) || "url_document";
|
||||
} else {
|
||||
// Handle local file
|
||||
fileContent = await fs.readFile(filePath);
|
||||
filename = path.basename(filePath);
|
||||
}
|
||||
|
||||
const fileContent = await fs.readFile(filePath);
|
||||
const filename = path.basename(filePath);
|
||||
const docs = await this.loadDataAsContent(fileContent, filename);
|
||||
docs.forEach(FileReader.addMetaData(filePath));
|
||||
return docs;
|
||||
|
||||
@@ -35,7 +35,6 @@ export class MockLLM extends ToolCallLLM {
|
||||
topP: 0.5,
|
||||
contextWindow: 1024,
|
||||
tokenizer: undefined,
|
||||
structuredOutput: false,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { Document, FileReader } from "@llamaindex/core/schema";
|
||||
import { fs, path } from "@llamaindex/env";
|
||||
import { TextDecoder, TextEncoder } from "util";
|
||||
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
||||
|
||||
// Mock implementation of FileReader for testing
|
||||
class TestFileReader extends FileReader<Document> {
|
||||
async loadDataAsContent(
|
||||
fileContent: Uint8Array,
|
||||
filename?: string,
|
||||
): Promise<Document[]> {
|
||||
const text = new TextDecoder().decode(fileContent);
|
||||
return [new Document({ text, metadata: { filename } })];
|
||||
}
|
||||
}
|
||||
|
||||
describe("FileReader", () => {
|
||||
let reader: TestFileReader;
|
||||
let mockFetch: any;
|
||||
let mockFsReadFile: any;
|
||||
|
||||
beforeEach(() => {
|
||||
reader = new TestFileReader();
|
||||
|
||||
// Mock fetch for URL tests
|
||||
mockFetch = vi.fn();
|
||||
global.fetch = mockFetch;
|
||||
|
||||
// Mock fs.readFile for local file tests
|
||||
mockFsReadFile = vi.spyOn(fs, "readFile");
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.restoreAllMocks();
|
||||
});
|
||||
|
||||
test("loadData should load content from a local file", async () => {
|
||||
const testFilePath = "/path/to/test.txt";
|
||||
const testContent = "Test file content";
|
||||
const testContentBuffer = new TextEncoder().encode(testContent);
|
||||
|
||||
mockFsReadFile.mockResolvedValue(testContentBuffer);
|
||||
|
||||
const result = await reader.loadData(testFilePath);
|
||||
|
||||
expect(mockFsReadFile).toHaveBeenCalledWith(testFilePath);
|
||||
expect(result).toHaveLength(1);
|
||||
expect(result[0]).toBeInstanceOf(Document);
|
||||
expect(result[0]?.getText()).toBe(testContent);
|
||||
expect(result[0]?.metadata.file_path).toBe(path.resolve(testFilePath));
|
||||
expect(result[0]?.metadata.file_name).toBe("test.txt");
|
||||
});
|
||||
|
||||
test("loadData should load content from a URL", async () => {
|
||||
const testUrl = "https://example.com/test.txt";
|
||||
const testContent = "Test URL content";
|
||||
const testContentBuffer = new TextEncoder().encode(testContent);
|
||||
|
||||
// Mock fetch response
|
||||
mockFetch.mockResolvedValue({
|
||||
ok: true,
|
||||
arrayBuffer: () => Promise.resolve(testContentBuffer.buffer),
|
||||
});
|
||||
|
||||
const result = await reader.loadData(testUrl);
|
||||
|
||||
expect(mockFetch).toHaveBeenCalledWith(testUrl);
|
||||
expect(result).toHaveLength(1);
|
||||
expect(result[0]).toBeInstanceOf(Document);
|
||||
expect(result[0]?.getText()).toBe(testContent);
|
||||
expect(result[0]?.metadata.file_path).toBe(path.resolve(testUrl));
|
||||
expect(result[0]?.metadata.file_name).toBe("test.txt");
|
||||
});
|
||||
|
||||
test("loadData should throw an error for failed URL fetch", async () => {
|
||||
const testUrl = "https://example.com/not-found.txt";
|
||||
|
||||
// Mock failed fetch response
|
||||
mockFetch.mockResolvedValue({
|
||||
ok: false,
|
||||
status: 404,
|
||||
});
|
||||
|
||||
await expect(reader.loadData(testUrl)).rejects.toThrow(
|
||||
`Failed to fetch URL: ${testUrl}, status: 404`,
|
||||
);
|
||||
|
||||
expect(mockFetch).toHaveBeenCalledWith(testUrl);
|
||||
});
|
||||
});
|
||||
@@ -126,7 +126,6 @@ describe("sentence splitter", () => {
|
||||
id_: docId,
|
||||
text: "This is a test sentence. This is another test sentence.",
|
||||
});
|
||||
|
||||
const nodes = sentenceSplitter.getNodesFromDocuments([doc]);
|
||||
nodes.forEach((node) => {
|
||||
// test node id should match uuid regex
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
import { SimpleChatEngine } from "@llamaindex/core/chat-engine";
|
||||
import { ChatMemoryBuffer } from "@llamaindex/core/memory";
|
||||
import { MockLLM } from "@llamaindex/core/utils";
|
||||
import { describe, expect, test } from "vitest";
|
||||
|
||||
describe("SimpleChatEngine", () => {
|
||||
test("constructor initializes with provided LLM", () => {
|
||||
const llm = new MockLLM();
|
||||
const engine = new SimpleChatEngine({ llm });
|
||||
expect(engine.llm).toBe(llm);
|
||||
expect(engine.memory).toBeInstanceOf(ChatMemoryBuffer);
|
||||
expect((engine.memory as ChatMemoryBuffer).tokenLimit).toBe(768);
|
||||
});
|
||||
});
|
||||
@@ -1,31 +1,5 @@
|
||||
# @llamaindex/experimental
|
||||
|
||||
## 0.0.165
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.15
|
||||
|
||||
## 0.0.164
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9d951b2]
|
||||
- llamaindex@0.9.14
|
||||
|
||||
## 0.0.163
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [75d6e29]
|
||||
- llamaindex@0.9.13
|
||||
|
||||
## 0.0.162
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- llamaindex@0.9.12
|
||||
|
||||
## 0.0.161
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/experimental",
|
||||
"description": "Experimental package for LlamaIndexTS",
|
||||
"version": "0.0.165",
|
||||
"version": "0.0.161",
|
||||
"type": "module",
|
||||
"types": "dist/type/index.d.ts",
|
||||
"main": "dist/cjs/index.js",
|
||||
|
||||
@@ -1,53 +1,5 @@
|
||||
# llamaindex
|
||||
|
||||
## 0.9.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9c63f3f]
|
||||
- Updated dependencies [c515a32]
|
||||
- @llamaindex/openai@0.3.0
|
||||
- @llamaindex/core@0.6.2
|
||||
- @llamaindex/workflow@1.0.2
|
||||
- @llamaindex/cloud@4.0.2
|
||||
- @llamaindex/node-parser@2.0.2
|
||||
|
||||
## 0.9.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 9d951b2: feat: support llamacloud in @llamaindex/server
|
||||
- Updated dependencies [1b6f368]
|
||||
- Updated dependencies [eaf326e]
|
||||
- @llamaindex/core@0.6.1
|
||||
- @llamaindex/cloud@4.0.1
|
||||
- @llamaindex/node-parser@2.0.1
|
||||
- @llamaindex/openai@0.2.1
|
||||
- @llamaindex/workflow@1.0.1
|
||||
|
||||
## 0.9.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- 75d6e29: feat: response source nodes in query tool output
|
||||
|
||||
## 0.9.12
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [93bc0ff]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [bf56fc0]
|
||||
- Updated dependencies [f8a86e4]
|
||||
- Updated dependencies [5189b44]
|
||||
- Updated dependencies [58a9446]
|
||||
- @llamaindex/core@0.6.0
|
||||
- @llamaindex/openai@0.2.0
|
||||
- @llamaindex/cloud@4.0.0
|
||||
- @llamaindex/workflow@1.0.0
|
||||
- @llamaindex/node-parser@2.0.0
|
||||
|
||||
## 0.9.11
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "llamaindex",
|
||||
"version": "0.9.15",
|
||||
"version": "0.9.11",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"keywords": [
|
||||
|
||||
@@ -25,9 +25,7 @@ import {
|
||||
} from "@llamaindex/cloud/api";
|
||||
import type { BaseRetriever } from "@llamaindex/core/retriever";
|
||||
import { getEnv } from "@llamaindex/env";
|
||||
import type { QueryToolParams } from "../indices/BaseIndex.js";
|
||||
import { Settings } from "../Settings.js";
|
||||
import { QueryEngineTool } from "../tools/QueryEngineTool.js";
|
||||
|
||||
export class LlamaCloudIndex {
|
||||
params: CloudConstructorParams;
|
||||
@@ -274,22 +272,6 @@ export class LlamaCloudIndex {
|
||||
);
|
||||
}
|
||||
|
||||
asQueryTool(params: QueryToolParams): QueryEngineTool {
|
||||
if (params.options) {
|
||||
params.retriever = this.asRetriever(params.options);
|
||||
}
|
||||
|
||||
return new QueryEngineTool({
|
||||
queryEngine: this.asQueryEngine(params),
|
||||
metadata: params?.metadata,
|
||||
includeSourceNodes: params?.includeSourceNodes ?? false,
|
||||
});
|
||||
}
|
||||
|
||||
queryTool(params: QueryToolParams): QueryEngineTool {
|
||||
return this.asQueryTool(params);
|
||||
}
|
||||
|
||||
async insert(document: Document) {
|
||||
const pipelineId = await this.getPipelineId();
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ export type QueryToolParams = (
|
||||
) & {
|
||||
responseSynthesizer?: BaseSynthesizer;
|
||||
metadata?: ToolMetadata<JSONSchemaType<QueryEngineParam>> | undefined;
|
||||
includeSourceNodes?: boolean;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -99,7 +98,6 @@ export abstract class BaseIndex<T> {
|
||||
return new QueryEngineTool({
|
||||
queryEngine: this.asQueryEngine(params),
|
||||
metadata: params?.metadata,
|
||||
includeSourceNodes: params?.includeSourceNodes ?? false,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import type { JSONValue } from "@llamaindex/core/global";
|
||||
import type { BaseTool, ToolMetadata } from "@llamaindex/core/llms";
|
||||
import type { BaseQueryEngine } from "@llamaindex/core/query-engine";
|
||||
import type { JSONSchemaType } from "ajv";
|
||||
@@ -21,7 +20,6 @@ const DEFAULT_PARAMETERS: JSONSchemaType<QueryEngineParam> = {
|
||||
export type QueryEngineToolParams = {
|
||||
queryEngine: BaseQueryEngine;
|
||||
metadata?: ToolMetadata<JSONSchemaType<QueryEngineParam>> | undefined;
|
||||
includeSourceNodes?: boolean;
|
||||
};
|
||||
|
||||
export type QueryEngineParam = {
|
||||
@@ -31,32 +29,19 @@ export type QueryEngineParam = {
|
||||
export class QueryEngineTool implements BaseTool<QueryEngineParam> {
|
||||
private queryEngine: BaseQueryEngine;
|
||||
metadata: ToolMetadata<JSONSchemaType<QueryEngineParam>>;
|
||||
includeSourceNodes: boolean;
|
||||
|
||||
constructor({
|
||||
queryEngine,
|
||||
metadata,
|
||||
includeSourceNodes,
|
||||
}: QueryEngineToolParams) {
|
||||
constructor({ queryEngine, metadata }: QueryEngineToolParams) {
|
||||
this.queryEngine = queryEngine;
|
||||
this.metadata = {
|
||||
name: metadata?.name ?? DEFAULT_NAME,
|
||||
description: metadata?.description ?? DEFAULT_DESCRIPTION,
|
||||
parameters: metadata?.parameters ?? DEFAULT_PARAMETERS,
|
||||
};
|
||||
this.includeSourceNodes = includeSourceNodes ?? false;
|
||||
}
|
||||
|
||||
async call({ query }: QueryEngineParam) {
|
||||
const response = await this.queryEngine.query({ query });
|
||||
|
||||
if (!this.includeSourceNodes) {
|
||||
return { content: response.message.content };
|
||||
}
|
||||
|
||||
return {
|
||||
content: response.message.content,
|
||||
sourceNodes: response.sourceNodes,
|
||||
} as unknown as JSONValue;
|
||||
return response.message.content;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,30 +1,5 @@
|
||||
# @llamaindex/node-parser
|
||||
|
||||
## 2.0.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9c63f3f]
|
||||
- @llamaindex/core@0.6.2
|
||||
|
||||
## 2.0.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b6f368]
|
||||
- Updated dependencies [eaf326e]
|
||||
- @llamaindex/core@0.6.1
|
||||
|
||||
## 2.0.0
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [93bc0ff]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [5189b44]
|
||||
- @llamaindex/core@0.6.0
|
||||
|
||||
## 1.0.8
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@llamaindex/node-parser",
|
||||
"version": "2.0.2",
|
||||
"version": "1.0.8",
|
||||
"description": "Node parser for LlamaIndex",
|
||||
"type": "module",
|
||||
"exports": {
|
||||
|
||||
@@ -1,35 +1,5 @@
|
||||
# @llamaindex/anthropic
|
||||
|
||||
## 0.3.2
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9c63f3f]
|
||||
- @llamaindex/core@0.6.2
|
||||
|
||||
## 0.3.1
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b6f368]
|
||||
- Updated dependencies [eaf326e]
|
||||
- @llamaindex/core@0.6.1
|
||||
|
||||
## 0.3.0
|
||||
|
||||
### Minor Changes
|
||||
|
||||
- 91a18e7: Added support for structured output in the chat api of openai and ollama
|
||||
Added structured output parameter in the provider
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [93bc0ff]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [5189b44]
|
||||
- @llamaindex/core@0.6.0
|
||||
|
||||
## 0.2.6
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/anthropic",
|
||||
"description": "Anthropic Adapter for LlamaIndex",
|
||||
"version": "0.3.2",
|
||||
"version": "0.2.6",
|
||||
"type": "module",
|
||||
"main": "./dist/index.cjs",
|
||||
"module": "./dist/index.js",
|
||||
|
||||
@@ -191,7 +191,6 @@ export class Anthropic extends ToolCallLLM<
|
||||
].contextWindow
|
||||
: 200000,
|
||||
tokenizer: undefined,
|
||||
structuredOutput: false,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,33 +1,5 @@
|
||||
# @llamaindex/clip
|
||||
|
||||
## 0.0.48
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9c63f3f]
|
||||
- @llamaindex/openai@0.3.0
|
||||
- @llamaindex/core@0.6.2
|
||||
|
||||
## 0.0.47
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b6f368]
|
||||
- Updated dependencies [eaf326e]
|
||||
- @llamaindex/core@0.6.1
|
||||
- @llamaindex/openai@0.2.1
|
||||
|
||||
## 0.0.46
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [93bc0ff]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [5189b44]
|
||||
- @llamaindex/core@0.6.0
|
||||
- @llamaindex/openai@0.2.0
|
||||
|
||||
## 0.0.45
|
||||
|
||||
### Patch Changes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@llamaindex/clip",
|
||||
"description": "Clip Embedding Adapter for LlamaIndex",
|
||||
"version": "0.0.48",
|
||||
"version": "0.0.45",
|
||||
"type": "module",
|
||||
"types": "dist/index.d.ts",
|
||||
"main": "dist/index.cjs",
|
||||
|
||||
@@ -1,30 +1,5 @@
|
||||
# @llamaindex/cohere
|
||||
|
||||
## 0.0.16
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [9c63f3f]
|
||||
- @llamaindex/core@0.6.2
|
||||
|
||||
## 0.0.15
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [1b6f368]
|
||||
- Updated dependencies [eaf326e]
|
||||
- @llamaindex/core@0.6.1
|
||||
|
||||
## 0.0.14
|
||||
|
||||
### Patch Changes
|
||||
|
||||
- Updated dependencies [21bebfc]
|
||||
- Updated dependencies [93bc0ff]
|
||||
- Updated dependencies [91a18e7]
|
||||
- Updated dependencies [5189b44]
|
||||
- @llamaindex/core@0.6.0
|
||||
|
||||
## 0.0.13
|
||||
|
||||
### Patch Changes
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user