From 510d430e01fa7886910c79147d021ca90eedc640 Mon Sep 17 00:00:00 2001 From: Farrel Darian <62016900+fdarian@users.noreply.github.com> Date: Sat, 4 Apr 2026 16:18:22 +0700 Subject: [PATCH 1/2] fix: preserve OUTPUT generic in generateText wrapper Thread TOOLS and OUTPUT type parameters through so the return type reflects the actual output schema instead of resolving to `any`. --- packages/effect/src/for/ai/index.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/effect/src/for/ai/index.ts b/packages/effect/src/for/ai/index.ts index 91cb99d..c515ac3 100644 --- a/packages/effect/src/for/ai/index.ts +++ b/packages/effect/src/for/ai/index.ts @@ -42,16 +42,21 @@ type EffectifyCallbacks = Omit & { : T[K]; }; -type GenerateTextOriginalParams = Parameters[0]; -type GenerateTextReturn = Awaited>; - -export function generateText( +export function generateText< + TOOLS extends Ai.ToolSet = Ai.ToolSet, + OUTPUT extends Ai.Output.Output = Ai.Output.Output, + R = never, +>( params: EffectifyCallbacks< - GenerateTextOriginalParams, + Parameters>[0], GenerateTextCallbackKeys, R >, -): Effect.Effect { +): Effect.Effect< + Awaited>>, + AiError, + R +> { return Effect.gen(function* () { const runPromise = yield* FiberSet.makeRuntimePromise(); @@ -75,7 +80,7 @@ export function generateText( runPromise, params.experimental_onToolCallFinish, ), - } as GenerateTextOriginalParams; + } as Parameters>[0]; return yield* Effect.tryPromise({ try: () => Ai.generateText(originalParams), From 8498ce9bf6d1169fb11dcca735e4d657f26fc22c Mon Sep 17 00:00:00 2001 From: Farrel Darian <62016900+fdarian@users.noreply.github.com> Date: Sat, 4 Apr 2026 16:18:53 +0700 Subject: [PATCH 2/2] docs: changeset --- .changeset/generate-text-output-type.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/generate-text-output-type.md diff --git a/.changeset/generate-text-output-type.md b/.changeset/generate-text-output-type.md new file mode 100644 index 0000000..3e80cce --- /dev/null +++ b/.changeset/generate-text-output-type.md @@ -0,0 +1,5 @@ +--- +"ff-effect": patch +--- + +fix: preserve `OUTPUT` generic in `generateText` wrapper so `result.output` is properly typed instead of resolving to `any`