# Structured Output with Union Events API This repository contains a small CLI tool that demonstrates how to parse raw log lines into typed events using **LangChain**'s structured output capabilities and **Pydantic v2**. ## Features * Two event models: * `HttpOkEvent` – successful HTTP request (status 200) * `HttpErrorEvent` – error response (4xx/5xx) * Uses a discriminator field (`kind`) to route the parsed data into the correct model. * Parses each log line with an LLM via LangChain and returns a validated Pydantic object. * Prints a simple table of all parsed events. ## Requirements ```text langchain-core>=1.0 langchain-openai pydantic>=2 python-dotenv ``` Install them with: ```bash pip install -r requirements.txt ``` > **Note**: The script uses the `gpt-4o-mini` model by default. Set the environment variable `OPENAI_API_KEY` to your key. ## Usage ### From a file ```bash python main.py --file logs.txt ``` ### From stdin ```bash echo -e "GET /api/v1/users 200 123ms\nPOST /api/v1/login 404 Not Found" | python main.py ``` The output will look like: ``` kind | path | status | duration_ms | error_message -----+---------------+--------+-------------+-------------- ok | /api/v1/users | 200 | 123 | error| /api/v1/login | 404 | | Not Found ``` ## How it works The script builds a LangChain chain that: 1. **Prompts** the LLM to parse a single log line into JSON. 2. Uses `PydanticOutputParser` to validate and convert the JSON into one of the two Pydantic models. 3. Collects all parsed events and prints them in a table. The union type is handled automatically by LangChain's structured output parser thanks to the discriminator field. ## License MIT © 2026