Weight syntax: - Grammar: `(arg:SIGNED_NUMBER)` parses to a WeightedGroup - emph(text|w) is a function-style alias for the same - Nested weights multiply: ((cat:1.2):0.5) -> 0.6, matching A1111 - Weights are emitted in the (token, weight) tuples that comfy's stock encode_token_weights already applies post-transformer To make per-position weight indexing work, rows are now always exactly max_length entries: a multi-slot Action emits as one (action, w) entry followed by (ACTION_CONTINUATION, w) placeholders that process_tokens drops before handing to super().process_tokens. This replaces the previous variable-length-row + padding-math. PromptLang Inspect: - New node: CLIP + text -> STRING report of per-slot weight, L2 norm, and top-k nearest vocab tokens for the resolved embedding - lib/inspect.py uses the wrapper's stored attr name (cond.clip / tok.clip) rather than hardcoding 'clip_l', and uses the tokenizer's inv_vocab for decode Fix: parse_numeric_arg now rejects WeightedGroup (was only Action). SegOrAction widened to include WeightedGroup.
25 lines
433 B
Python
25 lines
433 B
Python
grammar = r"""
|
|
?start: item+
|
|
|
|
item: embedding
|
|
| WORD
|
|
| generic_function
|
|
| QUOTED_STRING
|
|
| weighted
|
|
|
|
generic_function: FUNC_NAME "(" arg ("|" arg)* ")"
|
|
|
|
weighted: "(" arg ":" SIGNED_NUMBER ")"
|
|
|
|
arg: item+
|
|
|
|
embedding: "embedding:" WORD
|
|
FUNC_NAME: /[A-Za-z_-]+/
|
|
WORD: /[A-Za-z0-9,_\.-]+/
|
|
QUOTED_STRING: /"([^"\\]*(\\.[^"\\]*)*)"|'([^'\\]*(\\.[^'\\]*)*)'/
|
|
SIGNED_NUMBER: /-?\d+(\.\d+)?/
|
|
|
|
%import common.WS
|
|
%ignore WS
|
|
"""
|