From a9b468dc574d0182e2c8e511b985e2df545482d1 Mon Sep 17 00:00:00 2001 From: Xuejun Zhai Date: Mon, 29 Jan 2024 16:04:40 +0800 Subject: [PATCH 1/7] [Deprecated API] Remove validation_util.hpp (#855) Signed-off-by: Zhai, Xuejun --- .../src/ops/convolution_components/convolution_components.cpp | 1 - .../src/transformer/bidirectional_lstm_sequence_composition.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/modules/nvidia_plugin/src/ops/convolution_components/convolution_components.cpp b/modules/nvidia_plugin/src/ops/convolution_components/convolution_components.cpp index 388086ae7..cb73f69ff 100644 --- a/modules/nvidia_plugin/src/ops/convolution_components/convolution_components.cpp +++ b/modules/nvidia_plugin/src/ops/convolution_components/convolution_components.cpp @@ -7,7 +7,6 @@ #include "convolution_components.hpp" #include "openvino/core/except.hpp" -#include "openvino/core/validation_util.hpp" #include "openvino/op/group_conv.hpp" namespace ov::nvidia_gpu::Convolution::Details { diff --git a/modules/nvidia_plugin/src/transformer/bidirectional_lstm_sequence_composition.cpp b/modules/nvidia_plugin/src/transformer/bidirectional_lstm_sequence_composition.cpp index 12d933d31..164992842 100644 --- a/modules/nvidia_plugin/src/transformer/bidirectional_lstm_sequence_composition.cpp +++ b/modules/nvidia_plugin/src/transformer/bidirectional_lstm_sequence_composition.cpp @@ -8,7 +8,6 @@ #include "openvino/cc/pass/itt.hpp" #include "openvino/core/rt_info.hpp" -#include "openvino/core/validation_util.hpp" #include "openvino/pass/constant_folding.hpp" #include "openvino/pass/manager.hpp" #include "openvino/pass/pattern/op/or.hpp" From d2f1b23c1312956f96904f0ddc2a91b3e0af22b3 Mon Sep 17 00:00:00 2001 From: kumarijy <112030960+kumarijy@users.noreply.github.com> Date: Mon, 29 Jan 2024 10:20:05 -0800 Subject: [PATCH 2/7] updated vite version to 4.5.2 (#849) --- modules/openvino_code/package-lock.json | 26 ++++++++++++++----- .../openvino_code/side-panel-ui/package.json | 2 +- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/modules/openvino_code/package-lock.json b/modules/openvino_code/package-lock.json index ada375af7..89fa7c2e1 100644 --- a/modules/openvino_code/package-lock.json +++ b/modules/openvino_code/package-lock.json @@ -3722,6 +3722,20 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7370,14 +7384,14 @@ "dev": true }, "node_modules/vite": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.5.tgz", - "integrity": "sha512-4m5kEtAWHYr0O1Fu7rZp64CfO1PsRGZlD3TAB32UmQlpd7qg15VF7ROqGN5CyqN7HFuwr7ICNM2+fDWRqFEKaA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", + "integrity": "sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==", "dev": true, "dependencies": { "esbuild": "^0.18.10", - "postcss": "^8.4.26", - "rollup": "^3.25.2" + "postcss": "^8.4.27", + "rollup": "^3.27.1" }, "bin": { "vite": "bin/vite.js" @@ -7903,7 +7917,7 @@ "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "0.4.3", "rollup-plugin-copy": "3.4.0", - "vite": "4.4.5" + "vite": "4.5.2" } } } diff --git a/modules/openvino_code/side-panel-ui/package.json b/modules/openvino_code/side-panel-ui/package.json index 68a03d647..389485c39 100644 --- a/modules/openvino_code/side-panel-ui/package.json +++ b/modules/openvino_code/side-panel-ui/package.json @@ -23,6 +23,6 @@ "eslint-plugin-react-hooks": "4.6.0", "eslint-plugin-react-refresh": "0.4.3", "rollup-plugin-copy": "3.4.0", - "vite": "4.4.5" + "vite": "4.5.2" } } From 272660939fcd624e0850dd214b7ff55605d382de Mon Sep 17 00:00:00 2001 From: Luke Lin Date: Tue, 30 Jan 2024 03:20:16 +0800 Subject: [PATCH 3/7] [VSCode Extension] UI enhancements (#786) * Features added 1. Generate code with user selected text only 2. Add right-click menus, "Generate Inline Code Completion" and Generate Inline Code Completion In New Tab" * Update modules/openvino_code/README.md --- modules/openvino_code/README.md | 2 + modules/openvino_code/package.json | 28 ++++++++ modules/openvino_code/src/constants.ts | 1 + .../inline-completion/completion.service.ts | 43 +++++++++++++ .../inline-completion-component.ts | 64 +++++++++++-------- .../streaming-inline-completion-component.ts | 19 +++++- .../src/inline-completion/tab.ts | 9 +++ 7 files changed, 137 insertions(+), 29 deletions(-) create mode 100644 modules/openvino_code/src/inline-completion/tab.ts diff --git a/modules/openvino_code/README.md b/modules/openvino_code/README.md index 6555e4369..cd5f5dc57 100644 --- a/modules/openvino_code/README.md +++ b/modules/openvino_code/README.md @@ -28,6 +28,8 @@ To check the connection manually, use the `Check Connection` button located on t 1. Create a new Python file or open an existing one. 1. Type `def main():` or place the cursor where you'd like code suggestions to be generated. 1. Press the keyboard shortcut `Ctrl+Alt+Space` (`Cmd+Alt+Space` for macOS) or click the `Generate Code Completion` button located in the side panel. +1. You can select the text then generate the related code. +1. You may also right-click on "Generate Inline Code Completion In New Tab" to generate code in a new tab. 1. Use the `Tab` key to accept the entire suggestion or `Ctrl`+`Right Arrow` to accept it word by word. To decline the suggestion, press `Esc`. You can customize the length of the generated code by adjusting `Max New Tokens` and `Min New Tokens` parameters in the extension settings. diff --git a/modules/openvino_code/package.json b/modules/openvino_code/package.json index 73dfd5901..ee16aa4b0 100644 --- a/modules/openvino_code/package.json +++ b/modules/openvino_code/package.json @@ -124,6 +124,11 @@ "category": "OpenVINO Code", "title": "Generate Inline Code Completion" }, + { + "command": "openvinoCode.generateInlineCompletionTab", + "category": "OpenVINO Code", + "title": "Generate Inline Code Completion In New Tab" + }, { "command": "openvinoCode.generateDocstring", "category": "OpenVINO Code", @@ -159,6 +164,23 @@ "when": "view == openvino-code-side-panel", "group": "navigation" } + ], + "editor/context": [ + { + "command": "openvino-code-completion.toggle", + "group": "openvino-code-completion", + "when": "editorTextFocus && config.openvino-code-completion.showCommandsInContextMenu" + }, + { + "command": "openvinoCode.generateInlineCompletion", + "when": "editorFocus", + "group": "openvino-code-completion@1" + }, + { + "command": "openvinoCode.generateInlineCompletionTab", + "when": "editorFocus", + "group": "openvino-code-completion@2" + } ] }, "configuration": [ @@ -264,6 +286,12 @@ "mac": "ctrl+alt+space", "when": "editorTextFocus" }, + { + "command": "openvinoCode.generateInlineCompletionTab", + "key": "ctrl+alt+shift+1", + "mac": "ctrl+alt+shift+1", + "when": "editorTextFocus" + }, { "command": "openvinoCode.stopGeneration", "key": "escape", diff --git a/modules/openvino_code/src/constants.ts b/modules/openvino_code/src/constants.ts index d389d5a9b..230c1250d 100644 --- a/modules/openvino_code/src/constants.ts +++ b/modules/openvino_code/src/constants.ts @@ -18,6 +18,7 @@ export const COMMANDS = { FOCUS_SIDE_PANEL: `${SIDE_PANEL_VIEW_ID}.focus`, OPEN_SETTINGS: 'openvinoCode.openSettings', GENERATE_INLINE_COPMLETION: 'openvinoCode.generateInlineCompletion', + GENERATE_INLINE_COPMLETION_TAB: 'openvinoCode.generateInlineCompletionTab', ACCEPT_INLINE_COMPLETION: 'openvinoCode.acceptInlineCompletion', GENERATE_DOC_STRING: 'openvinoCode.generateDocstring', CHECK_CONNECTION: 'openvinoCode.checkConnection', diff --git a/modules/openvino_code/src/inline-completion/completion.service.ts b/modules/openvino_code/src/inline-completion/completion.service.ts index 4c8be03d0..4f17827a6 100644 --- a/modules/openvino_code/src/inline-completion/completion.service.ts +++ b/modules/openvino_code/src/inline-completion/completion.service.ts @@ -2,6 +2,8 @@ import { InlineCompletionItem, Position, Range, TextDocument, window } from 'vsc import { EXTENSION_DISPLAY_NAME } from '../constants'; import { IGenerateRequest, backendService } from '../services/backend.service'; import { extensionState } from '../state'; +import * as vscode from 'vscode'; +import { getIsGeneralTabActive } from './tab'; const outputChannel = window.createOutputChannel(EXTENSION_DISPLAY_NAME, { log: true }); const logCompletionInput = (input: string): void => outputChannel.append(`Completion input:\n${input}\n\n`); @@ -31,6 +33,47 @@ class CompletionService { if (fillInTheMiddleMode && textAfterCursor.trim()) { return `${startToken}${textBeforeCursor}${middleToken}${textAfterCursor}${endToken}`; } + + const editor = window.activeTextEditor; + if (!editor) { + return ``; // No open text editor + } + + if (getIsGeneralTabActive() === true){ + const text = editor.document.getText(); + const currentPosition = editor.selection.active; + const selectedText = editor.document.getText(editor.selection); + //const logContent = `Cursor Position: Line ${currentPosition.line + 1}, Character ${currentPosition.character + 1}\nSelected Text: ${selectedText}`; + + vscode.workspace.openTextDocument({ content: text }).then(doc => { + vscode.window.showTextDocument(doc, { viewColumn: vscode.ViewColumn.Beside }).then(TabTextEditor => { + const newPosition = new vscode.Position((currentPosition.line + 1), (currentPosition.character + 1)); + const newSelection = new vscode.Selection(newPosition, newPosition); + TabTextEditor.selection = newSelection; + }, + error => { + // Failed to open the document + console.error('Error:', error); + } + ); + }, + error => { + // Failed to open the document + console.error('Error:', error); + } + ); + + if (selectedText !== ``){ + return selectedText; + } else { + return textBeforeCursor; + } + } + + if (!editor.selection.isEmpty) { + const selectedText = editor.document.getText(editor.selection) + return selectedText; + } return textBeforeCursor; } diff --git a/modules/openvino_code/src/inline-completion/inline-completion-component.ts b/modules/openvino_code/src/inline-completion/inline-completion-component.ts index 968c5508d..140f771d7 100644 --- a/modules/openvino_code/src/inline-completion/inline-completion-component.ts +++ b/modules/openvino_code/src/inline-completion/inline-completion-component.ts @@ -4,6 +4,7 @@ import { IExtensionComponent } from '../extension-component.interface'; import { notificationService } from '../services/notification.service'; import { extensionState } from '../state'; import { CommandInlineCompletionItemProvider } from './command-inline-completion-provider'; +import { setIsGeneralTabActive } from './tab'; class InlineCompletion implements IExtensionComponent { private _disposables: Disposable[] = []; @@ -14,39 +15,50 @@ class InlineCompletion implements IExtensionComponent { let commandInlineCompletionDisposable: Disposable; - const generateCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION, () => { - if (!extensionState.get('isServerAvailable')) { - notificationService.showServerNotAvailableMessage(extensionState.state); - return; - } - if (extensionState.get('isLoading') && window.activeTextEditor) { - void window.showTextDocument(window.activeTextEditor.document); - return; - } - - extensionState.set('isLoading', true); - - if (commandInlineCompletionDisposable) { - commandInlineCompletionDisposable.dispose(); - } - - commandInlineCompletionDisposable = languages.registerInlineCompletionItemProvider( - { pattern: '**' }, - commandInlineCompletionProvider - ); - - void commandInlineCompletionProvider.triggerCompletion(() => { - commandInlineCompletionDisposable.dispose(); - extensionState.set('isLoading', false); - }); - }); + function generateFunction(): void { + if (!extensionState.get('isServerAvailable')) { + notificationService.showServerNotAvailableMessage(extensionState.state); + return; + } + if (extensionState.get('isLoading') && window.activeTextEditor) { + void window.showTextDocument(window.activeTextEditor.document); + return; + } + + extensionState.set('isLoading', true); + + if (commandInlineCompletionDisposable) { + commandInlineCompletionDisposable.dispose(); + } + + commandInlineCompletionDisposable = languages.registerInlineCompletionItemProvider( + { pattern: '**' }, + commandInlineCompletionProvider + ); + + void commandInlineCompletionProvider.triggerCompletion(() => { + commandInlineCompletionDisposable.dispose(); + extensionState.set('isLoading', false); + }); + } const acceptCommandDisposable = commands.registerCommand(COMMANDS.ACCEPT_INLINE_COMPLETION, () => { void commands.executeCommand('editor.action.inlineSuggest.commit'); }); + const generateCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION, () => { + setIsGeneralTabActive(false); + generateFunction(); + }); context.subscriptions.push(generateCommandDisposable, acceptCommandDisposable); this._disposables.push(generateCommandDisposable, acceptCommandDisposable); + + const generateTabCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION_TAB, () => { + setIsGeneralTabActive(true); + generateFunction(); + }); + context.subscriptions.push(generateTabCommandDisposable, acceptCommandDisposable); + this._disposables.push(generateTabCommandDisposable, acceptCommandDisposable); } deactivate(): void { diff --git a/modules/openvino_code/src/inline-completion/streaming-inline-completion-component.ts b/modules/openvino_code/src/inline-completion/streaming-inline-completion-component.ts index e6263fe0c..84277a454 100644 --- a/modules/openvino_code/src/inline-completion/streaming-inline-completion-component.ts +++ b/modules/openvino_code/src/inline-completion/streaming-inline-completion-component.ts @@ -12,6 +12,7 @@ import { IExtensionComponent } from '../extension-component.interface'; import { extensionState } from '../state'; import { StreamingCommandInlineCompletionItemProvider } from './streaming-command-inline-completion-provider'; import { notificationService } from '../services/notification.service'; +import { setIsGeneralTabActive } from './tab'; class StreamingInlineCompletion implements IExtensionComponent { private _disposables: Disposable[] = []; @@ -29,7 +30,7 @@ class StreamingInlineCompletion implements IExtensionComponent { generationDisposables = []; } - const generateCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION, () => { + function generateFunction(): void { if (!extensionState.get('isServerAvailable')) { notificationService.showServerNotAvailableMessage(extensionState.state); return; @@ -69,14 +70,26 @@ class StreamingInlineCompletion implements IExtensionComponent { // TODO: handle unsetting context on error thrown from triggerCompletion void commands.executeCommand('setContext', EXTENSION_CONTEXT_STATE.GENERATING, false); }); - }); + } const acceptCommandDisposable = commands.registerCommand(COMMANDS.ACCEPT_INLINE_COMPLETION, () => { void commands.executeCommand('editor.action.inlineSuggest.commit'); }); - + + const generateCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION, () => { + // Update the boolean variable + setIsGeneralTabActive(false); + generateFunction(); + }); context.subscriptions.push(generateCommandDisposable, acceptCommandDisposable); this._disposables.push(generateCommandDisposable, acceptCommandDisposable); + + const generateTabCommandDisposable = commands.registerCommand(COMMANDS.GENERATE_INLINE_COPMLETION_TAB, () => { + setIsGeneralTabActive(true); + generateFunction(); + }); + context.subscriptions.push(generateTabCommandDisposable, acceptCommandDisposable); + this._disposables.push(generateTabCommandDisposable, acceptCommandDisposable); } deactivate(): void { diff --git a/modules/openvino_code/src/inline-completion/tab.ts b/modules/openvino_code/src/inline-completion/tab.ts new file mode 100644 index 000000000..33bfbd2cd --- /dev/null +++ b/modules/openvino_code/src/inline-completion/tab.ts @@ -0,0 +1,9 @@ +let isGeneralTabActiveInternal: boolean = false; + +export function setIsGeneralTabActive(value: boolean): void { + isGeneralTabActiveInternal = value; +} + +export function getIsGeneralTabActive(): boolean { + return isGeneralTabActiveInternal; +} \ No newline at end of file From 29e08ccaf0d1b44a161c16115f26b1a59019d755 Mon Sep 17 00:00:00 2001 From: Sun Xiaoxia Date: Tue, 30 Jan 2024 04:54:40 +0800 Subject: [PATCH 4/7] Preperties of executor config are changed to private (#856) * preperties of executor config are changed to private * fix build issue --- modules/nvidia_plugin/src/cuda_compiled_model.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/nvidia_plugin/src/cuda_compiled_model.cpp b/modules/nvidia_plugin/src/cuda_compiled_model.cpp index aa69f3251..c7f3fbde5 100644 --- a/modules/nvidia_plugin/src/cuda_compiled_model.cpp +++ b/modules/nvidia_plugin/src/cuda_compiled_model.cpp @@ -68,9 +68,10 @@ CompiledModel::CompiledModel(const std::shared_ptr& model, void CompiledModel::init_executor() { // Default multi-threaded configuration is balanced for throughtput and latency cases and takes into account // real hardware cores and NUMA nodes. - config_.streams_executor_config_.set_property({ ov::num_streams(ov::streams::Num(memory_pool_->Size())) }); - auto streams_executor_config = ov::threading::IStreamsExecutor::Config::make_default_multi_threaded(config_.streams_executor_config_); - streams_executor_config._name = nv_stream_executor_name; + config_.streams_executor_config_ = + ov::threading::IStreamsExecutor::Config{nv_stream_executor_name, static_cast(memory_pool_->Size())}; + auto streams_executor_config = + ov::threading::IStreamsExecutor::Config::make_default_multi_threaded(config_.streams_executor_config_); // As OpenVINO CPU Streams Executor creates some additional threads // it is better to avoid threads recreateion as some OSs memory allocator can not manage such usage cases // and memory consumption can be larger than it is expected. From 8abab903a852c79fc6027b0096004e41e19a92d5 Mon Sep 17 00:00:00 2001 From: Artur Paniukov Date: Tue, 30 Jan 2024 13:58:36 +0000 Subject: [PATCH 5/7] Fix MUSE conversion (#857) --- .../user_ie_extensions/tokenizer/python/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/custom_operations/user_ie_extensions/tokenizer/python/README.md b/modules/custom_operations/user_ie_extensions/tokenizer/python/README.md index 65653a7fb..adbc70466 100644 --- a/modules/custom_operations/user_ie_extensions/tokenizer/python/README.md +++ b/modules/custom_operations/user_ie_extensions/tokenizer/python/README.md @@ -62,7 +62,7 @@ pytest . You can use converted tokenizers in C++ pipelines with prebuild binaries. 1. Download OpenVINO archive distribution for your OS from [here](https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html) and extract the archive. -2. Download OpenVINO Tokenizers prebuild libraries from [here](storage.openvinotoolkit.org/repositories/openvino_tokenizers/packages/). To ensure compatibility first three numbers of OpenVINO Tokenizers version should match OpenVINO version and OS. +2. Download OpenVINO Tokenizers prebuild libraries from [here](https://storage.openvinotoolkit.org/repositories/openvino_tokenizers/packages/). To ensure compatibility first three numbers of OpenVINO Tokenizers version should match OpenVINO version and OS. 3. Extract OpenVINO Tokenizers archive into OpenVINO installation directory: - Windows: `\runtime\bin\intel64\Release\` - MacOS_x86: `/runtime/lib/intel64/Release` From dd92fe06f46f23a56231a645da2463d7b46f0493 Mon Sep 17 00:00:00 2001 From: Tomasz Jankowski Date: Wed, 31 Jan 2024 14:12:43 +0100 Subject: [PATCH 6/7] [NVIDIA] REmove ngraph/util dependency (#859) --- modules/nvidia_plugin/src/ops/clamp_cudnn.cpp | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/modules/nvidia_plugin/src/ops/clamp_cudnn.cpp b/modules/nvidia_plugin/src/ops/clamp_cudnn.cpp index 7188bce83..d848202e0 100644 --- a/modules/nvidia_plugin/src/ops/clamp_cudnn.cpp +++ b/modules/nvidia_plugin/src/ops/clamp_cudnn.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include "converters.hpp" @@ -128,13 +127,36 @@ WorkbufferRequest ClampCuDnnOp::GetWorkBufferRequest() const { return {{el_size, el_size}, {}}; } +namespace { +template +T double_to_int(double x, double float_to_int_converter(double)) { + if (!std::is_integral()) { + OPENVINO_THROW("Function double_to_int template parameter must be an integral type."); + } + + x = float_to_int_converter(x); + + double min_t = static_cast(std::numeric_limits::min()); + if (x < min_t) { + return std::numeric_limits::min(); + } + + double max_t = static_cast(std::numeric_limits::max()); + if (x > max_t) { + return std::numeric_limits::max(); + } + + return static_cast(x); +} +} + template void ClampCuDnnOp::initBuffers(const Buffers& buffers) const { T max{}; T min{}; if constexpr (std::is_integral()) { - max = ngraph::double_to_int(max_, std::floor); - min = ngraph::double_to_int(min_, std::ceil); + max = double_to_int(max_, std::floor); + min = double_to_int(min_, std::ceil); } else { max = static_cast(max_); min = static_cast(min_); From 408f5c1200298cb569a45752a516a1c50ca96c4e Mon Sep 17 00:00:00 2001 From: Vishniakov Nikolai Date: Wed, 31 Jan 2024 14:27:09 +0100 Subject: [PATCH 7/7] Disable JS API build in azure windows ci by default (#860) --- .ci/azure/windows.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.ci/azure/windows.yml b/.ci/azure/windows.yml index d1a40bae9..8014a19d0 100644 --- a/.ci/azure/windows.yml +++ b/.ci/azure/windows.yml @@ -123,6 +123,7 @@ jobs: -DENABLE_CPPLINT=OFF ^ -DENABLE_SAMPLES=OFF ^ -DENABLE_PYTHON=ON ^ + -DENABLE_JS=OFF ^ -DCMAKE_C_COMPILER:PATH="$(MSVC_COMPILER_PATH)" ^ -DCMAKE_CXX_COMPILER:PATH="$(MSVC_COMPILER_PATH)" ^ $(OPENVINO_REPO_DIR)