Провайдеры — поток данных
Gemini Text
PromptResult | str
-> GeminiProvider.generate_text()
-> google.genai.models.generate_content()
-> response.text
-> str
GeminiProvider.answer() делегирует в generate_text() для совместимости с LLMDispatcher.process().
Gemini JSON
PromptResult | str
-> GeminiProvider.generate_json(schema=...)
-> GenerateContentConfig(response_mime_type="application/json", response_schema=schema)
-> response.text
-> json.loads()
-> optional Pydantic validation
Gemini Images
prompt: str
-> GeminiProvider.generate_image_bytes()
-> GenerateContentConfig(response_modalities=[IMAGE], image_config=...)
-> first inline_data image part
-> (bytes, actual_mime_type)
С input_images провайдер отправляет multimodal content:
prompt: str + input_images: list[ImageInput]
-> text part + inline_data image parts
-> GeminiProvider.generate_image_bytes()
-> first returned inline_data image part
-> (bytes, actual_mime_type)
response_mime_type в этом пути не передается в GenerateContentConfig.response_mime_type; он используется только как fallback content type, если Gemini не вернул inline_data.mime_type.
Если image_config.image_size равен 4K и Gemini отклоняет запрос, провайдер один раз повторяет его с image_size="2K".
Imagen Images
prompt: str
-> GeminiProvider.generate_imagen_bytes()
-> GenerateImagesConfig(output_mime_type=requested_mime)
-> first generated_images image
-> (bytes, actual_mime_type)
OpenAI Text
PromptResult | str
-> OpenAIProvider.generate_text()
-> _OpenAIRequestMapper
-> responses.create(store=False)
-> response.output_text
-> str
OpenAI Structured JSON
PromptResult | str + Pydantic schema
-> OpenAIProvider.generate_json()
-> responses.parse(text_format=schema)
-> response.output_parsed
-> BaseModel
Без schema провайдер запрашивает JSON mode и декодирует response.output_text.
OpenAI Streaming
PromptResult | str
-> OpenAIProvider.stream_text()
-> responses.create(stream=True)
-> response.output_text.delta events
-> AsyncIterator[str]