## Введение
Этот артефакт описывает контракт API для сервиса генерации инженерных решений с помощью ИИ. Артефакт выступает как рабочий документ для разработки, реализуя шаги алгоритма и формат данных.

## Входные данные (Input)
- `prompt`: строка (обязательный)
  - Пример: "Создай решение для оптимизации потока воды в системе орошения"
- `domain`: строка (необязательный, по умолчанию "general")
  - Возможные значения: "mechanical", "electrical", "civil", "software", "general".
- `constraints`: массив объектов
  - Объект содержит поля:
    - `type`: строка (например, "material", "size", "power")
    - `value`: значение типа string или number
- `max_solutions`: число (необязательный)
  - По умолчанию: 3

## Выходные данные (Output)
- `solutions`: массив объектов
  - Каждый элемент содержит:
    - `id`: уникальный идентификатор решения
    - `prompt`: оригинальный запрос пользователя
    - `description`: текстовое описание решения
    - `technical_details`: массив строк, описывающий технические детали
    - `estimated_cost`: число (в долларах)
    - `confidence_score`: число от 0 до 1
- `error`: объект (если произошла ошибка)
  - Поля:
    - `code`: строка, код ошибки
    - `message`: текстовое описание ошибки

## Шаги алгоритма
### 1. Валидация входных данных
- **Вход**: prompt (обязательный), domain (необязательный)
- **Проверка**:
  - Если `prompt` пустой или не строка → ошибка "INVALID_PROMPT"
  - Если `domain` не из допустимых значений → ошибка "INVALID_DOMAIN"

### 2. Извлечение ключевых характеристик запроса
- **Метод**: NLP-процессинг с использованием модели `gpt4`
- **Вход**:
  - prompt
  - domain
- **Выход**:
  - extracted_features (объект)
    - type: строка (например, "optimization")
    - components: массив
      - Каждый компонент — объект с полями:
        - name: строка
        - category: строка ("material", "geometry", "mechanical")
- **Ошибка**:
  - Если не удалось извлечь данные → ошибка "FEATURE_EXTRACTION_FAILED"

### 3. Генерация решений
- **Метод**: Используется модель `gpt4-engineered`
- **Вход**:
  - prompt
  - domain
  - extracted_features
  - constraints (если есть)
- **Выход**:
  - solutions массив, размером до max_solutions
- **Ошибка**:
  - Если модель не сгенерировала ни одного решения → ошибка "NO_SOLUTION_GENERATED"

### 4. Оценка решений
- **Метод**: модель оценки качества (например, `evaluator-v2`)
- **Выход**:
  - confidence_score для каждого решения
- **Ошибка**:
  - Если не удалось оценить — установить score = 0.5

## Псевдокод алгоритма
```python
# Валидация входных данных
if not prompt or not isinstance(prompt, str):
    return error("INVALID_PROMPT")

# Извлечение характеристик запроса
features = extract_features(prompt, domain)

if not features:
    return error("FEATURE_EXTRACTION_FAILED")

# Генерация решений
solutions = generate_solutions(prompt, features, constraints, max_solutions)

if not solutions:
    return error("NO_SOLUTION_GENERATED")

# Оценка решений
for sol in solutions:
    score = evaluate(sol)
    sol["confidence_score"] = score

return {
  "solutions": solutions,
  "error": None
}
```

## Пример запуска и проверки
**Вход**:
```json
{
  "prompt": "Создай решение для оптимизации потока воды в системе орошения",
  "domain": "civil",
  "constraints": [
    {"type": "material", "value": "steel"},
    {"type": "size", "value": "10cm"}
  ],
  "max_solutions": 2
}
```

**Выход**:
```json
{
  "solutions": [
    {
      "id": "sol_001",
      "prompt": "Создай решение для оптимизации потока воды в системе орошения",
      "description": "Поток воды можно улучшить с использованием труб из стали с диаметром 10 см.",
      "technical_details": [
        "Труба из стали",
        "Диаметр: 10 см"
      ],
      "estimated_cost": 50,
      "confidence_score": 0.8
    },
    {
      "id": "sol_002",
      "prompt": "Создай решение для оптимизации потока воды в системе орошения",
      "description": "Решение с использованием системы фильтрации и насоса.",
      "technical_details": [
        "Насос",
        "Система фильтрации"
      ],
      "estimated_cost": 120,
      "confidence_score": 0.7
    }
  ],
  "error": null
}
```

## Ограничения и сложность
- Время обработки: до 5 секунд на один запрос
- Максимальный размер `prompt`: 1024 символа
- Лимит на количество решений по умолчанию: 3
- Количество ограничений: до 10

## Сложность и оценка реализуемости
- Реализация валидации входных данных — легко, 1 день
- Написание NLP-модели для извлечения характеристик — средняя сложность (3 дня)
- Интеграция генерации решений через API — средняя (2 дня)
- Валидация и оценка решений — легко (1 день)

## Проверка на маленьком примере
- Запуск с `prompt = "Создай решение для оптимизации потока воды"`
  - Ожидаемый результат: массив из 3-х решений, каждый с оценкой > 0.5
  - Проверка: возвращаются технические детали и стоимость