import type { Xor } from '@sap-cloud-sdk/util'; import type { CustomRequestConfig } from '@sap-cloud-sdk/http-client'; import type { ChatModel, EmbeddingModel } from './model-types.js'; import type { ChatMessages, DataRepositoryType, DocumentGroundingFilter, DpiConfig, DpiEntities, FilteringStreamOptions, LlamaGuard38B, LLMModelDetails as OriginalLLMModelDetails, Template, TemplateRef, TemplatingChatMessage, DPIStandardEntity, DPICustomEntity, InputFilteringConfig, OutputFilteringConfig, MaskingProviderConfig, GlobalStreamOptions, ErrorResponse, AzureContentSafetyInputFilterConfig, AzureContentSafetyOutputFilterConfig, LlamaGuard38BFilterConfig, EmbeddingsModelDetails as OriginalEmbeddingsModelDetails, EmbeddingsModelParams as OriginalEmbeddingsModelParams, SAPDocumentTranslationInput, SAPDocumentTranslationOutput } from './client/api/schema/index.js'; /** * Chat completion request configuration. */ export interface ChatCompletionRequest { /** * Chat History. */ messagesHistory?: ChatMessages; /** * New chat messages, including template messages. * @example * messages: [ * { * role: 'system', * content: 'You are a helpful assistant answering questions about {{product}}.' * }, * { * role: 'user', * content: 'Can you give me an overview of its key benefits?' * } * ] */ messages?: ChatMessages; /** * Template parameters. * @example * placeholderValues: { * product: 'SAP Cloud SDK' * } */ placeholderValues?: Record; } /** * LLM model details. */ export type LlmModelDetails = Omit & { name: ChatModel; params?: LlmModelParams; }; /** * Prompt templating module configuration. */ export interface PromptTemplatingModule { /** * The prompt template to be used. Can be either a user defined template or a reference to a template in the prompt registry. */ /** * Static prompts. Can be: * - A `template`: an array of templated chat messages (with {{?placeholders}}). * - An `id` or `scenario`, `name` and `version`: reference to a remote prompt template. * * This is meant for static instructions included with every call. * For per-request templating, use `messages` in `.chatCompletion()` instead. * @example * prompt: { * template: [ * { * role: 'system', * content: 'You are an assistant for {{?product}}.' * } * ] * } */ prompt?: Xor | string; /** * LLM model details. */ model: LlmModelDetails; } /** * Representation of the `FilteringModuleConfig` schema. */ export interface FilteringModule { /** * List of provider type and filters. */ input?: InputFilteringConfig; /** * List of provider type and filters. */ output?: OutputFilteringConfig; } /** * Representation of the `MaskingModuleConfig` schema. */ export interface MaskingModule { /** * List of masking service providers * Min Items: 1. */ masking_providers: MaskingProviderConfig[]; } /** * Configuration for translation module. */ export interface TranslationModule { /** * Configuration for input translation. */ input?: TranslationInputConfig; /** * Configuration for output translation. */ output?: TranslationOutputConfig; } /** * Orchestration error response. */ export type OrchestrationErrorResponse = ErrorResponse; /** * Model Parameters for LLM module configuration. */ export type LlmModelParams = { max_tokens?: number; temperature?: number; frequency_penalty?: number; presence_penalty?: number; top_p?: number; n?: number; } & Record; /** * Representation of the 'Template' schema. */ export type PromptTemplate = Omit & { /** * A chat message array to be formatted with values from `placeholderValues`. * Both `role` and `content` can use {{?variable}} placeholders. * * For dynamic templating (changing per request), pass templated messages directly in `.chatCompletion({ messages })`. * @example * // Static template: passed once in client config * templating: { * template: [ * { * role: 'system', * content: 'You are a helpful assistant for {{?product}}.' * } * ] * } */ template?: TemplatingChatMessage; }; /** * Orchestration module configuration. */ export interface OrchestrationModuleConfig { /** * Prompt templating configuration. */ promptTemplating: PromptTemplatingModule; /** * Filtering module configuration for both input and output filters. * To configure a filter, use convenience functions like `buildAzureContentSafetyFilter`, `buildLlamaGuard38BFilter`, etc.. * @example * filtering: { * input: { * filters: [ * buildAzureContentSafetyFilter('input', { hate: 'ALLOW_SAFE', violence: 'ALLOW_SAFE_LOW_MEDIUM' }) * ] * } * } */ filtering?: FilteringModule; /** * Masking module configuration. */ masking?: MaskingModule; /** * Grounding module configuraton. */ grounding?: GroundingModule; /** * Translation module configuration. */ translation?: TranslationModule; } /** * Non-empty list of orchestration module configurations for module fallback. * The orchestration service will try each configuration in order until one succeeds. * @example * const fallbackConfig: OrchestrationModuleConfigList = [ * { * promptTemplating: { * model: { name: 'gpt-4o', timeout: 5 } * } * }, * { * promptTemplating: { * model: { name: 'gpt-5-mini' } * } * } * ]; */ export type OrchestrationModuleConfigList = [ OrchestrationModuleConfig, ...OrchestrationModuleConfig[] ]; /** * Reference to an orchestration configuration created via the Prompt Registry API. * Use this to reference a pre-configured orchestration setup without * defining the full configuration in code. The configuration must be * created via the Prompt Registry API before it can be referenced. * Reference by ID. * @example * const configRef: OrchestrationConfigRef = { * id: 'f47ac10b-58cc-4372-a567-0e02b2c3d479' * }; * Reference by scenario, name and version. * @example * const configRef: OrchestrationConfigRef = { * scenario: 'customer-support', * name: 'example-orchestration-config', * version: '0.0.1' * }; */ export type OrchestrationConfigRef = Xor<{ /** Orchestration configuration ID. */ id: string; }, { /** Scenario identifier. */ scenario: string; /** Configuration name. */ name: string; /** Configuration version. */ version: string; }>; /** * Type guard to check if config is a config reference. * @param config - The config to check. * @returns Type predicate indicating whether the config is a config reference. */ export declare function isConfigReference(config: OrchestrationModuleConfig | OrchestrationModuleConfigList | string | OrchestrationConfigRef): config is OrchestrationConfigRef; /** * Validates and asserts that config is a valid list of orchestration module configs. * @internal * @param config - The config to validate. * @throws {Error} If config is not an array, is empty, or contains invalid elements. */ export declare function assertIsOrchestrationModuleConfigList(config: OrchestrationModuleConfig | OrchestrationModuleConfigList | string | OrchestrationConfigRef): asserts config is OrchestrationModuleConfigList; /** * Type guard to check if config is a valid list of orchestration module configs. * @param config - The config to check. * @returns True if config is a non-empty array with valid OrchestrationModuleConfig elements. */ export declare function isOrchestrationModuleConfigList(config: OrchestrationModuleConfig | OrchestrationModuleConfigList | string | OrchestrationConfigRef): config is OrchestrationModuleConfigList; /** * Request options for orchestration. */ export interface RequestOptions { /** * Prompt configuration. */ request?: ChatCompletionRequest; /** * Custom request configuration. */ requestConfig?: CustomRequestConfig; /** * Whether to stream the response. */ stream?: boolean; /** * Options for the stream. */ streamOptions?: StreamOptions; } /** * Base stream options without per-config overrides. */ export interface BaseStreamOptions { /** * LLM specific stream options. */ promptTemplating?: { include_usage?: boolean; [key: string]: any; } | null; /** * Output filtering stream options. */ outputFiltering?: FilteringStreamOptions; /** * Global stream options. */ global?: GlobalStreamOptions; /** * Please use `StreamOptionsWithOverrides` if you want to specify per-config stream options for module fallback. */ overrides?: never; } /** * Stream options with support for per-config overrides in module fallback scenarios. * The `overrides` property allows you to specify stream options that apply to specific module configurations by their index in the fallback list. * If an override is not provided for a config, it will use the shared options defined in `BaseStreamOptions`. * Overrides do not merge with shared options. */ export type StreamOptionsWithOverrides = Omit & { /** * Per-config stream options that override shared settings. * Use object numeric keys for config indices you want to override. * Omit keys for configs that should use shared options or set their value to undefined. * @example * ```typescript * * const optionsWithOverrides: StreamOptions = { * global: { chunk_size: 100 }, * promptTemplating: { include_usage: false }, * overrides: { * 0: { promptTemplating: { include_usage: true } }, // config 0, replaces base options fully * // 1: resolves base options because no override is provided (`{ promptTemplating: { include_usage: false } }`) * 2: { outputFiltering: { overlap: 50 } } // config 2, replaces base options fully * } * }; * ``` */ overrides: Partial>; }; /** * Stream options for orchestration requests. * Either shared stream options for every module configuration or stream options with per-config overrides for module fallback. */ export type StreamOptions = BaseStreamOptions | StreamOptionsWithOverrides; /** * Shared stream options applied to all module configurations. */ export type ModuleStreamOptions = Omit; /** * Representation of the `GroundingModuleConfig` schema. */ export interface GroundingModule { /** * @example 'document_grounding_service' */ type: 'document_grounding_service' | any; /** * Grounding service configuration. */ config: { /** * Document grounding service filters to be used. */ filters?: DocumentGroundingFilter[]; /** * Placeholders to be used for grounding input questions and output. */ placeholders: { /** * Contains the input parameters used for grounding input questions * Min Items: 1. */ input: string[]; /** * Placeholder name for grounding output. * @example 'groundingOutput' */ output: string; }; /** * Parameter name used for specifying metadata parameters. */ metadata_params?: string[]; }; } /** * Represents a filter configuration for the Document Grounding Service. */ export type DocumentGroundingServiceFilter = Omit & { /** * Defines the type of data repository. * If not set, the default value is 'vector'. */ data_repository_type?: DataRepositoryType; }; /** * Represents the configuration for the Document Grounding Service. */ export interface DocumentGroundingServiceConfig { /** * Document grounding service filters to be used. */ filters?: DocumentGroundingServiceFilter[]; /** * Placeholders to be used for grounding input questions and output. */ placeholders: { /** * Contains the input parameters used for grounding input questions * Min Items: 1. */ input: string[]; /** * Placeholder name for grounding output. * @example "groundingOutput" */ output: string; }; /** * Parameter name used for specifying metadata parameters. */ metadata_params?: string[]; } /** * Defines the type of the DPI masking entity. */ type DpiEntity = DpiEntities | DPIStandardEntity | (DPICustomEntity & { type: 'custom'; }); /** * Represents the configuration for the masking provider SAP Data Privacy Integration. */ export type DpiMaskingConfig = Omit & { entities: [DpiEntity, ...DpiEntity[]]; mask_grounding_input?: boolean; }; interface AzureContentSafetyFilterBaseParameters { /** * The filter category for hate content. */ hate?: AzureFilterThreshold; /** * The filter category for self-harm content. */ self_harm?: AzureFilterThreshold; /** * The filter category for sexual content. */ sexual?: AzureFilterThreshold; /** * The filter category for violence content. */ violence?: AzureFilterThreshold; } /** * Output Parameters for Azure content safety output filter. */ export interface AzureContentSafetyFilterOutputParameters extends AzureContentSafetyFilterBaseParameters { /** * Detect protected code content from known GitHub repositories. The scan includes software libraries, source code, algorithms, and other proprietary programming content. */ protected_material_code?: boolean; } /** * Input parameters for Azure content safety input filter. */ export interface AzureContentSafetyFilterInputParameters extends AzureContentSafetyFilterBaseParameters { /** * A flag to use prompt shield. */ prompt_shield?: boolean; } /** * A descriptive constant for Azure content safety filter threshold. * @internal */ export declare const supportedAzureFilterThresholds: { readonly ALLOW_SAFE: 0; readonly ALLOW_SAFE_LOW: 2; readonly ALLOW_SAFE_LOW_MEDIUM: 4; readonly ALLOW_ALL: 6; }; /** * The Azure threshold level supported for each azure content filter category. */ export type AzureFilterThreshold = keyof typeof supportedAzureFilterThresholds; /** * The filter categories supported for Llama Guard 3 8B filter. */ export type LlamaGuard38BCategory = keyof LlamaGuard38B; /** * Type for module configurations (input or output). * @internal */ export type ConfigType = 'input' | 'output'; /** * Category for translation application scope. */ export type TranslationApplyToCategory = 'placeholders' | 'template_roles'; /** * Configuration selector for applying translation to specific placeholders or message roles. */ export interface DocumentTranslationApplyToSelector { /** * Category to apply translation to. */ category: TranslationApplyToCategory; /** * List of placeholders or roles to apply translation to. * @example [ * "groundingInput", * "inputContext" * ] */ items: string[]; /** * Language of the text to be translated. * @example "de-DE" */ sourceLanguage?: string; } /** * Target language for translation, either a language code or a selector configuration. */ export type TranslationTargetLanguage = string | DocumentTranslationApplyToSelector; /** * Input parameters for translation configuration. */ interface TranslationConfigParametersInput { /** * Language of the text to be translated. * @example sourceLanguage: 'de-DE' */ sourceLanguage?: string; /** * Language to which the text should be translated. * @example targetLanguage: 'en-US' */ targetLanguage: string; /** * If true, the messages history will be translated as well. * @default true */ translateMessagesHistory?: boolean; /** * Configuration for applying translation to specific placeholders or message roles. * @example applyTo: [{ category: 'placeholders', items: ['user_input'], sourceLanguage: 'de-DE' }] */ applyTo?: DocumentTranslationApplyToSelector[]; } /** * Output parameters for translation configuration. */ interface TranslationConfigParametersOutput { /** * Language of the text to be translated. * @example sourceLanguage: 'de-DE' */ sourceLanguage?: string; /** * Language to which the text should be translated. * @example targetLanguage: 'en-US' */ targetLanguage: TranslationTargetLanguage; } /** * Output parameters for translation output configuration. */ export type TranslationOutputParameters = TranslationConfigParametersOutput; /** * Input parameters for translation input configuration. */ export type TranslationInputParameters = TranslationConfigParametersInput; /** * Parameters for translation configurations. */ export type TranslationConfigParams = T extends 'input' ? TranslationInputParameters : TranslationOutputParameters; /** * Input configuration for translation module. */ export type TranslationInputConfig = SAPDocumentTranslationInput; /** * Output configuration for translation module. */ export type TranslationOutputConfig = SAPDocumentTranslationOutput; /** * Return type for translation configurations. */ export type TranslationReturnType = T extends 'input' ? TranslationInputConfig : TranslationOutputConfig; /** * Parameters for Azure content safety filters. */ export type AzureContentSafetyFilterParameters = T extends 'input' ? AzureContentSafetyFilterInputParameters : AzureContentSafetyFilterOutputParameters; /** * Filter return type for Azure Content Safety. */ export type AzureContentSafetyFilterReturnType = T extends 'input' ? AzureContentSafetyInputFilterConfig : AzureContentSafetyOutputFilterConfig; /** * Input filter configuration for Llama Guard 3 8B. */ export type LlamaGuard38BInputFilterConfig = LlamaGuard38BFilterConfig; /** * Output filter configuration for Llama Guard 3 8B. */ export type LlamaGuard38BOutputFilterConfig = LlamaGuard38BFilterConfig; /** * Filter return type for Llama Guard 3 8B. */ export type LlamaGuard38BFilterReturnType = T extends 'input' ? LlamaGuard38BInputFilterConfig : LlamaGuard38BOutputFilterConfig; /** * Representation of the 'DpiConfig' schema. */ export type DpiMaskingProviderConfig = DpiConfig; /** * Embedding request configuration. */ export interface EmbeddingRequest { /** * Text input for which embeddings need to be generated. * Can be a single string or array of strings. * @example * input: "This is a text to embed" or * input: ["Text 1", "Text 2", "Text 3"] */ input: string | string[]; /** * Represents the task for which the embeddings need to be generated. * @default 'text' */ type?: 'text' | 'document' | 'query'; } /** * Embedding model details. */ export type EmbeddingModelDetails = Omit & { name: EmbeddingModel; params?: EmbeddingModelParams; }; /** * Embedding model parameters. */ export type EmbeddingModelParams = OriginalEmbeddingsModelParams; /** * Embedding model configuration. */ export interface EmbeddingModelConfig { /** * Model details for embedding generation. */ model: EmbeddingModelDetails; } /** * Embedding module configuration. */ export interface EmbeddingModuleConfig { /** * Embeddings model configuration. */ embeddings: EmbeddingModelConfig; /** * Masking module configuration. */ masking?: MaskingModule; } /** * Embedding data with vector and index information. */ export interface EmbeddingData { /** * The object type, which is always "embedding". */ object: 'embedding'; /** * The embedding vector, either as a number array or base64-encoded string. */ embedding: number[] | string; /** * The index of the embedding in the list of embeddings. */ index: number; } export {}; //# sourceMappingURL=orchestration-types.d.ts.map