aidial_adapter_vertexai/chat/gemini/generation_config.py (49 lines of code) (raw):
from typing import List
from aidial_sdk.exceptions import InvalidRequestError
from google.genai.types import (
GenerateContentConfigDict as GenAIGenerationConfig,
)
from google.genai.types import Part as GenAIPart
from vertexai.preview.generative_models import GenerationConfig
from aidial_adapter_vertexai.chat.static_tools import StaticToolsConfig
from aidial_adapter_vertexai.chat.tools import ToolsConfig
from aidial_adapter_vertexai.dial_api.request import ModelParameters
def validate_n_parameter(params: ModelParameters) -> None:
# Currently n>1 is emulated by calling the model n times.
# So the individual generation requests are expected to have n=1 or unset.
if params.n is not None and params.n > 1:
raise ValueError("n is expected to be 1 or unset")
def create_generation_config(params: ModelParameters) -> GenerationConfig:
validate_n_parameter(params)
return GenerationConfig(
max_output_tokens=params.max_tokens,
temperature=params.temperature,
stop_sequences=params.stop,
top_p=params.top_p,
candidate_count=params.n,
)
def create_genai_generation_config(
params: ModelParameters,
tools: ToolsConfig,
static_tools: StaticToolsConfig,
system_instruction: List[GenAIPart] | None = None,
) -> GenAIGenerationConfig:
validate_n_parameter(params)
genai_tools = None
if not static_tools.is_empty() and not tools.is_empty():
raise InvalidRequestError(
"Using both 'tools' and 'static_tools' simultaneously is not supported."
)
elif not tools.is_empty():
genai_tools = tools.to_gemini_genai_tools()
elif not static_tools.is_empty():
genai_tools = static_tools.to_gemini_genai_tools()
return GenAIGenerationConfig(
system_instruction=(
list(system_instruction) if system_instruction else None
),
max_output_tokens=params.max_tokens,
temperature=params.temperature,
stop_sequences=params.stop,
top_p=params.top_p,
candidate_count=params.n,
tools=list(genai_tools) if genai_tools else None,
)