Tell me about LangChain.
Implement a minimal LangChain-style runnable pipeline that composes prompt formatting, model invocation, and output parsing. The function receives ordered step definitions and initial variables, then returns the final string. A prompt step formats its template with the current dictionary, a model step formats a deterministic response template using {input}, and a parser step applies either strip or first_line.
{input} placeholderstrip or first_linedef run_chain(steps, variables):