Files
2026-06-04 16:12:27 +00:00

66 lines
1.7 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 (status200)
* `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