Instructions to use tjarvis91/vfaix-vpa-options-trader with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use tjarvis91/vfaix-vpa-options-trader with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="tjarvis91/vfaix-vpa-options-trader") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForImageTextToText processor = AutoProcessor.from_pretrained("tjarvis91/vfaix-vpa-options-trader") model = AutoModelForImageTextToText.from_pretrained("tjarvis91/vfaix-vpa-options-trader") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps
- vLLM
How to use tjarvis91/vfaix-vpa-options-trader with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "tjarvis91/vfaix-vpa-options-trader" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "tjarvis91/vfaix-vpa-options-trader", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/tjarvis91/vfaix-vpa-options-trader
- SGLang
How to use tjarvis91/vfaix-vpa-options-trader with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "tjarvis91/vfaix-vpa-options-trader" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "tjarvis91/vfaix-vpa-options-trader", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "tjarvis91/vfaix-vpa-options-trader" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "tjarvis91/vfaix-vpa-options-trader", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use tjarvis91/vfaix-vpa-options-trader with Docker Model Runner:
docker model run hf.co/tjarvis91/vfaix-vpa-options-trader
- VFAi-X Franken-B -- Vision-Language Options Trading Model (Qwen3.5-9B-VL) (historical lineage)
- App Showcase
- Historical download block — superseded
- What Ships
- Franken-B Runtime Lock
- Install Notes
- Support
- TL;DR -- Why Franken-B Replaces V3.7
- Apples-to-Apples (matched emit pairs -- most defensible)
- The Recipe -- and Why Order Is Not Commutative
- Sanity Battery (323-row strict suite + 9 corpus packs)
- Why We Did NOT Merge a Corrector
- How To Load The Model Directly
- Open Lanes
- Companion Models On The Sibling Repo
- Evidence & Audit Trail
- License & Use
- App Showcase
Download VFAi-X Qovaryx 2.5.3 Hotfix
Windows installer: Download VFAi-X Latest Qovaryx Setup
Pinned installer: VFAi-X 3.5v31 / App 2.5.3 Qovaryx Public Setup
Auto-update channel: updates/latest.json now points to 3.5v31-2.5.3-qovaryx-public. Existing public installs should pull the Qovaryx 2.5.3 hotfix on startup.
This hotfix fixes Qovaryx sidecar AI status, removes the legacy vLLM/Docker/WSL waiting path when Qovaryx is healthy, repairs the bundled CPU Torch runtime, restores Electron V8 startup snapshots, preserves user-entered Tradier/API keys, prevents balance/positions blinking during transient Tradier refresh failures, repairs stale Qovaryx runtime downloads, and keeps the public build keyless.
Model/runtime source: Qovaryx/qovaryx-options-decoder-full-community.
Installer Mirror
Latest Windows installer: Download VFAi-X Latest Setup
Current pinned installer: VFAi-X 3.5v31 / App 2.5.3 Qovaryx Public Setup
Auto-update pointer: updates/latest.json
This is the same 2.5.3 public hotfix listed above. It ships no API keys or broker credentials. Existing installs pull this update from the Hugging Face public update channel.
🚀 New flagship: Qovaryx Options Decoder — Full Community Runtime. The latest, most capable Qovaryx release is live as a single drop-in package: six functional HGB specialists + eight vaulted torch heads in one runtime. 15-of-15 internal benchmark cells closed at strict bootstrap CI lower bound. Drop-in replacement for FrankenB / V3.7 / Qwen-VPA. Sub-millisecond inference. Offline. No license email required. 👉 Qovaryx/qovaryx-options-decoder-full-community
💬 Join the community. Discord: https://discord.gg/PtuHZDv5ju — builders training their own trading/finance models. Engineering, no signals. Get install help, share work, follow the Qovaryx research devlog. Try the deployed Q-Chat router live via
/qchat ask. Ko-fi: https://ko-fi.com/tjarvis91 — every coffee literally buys GPU time for the next training cycle.
Heads up about the rest of this card
The current shipping desktop app (VFAi-X Qovaryx 2.5.3, version 3.5v31-2.5.3-qovaryx-public, links above) no longer uses the Franken-B 9B vision-language model as its inference engine. It uses the Qovaryx Options Decoder community runtime (Qovaryx/qovaryx-options-decoder-full-community) which runs on CPU, has no GPU requirement, and serves sub-millisecond inference. See the New flagship banner above and the Qovaryx card for what currently powers your installs.
Everything below this point is the historical Franken-B model lineage that this repo originally documented. It is preserved because the Franken-B research (composition-lock, last-3 LoRA, vision-fusion +106%) is part of the public record of how the VFAi-X line evolved, and the weights are still hosted here for researchers who want to study or reproduce the 9B vision-language path. It is not what the current desktop app loads at runtime.
VFAi-X Franken-B -- Vision-Language Options Trading Model (Qwen3.5-9B-VL) (historical lineage)
The first VFAi-X model to statistically beat the V5.0 baseline on a per-trade bootstrap (penny, p=0.023). Best chart-fusion result in the entire VFAi-X lineage (+106.76% vision-only on the 200-row real fusion harness). Same overlay won on all three streams over 10,000+ acted trades.
Franken-B is a Qwen3.5-9B vision-language model for US equity options trading, built by stacking three LoRA adapters on Qwen3.5-9B-VL -- V3.7s base → V5.0 LM LoRA → V5.8 last-3 LM LoRA. It reads composite chart images (1D / 1H / 5M) plus structured market context and emits BUY / SELL / HOLD / NO_TRADE with conviction and a risk plan. Optimized for Volume-Price Analysis (VPA), pattern recognition, and chart-text fusion.
Production branch: main (this page) · Recipe: V3.7s → V5.0 → V5.8 last-3 · Base: Qwen/Qwen3.5-9B-VL · Runtime: FP8 on vLLM · Predecessor: tjarvis91/vfai-x-3.5-9b-options (V3.7)
If this work helps you, support continued development: ko-fi.com/tjarvis91 ☕
App Showcase
See what you get before you install. Six tabs, real Tradier-connected paper account, model serving Franken-B locally on consumer GPU. (AI engine was disabled for these screenshots so we didn't compete with an active training run -- the engine connects automatically on first launch.)
Historical download block — superseded
The legacy
3.5v26-3.10-FrankenB-Risk-Guard-Hotfixdownload links that used to live here have been removed because they shipped the previous Franken-B runtime, not the current Qovaryx runtime. The current installer + auto-update pointer are in the Download VFAi-X Qovaryx 2.5 section at the top of this card (or jump to the installer block). Older auto-update pointers automatically fetch the Qovaryx 2.5 critical hotfix on next launch — no user action required.
What Ships
Local-first Windows desktop app with vLLM acceleration.
Franken-B flagship model path and served-model lock.
Hybrid stocks/options operation with constrained penny mode enabled by default.
Tradier broker bridge for user-supplied paper/live credentials.
Public-safe settings: no bundled broker, Hugging Face, data-provider, or private keys.
Hugging Face auto-update channel for critical hotfixes.
Franken-B Runtime Lock
Position sizing: 20% max position size, 8 max positions.
Options overlay: 15x leverage assumption, -5% hard stop, 0.5% theta drag.
Signal gates: 70 conviction floor, 1.0 relative-volume floor, 0.70 profit-score floor.
Fusion path: vision, fusion, gems, chart analysis, and position-manager vision remain enabled.
Thinking mode remains off for this public runtime profile.
Install Notes
The installer is about 1.1 GB and does not bundle the model weights. On first launch it downloads the current Franken-B model files from Hugging Face, verifies the 6 safetensor shards and processor/tokenizer files, then starts vLLM.
If the model repo is ever private or gated, add a Hugging Face read token in Settings or set HF_TOKEN before first launch. Public builds ship no secrets by design.
Support
Independent training runs cost real GPU time. Support is optional and never gates the app: ko-fi.com/tjarvis91
TL;DR -- Why Franken-B Replaces V3.7
Same overlay sweep (min_conv=70, lev=15, hard_stop=-5%, theta_drag=0.5, position_size=20%, max_pos=8) applied identically to both models, same streams, same dates:
| Metric | V3.7 (prior flagship) | Franken-B (this model) | Delta |
|---|---|---|---|
| 2yr return | +1,432% | +8,245% | +6,813 pp |
| 2yr profit factor | 2.99 | 4.51 | +50.8% |
| Penny return | +12,128% | +35,155% | +23,027 pp |
| Penny profit factor | 26.77 | 31.77 | +18.7% |
| 180d return | +1,593% | +4,711% | +3,118 pp |
| 180d profit factor | 4.75 | 4.95 | +4.2% |
| Vision-only fusion | +43.99% | +106.76% | +62.77 pp |
| Fused (text+chart) | +68.06% | +103.32% | +35.26 pp |
| 2yr BUY/SELL balance | 264 / 1732 (87% SELL-skew) | 1,539 / 1,491 (balanced) | bias fixed |
| 2yr direction accuracy | 39.4% | 40.5% | +1.1 pp |
| Bootstrap CI vs V5.0 (penny) | TIE (p=0.39) | PASS p=0.023 | first PASS in family |
Aggregate acted trades: n=10,396 (n=5,030 + 2,822 + 2,544 per stream). Same overlay won every stream -- no overfitting to one regime.
These are simulated overlay backtests against locked answer keys we have audited and found to be selection-biased (286,000 directional rows, zero losers by construction). They are upper bounds -- treat them as relative to other models tested under the same conditions, not as forward returns. Walk-forward validation is queued.
Apples-to-Apples (matched emit pairs -- most defensible)
When restricted to the same (symbol, signal_date) pairs both models chose to trade, with identical overlay:
| Stream | V3.7s | Franken-B | Delta |
|---|---|---|---|
| 2yr | n=749, +889%, PF=3.55 | n=749, +933%, PF=3.75 | +44 pp, +0.20 PF |
| penny | n=1,253, +8,734%, PF=9.73 | n=1,246, +9,422%, PF=10.56 | +688 pp, +0.83 PF |
| 180d | n=966, +593%, PF=1.74 | n=950, +604%, PF=1.77 | +11 pp, +0.03 PF |
Franken-B picks better on every stream when restricted to the same trade opportunities. This is the most defensible comparison -- the universe is held fixed, so selection bias cancels out.
The Recipe -- and Why Order Is Not Commutative
Qwen3.5-9B-VL (base)
→ V3.7s merged base (text + fusion sidecar, full LM layers)
→ V5.0 LM LoRA (abstention + direction repair, all LM layers q/k/v/o + MLP)
→ V5.8 last-3 LM LoRA (layers 29/30/31 only, r=64, alpha=128)
V5.8 is not a vision adapter. It only touches model.language_model.layers.29/30/31. Its chart-fusion edge comes from last-layer language-side arbitration over chart-derived tokens passed from the visual encoder. That is the discovery that drives the +106.76% vision result.
The order matters -- every alternative we tested regressed:
| Recipe attempted | Outcome |
|---|---|
V3.7s → V5.8 (skip V5.0) |
take rate 87.5%, prose drift, rejected |
V3.7s → V6 → V5.8 |
7/8 valid, schema miss, rejected |
V3.7s → V5.8 → V6 |
same schema miss reversed |
V3.7s → V5.0 → V5.8 → V6 |
8/8 strict, but repetition/malformed output |
V5.5 → V5.0 (double-V5.0) |
take 50%, over-abstains |
V3.7s → V5.0 → V5.8 |
8/8, 75% take, balanced action mix -- winner |
V5.0 sandwiched between V3.7s and V5.8 stabilizes format before V5.8 applies its directional pressure. We call this composition-lock -- recipe behavior depends on order in a way that cannot be flattened into a single repair adapter.
Sanity Battery (323-row strict suite + 9 corpus packs)
| Metric | Franken-B | V3.7s | Honest read |
|---|---|---|---|
| brutal action_pass | 90.9% | 100% | V3.7s wins 3 brutal cases (open lane: v27_veto stack candidate) |
| app_integrated | 99.0% | 99.75% | tied for practical purposes |
| today_holdout direction | 48.0% | 44.0% | Franken-B ties V3.5 baseline |
| today_holdout BUY/SELL | 48/2 âš | 25/25 | bull-bias is the known open weakness |
| corpus avg (9 packs) | 88.2% | 96.2% | V3.7s wins broad corpus (sample-size-small per pack) |
| corpus adversarial | 83.3% | 90.0% | open lane: targeted V58R challenger in progress |
| fusion vision_only | +106.76% | +43.99% | best in the entire family (n=200 fusion harness) |
| fusion fused (with app gate) | +103.32% | +68.06% | best in the family |
The trade-off is real and disclosed: Franken-B loses 8 pp of corpus average and 6.7 pp of adversarial in exchange for +62.77 pp vision, +35.26 pp fused, a balanced action mix, today_holdout matching V3.5 baseline, and the only bootstrap PASS vs V5.0 in the model family. We chose to ship Franken-B because the trade-off makes sense for the runtime profile; the corrector that would have fixed the corpus regressions cost more than it gained on every other dimension.
Why We Did NOT Merge a Corrector
After the tournament we trained four corrector LoRAs (v3, v4, v5, v58R) on a 109-row law-crystal corpus targeting the boundary failures. Each one improved the strict suite at the cost of vision:
| Configuration | Strict overall | Vision | Fused | Decision |
|---|---|---|---|---|
| Franken-B base (shipped) | 72.16% | +106.76% | +103.32% | PROMOTED |
| + v5 corrector | 81.73% | -21.90% | +30.91% | rejected |
| + v6 corrector | -- | -55.92% | -5.04% | rejected |
| + v58R (latest, 2026-05-22) | sanity match | +2.55% (only positive corrector) | -- | rejected (adversarial collapsed to 73.3%) |
The strict-suite gain was concentrated on a few dozen rows. The vision loss was a structural change across the whole input distribution. Sample size won. Composition-lock again: chart-fusion behavior is held jointly by V3.7s + V5.0 + V5.8 and any additional weight-level repair destabilizes it.
We publish the corrector failures because the composition-lock finding is the most ML-interesting result in the work, and it is only credible if the failed iterations are visible.
How To Load The Model Directly
For research or custom inference outside the desktop app:
from transformers import AutoModelForImageTextToText, AutoProcessor
import torch
model = AutoModelForImageTextToText.from_pretrained(
"tjarvis91/vfaix-vpa-options-trader",
torch_dtype=torch.bfloat16,
device_map="auto",
trust_remote_code=True,
)
processor = AutoProcessor.from_pretrained(
"tjarvis91/vfaix-vpa-options-trader",
trust_remote_code=True,
)
Or with vLLM for FP8 production serving (what the desktop app does):
vllm serve tjarvis91/vfaix-vpa-options-trader \
--served-model-name vfai-qwen35-9b-frankenB-v2.2 \
--max-model-len 4096 \
--gpu-memory-utilization 0.85 \
--quantization fp8 \
--trust-remote-code
Expected output schema:
ACTION: BUY
Conviction: 73%
Reason: Confirmed VPA direction plus clean retest, volume expansion, defined risk.
Risk plan: Buy with defined risk at the failed retest level and exit if that level breaks.
The model is designed to choose between BUY / SELL / HOLD / NO_TRADE based on prompt schema, current position state, market conditions, and evidence quality.
Open Lanes
| Open item | Severity | What we're doing |
|---|---|---|
| Today_holdout 96% BUY bias | medium | v58R-balanced fusion corpus (rebalance BUY/SELL anchors before retrain) |
| Corpus adversarial -16.7pp vs V6 | medium | v27_veto adapter stack experiment queued |
| Brutal action_pass -9.1pp vs V3.7s | small | Same v27_veto lane |
| Walk-forward on fresh distribution-realistic hold-out | high (process) | Quarterly split queued; we will publish whichever way it lands |
| Selection-biased legacy answer keys | high (process) | Telemetry-gold streams in development |
The desktop app's V2.2 production overlay is locked while these complete.
Companion Models On The Sibling Repo
The legacy repo tjarvis91/vfai-x-3.5-9b-options hosts two opt-in branches for research/ensembling:
V3.7 (prior flagship):
--revision v3.7V6 Sniper (companion, abstains on 98% of opportunities, highest PF in the family -- confirmation filter, not a primary emitter):
--revision vfai-x-sniper-options
Franken-B is the installer default. The other two are for operators who want to roll back, ensemble, or research.
Evidence & Audit Trail
Public audits and report artifacts (paths on the developer machine -- request access for the full bundle):
FRANKEN_B_FLAGSHIP_REPORT_20260520.md-- original flagship promotion reportFINAL_DECISION_FRANKEN_B_FLAGSHIP_20260522.md-- corrector lane verdictsFRANKEN_B_PRODUCTION_DEPLOYMENT_20260522.md-- production overlay lock + V2.2 settingsfrankenB_apples_to_v37s.json-- matched-pair comparison datafrankenB_vs_v50_bootstrap.json-- bootstrap CI raw datafrankenB_mega_variable_sweep.json-- overlay sweep across 1,200 configsfrankenB_full_20260520_LIVE_SUITE_REPORT.json-- sanity battery rawV5_FRANKENB_2YR_PROFITABILITY.md,V5_FRANKENB_PENNY_PROFITABILITY_50USD.md-- locked production profitabilityFRANKENB_ALL_REPORTS_SHIP_AUDIT_20260522.md-- pre-ship audit summaryCODEX_V58_REGRESSION_AUDIT_20260522.md-- V5.8 lineage audit + composition-lock finding
Devlog series (HF Discussions; also mirrored on the Qovaryx research repo on GitHub):
License & Use
Apache 2.0. This is a research artifact. Not financial advice. Simulated returns are not guaranteed forward returns. Options trading can result in total premium loss. Use paper trading first. Past evaluation performance does not guarantee future performance.
VFAi-X -- Independent behavioral-model systems lab. Local-first. Open-source. No billion-dollar infrastructure.
- Downloads last month
- 906





