From 2c7f91aeaa64bfc8906a11fc748ff43fd8bce7d8 Mon Sep 17 00:00:00 2001 From: sancar Date: Fri, 7 Mar 2025 12:47:18 +0300 Subject: [PATCH 1/6] Forward SDK Version to Callbacks --- src/workflow-requests.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/workflow-requests.ts b/src/workflow-requests.ts index 01a2661..e286a85 100644 --- a/src/workflow-requests.ts +++ b/src/workflow-requests.ts @@ -547,6 +547,9 @@ export const getHeaders = ({ "Upstash-Callback-Feature-Set": "LazyFetch,InitialBody", "Upstash-Callback-Forward-Upstash-Workflow-Callback": "true", + // not a must now, will be needed on newer versions of the protocol so that + // skipping fromCallback step on the qstash-server will work correctly. + [`Upstash-Callback-Forward-${WORKFLOW_PROTOCOL_VERSION_HEADER}`]: WORKFLOW_PROTOCOL_VERSION, "Upstash-Callback-Forward-Upstash-Workflow-StepId": step.stepId.toString(), "Upstash-Callback-Forward-Upstash-Workflow-StepName": step.stepName, "Upstash-Callback-Forward-Upstash-Workflow-StepType": step.stepType, From 30c20b305318afb2d5a6c20d327219cf4ab6d7d7 Mon Sep 17 00:00:00 2001 From: sancar Date: Fri, 7 Mar 2025 13:04:30 +0300 Subject: [PATCH 2/6] fix: test fixes --- src/agents/agent.test.ts | 4 ++++ src/agents/task.test.ts | 3 +++ src/context/context.test.ts | 6 ++++++ src/workflow-requests.test.ts | 1 + 4 files changed, 14 insertions(+) diff --git a/src/agents/agent.test.ts b/src/agents/agent.test.ts index a6243cd..4183190 100644 --- a/src/agents/agent.test.ts +++ b/src/agents/agent.test.ts @@ -8,6 +8,7 @@ import { WorkflowAgents } from "."; import { tool } from "ai"; import { z } from "zod"; import { getAgentsApi } from "./task.test"; +import { WORKFLOW_PROTOCOL_VERSION } from "../constants"; describe("agents", () => { const openaiToken = nanoid(); @@ -94,6 +95,7 @@ describe("agents", () => { "upstash-callback-forward-upstash-workflow-stepname": "Call Agent my agent", "upstash-callback-forward-upstash-workflow-steptype": "Call", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-retries": "3", "upstash-callback-workflow-calltype": "fromCallback", "upstash-callback-workflow-init": "false", @@ -161,6 +163,7 @@ describe("agents", () => { "upstash-callback-forward-upstash-workflow-stepname": "Call Agent my agent", "upstash-callback-forward-upstash-workflow-steptype": "Call", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-retries": "3", "upstash-callback-workflow-calltype": "fromCallback", "upstash-callback-workflow-init": "false", @@ -226,6 +229,7 @@ describe("agents", () => { "upstash-callback-forward-upstash-workflow-stepname": "Call Agent manager llm", "upstash-callback-forward-upstash-workflow-steptype": "Call", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-retries": "3", "upstash-callback-workflow-calltype": "fromCallback", "upstash-callback-workflow-init": "false", diff --git a/src/agents/task.test.ts b/src/agents/task.test.ts index f4bdbc8..14fd3d0 100644 --- a/src/agents/task.test.ts +++ b/src/agents/task.test.ts @@ -7,6 +7,7 @@ import { WorkflowAgents } from "."; import { tool } from "ai"; import { z } from "zod"; import { DisabledWorkflowContext } from "../serve/authorization"; +import { WORKFLOW_PROTOCOL_VERSION } from "../constants"; export const getAgentsApi = ({ disabledContext }: { disabledContext: boolean }) => { const workflowRunId = getWorkflowRunId(); @@ -107,6 +108,7 @@ describe("tasks", () => { "upstash-callback-forward-upstash-workflow-stepname": "Call Agent my agent", "upstash-callback-forward-upstash-workflow-steptype": "Call", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-retries": "3", "upstash-callback-workflow-calltype": "fromCallback", "upstash-callback-workflow-init": "false", @@ -173,6 +175,7 @@ describe("tasks", () => { "upstash-callback-forward-upstash-workflow-stepname": "Call Agent Manager LLM", "upstash-callback-forward-upstash-workflow-steptype": "Call", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-retries": "3", "upstash-callback-workflow-calltype": "fromCallback", "upstash-callback-workflow-init": "false", diff --git a/src/context/context.test.ts b/src/context/context.test.ts index 377134a..25ef9b6 100644 --- a/src/context/context.test.ts +++ b/src/context/context.test.ts @@ -337,6 +337,7 @@ describe("context tests", () => { "upstash-callback-forward-upstash-workflow-contenttype": "application/x-www-form-urlencoded", "upstash-callback-forward-upstash-workflow-invoke-count": "7", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-stepname": "my-step", "upstash-callback-forward-upstash-workflow-steptype": "Call", @@ -403,6 +404,7 @@ describe("context tests", () => { "upstash-callback-forward-upstash-workflow-concurrent": "1", "upstash-callback-forward-upstash-workflow-contenttype": "application/json", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-stepname": "my-step", "upstash-callback-forward-upstash-workflow-steptype": "Call", @@ -570,6 +572,7 @@ describe("context tests", () => { "upstash-callback-forward-upstash-workflow-concurrent": "1", "upstash-callback-forward-upstash-workflow-contenttype": "application/json", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-stepname": stepName, "upstash-callback-forward-upstash-workflow-steptype": "Call", @@ -654,6 +657,7 @@ describe("context tests", () => { "upstash-callback-forward-upstash-workflow-concurrent": "1", "upstash-callback-forward-upstash-workflow-contenttype": "application/json", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-stepname": stepName, "upstash-callback-forward-upstash-workflow-steptype": "Call", @@ -735,6 +739,7 @@ describe("context tests", () => { "upstash-callback-forward-upstash-workflow-concurrent": "1", "upstash-callback-forward-upstash-workflow-contenttype": "application/json", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-stepname": stepName, "upstash-callback-forward-upstash-workflow-steptype": "Call", @@ -826,6 +831,7 @@ describe("context tests", () => { "upstash-callback-forward-upstash-workflow-concurrent": "1", "upstash-callback-forward-upstash-workflow-contenttype": "application/json", "upstash-callback-forward-upstash-workflow-invoke-count": "0", + "upstash-callback-forward-upstash-workflow-sdk-version": WORKFLOW_PROTOCOL_VERSION, "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-stepname": stepName, "upstash-callback-forward-upstash-workflow-steptype": "Call", diff --git a/src/workflow-requests.test.ts b/src/workflow-requests.test.ts index 8ec94de..487d11b 100644 --- a/src/workflow-requests.test.ts +++ b/src/workflow-requests.test.ts @@ -553,6 +553,7 @@ describe("Workflow Requests", () => { "Upstash-Callback-Forward-Upstash-Workflow-StepId": stepId.toString(), "Upstash-Callback-Forward-Upstash-Workflow-StepName": stepName, "Upstash-Callback-Forward-Upstash-Workflow-StepType": "Call", + "Upstash-Callback-Forward-Upstash-Workflow-Sdk-Version": WORKFLOW_PROTOCOL_VERSION, "Upstash-Callback-Workflow-CallType": "fromCallback", "Upstash-Callback-Workflow-RunId": workflowRunId, "Upstash-Callback-Workflow-Init": "false", From 273ac08d5c46dc61fca3b36c719284a3fc2610ed Mon Sep 17 00:00:00 2001 From: CahidArda Date: Mon, 10 Mar 2025 09:20:20 +0300 Subject: [PATCH 3/6] fix: bump ai sdk deps --- bun.lockb | Bin 435866 -> 434879 bytes package.json | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bun.lockb b/bun.lockb index 931c03032b735310657beea79a71096d903b91b9..a3cb5e8d26c614b9aced0a3f1f904ce106488687 100755 GIT binary patch delta 62024 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∨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 delta 62342 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
N8Y{Qwp|!> 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 diff --git a/package.json b/package.json index aea35aa..913ad4a 100644 --- a/package.json +++ b/package.json @@ -102,9 +102,9 @@ "typescript-eslint": "^8.18.0" }, "dependencies": { - "@ai-sdk/openai": "^1.0.15", + "@ai-sdk/openai": "^1.2.1", "@upstash/qstash": "^2.7.22", - "ai": "^4.0.30", + "ai": "^4.1.54", "zod": "^3.24.1" }, "directories": { From 3b385015bbc38c395d3a40fc55830d4d695e55c6 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Mon, 10 Mar 2025 09:21:11 +0300 Subject: [PATCH 4/6] fix: fmt --- src/agents/adapters.test.ts | 6 ------ src/agents/agent.test.ts | 1 - src/agents/agent.ts | 1 - 3 files changed, 8 deletions(-) diff --git a/src/agents/adapters.test.ts b/src/agents/adapters.test.ts index 9f6aaff..d2f3e70 100644 --- a/src/agents/adapters.test.ts +++ b/src/agents/adapters.test.ts @@ -52,7 +52,6 @@ describe("wrapTools", () => { expect(Object.entries(wrappedTools).length).toBe(1); const wrappedTool = wrappedTools["aiSDKTool"]; - // @ts-expect-error description exists but can't resolve the type expect(wrappedTool.description).toBe(aiSDKToolDescription); await mockQStashServer({ @@ -104,7 +103,6 @@ describe("wrapTools", () => { expect(Object.entries(wrappedTools).length).toBe(1); const wrappedTool = wrappedTools["langChainTool"]; - // @ts-expect-error description exists but can't resolve the type expect(wrappedTool.description).toBe(langChainToolDescription); await mockQStashServer({ @@ -156,11 +154,9 @@ describe("wrapTools", () => { expect(Object.entries(wrappedTools).length).toBe(2); const wrappedLangChainTool = wrappedTools["langChainTool"]; - // @ts-expect-error description exists but can't resolve the type expect(wrappedLangChainTool.description).toBe(langChainToolDescription); const wrappedAiSDKTool = wrappedTools["aiSDKTool"]; - // @ts-expect-error description exists but can't resolve the type expect(wrappedAiSDKTool.description).toBe(aiSDKToolDescription); }); @@ -180,7 +176,6 @@ describe("wrapTools", () => { expect(Object.entries(wrappedTools).length).toBe(1); const wrappedTool = wrappedTools["nonwrappedWorkflowTool"]; - // @ts-expect-error description exists but can't resolve the type expect(wrappedTool.description).toBe(workflowToolDescription); await mockQStashServer({ @@ -232,7 +227,6 @@ describe("wrapTools", () => { expect(Object.entries(wrappedTools).length).toBe(1); const wrappedTool = wrappedTools["wrappedWorkflowTool"]; - // @ts-expect-error description exists but can't resolve the type expect(wrappedTool.description).toBe(workflowToolDescription); await mockQStashServer({ diff --git a/src/agents/agent.test.ts b/src/agents/agent.test.ts index 4183190..850dea0 100644 --- a/src/agents/agent.test.ts +++ b/src/agents/agent.test.ts @@ -122,7 +122,6 @@ describe("agents", () => { test("should convert agent to tool", async () => { const agentTool = agent.asTool(); - // @ts-expect-error description exists but isn't accessible expect(agentTool.description).toBe( "An AI Agent with the following background: an agentHas access to the following tools: ai sdk tool" ); diff --git a/src/agents/agent.ts b/src/agents/agent.ts index 8c75377..ca651a4 100644 --- a/src/agents/agent.ts +++ b/src/agents/agent.ts @@ -93,7 +93,6 @@ export class Agent { */ public asTool(): AISDKTool { const toolDescriptions = Object.values(this.tools) - // @ts-expect-error description exists but can't be resolved .map((tool) => tool.description) .join("\n"); return tool({ From c7aae16533e0d579c24c0e13dc526c73818d0cef Mon Sep 17 00:00:00 2001 From: CahidArda Date: Mon, 10 Mar 2025 09:25:21 +0300 Subject: [PATCH 5/6] fix: tests --- src/agents/task.test.ts | 1 + src/client/index.test.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/agents/task.test.ts b/src/agents/task.test.ts index b9a3ed7..3baa899 100644 --- a/src/agents/task.test.ts +++ b/src/agents/task.test.ts @@ -271,6 +271,7 @@ describe("tasks", () => { "upstash-callback-feature-set": "LazyFetch,InitialBody", "upstash-callback-forward-upstash-workflow-callback": "true", "upstash-callback-forward-upstash-workflow-concurrent": "1", + "upstash-callback-forward-upstash-workflow-sdk-version": "1", "upstash-callback-forward-upstash-workflow-contenttype": "application/json", "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-steptype": "Call", diff --git a/src/client/index.test.ts b/src/client/index.test.ts index c39292b..9aab64b 100644 --- a/src/client/index.test.ts +++ b/src/client/index.test.ts @@ -431,7 +431,7 @@ describe("workflow client", () => { failureFunction: { messageId: expect.any(String), dlqId: expect.any(String), - failResponse: "400 Bad Request", + failResponse: "400 ", failStatus: 400, url: "https://httpstat.us/400", state: "DELIVERED", From 4a4244ae8e2bede70f4484a734e055ebdd99d479 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Tue, 8 Apr 2025 17:33:01 +0300 Subject: [PATCH 6/6] fix: tests --- src/client/index.test.ts | 2 +- src/context/context.test.ts | 4 ++++ src/serve/serve-many.test.ts | 1 + src/serve/serve.test.ts | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/client/index.test.ts b/src/client/index.test.ts index 9aab64b..c39292b 100644 --- a/src/client/index.test.ts +++ b/src/client/index.test.ts @@ -431,7 +431,7 @@ describe("workflow client", () => { failureFunction: { messageId: expect.any(String), dlqId: expect.any(String), - failResponse: "400 ", + failResponse: "400 Bad Request", failStatus: 400, url: "https://httpstat.us/400", state: "DELIVERED", diff --git a/src/context/context.test.ts b/src/context/context.test.ts index eb290f9..d973b42 100644 --- a/src/context/context.test.ts +++ b/src/context/context.test.ts @@ -647,6 +647,7 @@ describe("context tests", () => { "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-stepname": stepName, "upstash-callback-forward-upstash-workflow-steptype": "Call", + "upstash-callback-forward-upstash-workflow-invoke-count": "5", "upstash-callback-retries": "2", "upstash-callback-workflow-calltype": "fromCallback", "upstash-callback-workflow-init": "false", @@ -655,6 +656,7 @@ describe("context tests", () => { "upstash-feature-set": "WF_NoDelete,InitialBody", "upstash-forward-authorization": `Bearer ${openAIToken}`, "upstash-forward-content-type": "application/json", + "upstash-forward-upstash-workflow-invoke-count": "5", "upstash-method": "POST", "upstash-retries": "0", "upstash-workflow-calltype": "toCallback", @@ -818,6 +820,7 @@ describe("context tests", () => { "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-stepname": stepName, "upstash-callback-forward-upstash-workflow-steptype": "Call", + "upstash-callback-forward-upstash-workflow-invoke-count": "3", "upstash-callback-retries": "2", "upstash-callback-workflow-calltype": "fromCallback", "upstash-callback-workflow-init": "false", @@ -827,6 +830,7 @@ describe("context tests", () => { "upstash-forward-x-api-key": anthropicToken, "upstash-forward-anthropic-version": "2023-06-01", "upstash-forward-content-type": "application/json", + "upstash-forward-upstash-workflow-invoke-count": "3", "upstash-method": method, "upstash-retries": "0", "upstash-workflow-calltype": "toCallback", diff --git a/src/serve/serve-many.test.ts b/src/serve/serve-many.test.ts index a2a234d..d4adadb 100644 --- a/src/serve/serve-many.test.ts +++ b/src/serve/serve-many.test.ts @@ -279,6 +279,7 @@ describe("serveMany", () => { "upstash-callback-forward-upstash-workflow-stepid": "1", "upstash-callback-forward-upstash-workflow-stepname": "call other workflow", "upstash-callback-forward-upstash-workflow-steptype": "Call", + "upstash-callback-forward-upstash-workflow-sdk-version": "1", "upstash-callback-workflow-calltype": "fromCallback", "upstash-callback-workflow-init": "false", "upstash-callback-workflow-runid": "wfr_id", diff --git a/src/serve/serve.test.ts b/src/serve/serve.test.ts index ed7c446..7238e21 100644 --- a/src/serve/serve.test.ts +++ b/src/serve/serve.test.ts @@ -640,6 +640,7 @@ describe("serve", () => { "upstash-callback-forward-upstash-workflow-concurrent": "1", "upstash-callback-forward-upstash-workflow-contenttype": "application/json", "upstash-callback-forward-upstash-workflow-stepid": "1", + "upstash-callback-forward-upstash-workflow-sdk-version": "1", "upstash-callback-forward-upstash-workflow-stepname": "call step", "upstash-callback-forward-upstash-workflow-steptype": "Call", "upstash-callback-retries": "2",