tgetsov commited on
Commit
65fb6ae
Β·
verified Β·
1 Parent(s): c4f7b10

Upload VALIDATION.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. VALIDATION.md +138 -0
VALIDATION.md ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Validating marvy-14B
2
+
3
+ This guide gives you three independent ways to confirm the fine-tune actually
4
+ learned the ServiceNow delivery style β€” from a 60-second smoke test to a
5
+ quantitative base-vs-marvy comparison on a held-out, customer-disjoint test set.
6
+
7
+ > TL;DR: run `bash docs/validate.sh` (from the model repo) for the quick path,
8
+ > or follow the manual steps below.
9
+
10
+ ---
11
+
12
+ ## What "working" means here
13
+
14
+ marvy-14B is a **specialist drafting model**. A successful fine-tune should show:
15
+
16
+ 1. **Format fidelity** β€” it emits the delivery artifact shape on cue (user
17
+ stories with acceptance criteria, SDD sections, test cases with
18
+ pre-conditions/steps/expected results) without being told the structure.
19
+ 2. **Domain voice** β€” OOTB-first framing, ServiceNow tables/plugins, ITIL/CSDM
20
+ vocabulary, `sys_id` citations where relevant.
21
+ 3. **Lower loss than the base** on held-out ServiceNow delivery text.
22
+
23
+ The base model (Qwen2.5-14B-Instruct) is a strong generalist and will produce
24
+ *plausible* answers β€” the point of validation is to show marvy is **more
25
+ on-format, more domain-specific, and lower-perplexity** on this task.
26
+
27
+ ---
28
+
29
+ ## Test 1 β€” 60-second smoke test (qualitative)
30
+
31
+ Prompt the model with a bare instruction and check it produces a correctly
32
+ structured artifact with no format coaching.
33
+
34
+ ### LM Studio (local)
35
+
36
+ ```bash
37
+ lms load MainStack/marvy-14B
38
+ lms server start # OpenAI-compatible on http://localhost:1234/v1
39
+
40
+ curl -s http://localhost:1234/v1/chat/completions \
41
+ -H "Content-Type: application/json" \
42
+ -d '{
43
+ "model": "marvy-14B",
44
+ "temperature": 0.4,
45
+ "messages": [
46
+ {"role": "system", "content": "You are a senior ServiceNow delivery consultant. You produce precise, implementation-grade artifacts and favor out-of-the-box capabilities."},
47
+ {"role": "user", "content": "Write a user story with acceptance criteria for auto-escalating P1 incidents that breach a 15-minute response SLA."}
48
+ ]
49
+ }' | python3 -c "import sys,json;print(json.load(sys.stdin)['choices'][0]['message']['content'])"
50
+ ```
51
+
52
+ ### MLX (Apple Silicon)
53
+
54
+ ```bash
55
+ python -m mlx_lm generate --model MainStack/marvy-14B \
56
+ --system-prompt "You are a senior ServiceNow delivery consultant..." \
57
+ --prompt "Write a user story with acceptance criteria for auto-escalating P1 incidents that breach a 15-minute response SLA." \
58
+ --max-tokens 512 --temp 0.4
59
+ ```
60
+
61
+ ### Pass criteria
62
+
63
+ - [ ] Output is a **user story** (`As a … I want … so that …`) followed by
64
+ discrete, testable **acceptance criteria**.
65
+ - [ ] References ServiceNow concretely (e.g. `incident`, SLA definitions,
66
+ `sla_definition`, escalation/notification, assignment groups).
67
+ - [ ] No meta-chatter ("Sure, here is…") dominating the answer; it reads like a
68
+ backlog item, not a chatbot reply.
69
+
70
+ ---
71
+
72
+ ## Test 2 β€” Task-coverage probes (qualitative, one per skill)
73
+
74
+ Run each prompt with the recommended system prompt. Each should yield the
75
+ artifact named, in the right shape.
76
+
77
+ | # | Prompt | Expect |
78
+ |---|--------|--------|
79
+ | 1 | "Draft the Incident Management section of an SDD for a greenfield ITSM implementation. Include assignment rules and SLA design." | SDD section: architecture/process, assignment rules (condition/action/order), SLA table |
80
+ | 2 | "Extract structured requirements (id, category, priority, target phase, success metric) from: 'We need to replace email-based access requests with a catalog item routed for manager approval.'" | Tabular/structured requirements with priorities & metrics |
81
+ | 3 | "Write a test case for the story: 'Restrict the Assignment Group field on incidents to groups with the itil role.'" | Test case: pre-conditions, steps, expected results, pass/fail |
82
+ | 4 | "We are migrating CMDB to CSDM. Produce the foundation-data load sequence and the CI classes involved." | CSDM/CMDB sequence, classes (cmdb_ci_*), foundation order |
83
+ | 5 | "Validate this requirement against best practice and list follow-up questions: 'All incidents must auto-close after 3 days.'" | Critique + concrete follow-up questions + risks |
84
+
85
+ ### Pass criteria
86
+ At least **4 of 5** produce the correct artifact type with ServiceNow-specific,
87
+ implementation-grade content (not generic ITSM prose).
88
+
89
+ ---
90
+
91
+ ## Test 3 β€” Quantitative: base vs marvy on the held-out test set
92
+
93
+ This is the strongest signal. The test split is **customer-disjoint** β€” two
94
+ customers that never appear in training or validation β€” so it measures
95
+ generalization, not memorization.
96
+
97
+ ### With the MLX training kit (in the source repo)
98
+
99
+ ```bash
100
+ cd training
101
+
102
+ # marvy (fine-tuned adapter on the base)
103
+ python -m mlx_lm lora \
104
+ --model mlx-community/Qwen2.5-14B-Instruct-4bit \
105
+ --adapter-path train/adapters \
106
+ --data train/data --test --test-batches 50
107
+ # -> Test loss 2.573, Test ppl 13.107 (lower is better)
108
+
109
+ # base (no adapter) for comparison
110
+ python -m mlx_lm lora \
111
+ --model mlx-community/Qwen2.5-14B-Instruct-4bit \
112
+ --data train/data --test --test-batches 50
113
+ # -> expect a HIGHER loss/ppl than marvy
114
+ ```
115
+
116
+ ### Pass criteria
117
+ - [ ] marvy's **test perplexity is meaningfully lower** than the base on the
118
+ same held-out split.
119
+ - [ ] No data leakage: the test customers (`Customer-CHEM-01`,
120
+ `Customer-FININST-01`) are absent from `train.jsonl` / `valid.jsonl`.
121
+
122
+ > Reference result for this release: **test loss 2.573 / ppl 13.107** on 50
123
+ > batches of the project-disjoint test split (two sequences >2048 tokens are
124
+ > truncated by the eval harness, so this is a slight upper bound).
125
+
126
+ ---
127
+
128
+ ## Interpreting results
129
+
130
+ | Symptom | Likely cause | Action |
131
+ |---|---|---|
132
+ | Generic ITSM prose, no ServiceNow specifics | wrong/short system prompt | use the full recommended system prompt; temp 0.3–0.5 |
133
+ | Rambling, no artifact structure | temperature too high | lower to 0.3–0.4 |
134
+ | Invents `sys_id`s / plugin IDs | expected limitation | verify against a real instance; never trust IDs blindly |
135
+ | marvy ppl β‰ˆ base ppl | adapter not applied / wrong checkpoint | confirm `--adapter-path` points at the trained adapter (iter-150) |
136
+
137
+ marvy-14B is a first-draft assistant. All output must be reviewed by a qualified
138
+ ServiceNow consultant before client delivery or production configuration.