Instructions to use ihlee1/navio-flow-v1.0 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use ihlee1/navio-flow-v1.0 with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
navio-flow v1.0 β Maritime Email Classifier
LoRA adapter fine-tuned from Qwen/Qwen3-4B-Instruct-2507 for 4-class multi-label
maritime chartering email classification.
Categories
vesselβ Owner offers ship position (Open Tonnage)cargoβ Charterer seeks ship for cargo (Cargo Inquiry)tctβ Time Charter Trip (single voyage with daily hire rate)otherβ S&P, market reports, ops, admin
Multi-label predictions allowed (e.g. ["cargo", "tct"]).
Test Set Performance (n=301)
| Metric | Value |
|---|---|
| Macro F1 | 0.7639 |
| Set accuracy | 0.7608 |
Per-class
| Class | Precision | Recall | F1 |
|---|---|---|---|
| vessel | 0.887 | 0.683 | 0.772 |
| cargo | 0.984 | 0.775 | 0.867 |
| tct | 0.714 | 0.625 | 0.667 |
| other | 0.621 | 0.947 | 0.750 |
Training Details
- Framework: Unsloth 2026.4.8
- Base model:
Qwen/Qwen3-4B-Instruct-2507 - Trainable params: 66,060,288 / 4,088,528,384 (1.62%)
- Iters: 475
- Wall-clock training time: 90.8 min
- Final train loss: 0.7736
- Hardware: NVIDIA A100-SXM4-40GB
- Snapshot hash:
b817d2b49800abae
Hyperparameters
- LoRA rank: 32, alpha: 64, dropout: 0.05
- Target modules: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
- Learning rate: 1e-4 (cosine schedule, 10% warmup)
- Effective batch size: 32 (per_device 2 Γ grad_accum 16)
- Epochs: 5
- Max sequence length: 2048
- 4-bit QLoRA via bitsandbytes
Usage
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="ihlee1/navio-flow-v1.0",
max_seq_length=2048,
load_in_4bit=True,
)
FastLanguageModel.for_inference(model)
# Use the system prompt from the snapshot
system_prompt = open("_system_prompt.txt").read() # 580-token dense ruleset
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": "Subject: ...\n\nDELY Busan, REDELY Spore..."},
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
out = model.generate(**inputs, max_new_tokens=40)
print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
# Expected output: {"labels": ["vessel"]}
Limitations
- Macro-F1 0.764 β below the V1.0 target of 0.93. Issues:
tctminority class (test n=19) β F1 0.67- Long emails truncated at max_seq_len=2048 (some originals 3000-3800 tokens)
- Multi-label cases sparse in test set (n=5)
- Trained on emails from one specific brokerage (~3000 examples). Generalization to other brokerages untested.
License
Apache 2.0 (inherits from Qwen3-4B-Instruct-2507).
- Downloads last month
- -
Model tree for ihlee1/navio-flow-v1.0
Base model
Qwen/Qwen3-4B-Instruct-2507