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` 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),