(prompt: str, system_prompt: str | None = None)
| 32 | |
| 33 | |
| 34 | def extract_handcrafted_features(prompt: str, system_prompt: str | None = None) -> np.ndarray: |
| 35 | full_text = f"{system_prompt or ''} {prompt}".strip() |
| 36 | struct_dims = extract_structural_features(full_text) |
| 37 | unicode_blocks = extract_unicode_block_features(full_text) |
| 38 | kw_dims = extract_keyword_features(prompt) |
| 39 | |
| 40 | feats = [] |
| 41 | for d in struct_dims: |
| 42 | feats.append(d.score) |
| 43 | for _, v in sorted(unicode_blocks.items()): |
| 44 | feats.append(v) |
| 45 | for d in kw_dims: |
| 46 | feats.append(d.score) |
| 47 | return np.array(feats, dtype=np.float32) |
| 48 | |
| 49 | |
| 50 | class AvgPerceptron: |
no test coverage detected