Provider-neutral LM messages and request/response values.
Imp.LM.generate/3 preserves its established raw-output return contract, but
every call now crosses this typed boundary internally. Consumers that need
request/response metadata directly can call Imp.LM.request/2.