pocketflow
Version: 
A minimalist LLM framework
1 lines • 8.75 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["type NonIterableObject = Partial<Record<string, unknown>> & { [Symbol.iterator]?: never }; type Action = string;\nclass BaseNode<S = unknown, P extends NonIterableObject = NonIterableObject> {\n  protected _params: P = {} as P; protected _successors: Map<Action, BaseNode> = new Map();\n  protected async _exec(prepRes: unknown): Promise<unknown> { return await this.exec(prepRes); }\n  async prep(shared: S): Promise<unknown> { return undefined; }\n  async exec(prepRes: unknown): Promise<unknown> { return undefined; }\n  async post(shared: S, prepRes: unknown, execRes: unknown): Promise<Action | undefined> { return undefined; }\n  async _run(shared: S): Promise<Action | undefined> {\n    const p = await this.prep(shared), e = await this._exec(p); return await this.post(shared, p, e);\n  }\n  async run(shared: S): Promise<Action | undefined> {\n    if (this._successors.size > 0) console.warn(\"Node won't run successors. Use Flow.\");\n    return await this._run(shared);\n  }\n  setParams(params: P): this { this._params = params; return this; }\n  next<T extends BaseNode>(node: T): T { this.on(\"default\", node); return node; }\n  on(action: Action, node: BaseNode): this {\n    if (this._successors.has(action)) console.warn(`Overwriting successor for action '${action}'`);\n    this._successors.set(action, node); return this;\n  }\n  getNextNode(action: Action = \"default\"): BaseNode | undefined {\n    const nextAction = action || 'default', next = this._successors.get(nextAction)\n    if (!next && this._successors.size > 0)\n      console.warn(`Flow ends: '${nextAction}' not found in [${Array.from(this._successors.keys())}]`)\n    return next\n  }\n  clone(): this {\n    const clonedNode = Object.create(Object.getPrototypeOf(this)); Object.assign(clonedNode, this);\n    clonedNode._params = { ...this._params }; clonedNode._successors = new Map(this._successors);\n    return clonedNode;\n  }\n}\nclass Node<S = unknown, P extends NonIterableObject = NonIterableObject> extends BaseNode<S, P> {\n  maxRetries: number; wait: number; currentRetry: number = 0;\n  constructor(maxRetries: number = 1, wait: number = 0) {\n    super(); this.maxRetries = maxRetries; this.wait = wait;\n  }\n  async execFallback(prepRes: unknown, error: Error): Promise<unknown> { throw error; }\n  async _exec(prepRes: unknown): Promise<unknown> {\n    for (this.currentRetry = 0; this.currentRetry < this.maxRetries; this.currentRetry++) {\n      try { return await this.exec(prepRes); } \n      catch (e) {\n        if (this.currentRetry === this.maxRetries - 1) return await this.execFallback(prepRes, e as Error);\n        if (this.wait > 0) await new Promise(resolve => setTimeout(resolve, this.wait * 1000));\n      }\n    }\n    return undefined;\n  }\n}\nclass BatchNode<S = unknown, P extends NonIterableObject = NonIterableObject> extends Node<S, P> {\n  async _exec(items: unknown[]): Promise<unknown[]> {\n    if (!items || !Array.isArray(items)) return [];\n    const results = []; for (const item of items) results.push(await super._exec(item)); return results;\n  }\n}\nclass ParallelBatchNode<S = unknown, P extends NonIterableObject = NonIterableObject> extends Node<S, P> {\n  async _exec(items: unknown[]): Promise<unknown[]> {\n    if (!items || !Array.isArray(items)) return []\n    return Promise.all(items.map((item) => super._exec(item)))\n  }\n}\nclass Flow<S = unknown, P extends NonIterableObject = NonIterableObject> extends BaseNode<S, P> {\n  start: BaseNode;\n  constructor(start: BaseNode) { super(); this.start = start; }\n  protected async _orchestrate(shared: S, params?: P): Promise<void> {\n    let current: BaseNode | undefined = this.start.clone();\n    const p = params || this._params;\n    while (current) {\n      current.setParams(p); const action = await current._run(shared);\n      current = current.getNextNode(action); current = current?.clone();\n    }\n  }\n  async _run(shared: S): Promise<Action | undefined> {\n    const pr = await this.prep(shared); await this._orchestrate(shared);\n    return await this.post(shared, pr, undefined);\n  }\n  async exec(prepRes: unknown): Promise<unknown> { throw new Error(\"Flow can't exec.\"); }\n}\nclass BatchFlow<S = unknown, P extends NonIterableObject = NonIterableObject, NP extends NonIterableObject[] = NonIterableObject[]> extends Flow<S, P> {\n  async _run(shared: S): Promise<Action | undefined> {\n    const batchParams = await this.prep(shared);\n    for (const bp of batchParams) {\n      const mergedParams = { ...this._params, ...bp };\n      await this._orchestrate(shared, mergedParams);\n    }\n    return await this.post(shared, batchParams, undefined);\n  }\n  async prep(shared: S): Promise<NP> { const empty: readonly NonIterableObject[] = []; return empty as NP; }\n}\nclass ParallelBatchFlow<S = unknown, P extends NonIterableObject = NonIterableObject, NP extends NonIterableObject[] = NonIterableObject[]> extends BatchFlow<S, P, NP> {\n  async _run(shared: S): Promise<Action | undefined> {\n    const batchParams = await this.prep(shared);\n    await Promise.all(batchParams.map(bp => {\n      const mergedParams = { ...this._params, ...bp };\n      return this._orchestrate(shared, mergedParams);\n    }));\n    return await this.post(shared, batchParams, undefined);\n  }\n}\nexport { BaseNode, Node, BatchNode, ParallelBatchNode, Flow, BatchFlow, ParallelBatchFlow };"],"mappings":"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","names":[]}