UNPKG

@agentica/core

Version:

Agentic AI Library specialized in LLM Function Calling

332 lines (316 loc) 9.39 kB
import type { ILlmSchema, IValidation } from "@samchon/openapi"; import type OpenAI from "openai"; import { v4 } from "uuid"; import type { AgenticaOperation } from "../context/AgenticaOperation"; import type { AgenticaOperationSelection } from "../context/AgenticaOperationSelection"; import type { AgenticaJsonParseErrorEvent } from "../events"; import type { AgenticaAssistantMessageEvent } from "../events/AgenticaAssistantMessageEvent"; import type { AgenticaCallEvent } from "../events/AgenticaCallEvent"; import type { AgenticaCancelEvent } from "../events/AgenticaCancelEvent"; import type { AgenticaDescribeEvent } from "../events/AgenticaDescribeEvent"; import type { AgenticaEventSource } from "../events/AgenticaEventSource"; import type { AgenticaExecuteEvent } from "../events/AgenticaExecuteEvent"; import type { AgenticaInitializeEvent } from "../events/AgenticaInitializeEvent"; import type { AgenticaRequestEvent } from "../events/AgenticaRequestEvent"; import type { AgenticaResponseEvent } from "../events/AgenticaResponseEvent"; import type { AgenticaSelectEvent } from "../events/AgenticaSelectEvent"; import type { AgenticaUserMessageEvent } from "../events/AgenticaUserMessageEvent"; import type { AgenticaValidateEvent } from "../events/AgenticaValidateEvent"; import type { AgenticaUserMessageContent } from "../histories"; import type { AgenticaExecuteHistory } from "../histories/AgenticaExecuteHistory"; import type { IAgenticaEventJson } from "../json/IAgenticaEventJson"; import { createExecuteHistory, createSelectHistory, createUserMessageHistory, } from "./histories"; /* ----------------------------------------------------------- FUNCTION SELECTS ----------------------------------------------------------- */ export function createInitializeEvent(): AgenticaInitializeEvent { const event: IAgenticaEventJson.IInitialize = { id: v4(), type: "initialize", created_at: new Date().toISOString(), }; return { id: event.id, type: event.type, created_at: event.created_at, toJSON: () => event, }; } export function createSelectEvent<Model extends ILlmSchema.Model>(props: { selection: AgenticaOperationSelection<Model>; }): AgenticaSelectEvent<Model> { const id: string = v4(); const created_at: string = new Date().toISOString(); return { type: "select", id, created_at, selection: props.selection, toJSON: () => ({ type: "select", id, created_at, selection: props.selection.toJSON(), }), toHistory: () => createSelectHistory({ id, created_at, selection: props.selection, }), }; } export function createCancelEvent<Model extends ILlmSchema.Model>(props: { selection: AgenticaOperationSelection<Model>; }): AgenticaCancelEvent<Model> { const id: string = v4(); const created_at: string = new Date().toISOString(); return { type: "cancel", id, created_at, selection: props.selection, toJSON: () => ({ type: "cancel", id, created_at, selection: props.selection.toJSON(), }), }; } /* ----------------------------------------------------------- FUNCTION CALLS ----------------------------------------------------------- */ export function createCallEvent<Model extends ILlmSchema.Model>(props: { id: string; operation: AgenticaOperation<Model>; arguments: Record<string, any>; }): AgenticaCallEvent<Model> { const created_at: string = new Date().toISOString(); return { type: "call", id: props.id, created_at, operation: props.operation, arguments: props.arguments, toJSON: () => ({ type: "call", id: props.id, created_at, operation: props.operation.toJSON(), arguments: props.arguments, }), }; } export function createJsonParseErrorEvent<Model extends ILlmSchema.Model>(props: { id: string; operation: AgenticaOperation<Model>; arguments: string; errorMessage: string; }): AgenticaJsonParseErrorEvent<Model> { const created_at: string = new Date().toISOString(); return { type: "jsonParseError", id: props.id, created_at, operation: props.operation, arguments: props.arguments, errorMessage: props.errorMessage, }; } export function createValidateEvent<Model extends ILlmSchema.Model>(props: { id: string; operation: AgenticaOperation<Model>; result: IValidation.IFailure; }): AgenticaValidateEvent<Model> { const created_at: string = new Date().toISOString(); return { type: "validate", id: props.id, created_at, operation: props.operation, result: props.result, toJSON: () => ({ type: "validate", id: props.id, created_at, operation: props.operation.toJSON(), result: props.result, }), }; } export function createExecuteEvent<Model extends ILlmSchema.Model>(props: { operation: AgenticaOperation<Model>; arguments: Record<string, unknown>; value: unknown; }): AgenticaExecuteEvent<Model> { const id: string = v4(); const created_at: string = new Date().toISOString(); return { type: "execute", id, created_at, protocol: props.operation.protocol as "class", operation: props.operation as AgenticaOperation.Class<Model>, arguments: props.arguments, value: props.value as any, toJSON: () => ({ type: "execute", id, created_at, protocol: props.operation.protocol as "class", operation: props.operation.toJSON(), arguments: props.arguments, value: props.value, }), toHistory: () => createExecuteHistory({ id, created_at, ...props, }) as AgenticaExecuteHistory.Class<Model>, }; } /* ----------------------------------------------------------- CONTENTS ----------------------------------------------------------- */ export function createUserMessageEvent(props: { contents: Array<AgenticaUserMessageContent>; }): AgenticaUserMessageEvent { const id: string = v4(); const created_at: string = new Date().toISOString(); return { type: "userMessage", id, created_at, contents: props.contents, toJSON: () => ({ type: "userMessage", id, created_at, contents: props.contents, }), toHistory: () => createUserMessageHistory({ id, created_at, contents: props.contents, }), }; } export function createAssistantMessageEvent(props: { stream: AsyncGenerator<string, undefined, undefined>; done: () => boolean; get: () => string; join: () => Promise<string>; }): AgenticaAssistantMessageEvent { const id: string = v4(); const created_at: string = new Date().toISOString(); return { type: "assistantMessage", id, created_at, stream: props.stream, join: props.join, toJSON: () => ({ type: "assistantMessage", id, created_at, done: props.done(), text: props.get(), }), toHistory: () => ({ type: "assistantMessage", id, created_at, text: props.get(), toJSON: () => ({ type: "assistantMessage", id, created_at, text: props.get(), }), }), }; } export function createDescribeEvent<Model extends ILlmSchema.Model>(props: { executes: AgenticaExecuteHistory<Model>[]; stream: AsyncGenerator<string, undefined, undefined>; done: () => boolean; get: () => string; join: () => Promise<string>; }): AgenticaDescribeEvent<Model> { const id: string = v4(); const created_at: string = new Date().toISOString(); return { type: "describe", id, created_at, executes: props.executes, stream: props.stream, join: props.join, toJSON: () => ({ type: "describe", id, created_at, executes: props.executes.map(execute => execute.toJSON()), done: props.done(), text: props.get(), }), toHistory: () => ({ type: "describe", id, created_at, executes: props.executes, text: props.get(), toJSON: () => ({ type: "describe", id, created_at, executes: props.executes.map(execute => execute.toJSON()), text: props.get(), }), }), }; } /* ----------------------------------------------------------- API REQUESTS ----------------------------------------------------------- */ export function createRequestEvent(props: { source: AgenticaEventSource; body: OpenAI.ChatCompletionCreateParamsStreaming; options?: OpenAI.RequestOptions | undefined; }): AgenticaRequestEvent { const id: string = v4(); const created_at: string = new Date().toISOString(); return { type: "request", id, created_at, source: props.source, body: props.body, options: props.options, }; } export function createResponseEvent(props: { source: AgenticaEventSource; body: OpenAI.ChatCompletionCreateParamsStreaming; options?: OpenAI.RequestOptions | undefined; stream: AsyncGenerator<OpenAI.ChatCompletionChunk, undefined, undefined>; join: () => Promise<OpenAI.ChatCompletion>; }): AgenticaResponseEvent { const id: string = v4(); const created_at: string = new Date().toISOString(); return { type: "response", id, created_at, source: props.source, body: props.body, options: props.options, stream: props.stream, join: props.join, }; }