diff --git a/.changeset/shiny-camels-deny.md b/.changeset/shiny-camels-deny.md new file mode 100644 index 0000000000000000000000000000000000000000..ca8da4eff6193d4261e0f32cb39d0be701d69776 --- /dev/null +++ b/.changeset/shiny-camels-deny.md @@ -0,0 +1,6 @@ +--- +"llamaindex": patch +"@llamaindex/workflow": patch +--- + +feat: make AgentWorkflow llm param optional diff --git a/apps/next/src/content/docs/llamaindex/modules/workflows.mdx b/apps/next/src/content/docs/llamaindex/modules/workflows.mdx index f717bd5f57768a63e392eb108f7012f39c8afb15..eb53567a428ad76fec3e8ed2f4ca62614559b12e 100644 --- a/apps/next/src/content/docs/llamaindex/modules/workflows.mdx +++ b/apps/next/src/content/docs/llamaindex/modules/workflows.mdx @@ -119,7 +119,7 @@ Lastly, we run the workflow. The `.run()` method is async, so we use await here Optionally, you can choose to use a shared context between steps by specifying a context type when creating the workflow. Here's an example where multiple steps access a shared state: ```typescript -import { HandlerContext } from "@llamaindex/workflow"; +import { HandlerContext } from "llamaindex"; type MyContextData = { query: string; diff --git a/examples/agentworkflow/multiple_agents.ts b/examples/agentworkflow/multiple_agents.ts index 4ff86699da1b6e1f3d6230a6a3339f667fd7ebb2..1340ebc98ca605b0317e6c522d3165dbd9af163f 100644 --- a/examples/agentworkflow/multiple_agents.ts +++ b/examples/agentworkflow/multiple_agents.ts @@ -4,7 +4,6 @@ * 2. TemperatureConverterAgent - Converts the temperature from Fahrenheit to Celsius */ import { OpenAI } from "@llamaindex/openai"; -import { StopEvent } from "@llamaindex/workflow"; import { AgentInput, AgentOutput, @@ -14,6 +13,7 @@ import { AgentWorkflow, FunctionAgent, FunctionTool, + StopEvent, } from "llamaindex"; import { z } from "zod"; diff --git a/examples/agentworkflow/single_agent.ts b/examples/agentworkflow/single_agent.ts index ab1300151458290d3afaf011ffa73b9bf4364891..9a849ab52e3a30c54c6ecc03caccc25c20463130 100644 --- a/examples/agentworkflow/single_agent.ts +++ b/examples/agentworkflow/single_agent.ts @@ -2,17 +2,18 @@ * This example shows how to use AgentWorkflow as a single agent with tools */ import { OpenAI } from "@llamaindex/openai"; -import { AgentWorkflow } from "llamaindex"; +import { AgentWorkflow, Settings } from "llamaindex"; import { getWeatherTool } from "../agent/utils/tools"; const llm = new OpenAI({ model: "gpt-4o", }); +Settings.llm = llm; + async function singleWeatherAgent() { const workflow = AgentWorkflow.fromTools({ tools: [getWeatherTool], - llm, verbose: false, }); diff --git a/examples/node/workflow/basic.ts b/examples/node/workflow/basic.ts index 39c8fa9d112299d34bb632f8cd96d56b6fa976ed..65d855ddc9b32cdcc596a07ee4e247afb03e442f 100644 --- a/examples/node/workflow/basic.ts +++ b/examples/node/workflow/basic.ts @@ -1,4 +1,4 @@ -import { StartEvent, StopEvent, Workflow } from "@llamaindex/workflow"; +import { StartEvent, StopEvent, Workflow } from "llamaindex"; type ContextData = { counter: number; diff --git a/examples/workflow/app-creator.ts b/examples/workflow/app-creator.ts index c1b05659eb24fbe3b9015a5f9a66fa34553da916..08f9508c69cf8188405a2cb46d63299651a108bc 100644 --- a/examples/workflow/app-creator.ts +++ b/examples/workflow/app-creator.ts @@ -5,7 +5,7 @@ import { StopEvent, Workflow, WorkflowEvent, -} from "@llamaindex/workflow"; +} from "llamaindex"; const MAX_REVIEWS = 3; diff --git a/examples/workflow/conditional.ts b/examples/workflow/conditional.ts index 6a2e384069f7eb959e25c5f1875bae9964aa2ebf..25fafe5017fbe08d57d3db51e2cda12de38ffefd 100644 --- a/examples/workflow/conditional.ts +++ b/examples/workflow/conditional.ts @@ -5,7 +5,7 @@ import { StopEvent, Workflow, WorkflowEvent, -} from "@llamaindex/workflow"; +} from "llamaindex"; // Create LLM instance const llm = new OpenAI(); diff --git a/examples/workflow/joke.ts b/examples/workflow/joke.ts index b13e4dd1813d2725675157534a5a85158908d5b3..76f5ccbfb164edf42643747b3533a5d3226febb5 100644 --- a/examples/workflow/joke.ts +++ b/examples/workflow/joke.ts @@ -1,10 +1,5 @@ import { OpenAI } from "@llamaindex/openai"; -import { - StartEvent, - StopEvent, - Workflow, - WorkflowEvent, -} from "@llamaindex/workflow"; +import { StartEvent, StopEvent, Workflow, WorkflowEvent } from "llamaindex"; // Create LLM instance const llm = new OpenAI(); diff --git a/examples/workflow/stream-events.ts b/examples/workflow/stream-events.ts index 8d337b3540ecc37b94a945ea369482a844d195f6..576229c9233f40b3595680533a8e11bd0442e64c 100644 --- a/examples/workflow/stream-events.ts +++ b/examples/workflow/stream-events.ts @@ -5,7 +5,7 @@ import { StopEvent, Workflow, WorkflowEvent, -} from "@llamaindex/workflow"; +} from "llamaindex"; // Create LLM instance const llm = new OpenAI(); diff --git a/examples/workflow/timeout.ts b/examples/workflow/timeout.ts index 261fb39808901dd5c33e47cf0f4abe85d3b16b2f..fee67464d17e747331a76055ca310239f48c8b60 100644 --- a/examples/workflow/timeout.ts +++ b/examples/workflow/timeout.ts @@ -1,4 +1,4 @@ -import { StartEvent, StopEvent, Workflow } from "@llamaindex/workflow"; +import { StartEvent, StopEvent, Workflow } from "llamaindex"; const longRunning = async (_: unknown, ev: StartEvent<string>) => { await new Promise((resolve) => setTimeout(resolve, 2000)); // Wait for 2 seconds diff --git a/examples/workflow/validation.ts b/examples/workflow/validation.ts index 7bfacf8442e334e34b6b1790da48307b201f9bb0..2b34fd63849669d5db68c7ed63ef82079041681a 100644 --- a/examples/workflow/validation.ts +++ b/examples/workflow/validation.ts @@ -1,10 +1,5 @@ import { OpenAI } from "@llamaindex/openai"; -import { - StartEvent, - StopEvent, - Workflow, - WorkflowEvent, -} from "@llamaindex/workflow"; +import { StartEvent, StopEvent, Workflow, WorkflowEvent } from "llamaindex"; // Create LLM instance const llm = new OpenAI(); diff --git a/packages/llamaindex/src/index.edge.ts b/packages/llamaindex/src/index.edge.ts index 3a79a2080521af7d81a55f909a21fdc55aa9619f..5750a8f7c59ebc34d73e63594b83b82d80b5a735 100644 --- a/packages/llamaindex/src/index.edge.ts +++ b/packages/llamaindex/src/index.edge.ts @@ -67,6 +67,7 @@ export * from "@llamaindex/core/storage/index-store"; export * from "@llamaindex/core/storage/kv-store"; export * from "@llamaindex/core/utils"; export * from "@llamaindex/openai"; +export * from "@llamaindex/workflow"; export * from "@llamaindex/workflow/agent"; export * from "./agent/index.js"; export * from "./cloud/index.js"; diff --git a/packages/workflow/src/agent/agent-workflow.ts b/packages/workflow/src/agent/agent-workflow.ts index aa83ad3be2d5e33195dfe5b7b11c486817b22dc5..5471ae746ef69589ff0517ce27bec89776483078 100644 --- a/packages/workflow/src/agent/agent-workflow.ts +++ b/packages/workflow/src/agent/agent-workflow.ts @@ -159,7 +159,7 @@ export class AgentWorkflow { timeout, }: { tools: BaseToolWithCall[]; - llm: ToolCallLLM; + llm?: ToolCallLLM; systemPrompt?: string; verbose?: boolean; timeout?: number; diff --git a/packages/workflow/src/agent/function-agent.ts b/packages/workflow/src/agent/function-agent.ts index d59155e8e9b5ae146c7678e1ac5a02478ceb8097..29b6e9d856432995e74df7157a4874b9b08c46c1 100644 --- a/packages/workflow/src/agent/function-agent.ts +++ b/packages/workflow/src/agent/function-agent.ts @@ -1,4 +1,5 @@ import type { JSONObject } from "@llamaindex/core/global"; +import { Settings } from "@llamaindex/core/global"; import type { BaseToolWithCall, ChatMessage, @@ -23,7 +24,7 @@ export type FunctionAgentParams = { /** * LLM to use for the agent, required. */ - llm: ToolCallLLM; + llm?: ToolCallLLM | undefined; /** * Description of the agent, useful for task assignment. * Should provide the capabilities or responsibilities of the agent. @@ -60,7 +61,7 @@ export class FunctionAgent implements BaseWorkflowAgent { systemPrompt, }: FunctionAgentParams) { this.name = name; - this.llm = llm; + this.llm = llm ?? (Settings.llm as ToolCallLLM); this.description = description; this.tools = tools; if (tools.length === 0) { diff --git a/unit/workflow/workflow-ui.test.tsx b/unit/workflow/workflow-ui.test.tsx index ffd4b30d23a86589e4ff1c665da821a3b99d4fe9..5c0b8f6d78fae6d87800e628c335dedd24b5b07f 100644 --- a/unit/workflow/workflow-ui.test.tsx +++ b/unit/workflow/workflow-ui.test.tsx @@ -1,9 +1,4 @@ -import { - StartEvent, - StopEvent, - Workflow, - WorkflowEvent, -} from "@llamaindex/workflow"; +import { StartEvent, StopEvent, Workflow, WorkflowEvent } from "llamaindex"; import type { ReactNode } from "react"; import { describe, expect, test } from "vitest"; diff --git a/unit/workflow/workflow.test.ts b/unit/workflow/workflow.test.ts index 522bc3a3768a282d80dc60583e7a826d54129f1c..fd7ed5b73cabb34f0cae975995407c7eb3cc0da4 100644 --- a/unit/workflow/workflow.test.ts +++ b/unit/workflow/workflow.test.ts @@ -1,14 +1,5 @@ -import type { - HandlerContext, - StepHandler, - StepParameters, -} from "@llamaindex/workflow"; -import { - StartEvent, - StopEvent, - Workflow, - WorkflowEvent, -} from "@llamaindex/workflow"; +import type { HandlerContext, StepHandler, StepParameters } from "llamaindex"; +import { StartEvent, StopEvent, Workflow, WorkflowEvent } from "llamaindex"; import { beforeEach, describe,