aidial_adapter_vertexai/chat/gemini/prompt/gemini_2.py (63 lines of code) (raw):
from typing import List, Optional, Self
from aidial_sdk.chat_completion import Message
from aidial_adapter_vertexai.chat.errors import UserError, ValidationError
from aidial_adapter_vertexai.chat.gemini.conversation_factory import (
GenAIConversationFactory,
)
from aidial_adapter_vertexai.chat.gemini.inputs import (
messages_to_gemini_genai_conversation,
)
from aidial_adapter_vertexai.chat.gemini.processor import (
AttachmentProcessorsGenAI,
)
from aidial_adapter_vertexai.chat.gemini.processors import (
get_audio_processor,
get_image_processor,
get_pdf_processor,
get_plain_text_processor,
get_video_processor,
)
from aidial_adapter_vertexai.chat.gemini.prompt.base import GeminiGenAIPrompt
from aidial_adapter_vertexai.chat.gemini.prompt.gemini_1_5 import (
get_usage_message,
)
from aidial_adapter_vertexai.chat.static_tools import StaticToolsConfig
from aidial_adapter_vertexai.chat.tools import ToolsConfig
from aidial_adapter_vertexai.dial_api.storage import FileStorage
class Gemini_2_Prompt(GeminiGenAIPrompt):
@classmethod
async def parse(
cls,
file_storage: Optional[FileStorage],
tools: ToolsConfig,
static_tools: StaticToolsConfig,
messages: List[Message],
) -> Self | UserError:
if len(messages) == 0:
raise ValidationError(
"The chat history must have at least one message"
)
conversation_factory = GenAIConversationFactory()
# TODO: update limits, when they are published
processors = AttachmentProcessorsGenAI(
conversation_factory=conversation_factory,
processors=[
get_plain_text_processor(),
get_image_processor(3000),
get_pdf_processor(300),
get_video_processor(10),
get_audio_processor(),
],
file_storage=file_storage,
)
conversation = await messages_to_gemini_genai_conversation(
conversation_factory, processors, tools, messages
)
if error_message := processors.get_error_message():
usage_message = get_usage_message(processors.get_file_exts())
return UserError(error_message, usage_message)
return cls(
system_instruction=conversation.system_instruction,
contents=conversation.contents,
tools=tools,
static_tools=static_tools,
)