Compare commits

..

7 Commits

Author SHA1 Message Date
Alex Yang 7b93a22a33 fix: e2e 2024-11-10 19:43:32 -08:00
Alex Yang 2703f32f9f fix: type 2024-11-10 19:23:30 -08:00
Alex Yang 39ef2e5096 fix: type 2024-11-10 19:19:20 -08:00
Alex Yang 23d19f45e3 fix: type 2024-11-10 19:16:52 -08:00
Alex Yang e2110e4eaa fix: type 2024-11-10 19:13:49 -08:00
Alex Yang ab06204a92 Create pink-socks-kneel.md 2024-11-10 19:09:42 -08:00
Alex Yang e02b4e8afc chore: bump @huggingface/transformers 2024-11-10 19:07:21 -08:00
70 changed files with 222 additions and 692 deletions
+10
View File
@@ -0,0 +1,10 @@
---
"@llamaindex/env": patch
"llamaindex": patch
"@llamaindex/clip": patch
"@llamaindex/huggingface": patch
---
chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
-8
View File
@@ -1,13 +1,5 @@
# docs
## 0.0.113
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.112
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "docs",
"version": "0.0.113",
"version": "0.0.112",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
-13
View File
@@ -1,18 +1,5 @@
# @llamaindex/doc
## 0.0.11
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
- @llamaindex/cloud@2.0.6
- @llamaindex/core@0.4.6
- @llamaindex/node-parser@0.0.7
- @llamaindex/openai@0.1.31
- @llamaindex/readers@1.0.7
## 0.0.10
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/doc",
"version": "0.0.11",
"version": "0.0.10",
"private": true,
"scripts": {
"build": "pnpm run build:docs && next build",
@@ -1,13 +1,5 @@
# @llamaindex/cloudflare-worker-agent-test
## 0.0.105
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.104
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloudflare-worker-agent-test",
"version": "0.0.105",
"version": "0.0.104",
"type": "module",
"private": true,
"scripts": {
@@ -1,11 +1,5 @@
# @llamaindex/llama-parse-browser-test
## 0.0.26
### Patch Changes
- @llamaindex/cloud@2.0.6
## 0.0.25
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/llama-parse-browser-test",
"private": true,
"version": "0.0.26",
"version": "0.0.25",
"type": "module",
"scripts": {
"dev": "vite",
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/next-agent-test
## 0.1.105
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.1.104
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-agent-test",
"version": "0.1.105",
"version": "0.1.104",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,13 +1,5 @@
# test-edge-runtime
## 0.1.104
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.1.103
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/nextjs-edge-runtime-test",
"version": "0.1.104",
"version": "0.1.103",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,13 +1,5 @@
# @llamaindex/next-node-runtime
## 0.0.86
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.85
### Patch Changes
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/next-node-runtime-test",
"version": "0.0.86",
"version": "0.0.85",
"private": true,
"scripts": {
"dev": "next dev",
@@ -1,13 +1,5 @@
# @llamaindex/waku-query-engine-test
## 0.0.105
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.104
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/waku-query-engine-test",
"version": "0.0.105",
"version": "0.0.104",
"type": "module",
"private": true,
"scripts": {
-3
View File
@@ -1,3 +0,0 @@
import { OpenAI } from "./openai.js";
export class Ollama extends OpenAI {}
+1 -11
View File
@@ -15,17 +15,7 @@ export async function resolve(specifier, context, nextResolve) {
const targetUrl = fileURLToPath(result.url).replace(/\.js$/, ".ts");
let relativePath = relative(packageDistDir, targetUrl);
// todo: make it more generic if we have more sub modules fixtures in the future
if (relativePath.startsWith("../../llm/anthropic")) {
relativePath = relativePath.replace(
"../../llm/ollama/dist/index.ts",
"llm/anthropic.ts",
);
} else if (relativePath.startsWith("../../llm/ollama")) {
relativePath = relativePath.replace(
"../../llm/ollama/dist/index.ts",
"llm/ollama.ts",
);
} else if (relativePath.startsWith("../../llm/openai")) {
if (relativePath.startsWith("../../llm/openai")) {
relativePath = relativePath.replace(
"../../llm/openai/dist/index.ts",
"llm/openai.ts",
-35
View File
@@ -1,35 +0,0 @@
import { Ollama } from "@llamaindex/ollama";
import assert from "node:assert";
import { test } from "node:test";
import { getWeatherTool } from "./fixtures/tools.js";
import { mockLLMEvent } from "./utils.js";
await test("ollama", async (t) => {
await mockLLMEvent(t, "ollama");
await t.test("ollama function call", async (t) => {
const llm = new Ollama({
model: "llama3.2",
});
const chatResponse = await llm.chat({
messages: [
{
role: "user",
content: "What is the weather in Paris?",
},
],
tools: [getWeatherTool],
});
if (
chatResponse.message.options &&
"toolCall" in chatResponse.message.options
) {
assert.equal(chatResponse.message.options.toolCall.length, 1);
assert.equal(
chatResponse.message.options.toolCall[0]!.name,
getWeatherTool.metadata.name,
);
} else {
throw new Error("Expected tool calls in response");
}
});
});
-37
View File
@@ -1,37 +0,0 @@
{
"llmEventStart": [
{
"id": "PRESERVE_0",
"messages": [
{
"role": "user",
"content": "What is the weather in Paris?"
}
]
}
],
"llmEventEnd": [
{
"id": "PRESERVE_0",
"response": {
"message": {
"role": "assistant",
"content": "",
"options": {
"toolCall": [
{
"name": "getWeather",
"input": {
"city": "Paris"
},
"id": "5d198775-5268-4552-993b-9ecb4425385b"
}
]
}
},
"raw": null
}
}
],
"llmEventStream": []
}
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/autotool
## 5.0.9
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 5.0.8
### Patch Changes
@@ -1,14 +1,5 @@
# @llamaindex/autotool-01-node-example
## 0.0.52
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
- @llamaindex/autotool@5.0.9
## 0.0.51
### Patch Changes
@@ -13,5 +13,5 @@
"scripts": {
"start": "node --import tsx --import @llamaindex/autotool/node ./src/index.ts"
},
"version": "0.0.52"
"version": "0.0.51"
}
@@ -1,14 +1,5 @@
# @llamaindex/autotool-02-next-example
## 0.1.96
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
- @llamaindex/autotool@5.0.9
## 0.1.95
### Patch Changes
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool-02-next-example",
"private": true,
"version": "0.1.96",
"version": "0.1.95",
"scripts": {
"dev": "next dev",
"build": "next build",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/autotool",
"type": "module",
"version": "5.0.9",
"version": "5.0.8",
"description": "auto transpile your JS function to LLM Agent compatible",
"files": [
"dist",
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/cloud
## 2.0.6
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 2.0.5
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/cloud",
"version": "2.0.6",
"version": "2.0.5",
"type": "module",
"license": "MIT",
"scripts": {
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/community
## 0.0.64
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 0.0.63
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/community",
"description": "Community package for LlamaIndexTS",
"version": "0.0.64",
"version": "0.0.63",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
-7
View File
@@ -1,12 +1,5 @@
# @llamaindex/core
## 0.4.6
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
## 0.4.5
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/core",
"type": "module",
"version": "0.4.6",
"version": "0.4.5",
"description": "LlamaIndex Core Module",
"exports": {
"./agent": {
+2 -1
View File
@@ -1,4 +1,5 @@
import { extractText, streamConverter } from "../utils";
import { streamConverter } from "../utils";
import { extractText } from "../utils/llms";
import type {
ChatResponse,
ChatResponseChunk,
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/env
## 0.1.20
### Patch Changes
- 4fc001c: chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
## 0.1.19
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/env",
"description": "environment wrapper, supports all JS environment including node, deno, bun, edge runtime, and cloudflare worker",
"version": "0.1.20",
"version": "0.1.19",
"type": "module",
"types": "dist/index.d.ts",
"module": "dist/index.js",
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/experimental
## 0.0.121
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
## 0.0.120
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/experimental",
"description": "Experimental package for LlamaIndexTS",
"version": "0.0.121",
"version": "0.0.120",
"type": "module",
"types": "dist/type/index.d.ts",
"main": "dist/cjs/index.js",
-29
View File
@@ -1,34 +1,5 @@
# llamaindex
## 0.8.9
### Patch Changes
- 4fc001c: chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
- 4d4cd8a: feat: support ollama tool call
Note that `OllamaEmbedding` now is not the subclass of `Ollama`.
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- @llamaindex/env@0.1.20
- @llamaindex/clip@0.0.15
- @llamaindex/huggingface@0.0.15
- @llamaindex/ollama@0.0.22
- @llamaindex/cloud@2.0.6
- @llamaindex/core@0.4.6
- @llamaindex/node-parser@0.0.7
- @llamaindex/anthropic@0.0.15
- @llamaindex/deepinfra@0.0.15
- @llamaindex/groq@0.0.30
- @llamaindex/openai@0.1.31
- @llamaindex/portkey-ai@0.0.15
- @llamaindex/replicate@0.0.15
- @llamaindex/readers@1.0.7
## 0.8.8
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "llamaindex",
"version": "0.8.9",
"version": "0.8.8",
"license": "MIT",
"type": "module",
"keywords": [
+1 -5
View File
@@ -1,9 +1,4 @@
export * from "@llamaindex/core/agent";
export {
OllamaAgent,
OllamaAgentWorker,
type OllamaAgentParams,
} from "@llamaindex/ollama";
export {
AnthropicAgent,
AnthropicAgentWorker,
@@ -21,6 +16,7 @@ export {
ReActAgent,
type ReACTAgentParams,
} from "./react.js";
// todo: ParallelAgent
// todo: CustomAgent
// todo: ReactMultiModal
@@ -1 +1,7 @@
export { OllamaEmbedding } from "@llamaindex/ollama";
import type { BaseEmbedding } from "@llamaindex/core/embeddings";
import { Ollama } from "@llamaindex/ollama";
/**
* OllamaEmbedding is an alias for Ollama that implements the BaseEmbedding interface.
*/
export class OllamaEmbedding extends Ollama implements BaseEmbedding {}
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/node-parser
## 0.0.7
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 0.0.6
### Patch Changes
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@llamaindex/node-parser",
"version": "0.0.7",
"version": "0.0.6",
"description": "Node parser for LlamaIndex",
"type": "module",
"exports": {
@@ -1,13 +1,5 @@
# @llamaindex/anthropic
## 0.0.15
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 0.0.14
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/anthropic",
"description": "Anthropic Adapter for LlamaIndex",
"version": "0.0.15",
"version": "0.0.14",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
-13
View File
@@ -1,18 +1,5 @@
# @llamaindex/clip
## 0.0.15
### Patch Changes
- 4fc001c: chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
- @llamaindex/openai@0.1.31
## 0.0.14
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/clip",
"description": "Clip Embedding Adapter for LlamaIndex",
"version": "0.0.15",
"version": "0.0.14",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
@@ -1,14 +1,5 @@
# @llamaindex/deepinfra
## 0.0.15
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
- @llamaindex/openai@0.1.31
## 0.0.14
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/deepinfra",
"description": "Deepinfra Adapter for LlamaIndex",
"version": "0.0.15",
"version": "0.0.14",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/groq
## 0.0.30
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/openai@0.1.31
## 0.0.29
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/groq",
"description": "Groq Adapter for LlamaIndex",
"version": "0.0.30",
"version": "0.0.29",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,18 +1,5 @@
# @llamaindex/huggingface
## 0.0.15
### Patch Changes
- 4fc001c: chore: bump `@huggingface/transformers`
Upgrade to v3, please read https://github.com/huggingface/transformers.js/releases/tag/3.0.0 for more information.
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
- @llamaindex/openai@0.1.31
## 0.0.14
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/huggingface",
"description": "Huggingface Adapter for LlamaIndex",
"version": "0.0.15",
"version": "0.0.14",
"type": "module",
"types": "dist/index.d.ts",
"main": "dist/index.cjs",
-12
View File
@@ -1,17 +1,5 @@
# @llamaindex/ollama
## 0.0.22
### Patch Changes
- 4d4cd8a: feat: support ollama tool call
Note that `OllamaEmbedding` now is not the subclass of `Ollama`.
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 0.0.21
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/ollama",
"description": "Ollama Adapter for LlamaIndex",
"version": "0.0.22",
"version": "0.0.21",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
-33
View File
@@ -1,33 +0,0 @@
import {
LLMAgent,
LLMAgentWorker,
type LLMAgentParams,
} from "@llamaindex/core/agent";
import { Settings } from "@llamaindex/core/global";
import { Ollama } from "./llm";
// This is likely not necessary anymore but leaving it here just incase it's in use elsewhere
export type OllamaAgentParams = LLMAgentParams & {
model?: string;
};
export class OllamaAgentWorker extends LLMAgentWorker {}
export class OllamaAgent extends LLMAgent {
constructor(params: OllamaAgentParams) {
const llm =
params.llm ??
(Settings.llm instanceof Ollama
? (Settings.llm as Ollama)
: !params.model
? (() => {
throw new Error("No model provided");
})()
: new Ollama({ model: params.model }));
super({
...params,
llm,
});
}
}
@@ -1,29 +0,0 @@
import { BaseEmbedding } from "@llamaindex/core/embeddings";
import { Ollama, type OllamaParams } from "./llm";
export class OllamaEmbedding extends BaseEmbedding {
private readonly llm: Ollama;
constructor(params: OllamaParams) {
super();
this.llm = new Ollama(params);
}
private async getEmbedding(prompt: string): Promise<number[]> {
const payload = {
model: this.llm.model,
prompt,
options: {
...this.llm.options,
},
};
const response = await this.llm.ollama.embeddings({
...payload,
});
return response.embedding;
}
async getTextEmbedding(text: string): Promise<number[]> {
return this.getEmbedding(text);
}
}
+172 -7
View File
@@ -1,7 +1,172 @@
export {
OllamaAgent,
OllamaAgentWorker,
type OllamaAgentParams,
} from "./agent";
export { OllamaEmbedding } from "./embedding";
export { Ollama, type OllamaParams } from "./llm";
import { BaseEmbedding } from "@llamaindex/core/embeddings";
import type {
ChatResponse,
ChatResponseChunk,
CompletionResponse,
LLM,
LLMChatParamsNonStreaming,
LLMChatParamsStreaming,
LLMCompletionParamsNonStreaming,
LLMCompletionParamsStreaming,
LLMMetadata,
} from "@llamaindex/core/llms";
import { extractText, streamConverter } from "@llamaindex/core/utils";
import {
Ollama as OllamaBase,
type Config,
type ChatResponse as OllamaChatResponse,
type GenerateResponse as OllamaGenerateResponse,
type Options,
} from "ollama/browser";
const messageAccessor = (part: OllamaChatResponse): ChatResponseChunk => {
return {
raw: part,
delta: part.message.content,
};
};
const completionAccessor = (
part: OllamaGenerateResponse,
): CompletionResponse => {
return { text: part.response, raw: part };
};
export type OllamaParams = {
model: string;
config?: Partial<Config>;
options?: Partial<Options>;
};
export class Ollama extends BaseEmbedding implements LLM {
public readonly ollama: OllamaBase;
// https://ollama.ai/library
model: string;
options: Partial<Omit<Options, "num_ctx" | "top_p" | "temperature">> &
Pick<Options, "num_ctx" | "top_p" | "temperature"> = {
num_ctx: 4096,
top_p: 0.9,
temperature: 0.7,
};
constructor(params: OllamaParams) {
super();
this.model = params.model;
this.ollama = new OllamaBase(params.config);
if (params.options) {
this.options = {
...this.options,
...params.options,
};
}
}
get metadata(): LLMMetadata {
const { temperature, top_p, num_ctx } = this.options;
return {
model: this.model,
temperature: temperature,
topP: top_p,
maxTokens: this.options.num_ctx,
contextWindow: num_ctx,
tokenizer: undefined,
};
}
chat(
params: LLMChatParamsStreaming,
): Promise<AsyncIterable<ChatResponseChunk>>;
chat(params: LLMChatParamsNonStreaming): Promise<ChatResponse>;
async chat(
params: LLMChatParamsNonStreaming | LLMChatParamsStreaming,
): Promise<ChatResponse | AsyncIterable<ChatResponseChunk>> {
const { messages, stream } = params;
const payload = {
model: this.model,
messages: messages.map((message) => ({
role: message.role,
content: extractText(message.content),
})),
stream: !!stream,
options: {
...this.options,
},
};
if (!stream) {
const chatResponse = await this.ollama.chat({
...payload,
stream: false,
});
return {
message: {
role: "assistant",
content: chatResponse.message.content,
},
raw: chatResponse,
};
} else {
const stream = await this.ollama.chat({
...payload,
stream: true,
});
return streamConverter(stream, messageAccessor);
}
}
complete(
params: LLMCompletionParamsStreaming,
): Promise<AsyncIterable<CompletionResponse>>;
complete(
params: LLMCompletionParamsNonStreaming,
): Promise<CompletionResponse>;
async complete(
params: LLMCompletionParamsStreaming | LLMCompletionParamsNonStreaming,
): Promise<CompletionResponse | AsyncIterable<CompletionResponse>> {
const { prompt, stream } = params;
const payload = {
model: this.model,
prompt: extractText(prompt),
stream: !!stream,
options: {
...this.options,
},
};
if (!stream) {
const response = await this.ollama.generate({
...payload,
stream: false,
});
return {
text: response.response,
raw: response,
};
} else {
const stream = await this.ollama.generate({
...payload,
stream: true,
});
return streamConverter(stream, completionAccessor);
}
}
private async getEmbedding(prompt: string): Promise<number[]> {
const payload = {
model: this.model,
prompt,
options: {
...this.options,
},
};
const response = await this.ollama.embeddings({
...payload,
});
return response.embedding;
}
async getTextEmbedding(text: string): Promise<number[]> {
return this.getEmbedding(text);
}
}
-224
View File
@@ -1,224 +0,0 @@
import { wrapLLMEvent } from "@llamaindex/core/decorator";
import {
ToolCallLLM,
type BaseTool,
type ChatResponse,
type ChatResponseChunk,
type CompletionResponse,
type LLMChatParamsNonStreaming,
type LLMChatParamsStreaming,
type LLMCompletionParamsNonStreaming,
type LLMCompletionParamsStreaming,
type LLMMetadata,
type ToolCallLLMMessageOptions,
} from "@llamaindex/core/llms";
import { extractText, streamConverter } from "@llamaindex/core/utils";
import { randomUUID } from "@llamaindex/env";
import type { ChatRequest, GenerateRequest, Tool } from "ollama";
import {
Ollama as OllamaBase,
type Config,
type ChatResponse as OllamaChatResponse,
type GenerateResponse as OllamaGenerateResponse,
type Options,
} from "ollama/browser";
const messageAccessor = (
part: OllamaChatResponse,
): ChatResponseChunk<ToolCallLLMMessageOptions> => {
if (part.message.tool_calls) {
return {
raw: part,
delta: part.message.content,
options: {
toolCall: part.message.tool_calls.map((toolCall) => ({
name: toolCall.function.name,
input: toolCall.function.arguments,
id: randomUUID(),
})),
},
};
}
return {
raw: part,
delta: part.message.content,
};
};
const completionAccessor = (
part: OllamaGenerateResponse,
): CompletionResponse => {
return { text: part.response, raw: part };
};
export type OllamaParams = {
model: string;
config?: Partial<Config>;
options?: Partial<Options>;
};
export class Ollama extends ToolCallLLM {
supportToolCall: boolean = true;
public readonly ollama: OllamaBase;
// https://ollama.ai/library
model: string;
options: Partial<Omit<Options, "num_ctx" | "top_p" | "temperature">> &
Pick<Options, "num_ctx" | "top_p" | "temperature"> = {
num_ctx: 4096,
top_p: 0.9,
temperature: 0.7,
};
constructor(params: OllamaParams) {
super();
this.model = params.model;
this.ollama = new OllamaBase(params.config);
if (params.options) {
this.options = {
...this.options,
...params.options,
};
}
}
get metadata(): LLMMetadata {
const { temperature, top_p, num_ctx } = this.options;
return {
model: this.model,
temperature: temperature,
topP: top_p,
maxTokens: this.options.num_ctx,
contextWindow: num_ctx,
tokenizer: undefined,
};
}
chat(
params: LLMChatParamsStreaming<ToolCallLLMMessageOptions>,
): Promise<AsyncIterable<ChatResponseChunk>>;
chat(
params: LLMChatParamsNonStreaming<ToolCallLLMMessageOptions>,
): Promise<ChatResponse<ToolCallLLMMessageOptions>>;
@wrapLLMEvent
async chat(
params:
| LLMChatParamsNonStreaming<object, ToolCallLLMMessageOptions>
| LLMChatParamsStreaming<object, ToolCallLLMMessageOptions>,
): Promise<
ChatResponse<ToolCallLLMMessageOptions> | AsyncIterable<ChatResponseChunk>
> {
const { messages, stream, tools } = params;
const payload: ChatRequest = {
model: this.model,
messages: messages.map((message) => {
if (message.options && "toolResult" in message.options) {
return {
role: "tool",
content: message.options.toolResult.result,
};
}
return {
role: message.role,
content: extractText(message.content),
};
}),
stream: !!stream,
options: {
...this.options,
},
};
if (tools) {
payload.tools = tools.map((tool) => Ollama.toTool(tool));
}
if (!stream) {
const chatResponse = await this.ollama.chat({
...payload,
stream: false,
});
if (chatResponse.message.tool_calls) {
return {
message: {
role: "assistant",
content: chatResponse.message.content,
options: {
toolCall: chatResponse.message.tool_calls.map((toolCall) => ({
name: toolCall.function.name,
input: toolCall.function.arguments,
id: randomUUID(),
})),
},
},
raw: chatResponse,
};
}
return {
message: {
role: "assistant",
content: chatResponse.message.content,
},
raw: chatResponse,
};
} else {
const stream = await this.ollama.chat({
...payload,
stream: true,
});
return streamConverter(stream, messageAccessor);
}
}
complete(
params: LLMCompletionParamsStreaming,
): Promise<AsyncIterable<CompletionResponse>>;
complete(
params: LLMCompletionParamsNonStreaming,
): Promise<CompletionResponse>;
async complete(
params: LLMCompletionParamsStreaming | LLMCompletionParamsNonStreaming,
): Promise<CompletionResponse | AsyncIterable<CompletionResponse>> {
const { prompt, stream } = params;
const payload: GenerateRequest = {
model: this.model,
prompt: extractText(prompt),
stream: !!stream,
options: {
...this.options,
},
};
if (!stream) {
const response = await this.ollama.generate({
...payload,
stream: false,
});
return {
text: response.response,
raw: response,
};
} else {
const stream = await this.ollama.generate({
...payload,
stream: true,
});
return streamConverter(stream, completionAccessor);
}
}
static toTool(tool: BaseTool): Tool {
return {
type: "function",
function: {
name: tool.metadata.name,
description: tool.metadata.description,
parameters: {
type: tool.metadata.parameters?.type,
required: tool.metadata.parameters?.required,
properties: tool.metadata.parameters?.properties,
},
},
};
}
}
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/openai
## 0.1.31
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 0.1.30
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/openai",
"description": "OpenAI Adapter for LlamaIndex",
"version": "0.1.31",
"version": "0.1.30",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,13 +1,5 @@
# @llamaindex/portkey-ai
## 0.0.15
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 0.0.14
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/portkey-ai",
"description": "Portkey Adapter for LlamaIndex",
"version": "0.0.15",
"version": "0.0.14",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
@@ -1,13 +1,5 @@
# @llamaindex/replicate
## 0.0.15
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 0.0.14
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/replicate",
"description": "Replicate Adapter for LlamaIndex",
"version": "0.0.15",
"version": "0.0.14",
"type": "module",
"main": "./dist/index.cjs",
"module": "./dist/index.js",
-8
View File
@@ -1,13 +1,5 @@
# @llamaindex/readers
## 1.0.7
### Patch Changes
- Updated dependencies [4fc001c]
- @llamaindex/env@0.1.20
- @llamaindex/core@0.4.6
## 1.0.6
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/readers",
"description": "LlamaIndex Readers",
"version": "1.0.7",
"version": "1.0.6",
"type": "module",
"exports": {
"./node/hook": "./node/dist/hook.js",
-13
View File
@@ -1,18 +1,5 @@
# @llamaindex/unit-test
## 0.0.18
### Patch Changes
- Updated dependencies [4fc001c]
- Updated dependencies [4d4cd8a]
- llamaindex@0.8.9
- @llamaindex/cloud@2.0.6
- @llamaindex/core@0.4.6
- @llamaindex/node-parser@0.0.7
- @llamaindex/openai@0.1.31
- @llamaindex/readers@1.0.7
## 0.0.17
### Patch Changes
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@llamaindex/unit-test",
"private": true,
"version": "0.0.18",
"version": "0.0.17",
"type": "module",
"scripts": {
"test": "vitest run"