Software here serves the same purpose as the test methods elsewhere on this site: producing evidence that can be trusted and repeated. These projects cover Python data engineering, applied AI on local hardware, flight simulation, and embedded systems — each one built to solve a concrete problem in testing, documentation, or evaluation workflows. The habits are the same ones test engineering demands: idempotent processes, isolated failures, traceable outputs.
LLM_Pipeline: Building a RAG-Ready Corpus from PDFs and Video
Python data engineering — OCR-fallback ingestion, GPU-aware transcription, token-aware indexing
Technical reference material accumulates in inconvenient shapes: PDFs that may or may not contain extractable text, and video content whose information is locked in audio. Neither is searchable in any useful way, and neither can be handed to a language model as-is. LLM_Pipeline is a personal data-engineering project that turns both into a single, metadata-indexed corpus structured for downstream retrieval-augmented generation (RAG) use.
The pipeline has three implemented stages, each a standalone script with a defined input and output contract:
Stage 1 — PDF ingestion with OCR fallback.
Extracts text from PDF documents directly where a text layer exists. Where a page yields no extractable text — scanned or image-based documents — the stage falls back to OCR, so image-only sources still enter the corpus instead of silently dropping out.
Stage 2 — GPU-aware media transcription.
Fetches media with yt-dlp and transcribes it locally with OpenAI Whisper, running on GPU when one is available and falling back to CPU when not. The stage supports incremental re-runs — items already transcribed are skipped, so the pipeline can be re-pointed at a growing source list without redoing work — and isolates errors per item: a single failed download or transcription is logged and skipped rather than aborting the batch.
Stage 3 — token-aware chunking and indexing.
Splits every document into token-estimate chunks with overlap, so retrieval windows keep context across chunk boundaries. Each document gets a SHA256-based ID — stable, content-derived identity that survives renames and supports deduplication — and every chunk is recorded in CSV and JSONL manifests with its metadata. The output shape is what RAG tooling expects to consume.
Next up: an LLM summarization stage over the indexed corpus — planned, not yet implemented.
The pipeline is roughly 590 lines of Python across 3 scripts, written and iterated in October–November 2025. Three stages are implemented and working. The fourth — LLM summarization over the indexed corpus — is the next piece of work, and it is deliberately not claimed here until it exists.
The design choices are test-engineering habits applied to data engineering. Incremental re-runs make the pipeline idempotent, the way a good test procedure is repeatable. Per-item error isolation means one bad input produces one logged failure, not a corrupted batch — the same reason test trials are scored independently. Content-derived document IDs make every chunk traceable back to its source, the way a measurement should be traceable to its instrument.
Unreal Engine + JSBSim Drone Simulator
Configurable flight simulation for test planning and prototyping
Developed a configurable drone simulation environment pairing Unreal Engine visualization with JSBSim flight dynamics. The environment supports adjustable aircraft parameters, imported environments, and evaluation-oriented workflows — using simulation the way a test engineer does, for test planning, scenario familiarization, and prototyping ahead of physical trials.
ESPNOW Wireless Link
ESP32 peer-to-peer communication — embedded C++ prototyping
Prototyped a wireless peer-to-peer communication link between two ESP32 microcontrollers using Espressif’s ESP-NOW protocol, iterating through 6 prototypes to reach a functional transmitter/receiver pair. The work included custom data structures and callback-driven event handling for wireless transmission on embedded hardware, plus a MAC-address discovery utility that makes device pairing a repeatable workflow rather than a one-off. The transmitter/receiver core is adapted from DroneBot Workshop (2022) tutorial code; the iteration, data structures, and pairing workflow are the project’s own work.
LLM-Enabled Robotic Tour Guide (in progress)
Local LLMs meet ground robots — early prototyping
An in-progress prototyping effort integrating local large language models with ground robots — currently a Unitree GO2 quadruped — toward interactive, speech-driven facility tours. This is early-stage work: the speech interface and robot integration are under active prototyping, and this page will be updated as the project matures.
Earlier software lineage: the Swift work behind the Curiosell Systems apps did not start in 2025 — it traces back to a 2021 Swift project, War Challenge, built well before the studio existed.
Applied AI on test-range hardware — the Jetson Orin Nano YOLO-OCR video-scoring pipeline — is covered in the NIST case study.
Get in Touch
Questions about the software, AI, or embedded work? Reach out — contact@alexfraley.com.