소스 정보
- 저장소
- openvinotoolkit/openvino.genai
- 최근 소스 활동
- 2026년 9월 8일 11:47
- 감지된 SKILL.md 언어
- 영어
- 스타
- 582
- 포크
- 444
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
SOC 직업 분류 기준
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/openvinotoolkit/openvino.genai --skill vlm-model-enabler명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
Generate OpenVINO GenAI release notes from commits since the latest release. Use when: preparing release notes, summarizing a release branch, or comparing the latest release tag with the current release branch.
Update OpenVINO GenAI site documentation for API or feature changes. Use when: new pipelines, models, or use-cases are introduced; site docs need to reflect new capabilities.
Validate a newly supported optimum-intel model with OpenVINO GenAI. Use when: checking new model support, verifying model export to OpenVINO IR, running GenAI inference test with llm_bench, benchmarking model accuracy with who-what-benchmark.
| name | vlm-model-enabler |
| description | Enables VLM models for GenAI VLM pipelines. |
| argument-hint | HuggingFace model_id and task (e.g. google/gemma-3n-E2B-it image-text-to-text), or a path to an already converted OpenVINO IR model directory (model_dir). |
Enables a new VLM model in the GenAI VLM pipeline. Follows a strict 4-step workflow with checkpoints.
model_id and task (e.g. google/gemma-3n-E2B-it image-text-to-text), or path to an already exported OpenVINO IR directory..model_analysis/<model_type>_analysis.md produced by the model-analysis agent. If absent, the caller (or the user, if running this skill standalone) should invoke model-analysis first to avoid duplicating upstream inspection here. This skill does not invoke other agents itself.All intermediate assets for one model go in
.model_enabler/<model_type>/. Determine <model_type> from config.json and
create the directory if it does not exist. Never share this directory between
different model types; this keeps parallel and resumed enablement runs isolated.
.py files for all experiments — avoid inline multi-line Python snippets; keep shell commands minimal and only for build/run steps.Goal: Map the model into the GenAI VLM pipeline using the upstream analysis report.
Read .model_analysis/<model_type>_analysis.md.
If it does not exist, prefer asking the caller to invoke the model-analysis agent first (it is the canonical source for upstream facts). If that is not possible — e.g. running this skill standalone without the agent available — produce an equivalent report yourself by following the procedure in .github/agents/model-analysis.agent.md and write the result to the same path. Do not skip this artifact; later steps depend on it.
Using the report, decide:
src/cpp/src/visual_language/*/classes.hpp. Pick the closest one as the reference.vlm_config.hpp, new <model_type>/classes.{hpp,cpp}, factory registrations, etc.). Use genai-vlm-architecture.md "Adding a New Model — Checklist" as the structure.Append a ## GenAI Enablement Design section to .model_analysis/<model_type>_analysis.md:
## GenAI Enablement Design
- Closest GenAI model: <name> — because <reason>
- Required changes:
- <file>: <what changes>
- Gaps: <items needing new infrastructure>
Do not proceed to Step 2 until this section exists.
Goal: VLMPipeline generates correct text with text-only input, matching optimum-intel exactly.
Follow the checklist in genai-vlm-architecture.md "Adding a New Model":
vlm_config.hpp, string mapping to vlm_config.cpp<model_type>/classes.hpp and <model_type>/classes.cppvision_encoder.cpp and inputs_embedder.cpp factoriesfriend class to inputs_embedder.hppVisionEncoder::encode() throws, get_inputs_embeds() handles text-only pathFor normal local development, install the current checkout with nightly OpenVINO packages:
pip install --pre -U . --extra-index-url https://storage.openvinotoolkit.org/simple/wheels/nightly
This is the default validation path. Do not validate edited source through a previously installed OpenVINO GenAI wheel.
After building, verify:
python -c "import openvino, openvino_genai; print(openvino.__version__); print(openvino_genai.__file__)"
Confirm the imported module comes from this checkout's build/install output.
Use an OpenVINO source build only when the change requires it or a native
loading/ABI mismatch cannot be resolved with the installed runtime. In that
case, build OpenVINO and OpenVINO GenAI from source in the same environment as
described in src/docs/BUILD.md; do not treat adding an arbitrary library
directory to LD_LIBRARY_PATH as proof of compatibility.
Fix all compilation errors.
Create and run .model_enabler/<model_type>/test_text_only_compare.py — compare GenAI vs optimum-intel with do_sample=False on 3 prompts.
.model_enabler/<model_type>/test_text_only_compare.py shows exact match on all promptsDo not proceed to Step 3 until text-only output matches optimum-intel exactly.
Goal: VLMPipeline generates correct text with image input, semantically close to optimum-intel.
Replace the VisionEncoder stub. Key references:
preprocessor_config.json for resize/normalization paramsclip.hpp/clip.cpp for available resize utilities (bilinear_resize, bicubic_resize, etc.)Update get_inputs_embeds() to handle the non-empty images case: insert vision embeddings at placeholder token positions.
Before reporting a tokenizer/export blocker, compare Hugging Face and OpenVINO
tokenization for every required image/chat special token. If the OpenVINO
tokenizer drops or splits added tokens, recover only the configured special
token IDs in the model-specific GenAI input embedder. This is needed because
get_inputs_embeds() uses image-placeholder IDs to locate where vision
embeddings must be merged:
tokenizer.json added tokens and the relevant token IDs from model and
processor configuration.input_ids.Do not hard-code a Hub repository ID or silently replace missing tokens.
For models exposing image_pad_token_id, assert or explicitly check that the
final tokenized input_ids contains that ID and that its occurrence count
equals the number of image-embedding rows inserted by the model-specific
embedder. A prompt containing only the textual placeholder is not sufficient.
Rebuild, then create and run:
.model_enabler/<model_type>/test_image_text_compare.py — compare GenAI vs optimum-intel on 3 image promptsIf output differs, locate the first divergent component rather than judging only decoded text. Compare, in order:
Also inspect effective precision at every stage. Models may use dtype,
torch_dtype, nested vision/text precision fields, or cast inputs inside
forward(). Verify actual tensor and parameter dtypes; do not assume an fp32
export merely because the command requested fp32.
.model_enabler/<model_type>/test_image_text_compare.py shows semantically similar outputsEvery newly enabled model must add repository tests:
optimum-intel-internal-testing/tiny-random-* prefix, for example optimum-intel-internal-testing/tiny-random-gemma4-unified-it.tests/python_tests/test_vlm_pipeline.py with the tiny-random model id, prompt image tag, video tag if applicable, resolution, and any targeted skip/xfail entry required by an already-tracked issue.tests/python_tests/test_<model_type>_*.py only when the new model requires behavior that does not fit the shared VLM pipeline suite.Apply model-specific dependency entries consistently to the relevant Linux, manylinux, and Windows VLM workflows. Do not update a shared dependency for all models when only the newly enabled architecture requires it.
Before adding a tiny-model ID to a test matrix, verify that it exists, is accessible without a developer's private cache, preserves the real architecture identity, and can execute the requested generation path. Never add a guessed or not-yet-published Hub ID and then treat HTTP 401/403/404 as a passing test. If repository policy requires a hosted fixture and publication is unavailable, report a test-fixture blocker and leave enablement incomplete. If the test infrastructure supports a deterministic local constructor, prefer that over a newly uploaded model and cache it using repository conventions.
Do not report successful enablement after GenAI source changes unless the test is added and its exact pytest result is recorded. If local execution is blocked, add the test and report the exact blocker and expected CI coverage. Confirm that the narrow pytest command collected at least one test; a passing command with every test deselected is not validation.
Before declaring the model enabled:
.model_analysis/<model_type>_analysis.md exists with the ## GenAI Enablement Design section.model_enabler/<model_type>/tests/python_tests/git diff --name-only contains the intended source, test, and docs files only