mzeglars/dummy-cyclic-gpt2-ov
dummy-cyclic-gpt2-ov
This is not a real language model. It is a synthetic, hand-crafted GPT-2 whose weights were built to deterministically emit one fixed sentence followed by a valid end-of-sequence token, regardless of the input prompt. It exists purely as a fast, tiny, deterministic drop-in for testing OVMS / OpenVINO GenAI integration code. Do not use it for anything that expects real language understanding.
What it outputs
Regardless of the input prompt, this model deterministically generates:
OpenVINO is an open-source toolkit created by Intel to speed up and run AI models efficiently.
With normal generation settings (the default - ignore_eos unset/False), the model emits this sentence once and then a valid end-of-sequence token, so generation stops there, exactly like a normal, well-behaved language model. It does not loop by default.
If the caller explicitly sets ignore_eos=True (e.g. in an OpenVINO GenAI GenerationConfig) together with a large enough max_new_tokens budget, decoding does not stop at the end-of-sequence token - the model treats it like any other out-of-sequence token and deterministically predicts Open again, so the sentence repeats forever. This is useful for stress-testing streaming/very-long-generation code paths.
For any input that doesn't already contain a prefix of this exact sentence, the very first generated token is always Open, and generation continues the sentence above token-by-token until it emits the end-of-sequence token (or, with ignore_eos=True, wraps back to Open and repeats). If the input already ends with some prefix of the sentence, generation continues the cycle from that point instead of restarting - the model doesn't "understand" the phrase, it just always maps each token deterministically to the next one.
How it behaves
- Architecture:
GPT2LMHeadModel, 1 transformer layer, 1 attention head, hidden size 32 - intentionally minimal, this is not a "small but usable" model. - All attention and MLP weights are zeroed, so every transformer block is a pure residual/identity: the hidden state at each position equals its own token embedding.
- The token embedding table maps each token of the sentence above (and the end-of-sequence token) to its own orthogonal direction; every other vocabulary token maps to one shared "default" direction.
lm_headmaps each direction to the next token in the sentence with a logit of ~100 (all other tokens ~0), so decoding is effectively always deterministic, even at nonzero temperature/top-k/top-p. The last token of the sentence deterministically predicts a valid end-of-sequence token, not a wraparound to the first token - normal generation therefore stops correctly after one pass.- The "default" direction (used by any out-of-sequence token, including EOS if it's fed back in) deterministically predicts the first token of the sentence. This is what makes the sentence repeat forever if a caller sets
ignore_eos=True- the pipeline keeps feeding the still-emitted EOS token back in as input instead of stopping. - Position embeddings are zeroed too, so output depends only on the current token - not on prompt length, prompt content, or position.
Supported OVMS pipeline types
LM, LM_CB (text_generation task, with or without continuous batching).
License
Apache 2.0. No pretrained weights are used anywhere in this model - all weights are hand-crafted from scratch, so no upstream model license applies.
