Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
8e5d8fc
update timeout for llm from 600 to 1200
OscarDDD Oct 14, 2026
a089413
add test for timeout upperbound
OscarDDD Oct 14, 2026
f555d1e
add code and tests for 'drop_unsupported_params'
OscarDDD Oct 14, 2026
6ce0b76
add the file content
OscarDDD Oct 14, 2026
94397cc
provider specific finish reason for LLMChoice and StreamLLMChoice
OscarDDD Oct 14, 2026
5adcea3
Set promp as optional in PromptTemplatingModuleConfig
OscarDDD Oct 15, 2026
17ed06b
sync emeddings inputs/types and add EmbeddingMultiFormat support
OscarDDD Oct 16, 2026
a887ad9
set embedding model timeout to 1200
OscarDDD Oct 16, 2026
7e822d7
add config override functionality
OscarDDD Oct 17, 2026
ad56140
add data masking functionality
OscarDDD Oct 17, 2026
13eabed
add data masking model into init files
OscarDDD Oct 17, 2026
f2c48cc
sync feedback service header
OscarDDD Oct 17, 2026
d9014d5
Add feedback service header
OscarDDD Oct 19, 2026
75c16c0
strip drop unsupported params for prompt registry API
OscarDDD Oct 19, 2026
fc11ff1
Merge branch 'main' into sync_sdk_with_orchestration_spec
OscarDDD Oct 19, 2026
d38b0c2
fix import issues
OscarDDD Oct 19, 2026
e904b10
add checks for configref with full orchestrationConfig
OscarDDD Oct 19, 2026
a14de38
set default value to None for drop unsupported params
OscarDDD Oct 19, 2026
85bbb37
remove unused feedback comments and variables
OscarDDD Oct 19, 2026
f1fd53e
Merge branch 'main' into sync_sdk_with_orchestration_spec
OscarDDD Oct 20, 2026
fd0ba9b
fix the review question
OscarDDD Oct 22, 2026
f3ed2ba
revert feedback service, add response header and integration tests
OscarDDD Oct 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions packages/gen/gen_ai_hub/orchestration_v2/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

# config
"ModuleConfig", "OrchestrationConfig", "OrchestrationConfigReference",
"PartialPromptTemplatingModuleConfig", "PartialModuleConfigs", "PartialOrchestrationConfig",
"CompletionRequestConfigurationReferenceByIdConfigRef",
"CompletionRequestConfigurationReferenceByNameScenarioVersionConfigRef",

Expand All @@ -22,8 +23,9 @@
"InputFiltering", "OutputFiltering", "FilteringModuleConfig",

# data_masking
"DataMaskingProviderName", "MaskingMethod", "ProfileEntity", "DPIMethodConstant", "DPIMethodFabricatedData",
"DPICustomEntity", "DPIStandardEntity", "MaskGroundingInput", "MaskingProviderConfig", "MaskingModuleConfig",
"DataMaskingProviderName", "MaskingMethod", "MaskFileInputMethod", "ProfileEntity", "DPIMethodConstant",
"DPIMethodFabricatedData", "DPICustomEntity", "DPIStandardEntity", "MaskGroundingInput", "MaskingProviderConfig",
"MaskingModuleConfig",

# document_grounding
"GroundingType", "DataRepositoryType", "DocumentGroundingFilter", "DocumentGroundingPlaceholders",
Expand All @@ -33,7 +35,8 @@
# embeddings
"EmbeddingsEncodingFormat", "EmbeddingsInputType", "EmbeddingsModelParams", "EmbeddingsModelDetails",
"EmbeddingsModelConfig", "EmbeddingsModuleConfigs", "EmbeddingsOrchestrationConfig", "EmbeddingsInput",
"EmbeddingsUsage", "EmbeddingResult", "EmbeddingsResponse", "EmbeddingsPostResponse", "EmbeddingsRequest",
"EmbeddingMultiFormat", "EmbeddingsUsage", "EmbeddingResult", "EmbeddingsResponse",
"EmbeddingsPostResponse", "EmbeddingsRequest",

# llama_guard_3_filter
"LlamaGuard38bFilter",
Expand All @@ -47,6 +50,7 @@

# multimodal_items
"ImageDetailLevel", "TextPart", "ImageUrl", "ImagePart", "ContentPart", "ImageItem",
"FileContent", "FilePart", "FileItem",

# response
"CacheCreationTokenDetails", "PromptTokensDetails", "CompletionTokensDetails", "TokenUsage", "GenericModuleResult", "TopLogprob",
Expand Down
25 changes: 16 additions & 9 deletions packages/gen/gen_ai_hub/orchestration_v2/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,29 @@
from .azure_content_filter import AzureContentSafetyInput, AzureContentSafetyOutput, AzureContentFilter, AzureThreshold
from .cache_control import CacheControl
from .config import (ModuleConfig, OrchestrationConfig, OrchestrationConfigReference,
PartialPromptTemplatingModuleConfig, PartialModuleConfigs, PartialOrchestrationConfig,
CompletionRequestConfigurationReferenceByIdConfigRef,
CompletionRequestConfigurationReferenceByNameScenarioVersionConfigRef)
from .content_filter import (ContentFilterProvider, ContentFilter, LlamaGuard38bFilterConfig,
AzureContentSafetyInputFilterConfig, AzureContentSafetyOutputFilterConfig,
FilteringStreamOptions)
from .content_filtering import InputFiltering, OutputFiltering, FilteringModuleConfig
from .data_masking import (DataMaskingProviderName, MaskingMethod, ProfileEntity, DPIMethodConstant,
DPIMethodFabricatedData, DPICustomEntity, DPIStandardEntity, MaskGroundingInput,
MaskingProviderConfig, MaskingModuleConfig)
from .data_masking import (DataMaskingProviderName, MaskingMethod, MaskFileInputMethod, ProfileEntity,
DPIMethodConstant, DPIMethodFabricatedData, DPICustomEntity, DPIStandardEntity,
MaskGroundingInput, MaskingProviderConfig, MaskingModuleConfig)
from .document_grounding import (GroundingType, DataRepositoryType, DocumentGroundingFilter,
DocumentGroundingPlaceholders, DocumentGroundingConfig, GroundingModuleConfig,
KeyValueListPair, DocumentMetadataKeyValueListPairs, GroundingSearchConfig)
from .embeddings import (EmbeddingsEncodingFormat, EmbeddingsInputType, EmbeddingsModelParams, EmbeddingsModelDetails,
EmbeddingsModelConfig, EmbeddingsModuleConfigs, EmbeddingsOrchestrationConfig, EmbeddingsInput,
EmbeddingsUsage, EmbeddingResult, EmbeddingsResponse, EmbeddingsPostResponse, EmbeddingsRequest)
EmbeddingMultiFormat, EmbeddingsUsage, EmbeddingResult, EmbeddingsResponse,
EmbeddingsPostResponse, EmbeddingsRequest)
from .llama_guard_3_filter import LlamaGuard38bFilter
from .llm_model_details import LLMModelDetails
from .message import (SystemMessage, UserMessage, AssistantMessage, ToolChatMessage, DeveloperChatMessage, ChatMessage,
ResponseChatMessage, FunctionCall, MessageToolCall, ReasoningBlock)
from .multimodal_items import ImageDetailLevel, TextPart, ImageUrl, ImagePart, ContentPart, ImageItem
from .multimodal_items import (ImageDetailLevel, TextPart, ImageUrl, ImagePart, ContentPart, ImageItem,
FileContent, FilePart, FileItem)
from .response import (CacheCreationTokenDetails, PromptTokensDetails, CompletionTokensDetails, TokenUsage, GenericModuleResult, TopLogprob,
ChatCompletionTokenLogprob, ChoiceLogprobs, LLMChoice, StreamFunctionObject, StreamToolCall,
StreamDelta, StreamLLMChoice, Citation, LLMModuleResult, StreamLLMModuleResult, ModuleResults,
Expand All @@ -45,6 +48,7 @@

# config
"ModuleConfig", "OrchestrationConfig", "OrchestrationConfigReference",
"PartialPromptTemplatingModuleConfig", "PartialModuleConfigs", "PartialOrchestrationConfig",
"CompletionRequestConfigurationReferenceByIdConfigRef",
"CompletionRequestConfigurationReferenceByNameScenarioVersionConfigRef",

Expand All @@ -56,8 +60,9 @@
"InputFiltering", "OutputFiltering", "FilteringModuleConfig",

# data_masking
"DataMaskingProviderName", "MaskingMethod", "ProfileEntity", "DPIMethodConstant", "DPIMethodFabricatedData",
"DPICustomEntity", "DPIStandardEntity", "MaskGroundingInput", "MaskingProviderConfig", "MaskingModuleConfig",
"DataMaskingProviderName", "MaskingMethod", "MaskFileInputMethod", "ProfileEntity", "DPIMethodConstant",
"DPIMethodFabricatedData", "DPICustomEntity", "DPIStandardEntity", "MaskGroundingInput", "MaskingProviderConfig",
"MaskingModuleConfig",

# document_grounding
"GroundingType", "DataRepositoryType", "DocumentGroundingFilter", "DocumentGroundingPlaceholders",
Expand All @@ -67,7 +72,8 @@
# embeddings
"EmbeddingsEncodingFormat", "EmbeddingsInputType", "EmbeddingsModelParams", "EmbeddingsModelDetails",
"EmbeddingsModelConfig", "EmbeddingsModuleConfigs", "EmbeddingsOrchestrationConfig", "EmbeddingsInput",
"EmbeddingsUsage", "EmbeddingResult", "EmbeddingsResponse", "EmbeddingsPostResponse", "EmbeddingsRequest",
"EmbeddingMultiFormat", "EmbeddingsUsage", "EmbeddingResult", "EmbeddingsResponse",
"EmbeddingsPostResponse", "EmbeddingsRequest",

# llama_guard_3_filter
"LlamaGuard38bFilter",
Expand All @@ -81,14 +87,15 @@

# multimodal_items
"ImageDetailLevel", "TextPart", "ImageUrl", "ImagePart", "ContentPart", "ImageItem",
"FileContent", "FilePart", "FileItem",

# response
"CacheCreationTokenDetails", "PromptTokensDetails", "CompletionTokensDetails", "TokenUsage", "GenericModuleResult", "TopLogprob",
"ChatCompletionTokenLogprob", "ChoiceLogprobs", "LLMChoice", "StreamFunctionObject", "StreamToolCall",
"StreamDelta", "StreamLLMChoice", "Citation", "LLMModuleResult", "StreamLLMModuleResult", "ModuleResults",
"StreamModuleResults", "SAPAPIError", "SAPAPIErrorStreaming", "CompletionPostResponse",
"StreamCompletionPostResponse", "ErrorResponse", "ErrorResponseStreaming", "OrchestrationResponseWithRetries",

# response_format
"ResponseFormatText", "ResponseFormatJsonObject", "ResponseFormatJsonSchema", "JSONResponseSchema",

Expand Down
61 changes: 60 additions & 1 deletion packages/gen/gen_ai_hub/orchestration_v2/models/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
from gen_ai_hub.orchestration_v2.models.content_filtering import FilteringModuleConfig
from gen_ai_hub.orchestration_v2.models.data_masking import MaskingModuleConfig
from gen_ai_hub.orchestration_v2.models.document_grounding import GroundingModuleConfig
from gen_ai_hub.orchestration_v2.models.llm_model_details import LLMModelDetails
from gen_ai_hub.orchestration_v2.models.streaming import GlobalStreamOptions
from gen_ai_hub.orchestration_v2.models.template import PromptTemplatingModuleConfig
from gen_ai_hub.orchestration_v2.models.template import PromptTemplatingModuleConfig, Template
from gen_ai_hub.orchestration_v2.models.template_ref import TemplateRef
from gen_ai_hub.orchestration_v2.models.translation import TranslationModuleConfig


Expand Down Expand Up @@ -59,6 +61,62 @@ class OrchestrationConfig(BaseModel):
stream: Optional[GlobalStreamOptions] = None


class PartialPromptTemplatingModuleConfig(BaseModel):
"""
Partial prompt templating configuration for use with config_ref overrides.

Every field is optional so that only the parts to override need to be provided;
the referenced configuration supplies the rest.

Args:
prompt: Optional prompt template override (inline Template or TemplateRef).

model: Optional model override. Unlike the non-partial config, model is optional
here so that only the prompt can be overridden without repeating the model config.
"""
prompt: Optional[Template | TemplateRef] = None
model: Optional[LLMModelDetails] = None


class PartialModuleConfigs(BaseModel):
"""
Partial module configuration for use with config_ref overrides.

Every module is optional; only the modules provided here override the referenced config.

Args:
prompt_templating: Optional partial prompt templating override.

filtering: Optional filtering module override.

masking: Optional masking module override.

grounding: Optional grounding module override.

translation: Optional translation module override.
"""
prompt_templating: Optional[PartialPromptTemplatingModuleConfig] = None
filtering: Optional[FilteringModuleConfig] = None
masking: Optional[MaskingModuleConfig] = None
grounding: Optional[GroundingModuleConfig] = None
translation: Optional[TranslationModuleConfig] = None


class PartialOrchestrationConfig(BaseModel):
"""
Partial orchestration configuration used to override a referenced config (config_ref).

The referenced configuration is the base; the fields provided here are merged on top.

Args:
modules: Optional partial module configurations to override.

stream: Optional streaming configuration to override.
"""
modules: Optional[PartialModuleConfigs] = None
stream: Optional[GlobalStreamOptions] = None


class CompletionRequestConfigurationReferenceByIdConfigRef(BaseModel):
"""Represents a reference to an orchestration config identified by a unique ID.

Expand Down Expand Up @@ -86,5 +144,6 @@ class CompletionRequestConfigurationReferenceByNameScenarioVersionConfigRef(Base
CompletionRequestConfigurationReferenceByNameScenarioVersionConfigRef)

__all__ = ["ModuleConfig", "OrchestrationConfig", "OrchestrationConfigReference",
"PartialPromptTemplatingModuleConfig", "PartialModuleConfigs", "PartialOrchestrationConfig",
"CompletionRequestConfigurationReferenceByIdConfigRef",
"CompletionRequestConfigurationReferenceByNameScenarioVersionConfigRef"]
23 changes: 21 additions & 2 deletions packages/gen/gen_ai_hub/orchestration_v2/models/data_masking.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,21 @@ class MaskGroundingInput(BaseModel):
"""
enabled: bool = False

class MaskFileInputMethod(str, Enum):
"""
Enumerates the supported masking methods for file inputs.

This enum defines how file inputs are handled by the data masking module. It is required if file inputs
are provided.

Values:
ANONYMIZATION: Irreversibly replaces sensitive data in file inputs with placeholders.

SKIP: Skips masking of file inputs, leaving them unchanged.
"""
ANONYMIZATION = "anonymization"
SKIP = "skip"


class MaskingProviderConfig(BaseModel):
"""
Expand All @@ -183,12 +198,15 @@ class MaskingProviderConfig(BaseModel):
allowlist: A list of strings that should not be masked.

mask_grounding_input: A flag indicating whether to mask input to the grounding module.

mask_file_input_method: The method of masking to apply to file inputs. Required if file inputs are provided.
"""
type_: DataMaskingProviderName = Field(default=DataMaskingProviderName.SAP_DATA_PRIVACY_INTEGRATION, alias="type")
method: MaskingMethod
entities: List[Union[DPIStandardEntity, DPICustomEntity]]
allowlist: Optional[List[str]] = None
mask_grounding_input: Optional[MaskGroundingInput] = None
mask_file_input_method: Optional[MaskFileInputMethod] = None

class MaskingModuleConfig(BaseModel):
"""
Expand Down Expand Up @@ -217,5 +235,6 @@ def enforce_exactly_one_provider_list(self):

return self

__all__ = ["DataMaskingProviderName", "MaskingMethod", "ProfileEntity", "DPIMethodConstant", "DPIMethodFabricatedData",
"DPICustomEntity", "DPIStandardEntity", "MaskGroundingInput", "MaskingProviderConfig", "MaskingModuleConfig"]
__all__ = ["DataMaskingProviderName", "MaskingMethod", "MaskFileInputMethod", "ProfileEntity", "DPIMethodConstant",
"DPIMethodFabricatedData", "DPICustomEntity", "DPIStandardEntity", "MaskGroundingInput",
"MaskingProviderConfig", "MaskingModuleConfig"]
73 changes: 65 additions & 8 deletions packages/gen/gen_ai_hub/orchestration_v2/models/embeddings.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from enum import Enum
from typing import Optional, Dict, List, Union

from pydantic import Field
from pydantic import ConfigDict, Field

from gen_ai_hub.orchestration_v2.models.base import ABCBaseModel as BaseModel, ResponseBaseModel
from gen_ai_hub.orchestration_v2.models.data_masking import MaskingModuleConfig
Expand All @@ -16,13 +16,19 @@ class EmbeddingsEncodingFormat(str, Enum):
Encoding format for the embeddings output.

Values:
FLOAT: Returns embeddings as an array of floats.
FLOAT: Returns embeddings as an array of floating point numbers.
BASE64: Returns embeddings as a base64 encoded string.
BINARY: Returns embeddings in binary format.
INT8: Returns embeddings as an array of 8-bit integers.
UINT8: Returns embeddings as an array of unsigned 8-bit integers.
UBINARY: Returns embeddings in unsigned binary format.
"""
FLOAT = "float"
BASE64 = "base64"
BINARY = "binary"
INT8 = "int8"
UINT8 = "uint8"
UBINARY = "ubinary"


class EmbeddingsInputType(str, Enum):
Expand All @@ -35,10 +41,20 @@ class EmbeddingsInputType(str, Enum):
TEXT: General purpose text (default).
DOCUMENT: Content to be searched/retrieved.
QUERY: Short search queries.
SEARCH_DOCUMENT: Content stored in a search index to be retrieved.
SEARCH_QUERY: Query run against a search index.
CLASSIFICATION: Text used in a classification task.
CLUSTERING: Text used in a clustering task.
IMAGE: Image input.
"""
TEXT = "text"
DOCUMENT = "document"
QUERY = "query"
SEARCH_DOCUMENT = "search_document"
SEARCH_QUERY = "search_query"
CLASSIFICATION = "classification"
CLUSTERING = "clustering"
IMAGE = "image"


class EmbeddingsModelParams(BaseModel):
Expand All @@ -47,11 +63,13 @@ class EmbeddingsModelParams(BaseModel):

Args:
dimensions: The number of dimensions for the output embeddings.
encoding_format: The format for the embeddings output (float, base64, or binary).
encoding_format: The format to return the embeddings in. Can be a single
format or a list of formats (e.g. for Cohere models that support
returning multiple encodings at once).
normalize: Whether to normalize the embeddings.
"""
dimensions: Optional[int] = None
encoding_format: Optional[EmbeddingsEncodingFormat] = None
encoding_format: Optional[Union[EmbeddingsEncodingFormat, List[EmbeddingsEncodingFormat]]] = None
normalize: Optional[bool] = None


Expand All @@ -69,7 +87,7 @@ class EmbeddingsModelDetails(BaseModel):
name: str
version: Optional[str] = "latest"
params: Optional[EmbeddingsModelParams] = None
timeout: Optional[int] = Field(default=600, ge=1, le=600)
timeout: Optional[int] = Field(default=600, ge=1, le=1200)
max_retries: Optional[int] = Field(default=2, ge=0, le=5)


Expand Down Expand Up @@ -117,6 +135,42 @@ class EmbeddingsInput(BaseModel):
type_: Optional[EmbeddingsInputType] = Field(default=None, alias="type")


class EmbeddingMultiFormat(ResponseBaseModel):
"""
A dictionary mapping encoding format names to their embeddings.

Used when multiple encoding formats are requested at once (Cohere-specific).
Each field holds the embedding in the corresponding encoding format and is
only populated when that format was requested.

Args:
float_: Float encoding format - array of floating point numbers.
int8: Int8 encoding format - array of 8-bit integers.
uint8: Uint8 encoding format - array of unsigned 8-bit integers.
base64_: Base64 encoding format - base64 encoded string.
binary: Binary encoding format - array of integers.
ubinary: Ubinary encoding format - array of unsigned integers.
"""
float_: Optional[List[float]] = Field(default=None, alias="float")
int8: Optional[List[int]] = None
uint8: Optional[List[int]] = None
base64_: Optional[str] = Field(default=None, alias="base64")
binary: Optional[List[int]] = None
ubinary: Optional[List[int]] = None

model_config = ConfigDict(
extra="allow",
populate_by_name=True,
frozen=False,
)

def model_dump(self, **kwargs):
"""Dumps the model using aliases and omitting unset formats."""
kwargs.setdefault("by_alias", True)
kwargs.setdefault("exclude_none", True)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[q] Why is it necessary to set exclude_none here?

return super().model_dump(**kwargs)


class EmbeddingsUsage(ResponseBaseModel):
"""
Token usage information for the embeddings request.
Expand All @@ -135,11 +189,13 @@ class EmbeddingResult(ResponseBaseModel):

Args:
object: The object type, always "embedding".
embedding: The embedding vector (array of floats) or base64 string.
embedding: The embedding vector (array of floats), a base64 string, or a
mapping of encoding format names to embeddings when multiple formats
were requested (Cohere-specific).
index: The index of this embedding in the list.
"""
object: str = "embedding"
embedding: Union[List[float], str]
embedding: Union[List[float], str, EmbeddingMultiFormat]
index: int


Expand Down Expand Up @@ -186,4 +242,5 @@ class EmbeddingsRequest(BaseModel):

__all__ = ["EmbeddingsEncodingFormat", "EmbeddingsInputType", "EmbeddingsModelParams", "EmbeddingsModelDetails",
"EmbeddingsModelConfig", "EmbeddingsModuleConfigs", "EmbeddingsOrchestrationConfig", "EmbeddingsInput",
"EmbeddingsUsage", "EmbeddingResult", "EmbeddingsResponse", "EmbeddingsPostResponse", "EmbeddingsRequest"]
"EmbeddingMultiFormat", "EmbeddingsUsage", "EmbeddingResult", "EmbeddingsResponse",
"EmbeddingsPostResponse", "EmbeddingsRequest"]
Loading
Loading