import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/scripts/Classes/AiOpenAiLite - Легковесный класс OpenAI'/>

# Класс AiOpenAiLite

Класс `AiOpenAiLite` представляет собой легковесную реализацию `AiAbstract`, которая оборачивает OpenAI SDK. Он обеспечивает полную поддержку накопления контекста промптов, мультимодального преобразования изображений в формат base64 и стабильного выполнения запросов генерации (чат-комплишенов).

## Ключевые особенности

- **Мультимодальная поддержка** — преобразует накопленные изображения в структуру URL-адресов данных (`data:mime;base64,data`), необходимую для интерфейса блоков `image_url` OpenAI.
- **Структурированная обработка контента** — форматирует как текстовые инструкции, так и блоки изображений в единый список пользовательского контента перед отправкой запроса.
- **Стандартная интеграция SDK** — напрямую вызывает эндпоинт `chat.completions.create` и безопасно обрабатывает полученный результат (choices).

## Инициализация

`AiOpenAiLite` требует ручной передачи учетных данных через конструктор.

**Параметры конструктора:**
- `key: string` — API-ключ для сервиса OpenAI.
- `model: string` — начальный идентификатор модели (например, 'gpt-4o').

```typescript
import { AiOpenAiLite } from '@dxtmisha/scripts'

const ai = new AiOpenAiLite(process.env.OPENAI_API_KEY, 'gpt-4o')
```

## Методы

### Внутренние хуки реализации

Эти защищенные методы реализуют обязательный интерфейс расширения `AiAbstract`:

- `init(): void` — Инициализирует экземпляр клиента `OpenAI` с использованием предоставленного ключа.
- `toImages(): any` — Преобразует накопленные `images` в структурированный массив `{ type: 'image_url', image_url: { url: ... } }`.
- `toContents(): any` — Преобразует накопленное дополнительное содержимое `contents` в структурированный массив `{ type: 'text', text: content }`.
- `response(model: string, contents: string): Promise<string>` — Выполняет вызов API `chat.completions.create` и безопасно извлекает текстовое содержимое из первого элемента choices.
