Seven fields, in this order. The conduct field carries recorded facts only, specific to one domain.
domain prefix: <the label left of the TLD, lowercase>
brand: <the mark as registered, uppercase>
brand business: <line of business, or (unknown)>
brand background: <one or two sentences on the owner>
name relation: <identical | contains | similar | typo_like | weak | TBD>
site conduct: <what the record says the site did> || resolves_to: <destination, when the record names one>
flags: parked=<True|False> ppc=<True|False> for_sale=<True|False> phishing=<True|False>
Characterize the use of this domain.
Output
Four lines, fixed format, no reasoning tokens:
TAG: <one tag>
SITE: <one sentence, what the site does>
MARK: <one sentence, name relation and business overlap>
SO: <one sentence, the conclusion that follows>
Example, a constructed card for cloudebot against the mark CLAUDE, where the record says the site is a robotics shop:
TAG: own_business
SITE: The domain resolves to the online shop of a robotics company selling cloud-connected home and warehouse robots, spare parts and firmware.
MARK: The prefix cloudebot is similar to CLAUDE, but the shop sells robots, not AI assistant and large language model services.
SO: The holder runs its own unrelated robotics business, so this is own business use.
The same name with an AI-assistant service recorded returns selling_same_line; with a copied login page, impersonation; with a casino redirect, traffic_diversion.
A full example
A real card, from WIPO case D2019-2135 (samsflaminggrill.com), exactly as the model receives it:
domain prefix: samsflaminggrill
brand: SAM’S FLAMING GRILL
brand business: restaurant services
brand background: Complainant operates numerous Mediterranean restaurants, predominantly or exclusively in California.
name relation: contains
site conduct: Resolves to a largely undeveloped parking page with hyperlinks to topics such as 'takeout menu', 'menu restaurant', 'delivery restaurant', and links to competitor restaurants. || resolves_to: Parking page with pay-per-click links
flags: parked=True ppc=True for_sale=False phishing=False
Characterize the use of this domain.
The adapter answers:
TAG: selling_same_line
SITE: The domain resolves to a parking page with pay-per-click links to takeout menu, restaurant menu, delivery restaurant, and competitor restaurants.
MARK: The prefix reproduces the SAMS FLAMING GRILL mark, and the linked restaurant and delivery topics match its restaurant services.
SO: The parking links bite directly into the restaurant trade, so the page monetizes the mark by promoting same-line services.
The flags say parking (parked and ppc are set), so a rule over the flags stops at parked_sale. The tag is selling_same_line because the links are takeout menus, delivery and competitor restaurants, the mark owner's own trade; that comparison sits in no field.
How to run
The system prompt is system_prompt.txt in this repo, used verbatim. Wrap it in the Qwen chat template with an empty thinking block, exactly as in training, then decode greedily with at most 128 new tokens. See infer.py.
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch
base = "Qwen/Qwen3.5-9B"
tok = AutoTokenizer.from_pretrained(base)
model = AutoModelForCausalLM.from_pretrained(base, dtype=torch.bfloat16, device_map="auto")
model = PeftModel.from_pretrained(model, "ABTdomain/qwen3.5-9b-agent-domain-case-lora").eval()
system = open("system_prompt.txt", encoding="utf-8").read()
prompt = (f"<|im_start|>system\n{system}<|im_end|>\n<|im_start|>user\n{card}<|im_end|>\n"
f"<|im_start|>assistant\n<think>\n\n</think>\n\n")
ids = tok(prompt, return_tensors="pt", add_special_tokens=False).to(model.device)
out = model.generate(**ids, max_new_tokens=128, do_sample=False)
print(tok.decode(out[0][ids["input_ids"].shape[1]:], skip_special_tokens=True))
Parse the four lines by their prefixes and check the tag against the six values. Send incomplete or invalid records to review. The three sentences need a separate check against the card: every fact in them must be on the card.
Results
Tag matches on 100 held-out cards taken from published UDRP decisions (one disputed domain per case), with the prompt in this repo, greedy decoding, no thinking:
Table with columns: Tag, Cards, Matched| Tag | Cards | Matched |
|---|
selling_same_line | 30 | 29 |
blank | 20 | 20 |
impersonation | 10 | 9 |
parked_sale | 20 | 19 |
|
For reference on the same 100 cards, none of these trained: Qwen3.8-27B with our full rulebook in its prompt matched 93 with thinking and 88 without, and 90 with this adapter's short prompt and thinking; DeepSeek V4.1 Flash matched 97 with the rulebook and thinking, 87 with the rulebook and no thinking, and 83 with the short prompt and thinking; a rule over the four flags and obvious keywords matched 67. This adapter answers in about 80 output tokens from a 467-token input; Flash with the rulebook and thinking uses about 1,500 tokens in and 820 out per card.
100 cards is a small sample, and differences of a few points should not be over-read. The number counts tags: among the 6 wrong-tag outputs none adds a fact the card does not carry, and the correct-tag outputs were not all read sentence by sentence. Format failures (missing line or tag outside the six): 0 on these cards and 0 on 12,390 further cards. The write-up is Station Two: A 9B That Reads the Case Card on the ABTdomain blog.
Where it is not reliable
- Goods that carry the brand word. In a controlled test (a shop selling only T-shirts, brand and brand business varied), T-shirts printed with the brand word were tagged
selling_same_line every time, even when the brand's business was pharmaceuticals and the rulebook answer was own_business; the same shop selling plain T-shirts was separated correctly. Treat a selling_same_line tag on branded merchandise outside the brand's line as one to review.
- Impersonation without a phishing record. Of 10 impersonation cards, the 4 with a phishing flag were all caught; of the 6 without, 5 were. The miss describes a site showing the brand's product photographs without authorization and offering the goods for sale, tagged
selling_same_line. A record of copied official material should go to review whatever the tag says.
- Thin records. When a page of pay-per-click links to unrelated businesses is all the record says,
parked_sale and traffic_diversion are one word apart; the model erred once each way.
- Own business. 8 of 9. A correct
own_business tag says nothing about legitimacy: of the 8 correct cards, panels denied four complaints and ordered four transfers.
- 94 of 100 is a measurement on cards built from decision text by our extractor. Cards built another way, or from live pages, are a different distribution: re-grade before you trust a number.
Training data
4,125 cards built from published UDRP decisions in the public archives of WIPO, the Forum and the other dispute-resolution providers, labelled under a written rulebook by model authors and reviewed, with boundary cases adjudicated by the maintainers. The cards carry no WHOIS fields. Neither the training cards nor the validation cards are part of this release.
Base model: Qwen3.5-9B. Adapter: LoRA r=32, alpha=64, dropout 0.05, on q/k/v/o/gate/up/down, 3 epochs. Released under Apache-2.0, like the base model; the NOTICE file must be kept with any redistribution, which credits abtdomain.com.
Intended use and limits
For assisting a reviewer in brand-protection work: it classifies recorded use and drafts checkable sentences. It is not a finding of bad faith, does not estimate the outcome of a dispute, and should not be the only filter in front of a decision. Feed it a card, not a page; one domain per card.
Acknowledgment
A project of ABTdomain (Lyalpha GmbH).
We acknowledge the European High Performance Computing Joint Undertaking (EuroHPC JU) for awarding this project (EHPC-AIF-2026PG01-689) access to the MareNostrum 5 supercomputer, hosted by the Barcelona Supercomputing Center. The training and evaluation runs behind this release were carried out there.
Co-funded by the European Union. Views and opinions expressed are those of the authors only and do not necessarily reflect those of the European Union or the European High Performance Computing Joint Undertaking.
Base model by the Qwen Team, Alibaba Cloud (Apache-2.0).