Run this model inference on single tenant GPU with unmatched speed and reliability at scale.
Run this model inference with full control and performance in your environment.
Get help setting up a custom Dedicated Endpoints.
Talk with our engineer to get a quote for reserved GPU instances with discounts.
README
License: apache-2.0Changelog
- v1.2.0: Multilingual upgrade. Extends coverage to 94 languages while holding English performance flat, and adds currency / G10-geography coverage.
- v1.1.0: English forward-looking model trained on real-world Nosible Search Feeds.
forward-looking-v1.2-base is a temporal-orientation classification model. Given a short text snippet, it determines whether the snippet's main event or topic is forward-looking (planned, expected, forecast, or scheduled) or not-forward-looking (a past event, a current state, or a timeless fact). It is fine-tuned from Qwen3-0.6B-Base and reframes the task as instruction following, producing a single label token per input.
This is the multilingual successor to forward-looking-v1.1-base. v1.1 was trained primarily on English; v1.2 extends the same task to 94 languages (English plus 93 additional languages) so the model can classify temporal orientation on text as it appears across global news and search feeds.
What's new in v1.2
- Multilingual coverage. The training corpus extends the English Forward-Looking data with faithful translations across 93 additional languages, where the forward / not-forward label is preserved through translation (future-tense framing is not flattened into the past, and vice versa).
- Wider topic coverage. v1.2 adds currency and G10-geography feeds, so temporal orientation is classified consistently across company, country / region, and currency news.
- English held flat. v1.2 is a multilingual extension, not an English re-train. English accuracy and macro-F1 are unchanged within run noise (see below).
- The multilingual gap narrowed. On the held-out validation set, the English-vs-multilingual accuracy gap shrinks from ~8.3pp (v1.1) to ~4.7pp (v1.2).
Performance overview
All numbers below are measured on the live SGLang endpoint (OpenAI-compatible chat-completions, enable_thinking=False, temperature=0), scored against the same held-out validation splits for both models. Deltas are in percentage points (pp).
Headline
| Slice | n | Metric | v1.1 | v1.2 | Δ |
|---|---|---|---|---|---|
| English val | 20,000 | Accuracy | 92.12% | 91.96% | -0.16pp |
| English val | 20,000 | Macro-F1 | 91.91% | 91.73% | -0.18pp |
| Multilingual val | 19,155 | Accuracy | 83.83% | 87.22% | +3.39pp |
| Multilingual val | 19,155 | Macro-F1 | 83.28% | 86.92% | +3.64pp |
| Currency / geo feeds | 4,012 | Accuracy | 86.86% | 88.56% | +1.70pp |
| Currency / geo feeds | 4,012 | Macro-F1 | 86.18% | 88.20% | +2.02pp |
The small English regression (-0.16pp accuracy) is within per-run noise — v1.2 was a multilingual extension, not an English re-train, and the English baseline was already very strong. Multilingual accuracy improves by +3.39pp.
Selected languages (largest validation slices)
| Language | n | v1.1 acc | v1.2 acc | Δ acc |
|---|---|---|---|---|
| Japanese (ja) | 1,500 | 84.47% | 87.80% | +3.33pp |
| Spanish (es) | 1,271 | 87.96% | 90.87% | +2.91pp |
| German (de) | 1,603 | 87.40% | 90.14% | +2.74pp |
| Italian (it) | 669 | 87.44% | 90.13% | +2.69pp |
| Russian (ru) | 1,678 | 88.02% | 90.58% | +2.56pp |
| French (fr) | 1,225 | 89.06% | 91.43% | +2.37pp |
| Portuguese (pt) | 731 | 89.47% | 91.52% | +2.05pp |
| Dutch (nl) | 506 | 88.74% | 90.12% | +1.38pp |
| Chinese (zh) | 1,377 | 89.91% | 90.92% | +1.01pp |
| Polish (pl) | 588 | 82.14% | 87.93% | +5.79pp |
The gains are largest on lower-resource languages — for example accuracy rises on Tamil (61.95% → 75.22%), Gujarati (74.00% → 83.00%), and Swahili (60.53% → 67.54%), with even larger macro-F1 improvements.
Strict Usage Requirements
[!CAUTION]
- Disable Thinking: You must set
enable_thinking=False(or disable reasoning tokens).- Exact System Prompt: You must use the specific system prompt:
"Classify whether it is forward looking or not forward looking."- Constrain Output: You must restrict generation to the two label tokens the model emits:
forwardand_forward. The token_forwarddenotes the not-forward class — map it back after decoding.
- SGLang: Use
regex="(forward|_forward)"in the API call.- vLLM: Use
guided_choice=["forward", "_forward"]in the API call.- llama.cpp / GGUF: Apply a GBNF grammar or regex to force selection from the two tokens.
Deviating from these requirements will severely impact performance and reliability.
[!NOTE] The two classes are forward and not-forward. Internally the model was trained so that the not-forward class is emitted as the single token
_forward. Always map_forward→not-forward(andforward→forward) after reading the model output.
Quickstart (local GPU)
Since this model was trained as a Causal LM using specific chat templates, you must use apply_chat_template with the exact system prompt used during training.
python
import torchfrom transformers import AutoModelForCausalLM, AutoTokenizermodel_id = "NOSIBLE/forward-looking-v1.2-base"tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)model = AutoModelForCausalLM.from_pretrained(model_id,device_map="auto",trust_remote_code=True,torch_dtype=torch.bfloat16,)# Multilingual input is supported (94 languages).text = "El banco central elevará las tasas de interés el próximo mes."# 1. Structure the prompt exactly as used in trainingmessages = [{"role": "system", "content": "Classify whether it is forward looking or not forward looking."},{"role": "user", "content": text},]# 2. Apply chat template (thinking MUST be disabled)prompt = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True,enable_thinking=False,)inputs = tokenizer([prompt], return_tensors="pt").to(model.device)# 3. Generate the label token (only a single token is expected)outputs = model.generate(**inputs, max_new_tokens=1)raw = tokenizer.decode(outputs[0], skip_special_tokens=True).split("<|im_start|>assistant\n")[-1].strip()# Map the model-form token back to the human-readable labellabel = "not-forward" if raw == "_forward" else "forward"print(label)# Expected Output: forward
Deployment
For production we recommend serving with SGLang (sglang>=0.4.6.post1), which exposes an OpenAI-compatible API endpoint. The model is based on Qwen3-0.6B and can be deployed anywhere Qwen3-0.6B can.
Launch the server:
shell
python3 -m sglang.launch_server --model-path NOSIBLE/forward-looking-v1.2-base --dtype bfloat16 --host 0.0.0.0 --port 8080
Call the endpoint using the OpenAI-compatible client. Requesting logprobs lets you read a calibrated confidence for each label.
python
import mathfrom openai import OpenAI# OpenAI-compatible client pointed at your SGLang server (set base_url to your# endpoint URL if remote). The request shape mirrors signals_deploy_v12.predict_one.client = OpenAI(base_url="http://localhost:8080/v1", api_key="EMPTY")model_id = "NOSIBLE/forward-looking-v1.2-base"# Multilingual input is supported.text = "El banco central elevará las tasas de interés el próximo mes."# The model emits the tokens `forward` / `_forward`; `_forward` == not-forward.label_map = {"forward": "forward", "_forward": "not-forward"}messages = [{"role": "system", "content": "Classify whether it is forward looking or not forward looking."},{"role": "user", "content": text},]completion = client.chat.completions.create(model=model_id,messages=messages,temperature=0,stream=False,logprobs=True,top_logprobs=2,extra_body={"chat_template_kwargs": {"enable_thinking": False}}, # Must be set to false.)# The top-1 token is the predicted label; map the model-form token back to the# human-readable label. The full top_logprobs slice gives a per-label confidence.top = completion.choices[0].logprobs.content[0].top_logprobsprint(f"Input: {text}")print(f"Predicted Label: {label_map.get(top[0].token.strip(), top[0].token.strip())}")print("--- Label Confidence ---")for lp in top:name = label_map.get(lp.token.strip(), lp.token.strip())print(f"Token: {name!r} | Probability: {math.exp(lp.logprob):.2%}")
Expected Output
text
Input: El banco central elevará las tasas de interés el próximo mes.Predicted Label: forward--- Label Confidence ---Token: 'forward' | Probability: 99.99%Token: 'not-forward' | Probability: 0.01%
Legal Notice: This model is a modification of the Qwen3-0.6B model. In compliance with the Apache 2.0 license, we retain all original copyright notices and provide this modification under the same license terms.
Limitations
- Parameter Size (0.6B): As a small language model, it is designed for fast, specific classification and may struggle with highly nuanced or ambiguous text that requires extensive world knowledge.
- Per-language quality varies. Accuracy on the highest-resource languages approaches the English baseline; lower-resource languages remain below it despite the large v1.2 improvements.
- Domain Specificity: The model is fine-tuned on financial contexts and classifies temporal orientation, not general-purpose tense detection.
- Reporting-verb ambiguity: Temporal orientation is judged by the main event, not the tense of reporting verbs ("said", "announced"). Very terse or context-free snippets can be ambiguous.
Disclaimer
- Not Financial Advice: The outputs of this model should not be interpreted as financial advice, investment recommendations, or an endorsement of any financial instrument or asset.
- Risk: Financial markets are inherently volatile and risky. Never make investment decisions based solely on the output of an AI model. Always consult with a qualified financial professional.
Team & Credits
This model was developed and maintained by the following team:
Citation
If you use this model, please cite it as follows:
bibtex
@misc{nosible2025forwardlookingv12,author = {NOSIBLE},title = {Forward Looking v1.2 Base},year = {2025},publisher = {Hugging Face},journal = {Hugging Face Repository},howpublished = {https://huggingface.co/NOSIBLE/forward-looking-v1.2-base}}
Full language breakdown
v1.1 was trained on English only; v1.2 adds the 93 languages below (94 total with English). The figures are the training-time evaluation per language and reproduce on the served SGLang endpoint to within ~0.2pp. Deltas are in percentage points (pp), sorted by validation row count.
| Language | n | v1.1 acc | v1.2 acc | Δ acc | v1.1 F1 | v1.2 F1 | Δ F1 |
|---|---|---|---|---|---|---|---|
| Russian (ru) | 1,677 | 88.19% | 90.64% | +2.45pp | 88.00% | 90.56% | +2.56pp |
| German (de) | 1,603 | 87.34% | 90.27% | +2.93pp | 87.01% | 90.12% | +3.11pp |
| Japanese (ja) | 1,500 | 84.47% | 87.93% | +3.46pp | 83.92% | 87.55% | +3.63pp |
| Chinese (zh) | 1,377 | 89.83% | 90.56% | +0.73pp | 89.68% | 90.47% | +0.79pp |
| Spanish (es) | 1,271 | 87.96% | 90.72% | +2.76pp | 87.75% | 90.55% | +2.80pp |
| French (fr) | 1,225 | 88.82% | 91.59% | +2.77pp | 88.63% | 91.46% | +2.83pp |
| Portuguese (pt) | 731 | 89.74% | 91.52% | +1.78pp | 89.57% | 91.39% | +1.82pp |
| Italian (it) | 669 | 87.59% | 89.69% | +2.10pp | 87.40% | 89.55% | +2.15pp |
| Polish (pl) | 588 | 82.31% | 88.27% | +5.96pp | 81.83% | 88.13% | +6.30pp |
| Dutch (nl) | 506 | 88.74% | 90.32% | +1.58pp | 88.31% | 89.99% | +1.68pp |
| Turkish (tr) | 393 | 82.19% | 86.77% | +4.58pp | 81.75% | 86.54% | +4.79pp |
| Indonesian (id) | 386 | 87.56% | 87.82% | +0.26pp | 86.92% | 87.32% | +0.40pp |
| Vietnamese (vi) | 368 | 85.33% | 89.95% | +4.62pp | 85.20% | 89.91% | +4.71pp |
| Czech (cs) | 332 | 84.94% | 85.84% | +0.90pp | 84.72% | 85.60% | +0.88pp |
| Korean (ko) | 291 | 87.97% | 88.32% | +0.35pp | 87.95% | 88.30% | +0.35pp |
| Arabic (ar) | 289 | 87.54% | 92.39% | +4.85pp | 87.42% | 92.36% | +4.94pp |
| Ukrainian (uk) | 246 | 85.37% | 91.46% | +6.09pp | 84.79% | 91.29% | +6.50pp |
| Swedish (sv) | 228 | 83.77% | 85.96% | +2.19pp | 83.38% | 85.78% | +2.40pp |
| Romanian (ro) | 223 | 83.41% | 85.65% | +2.24pp | 83.18% | 85.47% | +2.29pp |
| Hindi (hi) | 191 | 83.25% | 85.34% | +2.09pp | 83.00% | 85.22% | +2.22pp |
| Greek (el) | 187 | 84.49% | 87.17% | +2.68pp | 83.58% | 86.52% | +2.94pp |
| Thai (th) | 179 | 88.83% | 88.27% | -0.56pp | 88.48% | 87.97% | -0.51pp |
| Hungarian (hu) | 177 | 76.27% | 83.05% | +6.78pp | 75.52% | 82.76% | +7.24pp |
| Danish (da) | 176 | 81.82% | 88.64% | +6.82pp | 81.35% | 88.46% | +7.11pp |
| Malay (ms) | 143 | 85.31% | 88.11% | +2.80pp | 84.73% | 87.82% | +3.09pp |
| Slovak (sk) | 143 | 83.92% | 86.01% | +2.09pp | 83.53% | 85.76% | +2.23pp |
| Bengali (bn) | 142 | 85.21% | 88.73% | +3.52pp | 84.57% | 88.50% | +3.93pp |
| Persian (fa) | 136 | 78.68% | 80.15% | +1.47pp | 77.16% | 80.02% | +2.86pp |
| Finnish (fi) | 136 | 78.68% | 85.29% | +6.61pp | 76.31% | 84.43% | +8.12pp |
| Urdu (ur) | 120 | 82.50% | 87.50% | +5.00pp | 81.83% | 87.18% | +5.35pp |
| Norwegian (no) | 116 | 89.66% | 90.52% | +0.86pp | 89.19% | 90.26% | +1.07pp |
| Swahili (sw) | 114 | 59.65% | 65.79% | +6.14pp | 44.19% | 63.06% | +18.87pp |
| Serbian (sr) | 113 | 86.73% | 91.15% | +4.42pp | 86.20% | 90.99% | +4.79pp |
| Tamil (ta) | 113 | 62.83% | 75.22% | +12.39pp | 61.97% | 74.98% | +13.01pp |
| Hebrew (he) | 110 | 80.91% | 87.27% | +6.36pp | 80.55% | 87.23% | +6.68pp |
| Marathi (mr) | 109 | 72.48% | 75.23% | +2.75pp | 71.61% | 74.93% | +3.32pp |
| Bulgarian (bg) | 107 | 85.05% | 87.85% | +2.80pp | 85.01% | 87.78% | +2.77pp |
| Punjabi (pa) | 105 | 74.29% | 78.10% | +3.81pp | 73.82% | 77.57% | +3.75pp |
| Telugu (te) | 102 | 62.75% | 68.63% | +5.88pp | 58.09% | 67.10% | +9.01pp |
| Hausa (ha) | 101 | 52.48% | 60.40% | +7.92pp | 47.53% | 58.61% | +11.08pp |
| Gujarati (gu) | 100 | 73.00% | 83.00% | +10.00pp | 70.88% | 82.61% | +11.73pp |
| Tagalog (tl) | 99 | 71.72% | 71.72% | +0.00pp | 67.13% | 67.68% | +0.55pp |
| Kannada (kn) | 93 | 64.52% | 68.82% | +4.30pp | 59.75% | 64.01% | +4.26pp |
| Croatian (hr) | 91 | 89.01% | 91.21% | +2.20pp | 88.90% | 91.03% | +2.13pp |
| Azerbaijani (az) | 87 | 85.06% | 83.91% | -1.15pp | 84.39% | 82.70% | -1.69pp |
| Pashto (ps) | 87 | 51.72% | 71.26% | +19.54pp | 37.94% | 70.50% | +32.56pp |
| Uzbek (uz) | 84 | 59.52% | 72.62% | +13.10pp | 55.24% | 72.52% | +17.28pp |
| Burmese (my) | 83 | 55.42% | 81.93% | +26.51pp | 47.64% | 81.76% | +34.12pp |
| Nepali (ne) | 83 | 74.70% | 85.54% | +10.84pp | 74.33% | 85.52% | +11.19pp |
| Malayalam (ml) | 82 | 75.61% | 80.49% | +4.88pp | 68.94% | 77.91% | +8.97pp |
| Odia (or) | 81 | 75.31% | 79.01% | +3.70pp | 72.71% | 76.60% | +3.89pp |
| Kazakh (kk) | 77 | 71.43% | 77.92% | +6.49pp | 69.58% | 76.32% | +6.74pp |
| Somali (so) | 77 | 70.13% | 72.73% | +2.60pp | 45.09% | 65.10% | +20.01pp |
| Amharic (am) | 75 | 53.33% | 56.00% | +2.67pp | 37.22% | 42.83% | +5.61pp |
| Lithuanian (lt) | 73 | 73.97% | 78.08% | +4.11pp | 72.66% | 77.88% | +5.22pp |
| Sindhi (sd) | 73 | 78.08% | 83.56% | +5.48pp | 76.10% | 82.08% | +5.98pp |
| Sinhala (si) | 68 | 66.18% | 63.24% | -2.94pp | 59.85% | 51.91% | -7.94pp |
| Afrikaans (af) | 66 | 87.88% | 83.33% | -4.55pp | 87.59% | 83.14% | -4.45pp |
| Khmer (km) | 66 | 40.91% | 71.21% | +30.30pp | 31.01% | 70.88% | +39.87pp |
| Slovenian (sl) | 66 | 78.79% | 95.45% | +16.66pp | 76.64% | 95.32% | +18.68pp |
| Assamese (as) | 63 | 76.19% | 79.37% | +3.18pp | 74.55% | 77.05% | +2.50pp |
| Armenian (hy) | 56 | 83.93% | 82.14% | -1.79pp | 82.30% | 78.88% | -3.42pp |
| Kyrgyz (ky) | 49 | 63.27% | 75.51% | +12.24pp | 56.76% | 72.16% | +15.40pp |
| Latvian (lv) | 48 | 81.25% | 87.50% | +6.25pp | 80.21% | 87.30% | +7.09pp |
| Mongolian (mn) | 46 | 65.22% | 65.22% | +0.00pp | 54.90% | 54.90% | +0.00pp |
| Lao (lo) | 44 | 81.82% | 90.91% | +9.09pp | 75.76% | 87.88% | +12.12pp |
| Georgian (ka) | 42 | 57.14% | 69.05% | +11.91pp | 51.79% | 67.56% | +15.77pp |
| Sanskrit (sa) | 22 | 72.73% | 68.18% | -4.55pp | 70.54% | 66.45% | -4.09pp |
| Bosnian (bs) | 21 | 85.71% | 80.95% | -4.76pp | 78.79% | 76.67% | -2.12pp |
| Catalan (ca) | 21 | 95.24% | 90.48% | -4.76pp | 95.06% | 90.28% | -4.78pp |
| Irish (ga) | 20 | 65.00% | 65.00% | +0.00pp | 49.82% | 49.82% | +0.00pp |
| Belarusian (be) | 19 | 73.68% | 68.42% | -5.26pp | 63.60% | 59.29% | -4.31pp |
| Malagasy (mg) | 19 | 57.89% | 68.42% | +10.53pp | 51.28% | 66.07% | +14.79pp |
| Breton (br) | 18 | 55.56% | 61.11% | +5.55pp | 44.62% | 57.86% | +13.24pp |
| Welsh (cy) | 18 | 44.44% | 55.56% | +11.12pp | 37.50% | 55.00% | +17.50pp |
| Basque (eu) | 18 | 77.78% | 94.44% | +16.66pp | 60.00% | 92.59% | +32.59pp |
| Latin (la) | 18 | 88.89% | 88.89% | +0.00pp | 71.88% | 71.88% | +0.00pp |
| Macedonian (mk) | 18 | 83.33% | 83.33% | +0.00pp | 83.28% | 83.28% | +0.00pp |
| Oromo (om) | 18 | 55.56% | 55.56% | +0.00pp | 44.62% | 44.62% | +0.00pp |
| Serbo-Croatian (sh) | 18 | 88.89% | 94.44% | +5.55pp | 87.50% | 93.45% | +5.95pp |
| Xhosa (xh) | 18 | 55.56% | 50.00% | -5.56pp | 35.71% | 41.09% | +5.38pp |
| Yiddish (yi) | 18 | 72.22% | 83.33% | +11.11pp | 41.94% | 73.40% | +31.46pp |
| Galician (gl) | 17 | 94.12% | 100.00% | +5.88pp | 94.12% | 100.00% | +5.88pp |
| Icelandic (is) | 17 | 47.06% | 58.82% | +11.76pp | 39.53% | 47.11% | +7.58pp |
| Estonian (et) | 16 | 68.75% | 81.25% | +12.50pp | 67.61% | 81.18% | +13.57pp |
| Western Frisian (fy) | 16 | 68.75% | 68.75% | +0.00pp | 67.61% | 67.61% | +0.00pp |
| Scottish Gaelic (gd) | 16 | 56.25% | 56.25% | +0.00pp | 45.89% | 45.89% | +0.00pp |
| Javanese (jv) | 16 | 75.00% | 81.25% | +6.25pp | 74.60% | 80.57% | +5.97pp |
| Kurdish (ku) | 16 | 68.75% | 75.00% | +6.25pp | 54.29% | 66.67% | +12.38pp |
| Albanian (sq) | 16 | 75.00% | 75.00% | +0.00pp | 74.60% | 73.33% | -1.27pp |
| Sundanese (su) | 16 | 81.25% | 87.50% | +6.25pp | 79.22% | 87.30% | +8.08pp |
| Uyghur (ug) | 16 | 68.75% | 62.50% | -6.25pp | 54.29% | 38.46% | -15.83pp |
| Esperanto (eo) | 15 | 80.00% | 80.00% | +0.00pp | 72.05% | 76.19% | +4.14pp |
Model provider
NOSIBLE
Model tree
Base
Qwen/Qwen3-0.6B-Base
Fine-tuned
this model
Modalities
Input
Text
Output
Text
Pricing
Dedicated Endpoints
View detailsSupported Functionality
Model APIs
Dedicated Endpoints
Container
More information