zeitlich 0.2.37 → 0.2.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/dist/{activities-Bb-nAjwQ.d.ts → activities-Bmu7XnaG.d.ts} +4 -4
- package/dist/{activities-vkI4_3CC.d.cts → activities-ByBFLvm2.d.cts} +4 -4
- package/dist/adapter-id-BB-mmrts.d.cts +17 -0
- package/dist/adapter-id-BB-mmrts.d.ts +17 -0
- package/dist/adapter-id-CMwVrVqv.d.cts +17 -0
- package/dist/adapter-id-CMwVrVqv.d.ts +17 -0
- package/dist/adapter-id-CbY2zeSt.d.cts +17 -0
- package/dist/adapter-id-CbY2zeSt.d.ts +17 -0
- package/dist/adapters/sandbox/bedrock/index.cjs +3 -3
- package/dist/adapters/sandbox/bedrock/index.cjs.map +1 -1
- package/dist/adapters/sandbox/bedrock/index.d.cts +6 -6
- package/dist/adapters/sandbox/bedrock/index.d.ts +6 -6
- package/dist/adapters/sandbox/bedrock/index.js +3 -3
- package/dist/adapters/sandbox/bedrock/index.js.map +1 -1
- package/dist/adapters/sandbox/bedrock/workflow.d.cts +2 -2
- package/dist/adapters/sandbox/bedrock/workflow.d.ts +2 -2
- package/dist/adapters/sandbox/daytona/index.cjs +3 -3
- package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/index.d.cts +4 -4
- package/dist/adapters/sandbox/daytona/index.d.ts +4 -4
- package/dist/adapters/sandbox/daytona/index.js +3 -3
- package/dist/adapters/sandbox/daytona/index.js.map +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/e2b/index.cjs +26 -14
- package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/index.d.cts +24 -4
- package/dist/adapters/sandbox/e2b/index.d.ts +24 -4
- package/dist/adapters/sandbox/e2b/index.js +26 -14
- package/dist/adapters/sandbox/e2b/index.js.map +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/inmemory/index.cjs +3 -3
- package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
- package/dist/adapters/sandbox/inmemory/index.d.cts +4 -4
- package/dist/adapters/sandbox/inmemory/index.d.ts +4 -4
- package/dist/adapters/sandbox/inmemory/index.js +3 -3
- package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.ts +1 -1
- package/dist/adapters/thread/anthropic/index.cjs +150 -13
- package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/index.d.cts +9 -8
- package/dist/adapters/thread/anthropic/index.d.ts +9 -8
- package/dist/adapters/thread/anthropic/index.js +150 -14
- package/dist/adapters/thread/anthropic/index.js.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.cjs +9 -3
- package/dist/adapters/thread/anthropic/workflow.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.d.cts +6 -5
- package/dist/adapters/thread/anthropic/workflow.d.ts +6 -5
- package/dist/adapters/thread/anthropic/workflow.js +9 -4
- package/dist/adapters/thread/anthropic/workflow.js.map +1 -1
- package/dist/adapters/thread/google-genai/index.cjs +154 -13
- package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/index.d.cts +6 -5
- package/dist/adapters/thread/google-genai/index.d.ts +6 -5
- package/dist/adapters/thread/google-genai/index.js +154 -14
- package/dist/adapters/thread/google-genai/index.js.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.cjs +9 -3
- package/dist/adapters/thread/google-genai/workflow.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.d.cts +6 -5
- package/dist/adapters/thread/google-genai/workflow.d.ts +6 -5
- package/dist/adapters/thread/google-genai/workflow.js +9 -4
- package/dist/adapters/thread/google-genai/workflow.js.map +1 -1
- package/dist/adapters/thread/index.cjs +16 -0
- package/dist/adapters/thread/index.cjs.map +1 -0
- package/dist/adapters/thread/index.d.cts +34 -0
- package/dist/adapters/thread/index.d.ts +34 -0
- package/dist/adapters/thread/index.js +12 -0
- package/dist/adapters/thread/index.js.map +1 -0
- package/dist/adapters/thread/langchain/index.cjs +149 -14
- package/dist/adapters/thread/langchain/index.cjs.map +1 -1
- package/dist/adapters/thread/langchain/index.d.cts +9 -8
- package/dist/adapters/thread/langchain/index.d.ts +9 -8
- package/dist/adapters/thread/langchain/index.js +149 -15
- package/dist/adapters/thread/langchain/index.js.map +1 -1
- package/dist/adapters/thread/langchain/workflow.cjs +9 -3
- package/dist/adapters/thread/langchain/workflow.cjs.map +1 -1
- package/dist/adapters/thread/langchain/workflow.d.cts +6 -5
- package/dist/adapters/thread/langchain/workflow.d.ts +6 -5
- package/dist/adapters/thread/langchain/workflow.js +9 -4
- package/dist/adapters/thread/langchain/workflow.js.map +1 -1
- package/dist/index.cjs +367 -59
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.js +365 -61
- package/dist/index.js.map +1 -1
- package/dist/{proxy-DEtowJyd.d.cts → proxy-BAKzNGRq.d.cts} +1 -1
- package/dist/{proxy-0smGKvx8.d.ts → proxy-DO_MXbY4.d.ts} +1 -1
- package/dist/{thread-manager-C-C4pI2z.d.ts → thread-manager-CcRXasqs.d.ts} +2 -2
- package/dist/{thread-manager-D4vgzYrh.d.cts → thread-manager-ClwSaUnj.d.cts} +2 -2
- package/dist/{thread-manager-3fszQih4.d.ts → thread-manager-D-7lp1JK.d.ts} +2 -2
- package/dist/{thread-manager-CzYln2OC.d.cts → thread-manager-Y8Ucf0Tf.d.cts} +2 -2
- package/dist/{types-CPKDl-y_.d.ts → types-Bcbiq8iv.d.cts} +195 -22
- package/dist/{types-CNuWnvy9.d.ts → types-DAsQ21Rt.d.ts} +1 -1
- package/dist/{types-B37hKoWA.d.ts → types-DpHTX-iO.d.ts} +58 -1
- package/dist/{types-BO7Yju20.d.cts → types-Dt8-HBBT.d.ts} +195 -22
- package/dist/{types-D08CXPh8.d.cts → types-hFFi-Zd9.d.cts} +58 -1
- package/dist/{types-DWEUmYAJ.d.cts → types-lm8tMNJQ.d.cts} +1 -1
- package/dist/{types-tQL9njTu.d.cts → types-yx0LzPGn.d.cts} +21 -7
- package/dist/{types-tQL9njTu.d.ts → types-yx0LzPGn.d.ts} +21 -7
- package/dist/{workflow-CjXHbZZc.d.ts → workflow-Bmf9EtDW.d.ts} +83 -3
- package/dist/{workflow-Do_lzJpT.d.cts → workflow-Bx9utBwb.d.cts} +83 -3
- package/dist/workflow.cjs +266 -39
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +3 -3
- package/dist/workflow.d.ts +3 -3
- package/dist/workflow.js +264 -41
- package/dist/workflow.js.map +1 -1
- package/package.json +12 -2
- package/src/adapters/sandbox/bedrock/index.ts +12 -3
- package/src/adapters/sandbox/daytona/index.ts +12 -3
- package/src/adapters/sandbox/e2b/index.ts +36 -14
- package/src/adapters/sandbox/e2b/types.ts +16 -0
- package/src/adapters/sandbox/inmemory/index.ts +12 -3
- package/src/adapters/thread/adapter-id.test.ts +42 -0
- package/src/adapters/thread/anthropic/activities.ts +40 -5
- package/src/adapters/thread/anthropic/adapter-id.ts +16 -0
- package/src/adapters/thread/anthropic/fork-transform.test.ts +291 -0
- package/src/adapters/thread/anthropic/index.ts +3 -0
- package/src/adapters/thread/anthropic/model-invoker.ts +7 -1
- package/src/adapters/thread/anthropic/proxy.ts +3 -2
- package/src/adapters/thread/anthropic/thread-manager.ts +27 -1
- package/src/adapters/thread/google-genai/activities.ts +44 -5
- package/src/adapters/thread/google-genai/adapter-id.ts +16 -0
- package/src/adapters/thread/google-genai/fork-transform.test.ts +149 -0
- package/src/adapters/thread/google-genai/index.ts +3 -0
- package/src/adapters/thread/google-genai/model-invoker.ts +8 -2
- package/src/adapters/thread/google-genai/proxy.ts +3 -2
- package/src/adapters/thread/google-genai/thread-manager.ts +27 -1
- package/src/adapters/thread/index.ts +39 -0
- package/src/adapters/thread/langchain/activities.ts +40 -5
- package/src/adapters/thread/langchain/adapter-id.ts +16 -0
- package/src/adapters/thread/langchain/fork-transform.test.ts +142 -0
- package/src/adapters/thread/langchain/index.ts +3 -0
- package/src/adapters/thread/langchain/model-invoker.ts +7 -1
- package/src/adapters/thread/langchain/proxy.ts +3 -2
- package/src/adapters/thread/langchain/thread-manager.ts +27 -1
- package/src/lib/lifecycle.ts +14 -5
- package/src/lib/model/types.ts +7 -0
- package/src/lib/sandbox/manager.ts +26 -18
- package/src/lib/sandbox/types.ts +27 -7
- package/src/lib/session/session-edge-cases.integration.test.ts +336 -4
- package/src/lib/session/session.integration.test.ts +192 -2
- package/src/lib/session/session.ts +102 -8
- package/src/lib/session/types.ts +66 -3
- package/src/lib/state/index.ts +1 -0
- package/src/lib/state/manager.integration.test.ts +109 -0
- package/src/lib/state/manager.ts +38 -8
- package/src/lib/state/types.ts +25 -0
- package/src/lib/subagent/handler.ts +124 -11
- package/src/lib/subagent/index.ts +5 -1
- package/src/lib/subagent/subagent.integration.test.ts +628 -104
- package/src/lib/subagent/types.ts +63 -14
- package/src/lib/subagent/workflow.ts +29 -2
- package/src/lib/thread/index.ts +5 -0
- package/src/lib/thread/keys.test.ts +101 -0
- package/src/lib/thread/keys.ts +94 -0
- package/src/lib/thread/manager.test.ts +139 -0
- package/src/lib/thread/manager.ts +105 -9
- package/src/lib/thread/proxy.ts +3 -0
- package/src/lib/thread/types.ts +64 -1
- package/src/lib/tool-router/index.ts +2 -0
- package/src/lib/tool-router/router-edge-cases.integration.test.ts +92 -0
- package/src/lib/tool-router/router.integration.test.ts +12 -0
- package/src/lib/tool-router/router.ts +89 -16
- package/src/lib/tool-router/types.ts +42 -1
- package/src/lib/types.ts +12 -0
- package/src/workflow.ts +14 -1
- package/tsup.config.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/thread/proxy.ts","../../../../src/adapters/thread/google-genai/proxy.ts"],"names":[],"mappings":";;;AAwBO,SAAS,oBAAA,CACd,aAAA,EACA,KAAA,EACA,OAAA,EACiC;AACjC,EAAA,MAAM,aAAA,GAAgB,KAAA,IAAS,YAAA,EAAa,CAAE,YAAA;AAG9C,EAAA,MAAM,IAAA,GAAO,eAAA;AAAA,IACX,OAAA,IAAW;AAAA,MACT,mBAAA,EAAqB,KAAA;AAAA,MACrB,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,CAAA;AAAA,QACjB,eAAA,EAAiB,IAAA;AAAA,QACjB,eAAA,EAAiB,KAAA;AAAA,QACjB,kBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAEA,EAAA,MAAM,MAAA,GAAS,CAAA,EAAG,aAAa,CAAA,EAAG,cAAc,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,EAAG,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAChG,EAAA,MAAM,IAAI,CAAC,GAAA,KACT,CAAA,EAAG,MAAM,GAAG,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,aAAa,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAExD,EAAA,OAAO;AAAA,IACL,gBAAA,EAAkB,IAAA,CAAK,CAAA,CAAE,kBAAkB,CAAC,CAAA;AAAA,IAC5C,kBAAA,EAAoB,IAAA,CAAK,CAAA,CAAE,oBAAoB,CAAC,CAAA;AAAA,IAChD,gBAAA,EAAkB,IAAA,CAAK,CAAA,CAAE,kBAAkB,CAAC,CAAA;AAAA,IAC5C,kBAAA,EAAoB,IAAA,CAAK,CAAA,CAAE,oBAAoB,CAAC,CAAA;AAAA,IAChD,mBAAA,EAAqB,IAAA,CAAK,CAAA,CAAE,qBAAqB,CAAC,CAAA;AAAA,IAClD,UAAA,EAAY,IAAA,CAAK,CAAA,CAAE,YAAY,CAAC;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/thread/proxy.ts","../../../../src/adapters/thread/google-genai/adapter-id.ts","../../../../src/adapters/thread/google-genai/proxy.ts"],"names":[],"mappings":";;;AAwBO,SAAS,oBAAA,CACd,aAAA,EACA,KAAA,EACA,OAAA,EACiC;AACjC,EAAA,MAAM,aAAA,GAAgB,KAAA,IAAS,YAAA,EAAa,CAAE,YAAA;AAG9C,EAAA,MAAM,IAAA,GAAO,eAAA;AAAA,IACX,OAAA,IAAW;AAAA,MACT,mBAAA,EAAqB,KAAA;AAAA,MACrB,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,CAAA;AAAA,QACjB,eAAA,EAAiB,IAAA;AAAA,QACjB,eAAA,EAAiB,KAAA;AAAA,QACjB,kBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAEA,EAAA,MAAM,MAAA,GAAS,CAAA,EAAG,aAAa,CAAA,EAAG,cAAc,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA,EAAG,aAAA,CAAc,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAChG,EAAA,MAAM,IAAI,CAAC,GAAA,KACT,CAAA,EAAG,MAAM,GAAG,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,CAAE,aAAa,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAExD,EAAA,OAAO;AAAA,IACL,gBAAA,EAAkB,IAAA,CAAK,CAAA,CAAE,kBAAkB,CAAC,CAAA;AAAA,IAC5C,kBAAA,EAAoB,IAAA,CAAK,CAAA,CAAE,oBAAoB,CAAC,CAAA;AAAA,IAChD,gBAAA,EAAkB,IAAA,CAAK,CAAA,CAAE,kBAAkB,CAAC,CAAA;AAAA,IAC5C,kBAAA,EAAoB,IAAA,CAAK,CAAA,CAAE,oBAAoB,CAAC,CAAA;AAAA,IAChD,mBAAA,EAAqB,IAAA,CAAK,CAAA,CAAE,qBAAqB,CAAC,CAAA;AAAA,IAClD,UAAA,EAAY,IAAA,CAAK,CAAA,CAAE,YAAY,CAAC,CAAA;AAAA,IAChC,cAAA,EAAgB,IAAA,CAAK,CAAA,CAAE,gBAAgB,CAAC,CAAA;AAAA,IACxC,eAAA,EAAiB,IAAA,CAAK,CAAA,CAAE,iBAAiB,CAAC,CAAA;AAAA,IAC1C,eAAA,EAAiB,IAAA,CAAK,CAAA,CAAE,iBAAiB,CAAC;AAAA,GAC5C;AACF;;;AC/CO,IAAM,UAAA,GAAa;;;ACgBnB,SAAS,yBAAA,CACd,OACA,OAAA,EACqD;AACrD,EAAA,OAAO,oBAAA;AAAA,IACL,UAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF","file":"workflow.js","sourcesContent":["/**\n * Shared proxy helper for thread operations.\n *\n * Each adapter re-exports a thin wrapper that supplies its prefix and\n * casts the return type to carry the adapter's native content type.\n */\nimport {\n proxyActivities,\n workflowInfo,\n type ActivityInterfaceFor,\n} from \"@temporalio/workflow\";\nimport type { ThreadOps } from \"../session/types\";\n\n/**\n * Creates a workflow-safe Temporal activity proxy for {@link ThreadOps}.\n *\n * The proxy resolves activity names by combining the adapter prefix with\n * the workflow scope, so each adapter + workflow combination gets its own\n * namespace.\n *\n * @param adapterPrefix - Adapter identifier (e.g. \"anthropic\", \"googleGenAI\", \"langChain\")\n * @param scope - Optional workflow scope override. Defaults to `workflowInfo().workflowType`.\n * @param options - Optional Temporal `proxyActivities` options.\n */\nexport function createThreadOpsProxy(\n adapterPrefix: string,\n scope?: string,\n options?: Parameters<typeof proxyActivities>[0]\n): ActivityInterfaceFor<ThreadOps> {\n const resolvedScope = scope ?? workflowInfo().workflowType;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const acts = proxyActivities<Record<string, (...args: any[]) => any>>(\n options ?? {\n startToCloseTimeout: \"10s\",\n retry: {\n maximumAttempts: 6,\n initialInterval: \"5s\",\n maximumInterval: \"15m\",\n backoffCoefficient: 4,\n },\n }\n );\n\n const prefix = `${adapterPrefix}${resolvedScope.charAt(0).toUpperCase()}${resolvedScope.slice(1)}`;\n const p = (key: string): string =>\n `${prefix}${key.charAt(0).toUpperCase()}${key.slice(1)}`;\n\n return {\n initializeThread: acts[p(\"initializeThread\")],\n appendHumanMessage: acts[p(\"appendHumanMessage\")],\n appendToolResult: acts[p(\"appendToolResult\")],\n appendAgentMessage: acts[p(\"appendAgentMessage\")],\n appendSystemMessage: acts[p(\"appendSystemMessage\")],\n forkThread: acts[p(\"forkThread\")],\n truncateThread: acts[p(\"truncateThread\")],\n loadThreadState: acts[p(\"loadThreadState\")],\n saveThreadState: acts[p(\"saveThreadState\")],\n } as ActivityInterfaceFor<ThreadOps>;\n}\n","/**\n * Public adapter identity for the Google GenAI thread adapter.\n *\n * This value is wire format — it appears as the prefix for Temporal\n * activity names (e.g. `googleGenAICodingAgentInitializeThread`) and\n * must never change, since renaming it would orphan existing persisted\n * threads and break in-flight workflows.\n *\n * Re-exported from `zeitlich/adapters/thread/google-genai` so downstream\n * consumers can use the exact same literal the adapter uses internally,\n * typed as the narrow string literal `\"googleGenAI\"`.\n */\nexport const ADAPTER_ID = \"googleGenAI\" as const;\n\n/** Narrow string-literal type for {@link ADAPTER_ID}. */\nexport type AdapterId = typeof ADAPTER_ID;\n","/**\n * Workflow-safe proxy for Google GenAI thread operations.\n *\n * Import this from `zeitlich/adapters/thread/google-genai/workflow`\n * in your Temporal workflow files.\n *\n * By default the scope is derived from `workflowInfo().workflowType`,\n * so activities are automatically namespaced per workflow.\n *\n * @example\n * ```typescript\n * import { proxyGoogleGenAIThreadOps } from 'zeitlich/adapters/thread/google-genai/workflow';\n *\n * // Auto-scoped to the current workflow name\n * const threadOps = proxyGoogleGenAIThreadOps();\n *\n * // Explicit scope override\n * const threadOps = proxyGoogleGenAIThreadOps(\"customScope\");\n * ```\n */\nimport { type ActivityInterfaceFor } from \"@temporalio/workflow\";\nimport type { ThreadOps } from \"../../../lib/session/types\";\nimport type { GoogleGenAIContent } from \"./thread-manager\";\nimport { createThreadOpsProxy } from \"../../../lib/thread/proxy\";\nimport { ADAPTER_ID } from \"./adapter-id\";\n\nexport { ADAPTER_ID, type AdapterId } from \"./adapter-id\";\n\nexport function proxyGoogleGenAIThreadOps(\n scope?: string,\n options?: Parameters<typeof createThreadOpsProxy>[2]\n): ActivityInterfaceFor<ThreadOps<GoogleGenAIContent>> {\n return createThreadOpsProxy(\n ADAPTER_ID,\n scope,\n options\n ) as ActivityInterfaceFor<ThreadOps<GoogleGenAIContent>>;\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/adapters/thread/langchain/adapter-id.ts
|
|
4
|
+
var ADAPTER_ID = "langChain";
|
|
5
|
+
|
|
6
|
+
// src/adapters/thread/google-genai/adapter-id.ts
|
|
7
|
+
var ADAPTER_ID2 = "googleGenAI";
|
|
8
|
+
|
|
9
|
+
// src/adapters/thread/anthropic/adapter-id.ts
|
|
10
|
+
var ADAPTER_ID3 = "anthropic";
|
|
11
|
+
|
|
12
|
+
exports.ANTHROPIC_ADAPTER_ID = ADAPTER_ID3;
|
|
13
|
+
exports.GOOGLE_GENAI_ADAPTER_ID = ADAPTER_ID2;
|
|
14
|
+
exports.LANGCHAIN_ADAPTER_ID = ADAPTER_ID;
|
|
15
|
+
//# sourceMappingURL=index.cjs.map
|
|
16
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/adapters/thread/langchain/adapter-id.ts","../../../src/adapters/thread/google-genai/adapter-id.ts","../../../src/adapters/thread/anthropic/adapter-id.ts"],"names":["ADAPTER_ID"],"mappings":";;;AAYO,IAAM,UAAA,GAAa;;;ACAnB,IAAMA,WAAAA,GAAa;;;ACAnB,IAAMA,WAAAA,GAAa","file":"index.cjs","sourcesContent":["/**\n * Public adapter identity for the LangChain thread adapter.\n *\n * This value is wire format — it appears as the prefix for Temporal\n * activity names (e.g. `langChainCodingAgentInitializeThread`) and must\n * never change, since renaming it would orphan existing persisted\n * threads and break in-flight workflows.\n *\n * Re-exported from `zeitlich/adapters/thread/langchain` so downstream\n * consumers can use the exact same literal the adapter uses internally,\n * typed as the narrow string literal `\"langChain\"`.\n */\nexport const ADAPTER_ID = \"langChain\" as const;\n\n/** Narrow string-literal type for {@link ADAPTER_ID}. */\nexport type AdapterId = typeof ADAPTER_ID;\n","/**\n * Public adapter identity for the Google GenAI thread adapter.\n *\n * This value is wire format — it appears as the prefix for Temporal\n * activity names (e.g. `googleGenAICodingAgentInitializeThread`) and\n * must never change, since renaming it would orphan existing persisted\n * threads and break in-flight workflows.\n *\n * Re-exported from `zeitlich/adapters/thread/google-genai` so downstream\n * consumers can use the exact same literal the adapter uses internally,\n * typed as the narrow string literal `\"googleGenAI\"`.\n */\nexport const ADAPTER_ID = \"googleGenAI\" as const;\n\n/** Narrow string-literal type for {@link ADAPTER_ID}. */\nexport type AdapterId = typeof ADAPTER_ID;\n","/**\n * Public adapter identity for the Anthropic thread adapter.\n *\n * This value is wire format — it appears as the prefix for Temporal\n * activity names (e.g. `anthropicCodingAgentInitializeThread`) and must\n * never change, since renaming it would orphan existing persisted\n * threads and break in-flight workflows.\n *\n * Re-exported from `zeitlich/adapters/thread/anthropic` so downstream\n * consumers can use the exact same literal the adapter uses internally,\n * typed as the narrow string literal `\"anthropic\"`.\n */\nexport const ADAPTER_ID = \"anthropic\" as const;\n\n/** Narrow string-literal type for {@link ADAPTER_ID}. */\nexport type AdapterId = typeof ADAPTER_ID;\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { A as ADAPTER_ID } from '../../adapter-id-CbY2zeSt.cjs';
|
|
2
|
+
import { A as ADAPTER_ID$1 } from '../../adapter-id-BB-mmrts.cjs';
|
|
3
|
+
import { A as ADAPTER_ID$2 } from '../../adapter-id-CMwVrVqv.cjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Barrel re-exports for every built-in thread adapter's public identity.
|
|
7
|
+
*
|
|
8
|
+
* Downstream consumers reading persisted threads can import a narrow
|
|
9
|
+
* discriminated union of adapter identifiers without pulling the full
|
|
10
|
+
* adapter implementation (Redis, provider SDKs, etc.) as a dependency —
|
|
11
|
+
* each individual re-export resolves to an `adapter-id.ts` module with
|
|
12
|
+
* no runtime dependencies.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import {
|
|
17
|
+
* LANGCHAIN_ADAPTER_ID,
|
|
18
|
+
* GOOGLE_GENAI_ADAPTER_ID,
|
|
19
|
+
* ANTHROPIC_ADAPTER_ID,
|
|
20
|
+
* type ThreadAdapterId,
|
|
21
|
+
* } from 'zeitlich/adapters/thread';
|
|
22
|
+
*
|
|
23
|
+
* interface ThreadIdentity {
|
|
24
|
+
* adapter: ThreadAdapterId;
|
|
25
|
+
* threadKey: string;
|
|
26
|
+
* threadId: string;
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/** Narrow discriminated union of every built-in thread adapter id. */
|
|
32
|
+
type ThreadAdapterId = typeof ADAPTER_ID | typeof ADAPTER_ID$1 | typeof ADAPTER_ID$2;
|
|
33
|
+
|
|
34
|
+
export { ADAPTER_ID$2 as ANTHROPIC_ADAPTER_ID, ADAPTER_ID$1 as GOOGLE_GENAI_ADAPTER_ID, ADAPTER_ID as LANGCHAIN_ADAPTER_ID, type ThreadAdapterId };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { A as ADAPTER_ID } from '../../adapter-id-CbY2zeSt.js';
|
|
2
|
+
import { A as ADAPTER_ID$1 } from '../../adapter-id-BB-mmrts.js';
|
|
3
|
+
import { A as ADAPTER_ID$2 } from '../../adapter-id-CMwVrVqv.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Barrel re-exports for every built-in thread adapter's public identity.
|
|
7
|
+
*
|
|
8
|
+
* Downstream consumers reading persisted threads can import a narrow
|
|
9
|
+
* discriminated union of adapter identifiers without pulling the full
|
|
10
|
+
* adapter implementation (Redis, provider SDKs, etc.) as a dependency —
|
|
11
|
+
* each individual re-export resolves to an `adapter-id.ts` module with
|
|
12
|
+
* no runtime dependencies.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import {
|
|
17
|
+
* LANGCHAIN_ADAPTER_ID,
|
|
18
|
+
* GOOGLE_GENAI_ADAPTER_ID,
|
|
19
|
+
* ANTHROPIC_ADAPTER_ID,
|
|
20
|
+
* type ThreadAdapterId,
|
|
21
|
+
* } from 'zeitlich/adapters/thread';
|
|
22
|
+
*
|
|
23
|
+
* interface ThreadIdentity {
|
|
24
|
+
* adapter: ThreadAdapterId;
|
|
25
|
+
* threadKey: string;
|
|
26
|
+
* threadId: string;
|
|
27
|
+
* }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/** Narrow discriminated union of every built-in thread adapter id. */
|
|
32
|
+
type ThreadAdapterId = typeof ADAPTER_ID | typeof ADAPTER_ID$1 | typeof ADAPTER_ID$2;
|
|
33
|
+
|
|
34
|
+
export { ADAPTER_ID$2 as ANTHROPIC_ADAPTER_ID, ADAPTER_ID$1 as GOOGLE_GENAI_ADAPTER_ID, ADAPTER_ID as LANGCHAIN_ADAPTER_ID, type ThreadAdapterId };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/adapters/thread/langchain/adapter-id.ts
|
|
2
|
+
var ADAPTER_ID = "langChain";
|
|
3
|
+
|
|
4
|
+
// src/adapters/thread/google-genai/adapter-id.ts
|
|
5
|
+
var ADAPTER_ID2 = "googleGenAI";
|
|
6
|
+
|
|
7
|
+
// src/adapters/thread/anthropic/adapter-id.ts
|
|
8
|
+
var ADAPTER_ID3 = "anthropic";
|
|
9
|
+
|
|
10
|
+
export { ADAPTER_ID3 as ANTHROPIC_ADAPTER_ID, ADAPTER_ID2 as GOOGLE_GENAI_ADAPTER_ID, ADAPTER_ID as LANGCHAIN_ADAPTER_ID };
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/adapters/thread/langchain/adapter-id.ts","../../../src/adapters/thread/google-genai/adapter-id.ts","../../../src/adapters/thread/anthropic/adapter-id.ts"],"names":["ADAPTER_ID"],"mappings":";AAYO,IAAM,UAAA,GAAa;;;ACAnB,IAAMA,WAAAA,GAAa;;;ACAnB,IAAMA,WAAAA,GAAa","file":"index.js","sourcesContent":["/**\n * Public adapter identity for the LangChain thread adapter.\n *\n * This value is wire format — it appears as the prefix for Temporal\n * activity names (e.g. `langChainCodingAgentInitializeThread`) and must\n * never change, since renaming it would orphan existing persisted\n * threads and break in-flight workflows.\n *\n * Re-exported from `zeitlich/adapters/thread/langchain` so downstream\n * consumers can use the exact same literal the adapter uses internally,\n * typed as the narrow string literal `\"langChain\"`.\n */\nexport const ADAPTER_ID = \"langChain\" as const;\n\n/** Narrow string-literal type for {@link ADAPTER_ID}. */\nexport type AdapterId = typeof ADAPTER_ID;\n","/**\n * Public adapter identity for the Google GenAI thread adapter.\n *\n * This value is wire format — it appears as the prefix for Temporal\n * activity names (e.g. `googleGenAICodingAgentInitializeThread`) and\n * must never change, since renaming it would orphan existing persisted\n * threads and break in-flight workflows.\n *\n * Re-exported from `zeitlich/adapters/thread/google-genai` so downstream\n * consumers can use the exact same literal the adapter uses internally,\n * typed as the narrow string literal `\"googleGenAI\"`.\n */\nexport const ADAPTER_ID = \"googleGenAI\" as const;\n\n/** Narrow string-literal type for {@link ADAPTER_ID}. */\nexport type AdapterId = typeof ADAPTER_ID;\n","/**\n * Public adapter identity for the Anthropic thread adapter.\n *\n * This value is wire format — it appears as the prefix for Temporal\n * activity names (e.g. `anthropicCodingAgentInitializeThread`) and must\n * never change, since renaming it would orphan existing persisted\n * threads and break in-flight workflows.\n *\n * Re-exported from `zeitlich/adapters/thread/anthropic` so downstream\n * consumers can use the exact same literal the adapter uses internally,\n * typed as the narrow string literal `\"anthropic\"`.\n */\nexport const ADAPTER_ID = \"anthropic\" as const;\n\n/** Narrow string-literal type for {@link ADAPTER_ID}. */\nexport type AdapterId = typeof ADAPTER_ID;\n"]}
|
|
@@ -4,10 +4,22 @@ var messages = require('@langchain/core/messages');
|
|
|
4
4
|
var crypto = require('crypto');
|
|
5
5
|
var activity = require('@temporalio/activity');
|
|
6
6
|
|
|
7
|
-
// src/adapters/thread/langchain/
|
|
7
|
+
// src/adapters/thread/langchain/adapter-id.ts
|
|
8
|
+
var ADAPTER_ID = "langChain";
|
|
8
9
|
|
|
9
|
-
// src/lib/thread/
|
|
10
|
+
// src/lib/thread/keys.ts
|
|
10
11
|
var THREAD_TTL_SECONDS = 60 * 60 * 24 * 90;
|
|
12
|
+
function getThreadListKey(threadKey, threadId) {
|
|
13
|
+
return `${threadKey}:thread:${threadId}`;
|
|
14
|
+
}
|
|
15
|
+
function getThreadMetaKey(threadKey, threadId) {
|
|
16
|
+
return `${threadKey}:meta:thread:${threadId}`;
|
|
17
|
+
}
|
|
18
|
+
function getThreadStateKey(threadKey, threadId) {
|
|
19
|
+
return `${threadKey}:state:thread:${threadId}`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// src/lib/thread/manager.ts
|
|
11
23
|
var APPEND_IDEMPOTENT_SCRIPT = `
|
|
12
24
|
if redis.call('EXISTS', KEYS[1]) == 1 then
|
|
13
25
|
return 0
|
|
@@ -19,8 +31,8 @@ redis.call('EXPIRE', KEYS[2], tonumber(ARGV[1]))
|
|
|
19
31
|
redis.call('SET', KEYS[1], '1', 'EX', tonumber(ARGV[1]))
|
|
20
32
|
return 1
|
|
21
33
|
`;
|
|
22
|
-
function
|
|
23
|
-
return
|
|
34
|
+
function getDedupKey(threadId, id) {
|
|
35
|
+
return `dedup:${id}:thread:${threadId}`;
|
|
24
36
|
}
|
|
25
37
|
function createThreadManager(config) {
|
|
26
38
|
const {
|
|
@@ -31,8 +43,9 @@ function createThreadManager(config) {
|
|
|
31
43
|
deserialize = (raw) => JSON.parse(raw),
|
|
32
44
|
idOf
|
|
33
45
|
} = config;
|
|
34
|
-
const redisKey =
|
|
35
|
-
const metaKey =
|
|
46
|
+
const redisKey = getThreadListKey(key, threadId);
|
|
47
|
+
const metaKey = getThreadMetaKey(key, threadId);
|
|
48
|
+
const stateKey = getThreadStateKey(key, threadId);
|
|
36
49
|
async function assertThreadExists() {
|
|
37
50
|
const exists = await redis.exists(metaKey);
|
|
38
51
|
if (!exists) {
|
|
@@ -54,7 +67,7 @@ function createThreadManager(config) {
|
|
|
54
67
|
await assertThreadExists();
|
|
55
68
|
if (idOf) {
|
|
56
69
|
const dedupId = messages.map(idOf).join(":");
|
|
57
|
-
const dedupKey =
|
|
70
|
+
const dedupKey = getDedupKey(threadId, dedupId);
|
|
58
71
|
await redis.eval(
|
|
59
72
|
APPEND_IDEMPOTENT_SCRIPT,
|
|
60
73
|
2,
|
|
@@ -71,20 +84,98 @@ function createThreadManager(config) {
|
|
|
71
84
|
async fork(newThreadId) {
|
|
72
85
|
await assertThreadExists();
|
|
73
86
|
const data = await redis.lrange(redisKey, 0, -1);
|
|
87
|
+
const stateRaw = await redis.get(stateKey);
|
|
74
88
|
const forked = createThreadManager({
|
|
75
89
|
...config,
|
|
76
90
|
threadId: newThreadId
|
|
77
91
|
});
|
|
78
92
|
await forked.initialize();
|
|
79
93
|
if (data.length > 0) {
|
|
80
|
-
const newKey =
|
|
94
|
+
const newKey = getThreadListKey(key, newThreadId);
|
|
81
95
|
await redis.rpush(newKey, ...data);
|
|
82
96
|
await redis.expire(newKey, THREAD_TTL_SECONDS);
|
|
83
97
|
}
|
|
98
|
+
if (stateRaw != null) {
|
|
99
|
+
const newStateKey = getThreadStateKey(key, newThreadId);
|
|
100
|
+
await redis.set(newStateKey, stateRaw, "EX", THREAD_TTL_SECONDS);
|
|
101
|
+
}
|
|
84
102
|
return forked;
|
|
85
103
|
},
|
|
104
|
+
async replaceAll(messages) {
|
|
105
|
+
await assertThreadExists();
|
|
106
|
+
if (!idOf) {
|
|
107
|
+
throw new Error(
|
|
108
|
+
"replaceAll requires the thread manager to be configured with `idOf`"
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
const existing = await redis.lrange(redisKey, 0, -1);
|
|
112
|
+
const existingIds = existing.map((raw) => idOf(deserialize(raw))).filter((id) => typeof id === "string");
|
|
113
|
+
await redis.del(redisKey);
|
|
114
|
+
if (existingIds.length > 0) {
|
|
115
|
+
await redis.del(
|
|
116
|
+
...existingIds.map((id) => getDedupKey(threadId, id))
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
if (messages.length > 0) {
|
|
120
|
+
await redis.rpush(redisKey, ...messages.map(serialize));
|
|
121
|
+
await redis.expire(redisKey, THREAD_TTL_SECONDS);
|
|
122
|
+
}
|
|
123
|
+
await redis.expire(metaKey, THREAD_TTL_SECONDS);
|
|
124
|
+
},
|
|
86
125
|
async delete() {
|
|
87
|
-
await redis.del(redisKey, metaKey);
|
|
126
|
+
await redis.del(redisKey, metaKey, stateKey);
|
|
127
|
+
},
|
|
128
|
+
async loadState() {
|
|
129
|
+
const raw = await redis.get(stateKey);
|
|
130
|
+
if (raw == null) return null;
|
|
131
|
+
return JSON.parse(raw);
|
|
132
|
+
},
|
|
133
|
+
async saveState(state) {
|
|
134
|
+
await assertThreadExists();
|
|
135
|
+
await redis.set(
|
|
136
|
+
stateKey,
|
|
137
|
+
JSON.stringify(state),
|
|
138
|
+
"EX",
|
|
139
|
+
THREAD_TTL_SECONDS
|
|
140
|
+
);
|
|
141
|
+
},
|
|
142
|
+
async deleteState() {
|
|
143
|
+
await redis.del(stateKey);
|
|
144
|
+
},
|
|
145
|
+
async length() {
|
|
146
|
+
await assertThreadExists();
|
|
147
|
+
return redis.llen(redisKey);
|
|
148
|
+
},
|
|
149
|
+
async truncateFromId(messageId) {
|
|
150
|
+
await assertThreadExists();
|
|
151
|
+
if (!idOf) {
|
|
152
|
+
throw new Error(
|
|
153
|
+
"truncateFromId requires the thread manager to be configured with `idOf`"
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
const data = await redis.lrange(redisKey, 0, -1);
|
|
157
|
+
let idx = -1;
|
|
158
|
+
const removedIds = [];
|
|
159
|
+
for (let i = 0; i < data.length; i++) {
|
|
160
|
+
const raw = data[i];
|
|
161
|
+
if (raw === void 0) continue;
|
|
162
|
+
const id = idOf(deserialize(raw));
|
|
163
|
+
if (idx === -1 && id === messageId) idx = i;
|
|
164
|
+
if (idx !== -1) removedIds.push(id);
|
|
165
|
+
}
|
|
166
|
+
if (idx === -1) return;
|
|
167
|
+
if (idx === 0) {
|
|
168
|
+
await redis.del(redisKey);
|
|
169
|
+
await redis.expire(metaKey, THREAD_TTL_SECONDS);
|
|
170
|
+
} else {
|
|
171
|
+
await redis.ltrim(redisKey, 0, idx - 1);
|
|
172
|
+
await redis.expire(redisKey, THREAD_TTL_SECONDS);
|
|
173
|
+
}
|
|
174
|
+
if (removedIds.length > 0) {
|
|
175
|
+
await redis.del(
|
|
176
|
+
...removedIds.map((id) => getDedupKey(threadId, id))
|
|
177
|
+
);
|
|
178
|
+
}
|
|
88
179
|
}
|
|
89
180
|
};
|
|
90
181
|
}
|
|
@@ -146,7 +237,29 @@ function createLangChainThreadManager(config) {
|
|
|
146
237
|
};
|
|
147
238
|
}
|
|
148
239
|
};
|
|
149
|
-
|
|
240
|
+
const manager = Object.assign(base, helpers);
|
|
241
|
+
const originalFork = manager.fork.bind(manager);
|
|
242
|
+
manager.fork = async (newThreadId) => {
|
|
243
|
+
await originalFork(newThreadId);
|
|
244
|
+
const forked = createLangChainThreadManager({
|
|
245
|
+
...config,
|
|
246
|
+
threadId: newThreadId
|
|
247
|
+
});
|
|
248
|
+
const { onForkPrepareThread, onForkTransform } = config.hooks ?? {};
|
|
249
|
+
if (!onForkPrepareThread && !onForkTransform) {
|
|
250
|
+
return forked;
|
|
251
|
+
}
|
|
252
|
+
let next = await forked.load();
|
|
253
|
+
if (onForkPrepareThread) {
|
|
254
|
+
next = await onForkPrepareThread(next);
|
|
255
|
+
}
|
|
256
|
+
if (onForkTransform) {
|
|
257
|
+
next = next.map((msg, i) => onForkTransform(msg, i, next));
|
|
258
|
+
}
|
|
259
|
+
await forked.replaceAll(next);
|
|
260
|
+
return forked;
|
|
261
|
+
};
|
|
262
|
+
return manager;
|
|
150
263
|
}
|
|
151
264
|
|
|
152
265
|
// node_modules/uuid/dist/esm/stringify.js
|
|
@@ -205,7 +318,7 @@ function getActivityContext() {
|
|
|
205
318
|
// src/adapters/thread/langchain/model-invoker.ts
|
|
206
319
|
function createLangChainModelInvoker({ redis, model, hooks }) {
|
|
207
320
|
return async function invokeLangChainModel2(config) {
|
|
208
|
-
const { threadId, threadKey, agentName, state, metadata } = config;
|
|
321
|
+
const { threadId, threadKey, agentName, state, metadata, assistantMessageId } = config;
|
|
209
322
|
const { heartbeat, signal } = getActivityContext();
|
|
210
323
|
const thread = createLangChainThreadManager({
|
|
211
324
|
redis,
|
|
@@ -214,6 +327,7 @@ function createLangChainModelInvoker({ redis, model, hooks }) {
|
|
|
214
327
|
hooks
|
|
215
328
|
});
|
|
216
329
|
const runId = v4_default();
|
|
330
|
+
await thread.truncateFromId(assistantMessageId);
|
|
217
331
|
const { messages } = await thread.prepareForInvocation();
|
|
218
332
|
const heartbeatInterval = heartbeat ? setInterval(() => heartbeat(), 3e4) : void 0;
|
|
219
333
|
try {
|
|
@@ -257,7 +371,6 @@ async function invokeLangChainModel({
|
|
|
257
371
|
}
|
|
258
372
|
|
|
259
373
|
// src/adapters/thread/langchain/activities.ts
|
|
260
|
-
var ADAPTER_PREFIX = "langChain";
|
|
261
374
|
function createLangChainAdapter(config) {
|
|
262
375
|
const { redis } = config;
|
|
263
376
|
const threadOps = {
|
|
@@ -307,13 +420,34 @@ function createLangChainAdapter(config) {
|
|
|
307
420
|
const thread = createLangChainThreadManager({
|
|
308
421
|
redis,
|
|
309
422
|
threadId: sourceThreadId,
|
|
310
|
-
key: threadKey
|
|
423
|
+
key: threadKey,
|
|
424
|
+
hooks: config.hooks
|
|
311
425
|
});
|
|
312
426
|
await thread.fork(targetThreadId);
|
|
427
|
+
},
|
|
428
|
+
async truncateThread(threadId, messageId, threadKey) {
|
|
429
|
+
const thread = createLangChainThreadManager({ redis, threadId, key: threadKey });
|
|
430
|
+
await thread.truncateFromId(messageId);
|
|
431
|
+
},
|
|
432
|
+
async loadThreadState(threadId, threadKey) {
|
|
433
|
+
const thread = createLangChainThreadManager({
|
|
434
|
+
redis,
|
|
435
|
+
threadId,
|
|
436
|
+
key: threadKey
|
|
437
|
+
});
|
|
438
|
+
return thread.loadState();
|
|
439
|
+
},
|
|
440
|
+
async saveThreadState(threadId, state, threadKey) {
|
|
441
|
+
const thread = createLangChainThreadManager({
|
|
442
|
+
redis,
|
|
443
|
+
threadId,
|
|
444
|
+
key: threadKey
|
|
445
|
+
});
|
|
446
|
+
await thread.saveState(state);
|
|
313
447
|
}
|
|
314
448
|
};
|
|
315
449
|
function createActivities(scope) {
|
|
316
|
-
const prefix = scope ? `${
|
|
450
|
+
const prefix = scope ? `${ADAPTER_ID}${scope.charAt(0).toUpperCase()}${scope.slice(1)}` : ADAPTER_ID;
|
|
317
451
|
const cap = (s) => s.charAt(0).toUpperCase() + s.slice(1);
|
|
318
452
|
return Object.fromEntries(
|
|
319
453
|
Object.entries(threadOps).map(([k, v]) => [`${prefix}${cap(k)}`, v])
|
|
@@ -370,6 +504,7 @@ function appendCachePoint(block, { maxBlocks = 4 } = {}) {
|
|
|
370
504
|
};
|
|
371
505
|
}
|
|
372
506
|
|
|
507
|
+
exports.ADAPTER_ID = ADAPTER_ID;
|
|
373
508
|
exports.appendCachePoint = appendCachePoint;
|
|
374
509
|
exports.createLangChainAdapter = createLangChainAdapter;
|
|
375
510
|
exports.createLangChainModelInvoker = createLangChainModelInvoker;
|