@agenite/agent
Advanced tools
+12
-0
| # @agenite/agent | ||
| ## 0.5.0 | ||
| ### Minor Changes | ||
| - b2bc136: Update token usage and have common provider interface | ||
| ### Patch Changes | ||
| - Updated dependencies [b2bc136] | ||
| - @agenite/tool@0.5.0 | ||
| - @agenite/llm@0.5.0 | ||
| ## 0.4.2 | ||
@@ -4,0 +16,0 @@ |
+6
-7
@@ -151,14 +151,13 @@ 'use strict'; | ||
| llmTokenUsages.forEach((usage) => { | ||
| const modelId = usage.modelId; | ||
| const model = usage.model; | ||
| const inputTokens = usage.inputTokens; | ||
| const outputTokens = usage.outputTokens; | ||
| const totalTokens2 = inputTokens + outputTokens; | ||
| const inputCost = 0; | ||
| const outputCost = 0; | ||
| const totalCost2 = 0; | ||
| modelBreakdown[modelId] = { | ||
| const inputCost = usage.inputCost; | ||
| const outputCost = usage.outputCost; | ||
| const totalCost2 = inputCost + outputCost; | ||
| modelBreakdown[model] = { | ||
| inputTokens, | ||
| outputTokens, | ||
| totalTokens: totalTokens2, | ||
| // TODO: introduce cost LLM | ||
| inputCost, | ||
@@ -254,3 +253,3 @@ outputCost, | ||
| }; | ||
| const tokenUsage = convertLLMTokenUsage(response.value.tokens); | ||
| const tokenUsage = convertLLMTokenUsage([response.value.tokenUsage].flat()); | ||
| if (response.value.stopReason === "toolUse") { | ||
@@ -257,0 +256,0 @@ return { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/state/state-reducer.ts","../src/state/state-applicator.ts","../src/steps/agent-call.ts","../src/utils/token-usage.ts","../src/steps/llm-call.ts","../src/steps/tool-call.ts","../src/steps/tool-result.ts","../src/steps/index.ts","../src/middlewares/context-injector.ts","../src/middlewares/apply-middlewares.ts","../src/agent.ts"],"names":["totalTokens","totalCost"],"mappings":"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","file":"index.cjs","sourcesContent":["import { BaseMessage } from '@agenite/llm';\n\n/**\n * Utility to make undefined optional\n * Example:\n * type User = {\n * name: string;\n * age: number | undefined;\n * email?: string;\n * };\n * type OptionalUser = MakeUndefinedOptional<User>;\n * // OptionalUser will be { name: string; age?: number; email?: string; }\n */\ntype MakeUndefinedOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: T[K];\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n};\n\n/**\n * Currently. If there is a state, there must be a reducer for it.\n * If there is no reducer, the state will not be updated.\n *\n * In the future, we can add a default reducer that does nothing.\n * Then, we can add a flag to the state reducer to indicate that the state is optional.\n */\nexport type StateFromReducer<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Reducer extends StateReducer<any>,\n> = MakeUndefinedOptional<{\n [K in keyof Reducer as undefined extends Reducer[K] ? never : K]: ReturnType<\n Reducer[K]\n >;\n}> & {\n messages: BaseMessage[];\n};\n\nexport type StateReducer<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n [K in keyof T]-?: (newValue?: T[K], previousValue?: T[K]) => T[K];\n} & {\n messages: (\n newValue?: BaseMessage[],\n previousValue?: BaseMessage[]\n ) => BaseMessage[];\n};\n\nexport const defaultStateReducer: StateReducer<{\n messages: BaseMessage[];\n}> = {\n messages: (newValue?: BaseMessage[], previousValue?: BaseMessage[]) => {\n if (!newValue) {\n return previousValue || [];\n }\n return [...(previousValue || []), ...newValue];\n },\n};\n","import { StateFromReducer, StateReducer } from './state-reducer';\n\nexport const stateApplicator = <\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Reducer extends StateReducer<Record<string, any>>,\n>(\n stateReducer: Reducer,\n previousState: Partial<StateFromReducer<Reducer>>,\n newState: Partial<StateFromReducer<Reducer>>\n): StateFromReducer<Reducer> => {\n // Start with a copy of previous state to ensure required fields are preserved\n const updatedState: Partial<StateFromReducer<Reducer>> = {\n ...previousState,\n messages: previousState.messages || [], // Ensure messages is always present\n };\n\n (Object.keys(newState) as (keyof StateFromReducer<Reducer>)[]).forEach(\n (key) => {\n const reducer = stateReducer[key];\n // If there's a reducer for this key, use it\n if (reducer) {\n updatedState[key] =\n reducer(newState[key], previousState[key]) || previousState[key];\n } else if (key === 'messages') {\n if (newState[key]) {\n updatedState['messages'] = newState[key];\n }\n } else if (newState[key]) {\n updatedState[key] = newState[key];\n }\n }\n );\n\n return updatedState as StateFromReducer<Reducer>;\n};\n","import { BaseNextValue, Step } from '../types/step';\nimport { BaseReturnValues } from '.';\nimport { BaseMessage, ToolResultBlock, ToolUseBlock } from '@agenite/llm';\nimport { Agent } from '../agent';\nimport { LLMCallYieldValues } from './llm-call';\nimport { ToolCallYieldValues } from './tool-call';\nimport { ToolResultYieldValues } from './tool-result';\nimport { YieldAgeniteEnd, YieldAgeniteStart } from '../types';\n\nexport type AgentCallYieldValues = {\n type: 'agenite.agent-call.start';\n content: string;\n};\n\nexport type AgentCallParams = {\n targetAgent?: string;\n input?: BaseMessage[];\n toolName?: string;\n toolUseId?: string;\n};\n\nexport const AgentStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n | AgentCallYieldValues\n | LLMCallYieldValues\n | ToolCallYieldValues\n | YieldAgeniteEnd\n | YieldAgeniteStart\n | ToolResultYieldValues,\n AgentCallParams,\n BaseNextValue\n> = {\n name: 'agenite.agent-call',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n\n const agentUseBlocks = lastMessage.content.filter(\n (block): block is ToolUseBlock => block.type === 'toolUse'\n );\n\n if (!agentUseBlocks.length) {\n throw new Error('Last message is not an agent use');\n }\n\n const agentUseBlock = agentUseBlocks[0];\n const targetAgent = (\n params.agent.agentConfig.agents as Agent[] | undefined\n )?.find((agent) => agent.agentConfig.name === agentUseBlock?.name);\n\n if (!targetAgent) {\n throw new Error(`Agent ${agentUseBlock?.name} not found`);\n }\n\n return {\n targetAgent: agentUseBlock?.name,\n input: [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: (agentUseBlock?.input as { input: string })?.input,\n },\n ],\n },\n ],\n toolName: agentUseBlock?.name,\n toolUseId: agentUseBlock?.id,\n };\n },\n execute: async function* (\n { targetAgent, input, toolName, toolUseId },\n executionContext\n ) {\n const targetAgentInstance = (\n executionContext.agent.agentConfig.agents as Agent[] | undefined\n )?.find((agent) => agent.agentConfig.name === targetAgent);\n\n if (!targetAgentInstance) {\n throw new Error(`Agent ${targetAgent} not found`);\n }\n\n const result = yield* targetAgentInstance.iterate(\n {\n messages: input,\n },\n {\n parentExecution: executionContext,\n context: executionContext.context,\n }\n );\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: [\n {\n type: 'toolResult',\n toolName: toolName,\n toolUseId: toolUseId,\n content: result.messages[result.messages.length - 1]?.content,\n isError: false,\n },\n ] as ToolResultBlock[],\n },\n ],\n },\n tokenUsage: result.tokenUsage,\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { TokenUsage } from '../types/agent';\nimport { TokenUsage as LLMTokenUsage } from '@agenite/llm';\n\n/**\n * Merges two token usage objects by adding their values together\n * @param oldUsage The existing token usage\n * @param newUsage The new token usage to merge\n * @returns A new token usage object with combined values\n */\nexport function mergeTokenUsage(\n oldUsage: TokenUsage,\n newUsage: TokenUsage\n): TokenUsage {\n return {\n inputTokens: oldUsage.inputTokens + newUsage.inputTokens,\n outputTokens: oldUsage.outputTokens + newUsage.outputTokens,\n totalTokens: oldUsage.totalTokens + newUsage.totalTokens,\n inputCost: oldUsage.inputCost + newUsage.inputCost,\n outputCost: oldUsage.outputCost + newUsage.outputCost,\n totalCost: oldUsage.totalCost + newUsage.totalCost,\n };\n}\n\n/**\n * Merges two agent token usage objects by adding their values together\n * @param oldUsage The existing agent token usage\n * @param newUsage The new agent token usage to merge\n * @returns A new agent token usage object with combined values\n */\nexport function mergeAgentTokenUsage(\n oldUsage: TokenUsage & { modelBreakdown: Record<string, TokenUsage> },\n newUsage: TokenUsage & { modelBreakdown: Record<string, TokenUsage> }\n): TokenUsage & { modelBreakdown: Record<string, TokenUsage> } {\n const mergedBreakdown: Record<string, TokenUsage> = {\n ...oldUsage.modelBreakdown,\n };\n\n // Merge model breakdowns\n Object.entries(newUsage.modelBreakdown).forEach(([model, usage]) => {\n mergedBreakdown[model] = mergeTokenUsage(\n mergedBreakdown[model] || {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n inputCost: 0,\n outputCost: 0,\n totalCost: 0,\n },\n usage\n );\n });\n\n return {\n ...mergeTokenUsage(oldUsage, newUsage),\n modelBreakdown: mergedBreakdown,\n };\n}\n\n/**\n * Converts LLM token usage to Agent token usage format\n * @param llmTokenUsages Array of LLM token usage objects\n * @returns Agent token usage object with model breakdown\n */\nexport function convertLLMTokenUsage(\n llmTokenUsages: LLMTokenUsage[]\n): TokenUsage & { modelBreakdown: Record<string, TokenUsage> } {\n const modelBreakdown: Record<string, TokenUsage> = {};\n let totalInputTokens = 0;\n let totalOutputTokens = 0;\n\n // Process each model's token usage\n llmTokenUsages.forEach((usage) => {\n const modelId = usage.modelId;\n const inputTokens = usage.inputTokens;\n const outputTokens = usage.outputTokens;\n const totalTokens = inputTokens + outputTokens;\n const inputCost = 0;\n const outputCost = 0;\n const totalCost = 0;\n\n modelBreakdown[modelId] = {\n inputTokens,\n outputTokens,\n totalTokens,\n // TODO: introduce cost LLM\n inputCost,\n outputCost,\n totalCost,\n };\n\n totalInputTokens += inputTokens;\n totalOutputTokens += outputTokens;\n });\n\n const totalTokens = totalInputTokens + totalOutputTokens;\n const totalInputCost = Object.values(modelBreakdown).reduce(\n (sum, usage) => sum + usage.inputCost,\n 0\n );\n const totalOutputCost = Object.values(modelBreakdown).reduce(\n (sum, usage) => sum + usage.outputCost,\n 0\n );\n const totalCost = totalInputCost + totalOutputCost;\n\n return {\n inputTokens: totalInputTokens,\n outputTokens: totalOutputTokens,\n totalTokens,\n inputCost: totalInputCost,\n outputCost: totalOutputCost,\n totalCost,\n modelBreakdown,\n };\n}\n","import {\n BaseMessage,\n LLMProvider,\n PartialReturn,\n ToolDefinition,\n} from '@agenite/llm';\nimport { Step } from '../types/step';\nimport { AgentTool } from '../types/agent';\nimport { BaseReturnValues } from '.';\nimport { convertLLMTokenUsage } from '../utils/token-usage';\n\nexport type LLMCallInput = {\n messages: BaseMessage[];\n instructions: string;\n tools?: ToolDefinition[];\n};\n\nexport function transformToToolDefinitions(\n tools: AgentTool[]\n): ToolDefinition[] {\n return tools.map((tool) => ({\n name: tool.name,\n description: tool.description || '',\n inputSchema: tool.inputSchema || {\n type: 'object',\n properties: {\n input: {\n type: 'string',\n description:\n 'Detailed instructions for the agent to accomplish the task. Include all necessary information and context for the agent to perform the task.',\n },\n },\n },\n }));\n}\n\nexport type LLMCallYieldValues = {\n type: 'agenite.llm-call.streaming';\n content: PartialReturn;\n} | {\n type: 'agenite.llm-call.input';\n content: LLMCallInput;\n};\n\ntype LLMCallParams = {\n provider: LLMProvider;\n messages: BaseMessage[];\n instructions: string;\n tools?: ToolDefinition[];\n stream?: boolean;\n};\n\nexport const LLMStep: Step<\n BaseReturnValues<{\n messages: BaseMessage[];\n }>,\n LLMCallYieldValues,\n LLMCallParams,\n undefined\n> = {\n name: 'agenite.llm-call',\n beforeExecute: async (params) => {\n const tools = params.agent.agentConfig.tools || [];\n const agents =\n params.agent.agentConfig.agents?.map((agent) => {\n return {\n name: agent.agentConfig.name,\n description: agent.agentConfig.description || '',\n };\n }) || [];\n return {\n provider: params.provider,\n messages: params.state.messages,\n instructions: params.instructions,\n tools: transformToToolDefinitions([...tools, ...agents]),\n stream: params.stream,\n };\n },\n\n execute: async function* (params: LLMCallParams) {\n const { provider, messages, instructions, tools, stream } = params;\n\n yield {\n type: 'agenite.llm-call.input',\n content: {\n messages,\n instructions,\n tools,\n },\n };\n\n const generator = provider.iterate(messages, {\n systemPrompt: instructions,\n tools: tools?.length ? tools : undefined,\n stream: stream ?? false,\n });\n\n let response = await generator.next();\n while (!response.done) {\n const value = response.value;\n\n yield {\n type: 'agenite.llm-call.streaming',\n content: value,\n };\n response = await generator.next();\n }\n const message = {\n role: 'assistant',\n content: response.value.content,\n } as const;\n const tokenUsage = convertLLMTokenUsage(response.value.tokens);\n\n if (response.value.stopReason === 'toolUse') {\n return {\n next: 'agenite.tool-call',\n state: {\n messages: [message],\n },\n tokenUsage,\n };\n }\n\n return {\n next: 'agenite.end',\n state: {\n messages: [message],\n },\n tokenUsage,\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { BaseReturnValues } from '.';\nimport { Step } from '../types/step';\nimport { BaseMessage, ToolUseBlock } from '@agenite/llm';\nimport { ToolResultYieldValues } from './tool-result';\nimport { ToolResponse } from '@agenite/tool';\nexport type ToolCallYieldValues = {\n type: 'agenite.tool-call.params';\n toolUseBlocks: ToolUseBlock[];\n hasAgentCall?: boolean;\n};\n\ntype ToolCallParams = {\n messages: BaseMessage[];\n};\n\nexport type ToolCallNextValue = {\n type: 'agenite.tool-call.next';\n toolResultBlocks: {\n result: ToolResponse;\n toolUseBlock: ToolUseBlock;\n }[];\n};\n\nexport const ToolStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n ToolCallYieldValues | ToolResultYieldValues,\n ToolCallParams,\n ToolCallNextValue\n> = {\n name: 'agenite.tool-call',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n return {\n messages: params.state.messages,\n };\n },\n execute: async function* (params, context) {\n const lastMessage = params.messages[params.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n const toolUseBlocks = lastMessage.content.filter(\n (block) => block.type === 'toolUse'\n );\n if (!toolUseBlocks.length) {\n throw new Error('No tool use block found');\n }\n\n const agents = context.agent.agentConfig.agents;\n\n const hasAgentCall = agents?.some((agent) =>\n toolUseBlocks.some(\n (toolUseBlock) => agent.agentConfig.name === toolUseBlock.name\n )\n );\n\n const userProvidedToolValues = yield {\n type: 'agenite.tool-call.params',\n toolUseBlocks,\n hasAgentCall,\n };\n\n if (userProvidedToolValues) {\n for (const toolUseBlock of userProvidedToolValues.toolResultBlocks) {\n yield {\n type: 'agenite.tool-result',\n result: toolUseBlock.result,\n toolUseBlock: toolUseBlock.toolUseBlock,\n };\n }\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: userProvidedToolValues.toolResultBlocks.map(\n (toolResultBlock) => ({\n type: 'toolResult',\n toolName: toolResultBlock.toolUseBlock.name,\n toolUseId: toolResultBlock.toolUseBlock.id,\n content: JSON.stringify(\n toolResultBlock.result.isError\n ? `${toolResultBlock.result.data}:${toolResultBlock.result.error}`\n : toolResultBlock.result.data\n ),\n isError: toolResultBlock.result.isError,\n })\n ),\n },\n ],\n },\n };\n }\n\n if (hasAgentCall) {\n return {\n next: 'agenite.agent-call',\n state: {},\n };\n }\n\n return {\n next: 'agenite.tool-result',\n state: {},\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { ToolUseBlock, ToolResultBlock } from '@agenite/llm';\nimport { Step } from '../types/step';\nimport { Tool, ToolResponse } from '@agenite/tool';\nimport { BaseReturnValues } from '.';\n\ntype ToolResultParams = {\n toolUseBlocks: ToolUseBlock[];\n tools: Tool[];\n};\n\nexport type ToolResultYieldValues = {\n type: 'agenite.tool-result';\n result: ToolResponse;\n toolUseBlock: ToolUseBlock;\n};\n\nexport const ToolResultStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n ToolResultYieldValues,\n ToolResultParams,\n undefined\n> = {\n name: 'agenite.tool-result',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n\n const toolUseBlocks = lastMessage.content.filter(\n (block) => block.type === 'toolUse'\n );\n\n if (!toolUseBlocks.length) {\n throw new Error('Last message is not a tool use');\n }\n return {\n toolUseBlocks: toolUseBlocks,\n tools: params.agent.agentConfig.tools!,\n };\n },\n\n execute: async function* ({ toolUseBlocks, tools }, executionContext) {\n const toolResults: ToolResultBlock[] = [];\n for (const toolUseBlock of toolUseBlocks) {\n const tool = tools.find((t) => t.name === toolUseBlock.name);\n if (!tool) {\n throw new Error(`Tool ${toolUseBlock.toolName} not found`);\n }\n const input = toolUseBlock.input;\n const result = await tool.execute({\n input,\n context: executionContext.context,\n });\n\n yield {\n type: 'agenite.tool-result',\n result,\n toolUseBlock,\n } as ToolResultYieldValues;\n\n // TODO: Handle tool content properly i.e handle images, etc.\n toolResults.push({\n type: 'toolResult',\n toolName: tool.name,\n toolUseId: toolUseBlock.id,\n content: JSON.stringify(\n result.isError ? `${result.data}:${result.error}` : result.data\n ),\n isError: result.isError,\n });\n }\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: toolResults,\n },\n ],\n },\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { StateReducer } from '../state/state-reducer';\nimport { AgentTokenUsage, BaseSteps } from '../types/agent';\nimport {\n Step,\n StepContext,\n BaseNextValue,\n BaseYieldValue,\n} from '../types/step';\n\nimport { DefaultStepType } from '../types/step';\nimport { AgentStep } from './agent-call';\nimport { LLMStep } from './llm-call';\nimport { ToolStep } from './tool-call';\nimport { ToolResultStep } from './tool-result';\n\nexport interface BaseReturnValues<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n next: DefaultStepType | (string & {});\n state: T;\n tokenUsage?: AgentTokenUsage;\n}\n\nexport type GeneratorYieldType<T extends AsyncGenerator> =\n T extends AsyncGenerator<infer Y, unknown, unknown> ? Y : never;\n\nexport type GeneratorReturnType<T extends AsyncGenerator> =\n T extends AsyncGenerator<unknown, infer R, unknown> ? R : never;\n\nexport type GeneratorNextType<T extends AsyncGenerator> =\n T extends AsyncGenerator<unknown, unknown, infer N> ? N : never;\n\nexport type AllStepsYieldValues<Steps extends BaseSteps> = GeneratorYieldType<\n ReturnType<Steps[keyof Steps]['execute']>\n>;\n\nexport type AllStepsNextValues<Steps extends BaseSteps> = GeneratorNextType<\n ReturnType<Steps[keyof Steps]['execute']>\n>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyStateReducer = StateReducer<Record<string, any>>;\n\nexport const defaultStepConfig = {\n 'agenite.llm-call': LLMStep,\n 'agenite.tool-call': ToolStep,\n 'agenite.agent-call': AgentStep,\n 'agenite.tool-result': ToolResultStep,\n};\n\nexport const executeAgentStep = async function* (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n task: Step<BaseReturnValues<any>, BaseYieldValue, unknown, BaseNextValue>,\n executionContext: StepContext<AnyStateReducer>\n) {\n const beforeResult = await task.beforeExecute(executionContext);\n const result = yield* task.execute(beforeResult, executionContext);\n const afterResult = await task.afterExecute(result, executionContext);\n return afterResult;\n};\n\nexport type DefaultStepGenerator = AsyncGenerator<\n AllStepsYieldValues<typeof defaultStepConfig>,\n unknown,\n AllStepsNextValues<typeof defaultStepConfig>\n>;\n\nexport * from './agent-call';\nexport * from './llm-call';\nexport * from './tool-call';\nexport * from './tool-result';\n","import { AsyncGeneratorMiddleware } from '../types/agent';\nimport {\n MiddlewareBaseNextValue,\n MiddlewareBaseYieldValue,\n} from '../types/middleware';\nimport { BaseNextValue } from '../types/step';\n\n/**\n * Injects the execution context into the every yield value\n * @returns\n */\nexport const executionContextInjector = (): AsyncGeneratorMiddleware<\n MiddlewareBaseYieldValue,\n unknown,\n MiddlewareBaseNextValue\n> => {\n return async function* (generator, context) {\n let nextValue: BaseNextValue | undefined = undefined;\n\n while (true) {\n const { value, done } = await generator.next(nextValue);\n\n if (done) {\n return value;\n }\n\n // Inject context into the yield value\n const valueWithContext = {\n ...value,\n // If it's a next value, use the context from the generator else inject the context\n executionContext: value.executionContext || context,\n };\n\n nextValue = yield valueWithContext;\n }\n };\n};\n","import { AsyncGeneratorMiddleware } from '../types/agent';\nimport { FullMergedMiddlewareStepGeneratorResponse } from '../types/execution';\nimport {\n MiddlewareBaseNextValue,\n MiddlewareBaseYieldValue,\n} from '../types/middleware';\nimport { StepContext } from '../types/step';\nimport { executionContextInjector } from './context-injector';\n\nexport function applyMiddlewares<\n YieldValues,\n ReturnValues,\n NextValues,\n Middlewares extends AsyncGeneratorMiddleware<\n MiddlewareBaseYieldValue,\n unknown,\n MiddlewareBaseNextValue\n >[] = [],\n>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genFunc: () => AsyncGenerator<any, any, any>,\n middlewares: Middlewares,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context: StepContext<any>\n): FullMergedMiddlewareStepGeneratorResponse<\n Middlewares,\n YieldValues & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n executionContext: StepContext<any>;\n },\n NextValues,\n ReturnValues\n> {\n return [...middlewares, executionContextInjector()].reduceRight(\n (gen, middleware) => middleware(gen, context),\n genFunc()\n );\n}\n","import {\n AgentConfig,\n BaseMiddlewares,\n BaseSteps,\n ExecutionOptions,\n} from './types/agent';\nimport { StepContext, DefaultStepType } from './types/step';\nimport { defaultStateReducer, StateFromReducer } from './state/state-reducer';\nimport { stateApplicator } from './state/state-applicator';\nimport { AnyStateReducer, BaseReturnValues, defaultStepConfig } from './steps';\nimport { executeAgentStep } from './steps';\nimport { IterateResponse } from './types/execution';\nimport { applyMiddlewares } from './middlewares/apply-middlewares';\nimport { mergeAgentTokenUsage } from './utils/token-usage';\n\nexport class Agent<\n Reducer extends AnyStateReducer = typeof defaultStateReducer,\n Steps extends BaseSteps = typeof defaultStepConfig,\n Middlewares extends BaseMiddlewares = [],\n Extensions extends Record<string, unknown> | undefined = undefined,\n> {\n constructor(\n public readonly agentConfig: AgentConfig<\n Reducer,\n Steps,\n Middlewares,\n Extensions\n >\n ) {}\n\n public async *iterate(\n input: Partial<StateFromReducer<Reducer>>,\n options?: ExecutionOptions\n ): IterateResponse<Middlewares, Steps, Reducer> {\n const reducer: Reducer =\n this.agentConfig.stateReducer || (defaultStateReducer as Reducer);\n\n const state = stateApplicator(\n reducer,\n this.agentConfig.initialState || {},\n input\n );\n\n const executionContext: StepContext<Reducer> = {\n state,\n context: options?.context || {},\n agent: this,\n parentExecution: options?.parentExecution,\n provider: this.agentConfig.provider,\n isNestedExecution: !!options?.parentExecution,\n instructions:\n this.agentConfig.instructions || 'You are a helpful assistant.',\n stream: options?.stream || true,\n tokenUsage: {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n inputCost: 0,\n outputCost: 0,\n totalCost: 0,\n modelBreakdown: {},\n },\n };\n\n const actions = this.agentConfig.steps || defaultStepConfig;\n\n const startStep = this.agentConfig.startStep || 'agenite.llm-call';\n\n const generator = async function* () {\n let currentStep: DefaultStepType | (string & {}) = startStep;\n\n yield {\n type: 'agenite.start',\n executionContext,\n };\n\n while (true) {\n if (currentStep === 'agenite.end') {\n break;\n }\n\n const step: BaseSteps[keyof BaseSteps] | undefined =\n actions[currentStep as keyof typeof actions];\n\n if (!step) {\n throw new Error(`Step ${currentStep} not found.`);\n }\n\n const result: BaseReturnValues<StateFromReducer<Reducer>> =\n yield* executeAgentStep(step, executionContext);\n\n if (result.tokenUsage) {\n executionContext.tokenUsage = mergeAgentTokenUsage(\n executionContext.tokenUsage,\n result.tokenUsage\n );\n }\n\n // Apply state changes after executor completes\n if (result.state) {\n const newState = stateApplicator(\n reducer,\n executionContext.state,\n result.state\n );\n\n executionContext.state = {\n ...executionContext.state,\n ...newState,\n };\n }\n\n if (!result.next) {\n throw new Error(\n `No next step found. Previous step: ${currentStep}. Please review the step configuration to return a valid next step.`\n );\n }\n\n currentStep = result.next;\n }\n\n yield {\n type: 'agenite.end',\n executionContext,\n };\n\n return {\n ...executionContext.state,\n tokenUsage: executionContext.tokenUsage,\n };\n };\n\n return yield* applyMiddlewares(\n generator,\n this.agentConfig.middlewares || [],\n executionContext\n );\n }\n\n async execute(\n input: Partial<StateFromReducer<Reducer>>,\n options?: ExecutionOptions\n ) {\n const iterator = this.iterate(input, options);\n let result = await iterator.next();\n while (!result.done) {\n result = await iterator.next();\n }\n\n return result.value;\n }\n}\n"]} | ||
| {"version":3,"sources":["../src/state/state-reducer.ts","../src/state/state-applicator.ts","../src/steps/agent-call.ts","../src/utils/token-usage.ts","../src/steps/llm-call.ts","../src/steps/tool-call.ts","../src/steps/tool-result.ts","../src/steps/index.ts","../src/middlewares/context-injector.ts","../src/middlewares/apply-middlewares.ts","../src/agent.ts"],"names":["totalTokens","totalCost"],"mappings":"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","file":"index.cjs","sourcesContent":["import { BaseMessage } from '@agenite/llm';\n\n/**\n * Utility to make undefined optional\n * Example:\n * type User = {\n * name: string;\n * age: number | undefined;\n * email?: string;\n * };\n * type OptionalUser = MakeUndefinedOptional<User>;\n * // OptionalUser will be { name: string; age?: number; email?: string; }\n */\ntype MakeUndefinedOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: T[K];\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n};\n\n/**\n * Currently. If there is a state, there must be a reducer for it.\n * If there is no reducer, the state will not be updated.\n *\n * In the future, we can add a default reducer that does nothing.\n * Then, we can add a flag to the state reducer to indicate that the state is optional.\n */\nexport type StateFromReducer<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Reducer extends StateReducer<any>,\n> = MakeUndefinedOptional<{\n [K in keyof Reducer as undefined extends Reducer[K] ? never : K]: ReturnType<\n Reducer[K]\n >;\n}> & {\n messages: BaseMessage[];\n};\n\nexport type StateReducer<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n [K in keyof T]-?: (newValue?: T[K], previousValue?: T[K]) => T[K];\n} & {\n messages: (\n newValue?: BaseMessage[],\n previousValue?: BaseMessage[]\n ) => BaseMessage[];\n};\n\nexport const defaultStateReducer: StateReducer<{\n messages: BaseMessage[];\n}> = {\n messages: (newValue?: BaseMessage[], previousValue?: BaseMessage[]) => {\n if (!newValue) {\n return previousValue || [];\n }\n return [...(previousValue || []), ...newValue];\n },\n};\n","import { StateFromReducer, StateReducer } from './state-reducer';\n\nexport const stateApplicator = <\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Reducer extends StateReducer<Record<string, any>>,\n>(\n stateReducer: Reducer,\n previousState: Partial<StateFromReducer<Reducer>>,\n newState: Partial<StateFromReducer<Reducer>>\n): StateFromReducer<Reducer> => {\n // Start with a copy of previous state to ensure required fields are preserved\n const updatedState: Partial<StateFromReducer<Reducer>> = {\n ...previousState,\n messages: previousState.messages || [], // Ensure messages is always present\n };\n\n (Object.keys(newState) as (keyof StateFromReducer<Reducer>)[]).forEach(\n (key) => {\n const reducer = stateReducer[key];\n // If there's a reducer for this key, use it\n if (reducer) {\n updatedState[key] =\n reducer(newState[key], previousState[key]) || previousState[key];\n } else if (key === 'messages') {\n if (newState[key]) {\n updatedState['messages'] = newState[key];\n }\n } else if (newState[key]) {\n updatedState[key] = newState[key];\n }\n }\n );\n\n return updatedState as StateFromReducer<Reducer>;\n};\n","import { BaseNextValue, Step } from '../types/step';\nimport { BaseReturnValues } from '.';\nimport { BaseMessage, ToolResultBlock, ToolUseBlock } from '@agenite/llm';\nimport { Agent } from '../agent';\nimport { LLMCallYieldValues } from './llm-call';\nimport { ToolCallYieldValues } from './tool-call';\nimport { ToolResultYieldValues } from './tool-result';\nimport { YieldAgeniteEnd, YieldAgeniteStart } from '../types';\n\nexport type AgentCallYieldValues = {\n type: 'agenite.agent-call.start';\n content: string;\n};\n\nexport type AgentCallParams = {\n targetAgent?: string;\n input?: BaseMessage[];\n toolName?: string;\n toolUseId?: string;\n};\n\nexport const AgentStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n | AgentCallYieldValues\n | LLMCallYieldValues\n | ToolCallYieldValues\n | YieldAgeniteEnd\n | YieldAgeniteStart\n | ToolResultYieldValues,\n AgentCallParams,\n BaseNextValue\n> = {\n name: 'agenite.agent-call',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n\n const agentUseBlocks = lastMessage.content.filter(\n (block): block is ToolUseBlock => block.type === 'toolUse'\n );\n\n if (!agentUseBlocks.length) {\n throw new Error('Last message is not an agent use');\n }\n\n const agentUseBlock = agentUseBlocks[0];\n const targetAgent = (\n params.agent.agentConfig.agents as Agent[] | undefined\n )?.find((agent) => agent.agentConfig.name === agentUseBlock?.name);\n\n if (!targetAgent) {\n throw new Error(`Agent ${agentUseBlock?.name} not found`);\n }\n\n return {\n targetAgent: agentUseBlock?.name,\n input: [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: (agentUseBlock?.input as { input: string })?.input,\n },\n ],\n },\n ],\n toolName: agentUseBlock?.name,\n toolUseId: agentUseBlock?.id,\n };\n },\n execute: async function* (\n { targetAgent, input, toolName, toolUseId },\n executionContext\n ) {\n const targetAgentInstance = (\n executionContext.agent.agentConfig.agents as Agent[] | undefined\n )?.find((agent) => agent.agentConfig.name === targetAgent);\n\n if (!targetAgentInstance) {\n throw new Error(`Agent ${targetAgent} not found`);\n }\n\n const result = yield* targetAgentInstance.iterate(\n {\n messages: input,\n },\n {\n parentExecution: executionContext,\n context: executionContext.context,\n }\n );\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: [\n {\n type: 'toolResult',\n toolName: toolName,\n toolUseId: toolUseId,\n content: result.messages[result.messages.length - 1]?.content,\n isError: false,\n },\n ] as ToolResultBlock[],\n },\n ],\n },\n tokenUsage: result.tokenUsage,\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { TokenUsage } from '../types/agent';\nimport { TokenUsage as LLMTokenUsage } from '@agenite/llm';\n\n/**\n * Merges two token usage objects by adding their values together\n * @param oldUsage The existing token usage\n * @param newUsage The new token usage to merge\n * @returns A new token usage object with combined values\n */\nexport function mergeTokenUsage(\n oldUsage: TokenUsage,\n newUsage: TokenUsage\n): TokenUsage {\n return {\n inputTokens: oldUsage.inputTokens + newUsage.inputTokens,\n outputTokens: oldUsage.outputTokens + newUsage.outputTokens,\n totalTokens: oldUsage.totalTokens + newUsage.totalTokens,\n inputCost: oldUsage.inputCost + newUsage.inputCost,\n outputCost: oldUsage.outputCost + newUsage.outputCost,\n totalCost: oldUsage.totalCost + newUsage.totalCost,\n };\n}\n\n/**\n * Merges two agent token usage objects by adding their values together\n * @param oldUsage The existing agent token usage\n * @param newUsage The new agent token usage to merge\n * @returns A new agent token usage object with combined values\n */\nexport function mergeAgentTokenUsage(\n oldUsage: TokenUsage & { modelBreakdown: Record<string, TokenUsage> },\n newUsage: TokenUsage & { modelBreakdown: Record<string, TokenUsage> }\n): TokenUsage & { modelBreakdown: Record<string, TokenUsage> } {\n const mergedBreakdown: Record<string, TokenUsage> = {\n ...oldUsage.modelBreakdown,\n };\n\n // Merge model breakdowns\n Object.entries(newUsage.modelBreakdown).forEach(([model, usage]) => {\n mergedBreakdown[model] = mergeTokenUsage(\n mergedBreakdown[model] || {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n inputCost: 0,\n outputCost: 0,\n totalCost: 0,\n },\n usage\n );\n });\n\n return {\n ...mergeTokenUsage(oldUsage, newUsage),\n modelBreakdown: mergedBreakdown,\n };\n}\n\n/**\n * Converts LLM token usage to Agent token usage format\n * @param llmTokenUsages Array of LLM token usage objects\n * @returns Agent token usage object with model breakdown\n */\nexport function convertLLMTokenUsage(\n llmTokenUsages: LLMTokenUsage[]\n): TokenUsage & { modelBreakdown: Record<string, TokenUsage> } {\n const modelBreakdown: Record<string, TokenUsage> = {};\n let totalInputTokens = 0;\n let totalOutputTokens = 0;\n\n // Process each model's token usage\n llmTokenUsages.forEach((usage) => {\n const model = usage.model;\n const inputTokens = usage.inputTokens;\n const outputTokens = usage.outputTokens;\n const totalTokens = inputTokens + outputTokens;\n const inputCost = usage.inputCost;\n const outputCost = usage.outputCost;\n const totalCost = inputCost + outputCost;\n\n modelBreakdown[model] = {\n inputTokens,\n outputTokens,\n totalTokens,\n inputCost,\n outputCost,\n totalCost,\n };\n\n totalInputTokens += inputTokens;\n totalOutputTokens += outputTokens;\n });\n\n const totalTokens = totalInputTokens + totalOutputTokens;\n const totalInputCost = Object.values(modelBreakdown).reduce(\n (sum, usage) => sum + usage.inputCost,\n 0\n );\n const totalOutputCost = Object.values(modelBreakdown).reduce(\n (sum, usage) => sum + usage.outputCost,\n 0\n );\n const totalCost = totalInputCost + totalOutputCost;\n\n return {\n inputTokens: totalInputTokens,\n outputTokens: totalOutputTokens,\n totalTokens,\n inputCost: totalInputCost,\n outputCost: totalOutputCost,\n totalCost,\n modelBreakdown,\n };\n}\n","import {\n BaseMessage,\n LLMProvider,\n PartialReturn,\n ToolDefinition,\n} from '@agenite/llm';\nimport { Step } from '../types/step';\nimport { AgentTool } from '../types/agent';\nimport { BaseReturnValues } from '.';\nimport { convertLLMTokenUsage } from '../utils/token-usage';\n\nexport type LLMCallInput = {\n messages: BaseMessage[];\n instructions: string;\n tools?: ToolDefinition[];\n};\n\nexport function transformToToolDefinitions(\n tools: AgentTool[]\n): ToolDefinition[] {\n return tools.map((tool) => ({\n name: tool.name,\n description: tool.description || '',\n inputSchema: tool.inputSchema || {\n type: 'object',\n properties: {\n input: {\n type: 'string',\n description:\n 'Detailed instructions for the agent to accomplish the task. Include all necessary information and context for the agent to perform the task.',\n },\n },\n },\n }));\n}\n\nexport type LLMCallYieldValues =\n | {\n type: 'agenite.llm-call.streaming';\n content: PartialReturn;\n }\n | {\n type: 'agenite.llm-call.input';\n content: LLMCallInput;\n };\n\ntype LLMCallParams = {\n provider: LLMProvider;\n messages: BaseMessage[];\n instructions: string;\n tools?: ToolDefinition[];\n stream?: boolean;\n};\n\nexport const LLMStep: Step<\n BaseReturnValues<{\n messages: BaseMessage[];\n }>,\n LLMCallYieldValues,\n LLMCallParams,\n undefined\n> = {\n name: 'agenite.llm-call',\n beforeExecute: async (params) => {\n const tools = params.agent.agentConfig.tools || [];\n const agents =\n params.agent.agentConfig.agents?.map((agent) => {\n return {\n name: agent.agentConfig.name,\n description: agent.agentConfig.description || '',\n };\n }) || [];\n return {\n provider: params.provider,\n messages: params.state.messages,\n instructions: params.instructions,\n tools: transformToToolDefinitions([...tools, ...agents]),\n stream: params.stream,\n };\n },\n\n execute: async function* (params: LLMCallParams) {\n const { provider, messages, instructions, tools, stream } = params;\n\n yield {\n type: 'agenite.llm-call.input',\n content: {\n messages,\n instructions,\n tools,\n },\n };\n\n const generator = provider.iterate(messages, {\n systemPrompt: instructions,\n tools: tools?.length ? tools : undefined,\n stream: stream ?? false,\n });\n\n let response = await generator.next();\n while (!response.done) {\n const value = response.value;\n\n yield {\n type: 'agenite.llm-call.streaming',\n content: value,\n };\n response = await generator.next();\n }\n const message = {\n role: 'assistant',\n content: response.value.content,\n } as const;\n const tokenUsage = convertLLMTokenUsage([response.value.tokenUsage].flat());\n\n if (response.value.stopReason === 'toolUse') {\n return {\n next: 'agenite.tool-call',\n state: {\n messages: [message],\n },\n tokenUsage,\n };\n }\n\n return {\n next: 'agenite.end',\n state: {\n messages: [message],\n },\n tokenUsage,\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { BaseReturnValues } from '.';\nimport { Step } from '../types/step';\nimport { BaseMessage, ToolUseBlock } from '@agenite/llm';\nimport { ToolResultYieldValues } from './tool-result';\nimport { ToolResponse } from '@agenite/tool';\nexport type ToolCallYieldValues = {\n type: 'agenite.tool-call.params';\n toolUseBlocks: ToolUseBlock[];\n hasAgentCall?: boolean;\n};\n\ntype ToolCallParams = {\n messages: BaseMessage[];\n};\n\nexport type ToolCallNextValue = {\n type: 'agenite.tool-call.next';\n toolResultBlocks: {\n result: ToolResponse;\n toolUseBlock: ToolUseBlock;\n }[];\n};\n\nexport const ToolStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n ToolCallYieldValues | ToolResultYieldValues,\n ToolCallParams,\n ToolCallNextValue\n> = {\n name: 'agenite.tool-call',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n return {\n messages: params.state.messages,\n };\n },\n execute: async function* (params, context) {\n const lastMessage = params.messages[params.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n const toolUseBlocks = lastMessage.content.filter(\n (block) => block.type === 'toolUse'\n );\n if (!toolUseBlocks.length) {\n throw new Error('No tool use block found');\n }\n\n const agents = context.agent.agentConfig.agents;\n\n const hasAgentCall = agents?.some((agent) =>\n toolUseBlocks.some(\n (toolUseBlock) => agent.agentConfig.name === toolUseBlock.name\n )\n );\n\n const userProvidedToolValues = yield {\n type: 'agenite.tool-call.params',\n toolUseBlocks,\n hasAgentCall,\n };\n\n if (userProvidedToolValues) {\n for (const toolUseBlock of userProvidedToolValues.toolResultBlocks) {\n yield {\n type: 'agenite.tool-result',\n result: toolUseBlock.result,\n toolUseBlock: toolUseBlock.toolUseBlock,\n };\n }\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: userProvidedToolValues.toolResultBlocks.map(\n (toolResultBlock) => ({\n type: 'toolResult',\n toolName: toolResultBlock.toolUseBlock.name,\n toolUseId: toolResultBlock.toolUseBlock.id,\n content: JSON.stringify(\n toolResultBlock.result.isError\n ? `${toolResultBlock.result.data}:${toolResultBlock.result.error}`\n : toolResultBlock.result.data\n ),\n isError: toolResultBlock.result.isError,\n })\n ),\n },\n ],\n },\n };\n }\n\n if (hasAgentCall) {\n return {\n next: 'agenite.agent-call',\n state: {},\n };\n }\n\n return {\n next: 'agenite.tool-result',\n state: {},\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { ToolUseBlock, ToolResultBlock } from '@agenite/llm';\nimport { Step } from '../types/step';\nimport { Tool, ToolResponse } from '@agenite/tool';\nimport { BaseReturnValues } from '.';\n\ntype ToolResultParams = {\n toolUseBlocks: ToolUseBlock[];\n tools: Tool[];\n};\n\nexport type ToolResultYieldValues = {\n type: 'agenite.tool-result';\n result: ToolResponse;\n toolUseBlock: ToolUseBlock;\n};\n\nexport const ToolResultStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n ToolResultYieldValues,\n ToolResultParams,\n undefined\n> = {\n name: 'agenite.tool-result',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n\n const toolUseBlocks = lastMessage.content.filter(\n (block) => block.type === 'toolUse'\n );\n\n if (!toolUseBlocks.length) {\n throw new Error('Last message is not a tool use');\n }\n return {\n toolUseBlocks: toolUseBlocks,\n tools: params.agent.agentConfig.tools!,\n };\n },\n\n execute: async function* ({ toolUseBlocks, tools }, executionContext) {\n const toolResults: ToolResultBlock[] = [];\n for (const toolUseBlock of toolUseBlocks) {\n const tool = tools.find((t) => t.name === toolUseBlock.name);\n if (!tool) {\n throw new Error(`Tool ${toolUseBlock.toolName} not found`);\n }\n const input = toolUseBlock.input;\n const result = await tool.execute({\n input,\n context: executionContext.context,\n });\n\n yield {\n type: 'agenite.tool-result',\n result,\n toolUseBlock,\n } as ToolResultYieldValues;\n\n // TODO: Handle tool content properly i.e handle images, etc.\n toolResults.push({\n type: 'toolResult',\n toolName: tool.name,\n toolUseId: toolUseBlock.id,\n content: JSON.stringify(\n result.isError ? `${result.data}:${result.error}` : result.data\n ),\n isError: result.isError,\n });\n }\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: toolResults,\n },\n ],\n },\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { StateReducer } from '../state/state-reducer';\nimport { AgentTokenUsage, BaseSteps } from '../types/agent';\nimport {\n Step,\n StepContext,\n BaseNextValue,\n BaseYieldValue,\n} from '../types/step';\n\nimport { DefaultStepType } from '../types/step';\nimport { AgentStep } from './agent-call';\nimport { LLMStep } from './llm-call';\nimport { ToolStep } from './tool-call';\nimport { ToolResultStep } from './tool-result';\n\nexport interface BaseReturnValues<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n next: DefaultStepType | (string & {});\n state: T;\n tokenUsage?: AgentTokenUsage;\n}\n\nexport type GeneratorYieldType<T extends AsyncGenerator> =\n T extends AsyncGenerator<infer Y, unknown, unknown> ? Y : never;\n\nexport type GeneratorReturnType<T extends AsyncGenerator> =\n T extends AsyncGenerator<unknown, infer R, unknown> ? R : never;\n\nexport type GeneratorNextType<T extends AsyncGenerator> =\n T extends AsyncGenerator<unknown, unknown, infer N> ? N : never;\n\nexport type AllStepsYieldValues<Steps extends BaseSteps> = GeneratorYieldType<\n ReturnType<Steps[keyof Steps]['execute']>\n>;\n\nexport type AllStepsNextValues<Steps extends BaseSteps> = GeneratorNextType<\n ReturnType<Steps[keyof Steps]['execute']>\n>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyStateReducer = StateReducer<Record<string, any>>;\n\nexport const defaultStepConfig = {\n 'agenite.llm-call': LLMStep,\n 'agenite.tool-call': ToolStep,\n 'agenite.agent-call': AgentStep,\n 'agenite.tool-result': ToolResultStep,\n};\n\nexport const executeAgentStep = async function* (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n task: Step<BaseReturnValues<any>, BaseYieldValue, unknown, BaseNextValue>,\n executionContext: StepContext<AnyStateReducer>\n) {\n const beforeResult = await task.beforeExecute(executionContext);\n const result = yield* task.execute(beforeResult, executionContext);\n const afterResult = await task.afterExecute(result, executionContext);\n return afterResult;\n};\n\nexport type DefaultStepGenerator = AsyncGenerator<\n AllStepsYieldValues<typeof defaultStepConfig>,\n unknown,\n AllStepsNextValues<typeof defaultStepConfig>\n>;\n\nexport * from './agent-call';\nexport * from './llm-call';\nexport * from './tool-call';\nexport * from './tool-result';\n","import { AsyncGeneratorMiddleware } from '../types/agent';\nimport {\n MiddlewareBaseNextValue,\n MiddlewareBaseYieldValue,\n} from '../types/middleware';\nimport { BaseNextValue } from '../types/step';\n\n/**\n * Injects the execution context into the every yield value\n * @returns\n */\nexport const executionContextInjector = (): AsyncGeneratorMiddleware<\n MiddlewareBaseYieldValue,\n unknown,\n MiddlewareBaseNextValue\n> => {\n return async function* (generator, context) {\n let nextValue: BaseNextValue | undefined = undefined;\n\n while (true) {\n const { value, done } = await generator.next(nextValue);\n\n if (done) {\n return value;\n }\n\n // Inject context into the yield value\n const valueWithContext = {\n ...value,\n // If it's a next value, use the context from the generator else inject the context\n executionContext: value.executionContext || context,\n };\n\n nextValue = yield valueWithContext;\n }\n };\n};\n","import { AsyncGeneratorMiddleware } from '../types/agent';\nimport { FullMergedMiddlewareStepGeneratorResponse } from '../types/execution';\nimport {\n MiddlewareBaseNextValue,\n MiddlewareBaseYieldValue,\n} from '../types/middleware';\nimport { StepContext } from '../types/step';\nimport { executionContextInjector } from './context-injector';\n\nexport function applyMiddlewares<\n YieldValues,\n ReturnValues,\n NextValues,\n Middlewares extends AsyncGeneratorMiddleware<\n MiddlewareBaseYieldValue,\n unknown,\n MiddlewareBaseNextValue\n >[] = [],\n>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genFunc: () => AsyncGenerator<any, any, any>,\n middlewares: Middlewares,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context: StepContext<any>\n): FullMergedMiddlewareStepGeneratorResponse<\n Middlewares,\n YieldValues & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n executionContext: StepContext<any>;\n },\n NextValues,\n ReturnValues\n> {\n return [...middlewares, executionContextInjector()].reduceRight(\n (gen, middleware) => middleware(gen, context),\n genFunc()\n );\n}\n","import {\n AgentConfig,\n BaseMiddlewares,\n BaseSteps,\n ExecutionOptions,\n} from './types/agent';\nimport { StepContext, DefaultStepType } from './types/step';\nimport { defaultStateReducer, StateFromReducer } from './state/state-reducer';\nimport { stateApplicator } from './state/state-applicator';\nimport { AnyStateReducer, BaseReturnValues, defaultStepConfig } from './steps';\nimport { executeAgentStep } from './steps';\nimport { IterateResponse } from './types/execution';\nimport { applyMiddlewares } from './middlewares/apply-middlewares';\nimport { mergeAgentTokenUsage } from './utils/token-usage';\n\nexport class Agent<\n Reducer extends AnyStateReducer = typeof defaultStateReducer,\n Steps extends BaseSteps = typeof defaultStepConfig,\n Middlewares extends BaseMiddlewares = [],\n Extensions extends Record<string, unknown> | undefined = undefined,\n> {\n constructor(\n public readonly agentConfig: AgentConfig<\n Reducer,\n Steps,\n Middlewares,\n Extensions\n >\n ) {}\n\n public async *iterate(\n input: Partial<StateFromReducer<Reducer>>,\n options?: ExecutionOptions\n ): IterateResponse<Middlewares, Steps, Reducer> {\n const reducer: Reducer =\n this.agentConfig.stateReducer || (defaultStateReducer as Reducer);\n\n const state = stateApplicator(\n reducer,\n this.agentConfig.initialState || {},\n input\n );\n\n const executionContext: StepContext<Reducer> = {\n state,\n context: options?.context || {},\n agent: this,\n parentExecution: options?.parentExecution,\n provider: this.agentConfig.provider,\n isNestedExecution: !!options?.parentExecution,\n instructions:\n this.agentConfig.instructions || 'You are a helpful assistant.',\n stream: options?.stream || true,\n tokenUsage: {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n inputCost: 0,\n outputCost: 0,\n totalCost: 0,\n modelBreakdown: {},\n },\n };\n\n const actions = this.agentConfig.steps || defaultStepConfig;\n\n const startStep = this.agentConfig.startStep || 'agenite.llm-call';\n\n const generator = async function* () {\n let currentStep: DefaultStepType | (string & {}) = startStep;\n\n yield {\n type: 'agenite.start',\n executionContext,\n };\n\n while (true) {\n if (currentStep === 'agenite.end') {\n break;\n }\n\n const step: BaseSteps[keyof BaseSteps] | undefined =\n actions[currentStep as keyof typeof actions];\n\n if (!step) {\n throw new Error(`Step ${currentStep} not found.`);\n }\n\n const result: BaseReturnValues<StateFromReducer<Reducer>> =\n yield* executeAgentStep(step, executionContext);\n\n if (result.tokenUsage) {\n executionContext.tokenUsage = mergeAgentTokenUsage(\n executionContext.tokenUsage,\n result.tokenUsage\n );\n }\n\n // Apply state changes after executor completes\n if (result.state) {\n const newState = stateApplicator(\n reducer,\n executionContext.state,\n result.state\n );\n\n executionContext.state = {\n ...executionContext.state,\n ...newState,\n };\n }\n\n if (!result.next) {\n throw new Error(\n `No next step found. Previous step: ${currentStep}. Please review the step configuration to return a valid next step.`\n );\n }\n\n currentStep = result.next;\n }\n\n yield {\n type: 'agenite.end',\n executionContext,\n };\n\n return {\n ...executionContext.state,\n tokenUsage: executionContext.tokenUsage,\n };\n };\n\n return yield* applyMiddlewares(\n generator,\n this.agentConfig.middlewares || [],\n executionContext\n );\n }\n\n async execute(\n input: Partial<StateFromReducer<Reducer>>,\n options?: ExecutionOptions\n ) {\n const iterator = this.iterate(input, options);\n let result = await iterator.next();\n while (!result.done) {\n result = await iterator.next();\n }\n\n return result.value;\n }\n}\n"]} |
+6
-7
@@ -149,14 +149,13 @@ // src/state/state-reducer.ts | ||
| llmTokenUsages.forEach((usage) => { | ||
| const modelId = usage.modelId; | ||
| const model = usage.model; | ||
| const inputTokens = usage.inputTokens; | ||
| const outputTokens = usage.outputTokens; | ||
| const totalTokens2 = inputTokens + outputTokens; | ||
| const inputCost = 0; | ||
| const outputCost = 0; | ||
| const totalCost2 = 0; | ||
| modelBreakdown[modelId] = { | ||
| const inputCost = usage.inputCost; | ||
| const outputCost = usage.outputCost; | ||
| const totalCost2 = inputCost + outputCost; | ||
| modelBreakdown[model] = { | ||
| inputTokens, | ||
| outputTokens, | ||
| totalTokens: totalTokens2, | ||
| // TODO: introduce cost LLM | ||
| inputCost, | ||
@@ -252,3 +251,3 @@ outputCost, | ||
| }; | ||
| const tokenUsage = convertLLMTokenUsage(response.value.tokens); | ||
| const tokenUsage = convertLLMTokenUsage([response.value.tokenUsage].flat()); | ||
| if (response.value.stopReason === "toolUse") { | ||
@@ -255,0 +254,0 @@ return { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/state/state-reducer.ts","../src/state/state-applicator.ts","../src/steps/agent-call.ts","../src/utils/token-usage.ts","../src/steps/llm-call.ts","../src/steps/tool-call.ts","../src/steps/tool-result.ts","../src/steps/index.ts","../src/middlewares/context-injector.ts","../src/middlewares/apply-middlewares.ts","../src/agent.ts"],"names":["totalTokens","totalCost"],"mappings":"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","file":"index.js","sourcesContent":["import { BaseMessage } from '@agenite/llm';\n\n/**\n * Utility to make undefined optional\n * Example:\n * type User = {\n * name: string;\n * age: number | undefined;\n * email?: string;\n * };\n * type OptionalUser = MakeUndefinedOptional<User>;\n * // OptionalUser will be { name: string; age?: number; email?: string; }\n */\ntype MakeUndefinedOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: T[K];\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n};\n\n/**\n * Currently. If there is a state, there must be a reducer for it.\n * If there is no reducer, the state will not be updated.\n *\n * In the future, we can add a default reducer that does nothing.\n * Then, we can add a flag to the state reducer to indicate that the state is optional.\n */\nexport type StateFromReducer<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Reducer extends StateReducer<any>,\n> = MakeUndefinedOptional<{\n [K in keyof Reducer as undefined extends Reducer[K] ? never : K]: ReturnType<\n Reducer[K]\n >;\n}> & {\n messages: BaseMessage[];\n};\n\nexport type StateReducer<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n [K in keyof T]-?: (newValue?: T[K], previousValue?: T[K]) => T[K];\n} & {\n messages: (\n newValue?: BaseMessage[],\n previousValue?: BaseMessage[]\n ) => BaseMessage[];\n};\n\nexport const defaultStateReducer: StateReducer<{\n messages: BaseMessage[];\n}> = {\n messages: (newValue?: BaseMessage[], previousValue?: BaseMessage[]) => {\n if (!newValue) {\n return previousValue || [];\n }\n return [...(previousValue || []), ...newValue];\n },\n};\n","import { StateFromReducer, StateReducer } from './state-reducer';\n\nexport const stateApplicator = <\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Reducer extends StateReducer<Record<string, any>>,\n>(\n stateReducer: Reducer,\n previousState: Partial<StateFromReducer<Reducer>>,\n newState: Partial<StateFromReducer<Reducer>>\n): StateFromReducer<Reducer> => {\n // Start with a copy of previous state to ensure required fields are preserved\n const updatedState: Partial<StateFromReducer<Reducer>> = {\n ...previousState,\n messages: previousState.messages || [], // Ensure messages is always present\n };\n\n (Object.keys(newState) as (keyof StateFromReducer<Reducer>)[]).forEach(\n (key) => {\n const reducer = stateReducer[key];\n // If there's a reducer for this key, use it\n if (reducer) {\n updatedState[key] =\n reducer(newState[key], previousState[key]) || previousState[key];\n } else if (key === 'messages') {\n if (newState[key]) {\n updatedState['messages'] = newState[key];\n }\n } else if (newState[key]) {\n updatedState[key] = newState[key];\n }\n }\n );\n\n return updatedState as StateFromReducer<Reducer>;\n};\n","import { BaseNextValue, Step } from '../types/step';\nimport { BaseReturnValues } from '.';\nimport { BaseMessage, ToolResultBlock, ToolUseBlock } from '@agenite/llm';\nimport { Agent } from '../agent';\nimport { LLMCallYieldValues } from './llm-call';\nimport { ToolCallYieldValues } from './tool-call';\nimport { ToolResultYieldValues } from './tool-result';\nimport { YieldAgeniteEnd, YieldAgeniteStart } from '../types';\n\nexport type AgentCallYieldValues = {\n type: 'agenite.agent-call.start';\n content: string;\n};\n\nexport type AgentCallParams = {\n targetAgent?: string;\n input?: BaseMessage[];\n toolName?: string;\n toolUseId?: string;\n};\n\nexport const AgentStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n | AgentCallYieldValues\n | LLMCallYieldValues\n | ToolCallYieldValues\n | YieldAgeniteEnd\n | YieldAgeniteStart\n | ToolResultYieldValues,\n AgentCallParams,\n BaseNextValue\n> = {\n name: 'agenite.agent-call',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n\n const agentUseBlocks = lastMessage.content.filter(\n (block): block is ToolUseBlock => block.type === 'toolUse'\n );\n\n if (!agentUseBlocks.length) {\n throw new Error('Last message is not an agent use');\n }\n\n const agentUseBlock = agentUseBlocks[0];\n const targetAgent = (\n params.agent.agentConfig.agents as Agent[] | undefined\n )?.find((agent) => agent.agentConfig.name === agentUseBlock?.name);\n\n if (!targetAgent) {\n throw new Error(`Agent ${agentUseBlock?.name} not found`);\n }\n\n return {\n targetAgent: agentUseBlock?.name,\n input: [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: (agentUseBlock?.input as { input: string })?.input,\n },\n ],\n },\n ],\n toolName: agentUseBlock?.name,\n toolUseId: agentUseBlock?.id,\n };\n },\n execute: async function* (\n { targetAgent, input, toolName, toolUseId },\n executionContext\n ) {\n const targetAgentInstance = (\n executionContext.agent.agentConfig.agents as Agent[] | undefined\n )?.find((agent) => agent.agentConfig.name === targetAgent);\n\n if (!targetAgentInstance) {\n throw new Error(`Agent ${targetAgent} not found`);\n }\n\n const result = yield* targetAgentInstance.iterate(\n {\n messages: input,\n },\n {\n parentExecution: executionContext,\n context: executionContext.context,\n }\n );\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: [\n {\n type: 'toolResult',\n toolName: toolName,\n toolUseId: toolUseId,\n content: result.messages[result.messages.length - 1]?.content,\n isError: false,\n },\n ] as ToolResultBlock[],\n },\n ],\n },\n tokenUsage: result.tokenUsage,\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { TokenUsage } from '../types/agent';\nimport { TokenUsage as LLMTokenUsage } from '@agenite/llm';\n\n/**\n * Merges two token usage objects by adding their values together\n * @param oldUsage The existing token usage\n * @param newUsage The new token usage to merge\n * @returns A new token usage object with combined values\n */\nexport function mergeTokenUsage(\n oldUsage: TokenUsage,\n newUsage: TokenUsage\n): TokenUsage {\n return {\n inputTokens: oldUsage.inputTokens + newUsage.inputTokens,\n outputTokens: oldUsage.outputTokens + newUsage.outputTokens,\n totalTokens: oldUsage.totalTokens + newUsage.totalTokens,\n inputCost: oldUsage.inputCost + newUsage.inputCost,\n outputCost: oldUsage.outputCost + newUsage.outputCost,\n totalCost: oldUsage.totalCost + newUsage.totalCost,\n };\n}\n\n/**\n * Merges two agent token usage objects by adding their values together\n * @param oldUsage The existing agent token usage\n * @param newUsage The new agent token usage to merge\n * @returns A new agent token usage object with combined values\n */\nexport function mergeAgentTokenUsage(\n oldUsage: TokenUsage & { modelBreakdown: Record<string, TokenUsage> },\n newUsage: TokenUsage & { modelBreakdown: Record<string, TokenUsage> }\n): TokenUsage & { modelBreakdown: Record<string, TokenUsage> } {\n const mergedBreakdown: Record<string, TokenUsage> = {\n ...oldUsage.modelBreakdown,\n };\n\n // Merge model breakdowns\n Object.entries(newUsage.modelBreakdown).forEach(([model, usage]) => {\n mergedBreakdown[model] = mergeTokenUsage(\n mergedBreakdown[model] || {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n inputCost: 0,\n outputCost: 0,\n totalCost: 0,\n },\n usage\n );\n });\n\n return {\n ...mergeTokenUsage(oldUsage, newUsage),\n modelBreakdown: mergedBreakdown,\n };\n}\n\n/**\n * Converts LLM token usage to Agent token usage format\n * @param llmTokenUsages Array of LLM token usage objects\n * @returns Agent token usage object with model breakdown\n */\nexport function convertLLMTokenUsage(\n llmTokenUsages: LLMTokenUsage[]\n): TokenUsage & { modelBreakdown: Record<string, TokenUsage> } {\n const modelBreakdown: Record<string, TokenUsage> = {};\n let totalInputTokens = 0;\n let totalOutputTokens = 0;\n\n // Process each model's token usage\n llmTokenUsages.forEach((usage) => {\n const modelId = usage.modelId;\n const inputTokens = usage.inputTokens;\n const outputTokens = usage.outputTokens;\n const totalTokens = inputTokens + outputTokens;\n const inputCost = 0;\n const outputCost = 0;\n const totalCost = 0;\n\n modelBreakdown[modelId] = {\n inputTokens,\n outputTokens,\n totalTokens,\n // TODO: introduce cost LLM\n inputCost,\n outputCost,\n totalCost,\n };\n\n totalInputTokens += inputTokens;\n totalOutputTokens += outputTokens;\n });\n\n const totalTokens = totalInputTokens + totalOutputTokens;\n const totalInputCost = Object.values(modelBreakdown).reduce(\n (sum, usage) => sum + usage.inputCost,\n 0\n );\n const totalOutputCost = Object.values(modelBreakdown).reduce(\n (sum, usage) => sum + usage.outputCost,\n 0\n );\n const totalCost = totalInputCost + totalOutputCost;\n\n return {\n inputTokens: totalInputTokens,\n outputTokens: totalOutputTokens,\n totalTokens,\n inputCost: totalInputCost,\n outputCost: totalOutputCost,\n totalCost,\n modelBreakdown,\n };\n}\n","import {\n BaseMessage,\n LLMProvider,\n PartialReturn,\n ToolDefinition,\n} from '@agenite/llm';\nimport { Step } from '../types/step';\nimport { AgentTool } from '../types/agent';\nimport { BaseReturnValues } from '.';\nimport { convertLLMTokenUsage } from '../utils/token-usage';\n\nexport type LLMCallInput = {\n messages: BaseMessage[];\n instructions: string;\n tools?: ToolDefinition[];\n};\n\nexport function transformToToolDefinitions(\n tools: AgentTool[]\n): ToolDefinition[] {\n return tools.map((tool) => ({\n name: tool.name,\n description: tool.description || '',\n inputSchema: tool.inputSchema || {\n type: 'object',\n properties: {\n input: {\n type: 'string',\n description:\n 'Detailed instructions for the agent to accomplish the task. Include all necessary information and context for the agent to perform the task.',\n },\n },\n },\n }));\n}\n\nexport type LLMCallYieldValues = {\n type: 'agenite.llm-call.streaming';\n content: PartialReturn;\n} | {\n type: 'agenite.llm-call.input';\n content: LLMCallInput;\n};\n\ntype LLMCallParams = {\n provider: LLMProvider;\n messages: BaseMessage[];\n instructions: string;\n tools?: ToolDefinition[];\n stream?: boolean;\n};\n\nexport const LLMStep: Step<\n BaseReturnValues<{\n messages: BaseMessage[];\n }>,\n LLMCallYieldValues,\n LLMCallParams,\n undefined\n> = {\n name: 'agenite.llm-call',\n beforeExecute: async (params) => {\n const tools = params.agent.agentConfig.tools || [];\n const agents =\n params.agent.agentConfig.agents?.map((agent) => {\n return {\n name: agent.agentConfig.name,\n description: agent.agentConfig.description || '',\n };\n }) || [];\n return {\n provider: params.provider,\n messages: params.state.messages,\n instructions: params.instructions,\n tools: transformToToolDefinitions([...tools, ...agents]),\n stream: params.stream,\n };\n },\n\n execute: async function* (params: LLMCallParams) {\n const { provider, messages, instructions, tools, stream } = params;\n\n yield {\n type: 'agenite.llm-call.input',\n content: {\n messages,\n instructions,\n tools,\n },\n };\n\n const generator = provider.iterate(messages, {\n systemPrompt: instructions,\n tools: tools?.length ? tools : undefined,\n stream: stream ?? false,\n });\n\n let response = await generator.next();\n while (!response.done) {\n const value = response.value;\n\n yield {\n type: 'agenite.llm-call.streaming',\n content: value,\n };\n response = await generator.next();\n }\n const message = {\n role: 'assistant',\n content: response.value.content,\n } as const;\n const tokenUsage = convertLLMTokenUsage(response.value.tokens);\n\n if (response.value.stopReason === 'toolUse') {\n return {\n next: 'agenite.tool-call',\n state: {\n messages: [message],\n },\n tokenUsage,\n };\n }\n\n return {\n next: 'agenite.end',\n state: {\n messages: [message],\n },\n tokenUsage,\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { BaseReturnValues } from '.';\nimport { Step } from '../types/step';\nimport { BaseMessage, ToolUseBlock } from '@agenite/llm';\nimport { ToolResultYieldValues } from './tool-result';\nimport { ToolResponse } from '@agenite/tool';\nexport type ToolCallYieldValues = {\n type: 'agenite.tool-call.params';\n toolUseBlocks: ToolUseBlock[];\n hasAgentCall?: boolean;\n};\n\ntype ToolCallParams = {\n messages: BaseMessage[];\n};\n\nexport type ToolCallNextValue = {\n type: 'agenite.tool-call.next';\n toolResultBlocks: {\n result: ToolResponse;\n toolUseBlock: ToolUseBlock;\n }[];\n};\n\nexport const ToolStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n ToolCallYieldValues | ToolResultYieldValues,\n ToolCallParams,\n ToolCallNextValue\n> = {\n name: 'agenite.tool-call',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n return {\n messages: params.state.messages,\n };\n },\n execute: async function* (params, context) {\n const lastMessage = params.messages[params.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n const toolUseBlocks = lastMessage.content.filter(\n (block) => block.type === 'toolUse'\n );\n if (!toolUseBlocks.length) {\n throw new Error('No tool use block found');\n }\n\n const agents = context.agent.agentConfig.agents;\n\n const hasAgentCall = agents?.some((agent) =>\n toolUseBlocks.some(\n (toolUseBlock) => agent.agentConfig.name === toolUseBlock.name\n )\n );\n\n const userProvidedToolValues = yield {\n type: 'agenite.tool-call.params',\n toolUseBlocks,\n hasAgentCall,\n };\n\n if (userProvidedToolValues) {\n for (const toolUseBlock of userProvidedToolValues.toolResultBlocks) {\n yield {\n type: 'agenite.tool-result',\n result: toolUseBlock.result,\n toolUseBlock: toolUseBlock.toolUseBlock,\n };\n }\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: userProvidedToolValues.toolResultBlocks.map(\n (toolResultBlock) => ({\n type: 'toolResult',\n toolName: toolResultBlock.toolUseBlock.name,\n toolUseId: toolResultBlock.toolUseBlock.id,\n content: JSON.stringify(\n toolResultBlock.result.isError\n ? `${toolResultBlock.result.data}:${toolResultBlock.result.error}`\n : toolResultBlock.result.data\n ),\n isError: toolResultBlock.result.isError,\n })\n ),\n },\n ],\n },\n };\n }\n\n if (hasAgentCall) {\n return {\n next: 'agenite.agent-call',\n state: {},\n };\n }\n\n return {\n next: 'agenite.tool-result',\n state: {},\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { ToolUseBlock, ToolResultBlock } from '@agenite/llm';\nimport { Step } from '../types/step';\nimport { Tool, ToolResponse } from '@agenite/tool';\nimport { BaseReturnValues } from '.';\n\ntype ToolResultParams = {\n toolUseBlocks: ToolUseBlock[];\n tools: Tool[];\n};\n\nexport type ToolResultYieldValues = {\n type: 'agenite.tool-result';\n result: ToolResponse;\n toolUseBlock: ToolUseBlock;\n};\n\nexport const ToolResultStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n ToolResultYieldValues,\n ToolResultParams,\n undefined\n> = {\n name: 'agenite.tool-result',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n\n const toolUseBlocks = lastMessage.content.filter(\n (block) => block.type === 'toolUse'\n );\n\n if (!toolUseBlocks.length) {\n throw new Error('Last message is not a tool use');\n }\n return {\n toolUseBlocks: toolUseBlocks,\n tools: params.agent.agentConfig.tools!,\n };\n },\n\n execute: async function* ({ toolUseBlocks, tools }, executionContext) {\n const toolResults: ToolResultBlock[] = [];\n for (const toolUseBlock of toolUseBlocks) {\n const tool = tools.find((t) => t.name === toolUseBlock.name);\n if (!tool) {\n throw new Error(`Tool ${toolUseBlock.toolName} not found`);\n }\n const input = toolUseBlock.input;\n const result = await tool.execute({\n input,\n context: executionContext.context,\n });\n\n yield {\n type: 'agenite.tool-result',\n result,\n toolUseBlock,\n } as ToolResultYieldValues;\n\n // TODO: Handle tool content properly i.e handle images, etc.\n toolResults.push({\n type: 'toolResult',\n toolName: tool.name,\n toolUseId: toolUseBlock.id,\n content: JSON.stringify(\n result.isError ? `${result.data}:${result.error}` : result.data\n ),\n isError: result.isError,\n });\n }\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: toolResults,\n },\n ],\n },\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { StateReducer } from '../state/state-reducer';\nimport { AgentTokenUsage, BaseSteps } from '../types/agent';\nimport {\n Step,\n StepContext,\n BaseNextValue,\n BaseYieldValue,\n} from '../types/step';\n\nimport { DefaultStepType } from '../types/step';\nimport { AgentStep } from './agent-call';\nimport { LLMStep } from './llm-call';\nimport { ToolStep } from './tool-call';\nimport { ToolResultStep } from './tool-result';\n\nexport interface BaseReturnValues<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n next: DefaultStepType | (string & {});\n state: T;\n tokenUsage?: AgentTokenUsage;\n}\n\nexport type GeneratorYieldType<T extends AsyncGenerator> =\n T extends AsyncGenerator<infer Y, unknown, unknown> ? Y : never;\n\nexport type GeneratorReturnType<T extends AsyncGenerator> =\n T extends AsyncGenerator<unknown, infer R, unknown> ? R : never;\n\nexport type GeneratorNextType<T extends AsyncGenerator> =\n T extends AsyncGenerator<unknown, unknown, infer N> ? N : never;\n\nexport type AllStepsYieldValues<Steps extends BaseSteps> = GeneratorYieldType<\n ReturnType<Steps[keyof Steps]['execute']>\n>;\n\nexport type AllStepsNextValues<Steps extends BaseSteps> = GeneratorNextType<\n ReturnType<Steps[keyof Steps]['execute']>\n>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyStateReducer = StateReducer<Record<string, any>>;\n\nexport const defaultStepConfig = {\n 'agenite.llm-call': LLMStep,\n 'agenite.tool-call': ToolStep,\n 'agenite.agent-call': AgentStep,\n 'agenite.tool-result': ToolResultStep,\n};\n\nexport const executeAgentStep = async function* (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n task: Step<BaseReturnValues<any>, BaseYieldValue, unknown, BaseNextValue>,\n executionContext: StepContext<AnyStateReducer>\n) {\n const beforeResult = await task.beforeExecute(executionContext);\n const result = yield* task.execute(beforeResult, executionContext);\n const afterResult = await task.afterExecute(result, executionContext);\n return afterResult;\n};\n\nexport type DefaultStepGenerator = AsyncGenerator<\n AllStepsYieldValues<typeof defaultStepConfig>,\n unknown,\n AllStepsNextValues<typeof defaultStepConfig>\n>;\n\nexport * from './agent-call';\nexport * from './llm-call';\nexport * from './tool-call';\nexport * from './tool-result';\n","import { AsyncGeneratorMiddleware } from '../types/agent';\nimport {\n MiddlewareBaseNextValue,\n MiddlewareBaseYieldValue,\n} from '../types/middleware';\nimport { BaseNextValue } from '../types/step';\n\n/**\n * Injects the execution context into the every yield value\n * @returns\n */\nexport const executionContextInjector = (): AsyncGeneratorMiddleware<\n MiddlewareBaseYieldValue,\n unknown,\n MiddlewareBaseNextValue\n> => {\n return async function* (generator, context) {\n let nextValue: BaseNextValue | undefined = undefined;\n\n while (true) {\n const { value, done } = await generator.next(nextValue);\n\n if (done) {\n return value;\n }\n\n // Inject context into the yield value\n const valueWithContext = {\n ...value,\n // If it's a next value, use the context from the generator else inject the context\n executionContext: value.executionContext || context,\n };\n\n nextValue = yield valueWithContext;\n }\n };\n};\n","import { AsyncGeneratorMiddleware } from '../types/agent';\nimport { FullMergedMiddlewareStepGeneratorResponse } from '../types/execution';\nimport {\n MiddlewareBaseNextValue,\n MiddlewareBaseYieldValue,\n} from '../types/middleware';\nimport { StepContext } from '../types/step';\nimport { executionContextInjector } from './context-injector';\n\nexport function applyMiddlewares<\n YieldValues,\n ReturnValues,\n NextValues,\n Middlewares extends AsyncGeneratorMiddleware<\n MiddlewareBaseYieldValue,\n unknown,\n MiddlewareBaseNextValue\n >[] = [],\n>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genFunc: () => AsyncGenerator<any, any, any>,\n middlewares: Middlewares,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context: StepContext<any>\n): FullMergedMiddlewareStepGeneratorResponse<\n Middlewares,\n YieldValues & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n executionContext: StepContext<any>;\n },\n NextValues,\n ReturnValues\n> {\n return [...middlewares, executionContextInjector()].reduceRight(\n (gen, middleware) => middleware(gen, context),\n genFunc()\n );\n}\n","import {\n AgentConfig,\n BaseMiddlewares,\n BaseSteps,\n ExecutionOptions,\n} from './types/agent';\nimport { StepContext, DefaultStepType } from './types/step';\nimport { defaultStateReducer, StateFromReducer } from './state/state-reducer';\nimport { stateApplicator } from './state/state-applicator';\nimport { AnyStateReducer, BaseReturnValues, defaultStepConfig } from './steps';\nimport { executeAgentStep } from './steps';\nimport { IterateResponse } from './types/execution';\nimport { applyMiddlewares } from './middlewares/apply-middlewares';\nimport { mergeAgentTokenUsage } from './utils/token-usage';\n\nexport class Agent<\n Reducer extends AnyStateReducer = typeof defaultStateReducer,\n Steps extends BaseSteps = typeof defaultStepConfig,\n Middlewares extends BaseMiddlewares = [],\n Extensions extends Record<string, unknown> | undefined = undefined,\n> {\n constructor(\n public readonly agentConfig: AgentConfig<\n Reducer,\n Steps,\n Middlewares,\n Extensions\n >\n ) {}\n\n public async *iterate(\n input: Partial<StateFromReducer<Reducer>>,\n options?: ExecutionOptions\n ): IterateResponse<Middlewares, Steps, Reducer> {\n const reducer: Reducer =\n this.agentConfig.stateReducer || (defaultStateReducer as Reducer);\n\n const state = stateApplicator(\n reducer,\n this.agentConfig.initialState || {},\n input\n );\n\n const executionContext: StepContext<Reducer> = {\n state,\n context: options?.context || {},\n agent: this,\n parentExecution: options?.parentExecution,\n provider: this.agentConfig.provider,\n isNestedExecution: !!options?.parentExecution,\n instructions:\n this.agentConfig.instructions || 'You are a helpful assistant.',\n stream: options?.stream || true,\n tokenUsage: {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n inputCost: 0,\n outputCost: 0,\n totalCost: 0,\n modelBreakdown: {},\n },\n };\n\n const actions = this.agentConfig.steps || defaultStepConfig;\n\n const startStep = this.agentConfig.startStep || 'agenite.llm-call';\n\n const generator = async function* () {\n let currentStep: DefaultStepType | (string & {}) = startStep;\n\n yield {\n type: 'agenite.start',\n executionContext,\n };\n\n while (true) {\n if (currentStep === 'agenite.end') {\n break;\n }\n\n const step: BaseSteps[keyof BaseSteps] | undefined =\n actions[currentStep as keyof typeof actions];\n\n if (!step) {\n throw new Error(`Step ${currentStep} not found.`);\n }\n\n const result: BaseReturnValues<StateFromReducer<Reducer>> =\n yield* executeAgentStep(step, executionContext);\n\n if (result.tokenUsage) {\n executionContext.tokenUsage = mergeAgentTokenUsage(\n executionContext.tokenUsage,\n result.tokenUsage\n );\n }\n\n // Apply state changes after executor completes\n if (result.state) {\n const newState = stateApplicator(\n reducer,\n executionContext.state,\n result.state\n );\n\n executionContext.state = {\n ...executionContext.state,\n ...newState,\n };\n }\n\n if (!result.next) {\n throw new Error(\n `No next step found. Previous step: ${currentStep}. Please review the step configuration to return a valid next step.`\n );\n }\n\n currentStep = result.next;\n }\n\n yield {\n type: 'agenite.end',\n executionContext,\n };\n\n return {\n ...executionContext.state,\n tokenUsage: executionContext.tokenUsage,\n };\n };\n\n return yield* applyMiddlewares(\n generator,\n this.agentConfig.middlewares || [],\n executionContext\n );\n }\n\n async execute(\n input: Partial<StateFromReducer<Reducer>>,\n options?: ExecutionOptions\n ) {\n const iterator = this.iterate(input, options);\n let result = await iterator.next();\n while (!result.done) {\n result = await iterator.next();\n }\n\n return result.value;\n }\n}\n"]} | ||
| {"version":3,"sources":["../src/state/state-reducer.ts","../src/state/state-applicator.ts","../src/steps/agent-call.ts","../src/utils/token-usage.ts","../src/steps/llm-call.ts","../src/steps/tool-call.ts","../src/steps/tool-result.ts","../src/steps/index.ts","../src/middlewares/context-injector.ts","../src/middlewares/apply-middlewares.ts","../src/agent.ts"],"names":["totalTokens","totalCost"],"mappings":"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","file":"index.js","sourcesContent":["import { BaseMessage } from '@agenite/llm';\n\n/**\n * Utility to make undefined optional\n * Example:\n * type User = {\n * name: string;\n * age: number | undefined;\n * email?: string;\n * };\n * type OptionalUser = MakeUndefinedOptional<User>;\n * // OptionalUser will be { name: string; age?: number; email?: string; }\n */\ntype MakeUndefinedOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: T[K];\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K];\n};\n\n/**\n * Currently. If there is a state, there must be a reducer for it.\n * If there is no reducer, the state will not be updated.\n *\n * In the future, we can add a default reducer that does nothing.\n * Then, we can add a flag to the state reducer to indicate that the state is optional.\n */\nexport type StateFromReducer<\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Reducer extends StateReducer<any>,\n> = MakeUndefinedOptional<{\n [K in keyof Reducer as undefined extends Reducer[K] ? never : K]: ReturnType<\n Reducer[K]\n >;\n}> & {\n messages: BaseMessage[];\n};\n\nexport type StateReducer<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = {\n [K in keyof T]-?: (newValue?: T[K], previousValue?: T[K]) => T[K];\n} & {\n messages: (\n newValue?: BaseMessage[],\n previousValue?: BaseMessage[]\n ) => BaseMessage[];\n};\n\nexport const defaultStateReducer: StateReducer<{\n messages: BaseMessage[];\n}> = {\n messages: (newValue?: BaseMessage[], previousValue?: BaseMessage[]) => {\n if (!newValue) {\n return previousValue || [];\n }\n return [...(previousValue || []), ...newValue];\n },\n};\n","import { StateFromReducer, StateReducer } from './state-reducer';\n\nexport const stateApplicator = <\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Reducer extends StateReducer<Record<string, any>>,\n>(\n stateReducer: Reducer,\n previousState: Partial<StateFromReducer<Reducer>>,\n newState: Partial<StateFromReducer<Reducer>>\n): StateFromReducer<Reducer> => {\n // Start with a copy of previous state to ensure required fields are preserved\n const updatedState: Partial<StateFromReducer<Reducer>> = {\n ...previousState,\n messages: previousState.messages || [], // Ensure messages is always present\n };\n\n (Object.keys(newState) as (keyof StateFromReducer<Reducer>)[]).forEach(\n (key) => {\n const reducer = stateReducer[key];\n // If there's a reducer for this key, use it\n if (reducer) {\n updatedState[key] =\n reducer(newState[key], previousState[key]) || previousState[key];\n } else if (key === 'messages') {\n if (newState[key]) {\n updatedState['messages'] = newState[key];\n }\n } else if (newState[key]) {\n updatedState[key] = newState[key];\n }\n }\n );\n\n return updatedState as StateFromReducer<Reducer>;\n};\n","import { BaseNextValue, Step } from '../types/step';\nimport { BaseReturnValues } from '.';\nimport { BaseMessage, ToolResultBlock, ToolUseBlock } from '@agenite/llm';\nimport { Agent } from '../agent';\nimport { LLMCallYieldValues } from './llm-call';\nimport { ToolCallYieldValues } from './tool-call';\nimport { ToolResultYieldValues } from './tool-result';\nimport { YieldAgeniteEnd, YieldAgeniteStart } from '../types';\n\nexport type AgentCallYieldValues = {\n type: 'agenite.agent-call.start';\n content: string;\n};\n\nexport type AgentCallParams = {\n targetAgent?: string;\n input?: BaseMessage[];\n toolName?: string;\n toolUseId?: string;\n};\n\nexport const AgentStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n | AgentCallYieldValues\n | LLMCallYieldValues\n | ToolCallYieldValues\n | YieldAgeniteEnd\n | YieldAgeniteStart\n | ToolResultYieldValues,\n AgentCallParams,\n BaseNextValue\n> = {\n name: 'agenite.agent-call',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n\n const agentUseBlocks = lastMessage.content.filter(\n (block): block is ToolUseBlock => block.type === 'toolUse'\n );\n\n if (!agentUseBlocks.length) {\n throw new Error('Last message is not an agent use');\n }\n\n const agentUseBlock = agentUseBlocks[0];\n const targetAgent = (\n params.agent.agentConfig.agents as Agent[] | undefined\n )?.find((agent) => agent.agentConfig.name === agentUseBlock?.name);\n\n if (!targetAgent) {\n throw new Error(`Agent ${agentUseBlock?.name} not found`);\n }\n\n return {\n targetAgent: agentUseBlock?.name,\n input: [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: (agentUseBlock?.input as { input: string })?.input,\n },\n ],\n },\n ],\n toolName: agentUseBlock?.name,\n toolUseId: agentUseBlock?.id,\n };\n },\n execute: async function* (\n { targetAgent, input, toolName, toolUseId },\n executionContext\n ) {\n const targetAgentInstance = (\n executionContext.agent.agentConfig.agents as Agent[] | undefined\n )?.find((agent) => agent.agentConfig.name === targetAgent);\n\n if (!targetAgentInstance) {\n throw new Error(`Agent ${targetAgent} not found`);\n }\n\n const result = yield* targetAgentInstance.iterate(\n {\n messages: input,\n },\n {\n parentExecution: executionContext,\n context: executionContext.context,\n }\n );\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: [\n {\n type: 'toolResult',\n toolName: toolName,\n toolUseId: toolUseId,\n content: result.messages[result.messages.length - 1]?.content,\n isError: false,\n },\n ] as ToolResultBlock[],\n },\n ],\n },\n tokenUsage: result.tokenUsage,\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { TokenUsage } from '../types/agent';\nimport { TokenUsage as LLMTokenUsage } from '@agenite/llm';\n\n/**\n * Merges two token usage objects by adding their values together\n * @param oldUsage The existing token usage\n * @param newUsage The new token usage to merge\n * @returns A new token usage object with combined values\n */\nexport function mergeTokenUsage(\n oldUsage: TokenUsage,\n newUsage: TokenUsage\n): TokenUsage {\n return {\n inputTokens: oldUsage.inputTokens + newUsage.inputTokens,\n outputTokens: oldUsage.outputTokens + newUsage.outputTokens,\n totalTokens: oldUsage.totalTokens + newUsage.totalTokens,\n inputCost: oldUsage.inputCost + newUsage.inputCost,\n outputCost: oldUsage.outputCost + newUsage.outputCost,\n totalCost: oldUsage.totalCost + newUsage.totalCost,\n };\n}\n\n/**\n * Merges two agent token usage objects by adding their values together\n * @param oldUsage The existing agent token usage\n * @param newUsage The new agent token usage to merge\n * @returns A new agent token usage object with combined values\n */\nexport function mergeAgentTokenUsage(\n oldUsage: TokenUsage & { modelBreakdown: Record<string, TokenUsage> },\n newUsage: TokenUsage & { modelBreakdown: Record<string, TokenUsage> }\n): TokenUsage & { modelBreakdown: Record<string, TokenUsage> } {\n const mergedBreakdown: Record<string, TokenUsage> = {\n ...oldUsage.modelBreakdown,\n };\n\n // Merge model breakdowns\n Object.entries(newUsage.modelBreakdown).forEach(([model, usage]) => {\n mergedBreakdown[model] = mergeTokenUsage(\n mergedBreakdown[model] || {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n inputCost: 0,\n outputCost: 0,\n totalCost: 0,\n },\n usage\n );\n });\n\n return {\n ...mergeTokenUsage(oldUsage, newUsage),\n modelBreakdown: mergedBreakdown,\n };\n}\n\n/**\n * Converts LLM token usage to Agent token usage format\n * @param llmTokenUsages Array of LLM token usage objects\n * @returns Agent token usage object with model breakdown\n */\nexport function convertLLMTokenUsage(\n llmTokenUsages: LLMTokenUsage[]\n): TokenUsage & { modelBreakdown: Record<string, TokenUsage> } {\n const modelBreakdown: Record<string, TokenUsage> = {};\n let totalInputTokens = 0;\n let totalOutputTokens = 0;\n\n // Process each model's token usage\n llmTokenUsages.forEach((usage) => {\n const model = usage.model;\n const inputTokens = usage.inputTokens;\n const outputTokens = usage.outputTokens;\n const totalTokens = inputTokens + outputTokens;\n const inputCost = usage.inputCost;\n const outputCost = usage.outputCost;\n const totalCost = inputCost + outputCost;\n\n modelBreakdown[model] = {\n inputTokens,\n outputTokens,\n totalTokens,\n inputCost,\n outputCost,\n totalCost,\n };\n\n totalInputTokens += inputTokens;\n totalOutputTokens += outputTokens;\n });\n\n const totalTokens = totalInputTokens + totalOutputTokens;\n const totalInputCost = Object.values(modelBreakdown).reduce(\n (sum, usage) => sum + usage.inputCost,\n 0\n );\n const totalOutputCost = Object.values(modelBreakdown).reduce(\n (sum, usage) => sum + usage.outputCost,\n 0\n );\n const totalCost = totalInputCost + totalOutputCost;\n\n return {\n inputTokens: totalInputTokens,\n outputTokens: totalOutputTokens,\n totalTokens,\n inputCost: totalInputCost,\n outputCost: totalOutputCost,\n totalCost,\n modelBreakdown,\n };\n}\n","import {\n BaseMessage,\n LLMProvider,\n PartialReturn,\n ToolDefinition,\n} from '@agenite/llm';\nimport { Step } from '../types/step';\nimport { AgentTool } from '../types/agent';\nimport { BaseReturnValues } from '.';\nimport { convertLLMTokenUsage } from '../utils/token-usage';\n\nexport type LLMCallInput = {\n messages: BaseMessage[];\n instructions: string;\n tools?: ToolDefinition[];\n};\n\nexport function transformToToolDefinitions(\n tools: AgentTool[]\n): ToolDefinition[] {\n return tools.map((tool) => ({\n name: tool.name,\n description: tool.description || '',\n inputSchema: tool.inputSchema || {\n type: 'object',\n properties: {\n input: {\n type: 'string',\n description:\n 'Detailed instructions for the agent to accomplish the task. Include all necessary information and context for the agent to perform the task.',\n },\n },\n },\n }));\n}\n\nexport type LLMCallYieldValues =\n | {\n type: 'agenite.llm-call.streaming';\n content: PartialReturn;\n }\n | {\n type: 'agenite.llm-call.input';\n content: LLMCallInput;\n };\n\ntype LLMCallParams = {\n provider: LLMProvider;\n messages: BaseMessage[];\n instructions: string;\n tools?: ToolDefinition[];\n stream?: boolean;\n};\n\nexport const LLMStep: Step<\n BaseReturnValues<{\n messages: BaseMessage[];\n }>,\n LLMCallYieldValues,\n LLMCallParams,\n undefined\n> = {\n name: 'agenite.llm-call',\n beforeExecute: async (params) => {\n const tools = params.agent.agentConfig.tools || [];\n const agents =\n params.agent.agentConfig.agents?.map((agent) => {\n return {\n name: agent.agentConfig.name,\n description: agent.agentConfig.description || '',\n };\n }) || [];\n return {\n provider: params.provider,\n messages: params.state.messages,\n instructions: params.instructions,\n tools: transformToToolDefinitions([...tools, ...agents]),\n stream: params.stream,\n };\n },\n\n execute: async function* (params: LLMCallParams) {\n const { provider, messages, instructions, tools, stream } = params;\n\n yield {\n type: 'agenite.llm-call.input',\n content: {\n messages,\n instructions,\n tools,\n },\n };\n\n const generator = provider.iterate(messages, {\n systemPrompt: instructions,\n tools: tools?.length ? tools : undefined,\n stream: stream ?? false,\n });\n\n let response = await generator.next();\n while (!response.done) {\n const value = response.value;\n\n yield {\n type: 'agenite.llm-call.streaming',\n content: value,\n };\n response = await generator.next();\n }\n const message = {\n role: 'assistant',\n content: response.value.content,\n } as const;\n const tokenUsage = convertLLMTokenUsage([response.value.tokenUsage].flat());\n\n if (response.value.stopReason === 'toolUse') {\n return {\n next: 'agenite.tool-call',\n state: {\n messages: [message],\n },\n tokenUsage,\n };\n }\n\n return {\n next: 'agenite.end',\n state: {\n messages: [message],\n },\n tokenUsage,\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { BaseReturnValues } from '.';\nimport { Step } from '../types/step';\nimport { BaseMessage, ToolUseBlock } from '@agenite/llm';\nimport { ToolResultYieldValues } from './tool-result';\nimport { ToolResponse } from '@agenite/tool';\nexport type ToolCallYieldValues = {\n type: 'agenite.tool-call.params';\n toolUseBlocks: ToolUseBlock[];\n hasAgentCall?: boolean;\n};\n\ntype ToolCallParams = {\n messages: BaseMessage[];\n};\n\nexport type ToolCallNextValue = {\n type: 'agenite.tool-call.next';\n toolResultBlocks: {\n result: ToolResponse;\n toolUseBlock: ToolUseBlock;\n }[];\n};\n\nexport const ToolStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n ToolCallYieldValues | ToolResultYieldValues,\n ToolCallParams,\n ToolCallNextValue\n> = {\n name: 'agenite.tool-call',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n return {\n messages: params.state.messages,\n };\n },\n execute: async function* (params, context) {\n const lastMessage = params.messages[params.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n const toolUseBlocks = lastMessage.content.filter(\n (block) => block.type === 'toolUse'\n );\n if (!toolUseBlocks.length) {\n throw new Error('No tool use block found');\n }\n\n const agents = context.agent.agentConfig.agents;\n\n const hasAgentCall = agents?.some((agent) =>\n toolUseBlocks.some(\n (toolUseBlock) => agent.agentConfig.name === toolUseBlock.name\n )\n );\n\n const userProvidedToolValues = yield {\n type: 'agenite.tool-call.params',\n toolUseBlocks,\n hasAgentCall,\n };\n\n if (userProvidedToolValues) {\n for (const toolUseBlock of userProvidedToolValues.toolResultBlocks) {\n yield {\n type: 'agenite.tool-result',\n result: toolUseBlock.result,\n toolUseBlock: toolUseBlock.toolUseBlock,\n };\n }\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: userProvidedToolValues.toolResultBlocks.map(\n (toolResultBlock) => ({\n type: 'toolResult',\n toolName: toolResultBlock.toolUseBlock.name,\n toolUseId: toolResultBlock.toolUseBlock.id,\n content: JSON.stringify(\n toolResultBlock.result.isError\n ? `${toolResultBlock.result.data}:${toolResultBlock.result.error}`\n : toolResultBlock.result.data\n ),\n isError: toolResultBlock.result.isError,\n })\n ),\n },\n ],\n },\n };\n }\n\n if (hasAgentCall) {\n return {\n next: 'agenite.agent-call',\n state: {},\n };\n }\n\n return {\n next: 'agenite.tool-result',\n state: {},\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { ToolUseBlock, ToolResultBlock } from '@agenite/llm';\nimport { Step } from '../types/step';\nimport { Tool, ToolResponse } from '@agenite/tool';\nimport { BaseReturnValues } from '.';\n\ntype ToolResultParams = {\n toolUseBlocks: ToolUseBlock[];\n tools: Tool[];\n};\n\nexport type ToolResultYieldValues = {\n type: 'agenite.tool-result';\n result: ToolResponse;\n toolUseBlock: ToolUseBlock;\n};\n\nexport const ToolResultStep: Step<\n BaseReturnValues<Record<string, unknown>>,\n ToolResultYieldValues,\n ToolResultParams,\n undefined\n> = {\n name: 'agenite.tool-result',\n beforeExecute: async (params) => {\n const lastMessage = params.state.messages[params.state.messages.length - 1];\n if (!lastMessage) {\n throw new Error('No last message found');\n }\n\n const toolUseBlocks = lastMessage.content.filter(\n (block) => block.type === 'toolUse'\n );\n\n if (!toolUseBlocks.length) {\n throw new Error('Last message is not a tool use');\n }\n return {\n toolUseBlocks: toolUseBlocks,\n tools: params.agent.agentConfig.tools!,\n };\n },\n\n execute: async function* ({ toolUseBlocks, tools }, executionContext) {\n const toolResults: ToolResultBlock[] = [];\n for (const toolUseBlock of toolUseBlocks) {\n const tool = tools.find((t) => t.name === toolUseBlock.name);\n if (!tool) {\n throw new Error(`Tool ${toolUseBlock.toolName} not found`);\n }\n const input = toolUseBlock.input;\n const result = await tool.execute({\n input,\n context: executionContext.context,\n });\n\n yield {\n type: 'agenite.tool-result',\n result,\n toolUseBlock,\n } as ToolResultYieldValues;\n\n // TODO: Handle tool content properly i.e handle images, etc.\n toolResults.push({\n type: 'toolResult',\n toolName: tool.name,\n toolUseId: toolUseBlock.id,\n content: JSON.stringify(\n result.isError ? `${result.data}:${result.error}` : result.data\n ),\n isError: result.isError,\n });\n }\n\n return {\n next: 'agenite.llm-call',\n state: {\n messages: [\n {\n role: 'user',\n content: toolResults,\n },\n ],\n },\n };\n },\n afterExecute: async (params) => {\n return params;\n },\n};\n","import { StateReducer } from '../state/state-reducer';\nimport { AgentTokenUsage, BaseSteps } from '../types/agent';\nimport {\n Step,\n StepContext,\n BaseNextValue,\n BaseYieldValue,\n} from '../types/step';\n\nimport { DefaultStepType } from '../types/step';\nimport { AgentStep } from './agent-call';\nimport { LLMStep } from './llm-call';\nimport { ToolStep } from './tool-call';\nimport { ToolResultStep } from './tool-result';\n\nexport interface BaseReturnValues<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n next: DefaultStepType | (string & {});\n state: T;\n tokenUsage?: AgentTokenUsage;\n}\n\nexport type GeneratorYieldType<T extends AsyncGenerator> =\n T extends AsyncGenerator<infer Y, unknown, unknown> ? Y : never;\n\nexport type GeneratorReturnType<T extends AsyncGenerator> =\n T extends AsyncGenerator<unknown, infer R, unknown> ? R : never;\n\nexport type GeneratorNextType<T extends AsyncGenerator> =\n T extends AsyncGenerator<unknown, unknown, infer N> ? N : never;\n\nexport type AllStepsYieldValues<Steps extends BaseSteps> = GeneratorYieldType<\n ReturnType<Steps[keyof Steps]['execute']>\n>;\n\nexport type AllStepsNextValues<Steps extends BaseSteps> = GeneratorNextType<\n ReturnType<Steps[keyof Steps]['execute']>\n>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyStateReducer = StateReducer<Record<string, any>>;\n\nexport const defaultStepConfig = {\n 'agenite.llm-call': LLMStep,\n 'agenite.tool-call': ToolStep,\n 'agenite.agent-call': AgentStep,\n 'agenite.tool-result': ToolResultStep,\n};\n\nexport const executeAgentStep = async function* (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n task: Step<BaseReturnValues<any>, BaseYieldValue, unknown, BaseNextValue>,\n executionContext: StepContext<AnyStateReducer>\n) {\n const beforeResult = await task.beforeExecute(executionContext);\n const result = yield* task.execute(beforeResult, executionContext);\n const afterResult = await task.afterExecute(result, executionContext);\n return afterResult;\n};\n\nexport type DefaultStepGenerator = AsyncGenerator<\n AllStepsYieldValues<typeof defaultStepConfig>,\n unknown,\n AllStepsNextValues<typeof defaultStepConfig>\n>;\n\nexport * from './agent-call';\nexport * from './llm-call';\nexport * from './tool-call';\nexport * from './tool-result';\n","import { AsyncGeneratorMiddleware } from '../types/agent';\nimport {\n MiddlewareBaseNextValue,\n MiddlewareBaseYieldValue,\n} from '../types/middleware';\nimport { BaseNextValue } from '../types/step';\n\n/**\n * Injects the execution context into the every yield value\n * @returns\n */\nexport const executionContextInjector = (): AsyncGeneratorMiddleware<\n MiddlewareBaseYieldValue,\n unknown,\n MiddlewareBaseNextValue\n> => {\n return async function* (generator, context) {\n let nextValue: BaseNextValue | undefined = undefined;\n\n while (true) {\n const { value, done } = await generator.next(nextValue);\n\n if (done) {\n return value;\n }\n\n // Inject context into the yield value\n const valueWithContext = {\n ...value,\n // If it's a next value, use the context from the generator else inject the context\n executionContext: value.executionContext || context,\n };\n\n nextValue = yield valueWithContext;\n }\n };\n};\n","import { AsyncGeneratorMiddleware } from '../types/agent';\nimport { FullMergedMiddlewareStepGeneratorResponse } from '../types/execution';\nimport {\n MiddlewareBaseNextValue,\n MiddlewareBaseYieldValue,\n} from '../types/middleware';\nimport { StepContext } from '../types/step';\nimport { executionContextInjector } from './context-injector';\n\nexport function applyMiddlewares<\n YieldValues,\n ReturnValues,\n NextValues,\n Middlewares extends AsyncGeneratorMiddleware<\n MiddlewareBaseYieldValue,\n unknown,\n MiddlewareBaseNextValue\n >[] = [],\n>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n genFunc: () => AsyncGenerator<any, any, any>,\n middlewares: Middlewares,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n context: StepContext<any>\n): FullMergedMiddlewareStepGeneratorResponse<\n Middlewares,\n YieldValues & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n executionContext: StepContext<any>;\n },\n NextValues,\n ReturnValues\n> {\n return [...middlewares, executionContextInjector()].reduceRight(\n (gen, middleware) => middleware(gen, context),\n genFunc()\n );\n}\n","import {\n AgentConfig,\n BaseMiddlewares,\n BaseSteps,\n ExecutionOptions,\n} from './types/agent';\nimport { StepContext, DefaultStepType } from './types/step';\nimport { defaultStateReducer, StateFromReducer } from './state/state-reducer';\nimport { stateApplicator } from './state/state-applicator';\nimport { AnyStateReducer, BaseReturnValues, defaultStepConfig } from './steps';\nimport { executeAgentStep } from './steps';\nimport { IterateResponse } from './types/execution';\nimport { applyMiddlewares } from './middlewares/apply-middlewares';\nimport { mergeAgentTokenUsage } from './utils/token-usage';\n\nexport class Agent<\n Reducer extends AnyStateReducer = typeof defaultStateReducer,\n Steps extends BaseSteps = typeof defaultStepConfig,\n Middlewares extends BaseMiddlewares = [],\n Extensions extends Record<string, unknown> | undefined = undefined,\n> {\n constructor(\n public readonly agentConfig: AgentConfig<\n Reducer,\n Steps,\n Middlewares,\n Extensions\n >\n ) {}\n\n public async *iterate(\n input: Partial<StateFromReducer<Reducer>>,\n options?: ExecutionOptions\n ): IterateResponse<Middlewares, Steps, Reducer> {\n const reducer: Reducer =\n this.agentConfig.stateReducer || (defaultStateReducer as Reducer);\n\n const state = stateApplicator(\n reducer,\n this.agentConfig.initialState || {},\n input\n );\n\n const executionContext: StepContext<Reducer> = {\n state,\n context: options?.context || {},\n agent: this,\n parentExecution: options?.parentExecution,\n provider: this.agentConfig.provider,\n isNestedExecution: !!options?.parentExecution,\n instructions:\n this.agentConfig.instructions || 'You are a helpful assistant.',\n stream: options?.stream || true,\n tokenUsage: {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n inputCost: 0,\n outputCost: 0,\n totalCost: 0,\n modelBreakdown: {},\n },\n };\n\n const actions = this.agentConfig.steps || defaultStepConfig;\n\n const startStep = this.agentConfig.startStep || 'agenite.llm-call';\n\n const generator = async function* () {\n let currentStep: DefaultStepType | (string & {}) = startStep;\n\n yield {\n type: 'agenite.start',\n executionContext,\n };\n\n while (true) {\n if (currentStep === 'agenite.end') {\n break;\n }\n\n const step: BaseSteps[keyof BaseSteps] | undefined =\n actions[currentStep as keyof typeof actions];\n\n if (!step) {\n throw new Error(`Step ${currentStep} not found.`);\n }\n\n const result: BaseReturnValues<StateFromReducer<Reducer>> =\n yield* executeAgentStep(step, executionContext);\n\n if (result.tokenUsage) {\n executionContext.tokenUsage = mergeAgentTokenUsage(\n executionContext.tokenUsage,\n result.tokenUsage\n );\n }\n\n // Apply state changes after executor completes\n if (result.state) {\n const newState = stateApplicator(\n reducer,\n executionContext.state,\n result.state\n );\n\n executionContext.state = {\n ...executionContext.state,\n ...newState,\n };\n }\n\n if (!result.next) {\n throw new Error(\n `No next step found. Previous step: ${currentStep}. Please review the step configuration to return a valid next step.`\n );\n }\n\n currentStep = result.next;\n }\n\n yield {\n type: 'agenite.end',\n executionContext,\n };\n\n return {\n ...executionContext.state,\n tokenUsage: executionContext.tokenUsage,\n };\n };\n\n return yield* applyMiddlewares(\n generator,\n this.agentConfig.middlewares || [],\n executionContext\n );\n }\n\n async execute(\n input: Partial<StateFromReducer<Reducer>>,\n options?: ExecutionOptions\n ) {\n const iterator = this.iterate(input, options);\n let result = await iterator.next();\n while (!result.done) {\n result = await iterator.next();\n }\n\n return result.value;\n }\n}\n"]} |
+9
-9
| { | ||
| "name": "@agenite/agent", | ||
| "version": "0.4.2", | ||
| "version": "0.5.0", | ||
| "description": "Simple and maintainable agent library", | ||
@@ -18,13 +18,13 @@ "private": false, | ||
| "dependencies": { | ||
| "@agenite/llm": "0.4.0", | ||
| "@agenite/tool": "0.4.0" | ||
| "@agenite/tool": "0.5.0", | ||
| "@agenite/llm": "0.5.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@types/node": "^20.17.25", | ||
| "@types/node": "^20.17.30", | ||
| "tsup": "^8.4.0", | ||
| "typescript": "^5.8.2", | ||
| "@agenite/bedrock": "0.4.0", | ||
| "@agenite/ollama": "0.4.0", | ||
| "@repo/eslint-config": "0.1.0", | ||
| "@repo/tsup-config": "0.0.3", | ||
| "typescript": "^5.8.3", | ||
| "@agenite/ollama": "0.5.0", | ||
| "@agenite/bedrock": "0.5.0", | ||
| "@repo/tsup-config": "0.1.0", | ||
| "@repo/eslint-config": "0.2.0", | ||
| "@repo/typescript-config": "0.1.0" | ||
@@ -31,0 +31,0 @@ }, |
163652
0.24%1429
-0.14%+ Added
+ Added
- Removed
- Removed
Updated
Updated