aidial_adapter_vertexai/chat/gemini/prompt/gemini_1_5.py (61 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 ( ConversationFactory, ) from aidial_adapter_vertexai.chat.gemini.inputs import ( messages_to_gemini_conversation, ) from aidial_adapter_vertexai.chat.gemini.processor import AttachmentProcessors 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 GeminiPrompt 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_1_5_Prompt(GeminiPrompt): @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 = ConversationFactory() processors = AttachmentProcessors( 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_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, ) def get_usage_message(exts: List[str]) -> str: return f""" The application answers queries about attached documents. Attach documents and ask questions about them in the same message. Supported document extensions: {', '.join(exts)}. Examples of queries: - "Describe the picture" for one image, - "What is depicted in these images?", "Compare the images" for multiple images, - "Summarize the document" for a PDF, - "Transcribe the audio" for an audio file, - "What is happening in the video?" for a video. """.strip()