Skip to content

feat: neural engine OpenAI proposals (Stage 0)#67

Open
sonra44 wants to merge 5 commits intomasterfrom
feature/neuralengine-openai-proposals-pr5
Open

feat: neural engine OpenAI proposals (Stage 0)#67
sonra44 wants to merge 5 commits intomasterfrom
feature/neuralengine-openai-proposals-pr5

Conversation

@sonra44
Copy link
Copy Markdown
Owner

@sonra44 sonra44 commented Jan 8, 2026

Stage 0: introduce initial NeuralEngine proposals for OpenAI integration. This PR adds initial API stubs and aligns naming conventions, preparing for Stage 1 compute contracts.

Summary by CodeRabbit

Примечания к выпуску

  • Новые функции

    • Добавлена система управления инцидентами с правилами, подтверждением и очисткой событий.
    • Реализована паузы событий с отслеживанием непрочитанных инцидентов.
    • Интегрирован QIKI чат-интерфейс с генерацией предложений.
    • Добавлена двуязычная поддержка (EN/RU) в пользовательском интерфейсе.
  • Документация

    • Добавлены политики аббревиатур и дизайн-спецификации оператора.
    • Новые гайды валидации и интеграции QIKI.

✏️ Tip: You can customize this high-level summary in your review settings.

Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @sonra44, your pull request is larger than the review limit of 150000 diff characters

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 8, 2026

Caution

Review failed

Failed to post review comments

📝 Walkthrough

Обзор

PR вводит полноценную систему управления инцидентами для консоли оператора ORION, интеграцию с сервисом QIKI для обработки запросов через NATS, поддержку OpenAI для генерации предложений, новые протокольные модели и расширенную документацию по дизайну. Добавлены конфигурация, тесты и обновления UI/i18n.

Изменения

Когорта / Файл(ы) Описание
Конфигурация и игнорирование
.gitignore, config/incident_rules.yaml
Добавлены правила игнорирования history JSONL файлов; введён новый YAML файл конфигурации с тремя правилами обнаружения инцидентов (TEMP_CORE_SPIKE, RADAR_SIGNAL_LOSS, POWER_BUS_OVERLOAD) с порогами, cooldown и требованиями к подтверждению.
Система управления инцидентами
src/qiki/services/operator_console/core/incident_rules.py, src/qiki/services/operator_console/core/incidents.py
Реализованы модели данных для правил инцидентов, хранилище правил на основе файлов с поддержкой перезагрузки и истории, IncidentStore для отслеживания активных/исторических инцидентов с методами подтверждения, очистки и аудита инцидентов.
QIKI чат-интеграция
src/qiki/services/qiki_chat/handler.py, src/qiki/services/qiki_chat/main.py, src/qiki/services/qiki_chat/__init__.py, src/qiki/tools/qiki_ask.py
Добавлены обработчик чат-запросов, NATS-сервис, прослушивающий qiki.chat.v1, и CLI-инструмент для отправки запросов; интеграция с graceful shutdown и обработкой ошибок.
Протокольные модели Orion-QIKI
src/qiki/shared/models/orion_qiki_protocol.py, src/qiki/shared/models/qiki_chat.py
Определены строгие схемы для IntentV1, ProposalV1, ProposalsBatchV1 с поддержкой двуязычного текста, режимов среды (FACTORY/MISSION), и валидацией пустых действий на этапе A.
OpenAI интеграция
src/qiki/services/q_core_agent/core/openai_responses_client.py, src/qiki/services/q_core_agent/core/neural_engine.py
Реализован клиент OpenAI с JSON-schema валидацией, retry логикой и exponential backoff; расширена NeuralEngine с поддержкой структурированных LLM ответов, диагностическими предложениями при ошибках и обработкой отсутствующего API ключа.
Тесты для инцидентов
src/qiki/services/operator_console/tests/test_incident_rules.py, src/qiki/services/operator_console/tests/test_incidents_store.py, src/qiki/services/operator_console/tests/test_events_pause_unread.py, src/qiki/services/operator_console/tests/test_rules_toggle_in_app.py
Добавлены unit-тесты для FileRulesRepository (загрузка, перезагрузка, history), IncidentStore (группировка, ack, очистка, min_duration), событий в паузе и управления правилами через UI.
Тесты для QIKI
src/qiki/services/operator_console/tests/test_qiki_routing.py, src/qiki/services/operator_console/tests/test_qiki_proposals_display.py, src/qiki/services/qiki_chat/tests/test_handler.py, tests/unit/test_orion_qiki_protocol_v1.py
Тесты парсинга QIKI intent, отображения proposals, обработки чат-запросов и валидации protocol v1 моделей с roundtrip сериализацией.
Тесты для нейросети
src/qiki/services/q_core_agent/tests/test_agent.py, src/qiki/services/q_core_agent/tests/test_neuralengine_proposals_only.py
Добавлены тесты успешной генерации OpenAI proposals, обработки ошибок с возвратом stub, удаления actions из payloads и валидации empty proposed_actions.
Обновление UI и i18n
src/qiki/services/operator_console/ui/i18n.py
Обновлены константы NA и INVALID на "Not available"/"Нет данных" и "Invalid"/"Некорректно"; добавлена функция fmt_age_compact для компактного форматирования дураций в двух языках.
Обновления Docker и NATS
src/qiki/services/operator_console/Dockerfile, src/qiki/services/operator_console/clients/nats_client.py, src/qiki/shared/nats_subjects.py
Изменена CMD на main_orion.py; добавлен метод subscribe_qiki_proposals в NATSClient; введены новые NATS subject константы QIKI_INTENT_V1 и QIKI_PROPOSALS_V1.
Документация по дизайну
docs/design/operator_console/*, docs/design/анализ.MD, AGENTS.md
Добавлены spec документы (ABBREVIATIONS_POLICY, CANONICAL_SPEC_ORION_QIKI, MFD_SCALABLE_LAYOUT, ORION_HEADER_REDESIGN_PLAN, ORION_OS_SYSTEM_MAP, ORION_OS_VALIDATION_CHECKLIST, ORION_OS_VALIDATION_RUN_2026-01-02, ORION_OS_WORKLOG_2025-12-31, QIKI_INTEGRATION_PLAN); обновлены AGENTS.md, ORION_OS_TODO.md, ORION_OS_SYSTEM.md; добавлен анализ интеграции.
Вспомогательные модули
src/qiki/tools/__init__.py, tests/shared/test_bot_spec_validator.py
Создан пакет tools; обновлен тест на использование subset check вместо exact equality для REQUIRED_COMPONENTS.

Диаграммы последовательности

sequenceDiagram
    participant Operator as Оператор
    participant ORION as ORION Console
    participant Store as IncidentStore
    participant Rules as Rules Config
    
    Operator->>ORION: Событие (sensor data)
    ORION->>Rules: Загрузить правила
    ORION->>Store: ingest(event)
    Store->>Store: Применить правила
    Note over Store: Вычислить ключ инцидента<br/>Проверить min_duration_s<br/>Обновить счётчик/peak_value
    Store->>ORION: Вернуть список инцидентов
    ORION->>Operator: Отобразить инцидент<br/>в Events таблице
    Operator->>ORION: Ack/Подтвердить
    ORION->>Store: ack(incident_id)
    Store->>ORION: Успех
    ORION->>Operator: Обновить статус
Loading
sequenceDiagram
    participant User as Пользователь
    participant ORION as ORION UI
    participant NATS as NATS
    participant QIKI as QIKI Chat
    participant OpenAI as OpenAI API
    
    User->>ORION: Ввод "q: scan 360"
    ORION->>ORION: parse_qiki_intent()
    ORION->>NATS: Опубликовать IntentV1<br/>на qiki.chat.v1
    NATS->>QIKI: Доставить запрос
    QIKI->>QIKI: Валидировать QikiChatRequestV1
    QIKI->>OpenAI: create_response_json_schema()
    OpenAI->>OpenAI: Генерировать proposal<br/>с JSON Schema
    OpenAI->>QIKI: Вернуть JSON response
    QIKI->>QIKI: Парсить и трансформировать<br/>в ProposalV1
    QIKI->>NATS: Ответить QikiChatResponseV1
    NATS->>ORION: Получить response
    ORION->>ORION: _ingest_proposals_batch()
    ORION->>User: Показать proposal<br/>в Inspector
Loading
sequenceDiagram
    participant NeuralEngine as NeuralEngine
    participant OpenAI as OpenAIResponsesClient
    participant LLM as OpenAI LLM
    
    Note over NeuralEngine: generate_proposals(context)
    alt API Key Present
        NeuralEngine->>NeuralEngine: _build_min_context()
        NeuralEngine->>OpenAI: create_response_json_schema()
        OpenAI->>OpenAI: POST с system prompt<br/>и JSON Schema
        OpenAI->>LLM: Запрос structured output
        LLM->>OpenAI: JSON response
        OpenAI->>OpenAI: parse_response_json()
        OpenAI->>NeuralEngine: _LLMProposalsResponseV1
        NeuralEngine->>NeuralEngine: Strip actions<br/>Трансформировать в Proposal
        NeuralEngine->>NeuralEngine: Вернуть proposals
    else API Key Missing
        NeuralEngine->>NeuralEngine: Вернуть diagnostics stub
    else LLM Error
        NeuralEngine->>NeuralEngine: Логировать warning<br/>Вернуть diagnostics stub
    end
Loading

Оценённые затраты на review

🎯 5 (Critical) | ⏱️ ~120 minutes

Масштабная PR с множественными новыми подсистемами: система управления инцидентами (~250 строк интенсивной логики), полная QIKI чат-интеграция (~200+ строк), OpenAI интеграция с retry логикой и валидацией (~200+ строк), новые протокольные модели (~150+ строк), 8+ файлов документации, расширенные тесты. Требуется тщательная проверка логики инцидентов, обработки ошибок OpenAI, валидации protocol v1, и корректности интеграции NATS.

Поэма

🐰 Консоль оператора блистает,
Инциденты теперь танцуют в строках!
QIKI с OpenAI – союз блистает,
Proposals рождаются в облаках, в полёте.
А мне? Морковку дай – я буду в восторге! 🥕✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 7.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок PR точно отражает основное изменение: добавление поддержки OpenAI proposals в NeuralEngine на этапе Stage 0.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Docstrings were successfully generated.

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonra44 sonra44 changed the base branch from main to master January 8, 2026 16:02
@chatgpt-codex-connector
Copy link
Copy Markdown

💡 Codex Review

https://github.com/sonra44/QIKI_DTMP/blob/e9f1fe83e642acfc3249c62a9a902f06509a6d94/src/qiki/services/operator_console/core/incidents.py#L44-L48
P2 Badge Clear pending window when threshold is not met

Because ingest skips _apply_rule whenever _match_rule is false, pending min-duration windows are never reset by below-threshold events, so a brief dip can still trigger an incident (e.g., >70 at t0, <70 at t2, >70 at t6 with min_duration_s=5 still promotes at t6). This only affects rules with min_duration_s, but it can create false positives whenever telemetry oscillates around the threshold; consider clearing pending state when a same-key event does not match.


https://github.com/sonra44/QIKI_DTMP/blob/e9f1fe83e642acfc3249c62a9a902f06509a6d94/src/qiki/services/q_core_agent/core/neural_engine.py#L114-L117
P1 Badge Catch schema validation failures from LLM output

generate_proposals only catches OpenAIResponsesError, but _generate_openai_proposals can raise a Pydantic ValidationError when the model returns valid JSON that still violates the schema (empty proposals, missing fields, etc.). That exception bubbles up into _evaluate_proposals, which switches the agent into safe mode and discards rule-based proposals even though only the LLM output was malformed; treat validation errors as a recoverable LLM failure and return the same fallback stub instead.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 9, 2026

Note

Docstrings generation - SUCCESS
Generated docstrings for this pull request at https://github.com/sonra44/QIKI_DTMP/pull/68

coderabbitai Bot referenced this pull request Jan 9, 2026
Docstrings generation was requested by @sonra44.

* https://github.com/sonra44/QIKI_DTMP/pull/67#issuecomment-3724542532

The following files were modified:

* `src/qiki/services/operator_console/clients/nats_client.py`
* `src/qiki/services/operator_console/main_orion.py`
* `src/qiki/services/operator_console/tests/test_qiki_routing.py`
* `src/qiki/services/q_core_agent/core/neural_engine.py`
* `src/qiki/services/q_core_agent/core/openai_responses_client.py`
* `src/qiki/services/q_core_agent/tests/test_agent.py`
* `src/qiki/services/q_core_agent/tests/test_neuralengine_proposals_only.py`
* `src/qiki/shared/models/orion_qiki_protocol.py`
* `tests/unit/test_orion_qiki_protocol_v1.py`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant