from transformers import AutoModelForCausalLM, AutoTokenizerimport torch, json, re tok = AutoTokenizer.from_pretrained("enterprise-ai-lab/depguard-jev-style-1.5b")model = AutoModelForCausalLM.from_pretrained( "enterprise-ai-lab/depguard-jev-style-1.5b", dtype=torch.float32).eval() SYS = ( "You are a dependency security review assistant. For each package update output ONE " "JSON object with keys: verdict (safe|caution|block), reason (one sentence), " "cve_count (integer), recommendation (upgrade|pin|replace|accept|reject). " "Output only the JSON.") def review_dep(name, registry, old_ver, new_ver, description, license): content = (f"Package: {name}\nRegistry: {registry}\n" f"Current: {old_ver} -> Proposed: {new_ver}\n" f"Description: {description}\nLicense: {license}") msgs = [{"role": "system", "content": SYS}, {"role": "user", "content": content}] prompt = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True) ids = tok(prompt, return_tensors="pt") with torch.no_grad(): out = model.generate(**ids, max_new_tokens=120, do_sample=False, pad_token_id=tok.eos_token_id) text = tok.decode(out[0][ids["input_ids"].shape[1]:], skip_special_tokens=True) m = re.search(r"\{.*\}", text, re.DOTALL) return json.loads(m.group(0)) if m else {} result = review_dep("lodash", "npm", "4.17.15", "4.17.21", "Utility library", "MIT")# {"verdict": "safe", "reason": "Security patch for CVE-2021-23337.", "cve_count": 1, "recommendation": "upgrade"}