Add README.md
This commit is contained in:
@@ -0,0 +1,65 @@
|
|||||||
|
# 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
|
||||||
Reference in New Issue
Block a user