6af4673534
Adds validate_caller_dimensions and the two ChatRequest fields that carry them. Every limit rejects rather than trims: Langfuse drops metadata values past 200 characters, which leaves the caller believing something was recorded when nothing was. Whitespace on tenant_id is refused outright instead of stripped. " t1" and "t1" compare unequal inside an RLS policy, so silently rewriting the caller's value would hand them a tenant whose rows they cannot find. Non-finite floats are refused for a concrete reason: json.dumps writes them as the bare literals NaN and Infinity, which are not valid JSON and which JSONB rejects. Letting one through turns a caller's input mistake into a failed insert, and the telemetry layer degrades failed inserts to a warning -- so the mistake would surface as missing rows, nowhere else. The new fields go after sampling so no positional construction of ChatRequest shifts. Validation is split across three helpers to keep each one under the complexity gate.