@tanstack/ai
Version:
Core TanStack AI library - Open source AI SDK
105 lines (104 loc) • 4.56 kB
TypeScript
import { ImageAdapter } from './adapter.js';
import { ImageGenerationResult, StreamChunk } from '../../types.js';
/** The adapter kind this activity handles */
export declare const kind: "image";
/**
* Extract model-specific provider options from an ImageAdapter via ~types.
* If the model has specific options defined in ModelProviderOptions (and not just via index signature),
* use those; otherwise fall back to base provider options.
*/
export type ImageProviderOptionsForModel<TAdapter, TModel extends string> = TAdapter extends ImageAdapter<any, infer BaseOptions, infer ModelOptions, any> ? string extends keyof ModelOptions ? BaseOptions : TModel extends keyof ModelOptions ? ModelOptions[TModel] : BaseOptions : object;
/**
* Extract model-specific size options from an ImageAdapter via ~types.
* If the model has specific sizes defined, use those; otherwise fall back to string.
*/
export type ImageSizeForModel<TAdapter, TModel extends string> = TAdapter extends ImageAdapter<any, any, any, infer SizeByName> ? string extends keyof SizeByName ? string : TModel extends keyof SizeByName ? SizeByName[TModel] : string : string;
/**
* Options for the image activity.
* The model is extracted from the adapter's model property.
*
* @template TAdapter - The image adapter type
* @template TStream - Whether to stream the output
*/
export type ImageActivityOptions<TAdapter extends ImageAdapter<string, any, any, any>, TStream extends boolean = false> = {
/** The image adapter to use (must be created with a model) */
adapter: TAdapter & {
kind: typeof kind;
};
/** Text description of the desired image(s) */
prompt: string;
/** Number of images to generate (default: 1) */
numberOfImages?: number;
/** Image size in WIDTHxHEIGHT format (e.g., "1024x1024") */
size?: ImageSizeForModel<TAdapter, TAdapter['model']>;
/**
* Whether to stream the image generation result.
* When true, returns an AsyncIterable<StreamChunk> for streaming transport.
* When false or not provided, returns a Promise<ImageGenerationResult>.
*
* @default false
*/
stream?: TStream;
} & ({} extends ImageProviderOptionsForModel<TAdapter, TAdapter['model']> ? {
/** Provider-specific options for image generation */ modelOptions?: ImageProviderOptionsForModel<TAdapter, TAdapter['model']>;
} : {
/** Provider-specific options for image generation */ modelOptions: ImageProviderOptionsForModel<TAdapter, TAdapter['model']>;
});
/**
* Result type for the image activity.
* - If stream is true: AsyncIterable<StreamChunk>
* - Otherwise: Promise<ImageGenerationResult>
*/
export type ImageActivityResult<TStream extends boolean = false> = TStream extends true ? AsyncIterable<StreamChunk> : Promise<ImageGenerationResult>;
/**
* Image activity - generates images from text prompts.
*
* Uses AI image generation models to create images based on natural language descriptions.
*
* @example Generate a single image
* ```ts
* import { generateImage } from '@tanstack/ai'
* import { openaiImage } from '@tanstack/ai-openai'
*
* const result = await generateImage({
* adapter: openaiImage('dall-e-3'),
* prompt: 'A serene mountain landscape at sunset'
* })
*
* console.log(result.images[0].url)
* ```
*
* @example Generate multiple images
* ```ts
* const result = await generateImage({
* adapter: openaiImage('dall-e-2'),
* prompt: 'A cute robot mascot',
* numberOfImages: 4,
* size: '512x512'
* })
*
* result.images.forEach((image, i) => {
* console.log(`Image ${i + 1}: ${image.url}`)
* })
* ```
*
* @example With provider-specific options
* ```ts
* const result = await generateImage({
* adapter: openaiImage('dall-e-3'),
* prompt: 'A professional headshot photo',
* size: '1024x1024',
* modelOptions: {
* quality: 'hd',
* style: 'natural'
* }
* })
* ```
*/
export declare function generateImage<TAdapter extends ImageAdapter<string, any, any, any>, TStream extends boolean = false>(options: ImageActivityOptions<TAdapter, TStream>): ImageActivityResult<TStream>;
/**
* Create typed options for the generateImage() function without executing.
*/
export declare function createImageOptions<TAdapter extends ImageAdapter<string, any, any, any>, TStream extends boolean = false>(options: ImageActivityOptions<TAdapter, TStream>): ImageActivityOptions<TAdapter, TStream>;
export type { ImageAdapter, ImageAdapterConfig, AnyImageAdapter, } from './adapter.js';
export { BaseImageAdapter } from './adapter.js';