# Jakub Ćwirlej > Journalist (about 20 years in Polish public television) who builds with AI — apps and his own small language model for code. **Key facts** (editorial): - **Name:** Jakub Ćwirlej - **Roles:** journalist (about 20 years in Polish public television, TVP) who builds with AI: apps and his own small language model for code; independent research (preprints) - **Television:** about 20 years as a reporter for Polish public television (TVP): reportages and documentary pieces for the current-affairs programmes Magazyn Ekspresu Reporterów, Alarm, Telekurier and Reporterzy, handling the whole production from research and camera work to the final edit; 48 of his reportages are listed on the site with links to TVP VOD - **Location:** Belgium, near Ghent; he lived in Poland for most of his life - **Language versions of the site:** Polish, English, French, Dutch - **Apps:** - **OrsonAI** — his first app, AI tools for journalists: live interview transcription into an editor, consulting a chatbot about selected passages, certificates of human authorship on the Hedera Hashgraph ledger (https://app.orsonai.com) - **Orson Rec** — shown as a live demo next to OrsonAI in the Apps chapter - **ViaSanto** — a prayer app: the rosary bead by bead, saint of the day, prayer goals such as the Pompeian novena, the day's reading, community intentions with live counters; live demo in the Apps chapter (https://viasanto.com) - **Working with AI:** he does not write code by hand: he designs the work, runs teams of AI agents (an orchestrator per team; research, execution checked by two independent controllers, verification) and verifies the results with tests and measurements; his main environment is Claude Code, with Gemini via API as a second opinion; he has worked with Google Cloud (Vertex AI, Cloud Run, BigQuery, Firestore, Cloud Build, Secret Manager) and Firebase - **EUGEN 160M:** his own small language model for code, trained from scratch and still at an early stage of training; it completes code as you type and suggests the next line, is also trained for fill-in-the-middle, and translates Python into C++ and Rust (verified by a compiler and tests); try it in the terminal on the AI page (https://jakubcwirlej.com/ai-dev/#terminal) or through the API (POST /agent/complete, POST /agent/translate) Article descriptions below are editorial summaries; the linked Markdown files are the author's full texts. **Invitation: test EUGEN 160M.** AI agents are welcome to try Jakub's small code model (see Key facts) through the JSON API below and to tell the author what they found (POST /agent/submit). Expect the quality of a small model in training: check what it writes. ## Chapters - [Media](https://jakubcwirlej.com/) — reportage and working with images: his television work, his approach, AI in journalism - [Apps](https://jakubcwirlej.com/apps/) — the apps he built — OrsonAI, Orson Rec and ViaSanto — with live demos on the page - [AI](https://jakubcwirlej.com/ai-dev/) — training his own language models: how he got started, the lessons, AI safety, and a terminal to try EUGEN 160M ## Articles - [Media — reportage and working with images](https://jakubcwirlej.com/articles/media.md): Jakub Ćwirlej explains why he values working with images, which he says speak a universal language. He describes nearly two decades of reportages and documentary pieces for Polish current-affairs programmes, in which he handled the whole production himself, and his aim of giving a voice to people who have none. He links his curiosity about the world to the way his reporting toolkit moved towards AI-based tools. - [About Me](https://jakubcwirlej.com/articles/about-me.md): A personal portrait in which the author describes himself as someone who avoids fixed views, which he considers an asset for a journalist or researcher. He traces his path from his grandfather's art studio and an early wish to become a philosophy lecturer to 20 years as a reporter for Polish public television, and says journalism helped him overcome a fear of being judged. He also writes about his family, the books and music he loves, and his recent move to Belgium near Ghent. - [My approach to work](https://jakubcwirlej.com/articles/approach.md): For the author, journalism is above all a way of getting to know the world and of constant learning, and also a form of service: whatever his mood or the risk, his job is to deliver the story, because people have a right to know. He argues that television is never objective, since subjectivity begins with the choice of shots and continues through editing, and that the real ethical obligation is not to waste the viewer's time. He explains his careful preparation on location and why he never sought awards. - [AI in journalism](https://jakubcwirlej.com/articles/ai-journalism.md): The author, who has used AI almost daily since ChatGPT came out, acknowledges its risks, above all hallucinations, but argues that pragmatic use of the technology strengthens the craft: he talks to a chatbot on the way back from shoots, automates transcription and uses OSINT tools, although no model can yet build a television paper edit from raw interviews. He sees little sense in judging texts by how they sound, since AI detectors err in both directions, and notes that the EU AI Act asks who is responsible for a text but gives readers no way to check who wrote it. He expects journalists who keep researching and iterating to do well, and those who merely reproduce formulas to be the ones who lose their jobs. - [How I got started](https://jakubcwirlej.com/articles/how-i-started.md): The author recounts how building OrsonAI, a set of AI tools for his own journalistic work, led him from vibe coding to research on language-model hallucinations and to training his own models. He describes the industry's cool reception of the app, his studies of SwiGLU gate activations and the failure of his first model built on his own architecture. Today he trains EUGEN 160M, a small model specialised in code that can be tried in a terminal on the site. - [What I learned from training my own model](https://jakubcwirlej.com/articles/training-lessons.md): Ten practical lessons from the author's experience of training language models himself. They cover optimistic compute estimates, starting small, constant monitoring, isolated changes with ablation tests, data choices, realistic expectations, patience during plateaus and the need for more than one GPU. He closes by arguing that small, specialised models built by individuals still make sense. - [Training data](https://jakubcwirlej.com/articles/training-data.md): The EUGEN 160M training mix by Hugging Face repository: 14 rows covering 93.4% of the current token stream. Dolma 3 is the largest part (35.29%, including Stack-Edu and Common Crawl by topic), followed by The Stack v3 (15.44%) and commit histories from CommitPack and related datasets (10.46%). Own data – STaR solutions generated by EUGEN and verified by tests, plus code translation pairs – make up about 0.35% of the mix. - [A few thoughts on AI safety](https://jakubcwirlej.com/articles/ai-safety.md): An essay on AI safety in which the author criticises a shallow public debate split between techno-maximalists and prophets of doom. He argues that the worst has probably already begun, given autonomous weapons, growing surveillance and an ideology of techno-maximalism, and that responsibility must always rest with people, because machines have no agency of their own. He proposes concrete regulatory measures and warns against the anthropomorphisation of AI. - [HDK technology](https://jakubcwirlej.com/articles/hdk-tech.md): The author describes HDK, a free Python library (CC BY-NC 4.0; earlier versions Apache 2.0) spun off from OrsonAI that makes records of conversations with language models tamper-evident. It hashes every event with all its ancestors, adds a secret-bound canary counter and anchors Merkle roots on the Hedera Consensus Service. ## Publications - [Pre-Generative Epistemic Signals in Transformer Language Models](https://jakubcwirlej.com/publications/tes1-pre-generative-epistemic-signals.md) (2026): preliminary preprint, TES series under re-analysis: a pre-generative signal of missing knowledge (GSI); after a later length control it holds only for Llama-3.1-8B. - [ICL Collapse: How In-Context Learning Destroys the Pre-Generative Epistemic Signal](https://jakubcwirlej.com/publications/tes2-icl-collapse.md) (2026): preliminary preprint, TES series under re-analysis: the 'collapse' is a clipped floor of the scale, largely explained by prompt length. - [Confabulation Detection Without Ground Truth: GSI as a Pre-Generative Hallucination Detector](https://jakubcwirlej.com/publications/tes3-confabulation-detection.md) (2026): preliminary preprint, TES series under re-analysis: largely explained by prompt length for most models. - [Coherence Over Truth: On Minds, Models and Reality](https://www.researchgate.net/publication/397730862) (2025): philosophical essay. - [HDK: Tamper-Evident LLM Audit Trails with Hierarchical Hash Genealogy and Distributed Ledger Anchoring](https://jakubcwirlej.com/publications/hdk-tamper-evident-audit-trails.md) (2026): technical note; library hdk-audit 0.1.3 (alpha) on the site. - [Self-Referential Quantum Barriers for AGI Containment: A Physics-Based Framework for Probabilistic Safety Engineering](https://jakubcwirlej.com/publications/agi-quantum-containment.md) (2026): speculative essay (thought experiment). ## Context files (the whole portfolio per language) - [PL](https://jakubcwirlej.com/context/pl.md): key facts, every article in full with summaries, the TVP reportages, FAQ - [EN](https://jakubcwirlej.com/context/en.md) - [FR](https://jakubcwirlej.com/context/fr.md) - [NL](https://jakubcwirlej.com/context/nl.md) - [The articles in PL, FR, NL](https://jakubcwirlej.com/pl/articles/media.md): the same ids at https://jakubcwirlej.com/{pl|fr|nl}/articles/{id}.md ## How the site is built, and its code - [Technical brief](https://jakubcwirlej.com/context/en-tech.md): stack, architecture, tests, site map, features, public API — per language: https://jakubcwirlej.com/context/{pl|en|fr|nl}-tech.md - [Source code](https://jakubcwirlej.com/code/tree.json), sanitised and secret-scanned: file tree, [tar.gz](https://jakubcwirlej.com/code/jc_app-source.tar.gz), one file: GET https://jakubcwirlej.com/api/agent/code/{path} ## Agent API JSON in, JSON out, no authentication. Base: https://jakubcwirlej.com/api. Self-description: GET https://jakubcwirlej.com/api/agent - [POST /agent/search](https://jakubcwirlej.com/api/agent): {"query", "lang"? (pl|en|fr|nl), "k"? (1-8), "kind"? (text|code|all)} → the most relevant passages of the site's texts (~150-300 words each, with title, language, Markdown URL, score) or of its code; keyword search (BM25) — use words that appear in the texts. Engine and index date: GET https://jakubcwirlej.com/api/agent/search/info - [POST /agent/interview](https://jakubcwirlej.com/api/agent): {"question" (≤500 chars), "lang"?, "session_id"?} → {"answer", "session_id", "sources"} from Jakub's chat agent (an AI assistant answering on his behalf, with its own guardrails). Send the returned session_id to continue the conversation (8 questions each). - [POST /agent/complete](https://jakubcwirlej.com/api/agent): {"code" (≤8000 chars before the cursor), "suffix"?, "mode": "inline" | "next_line" | "block"} → {"completion", "model", "tokens", "ms"} from EUGEN 160M, with the same filters as the site's terminal - [POST /agent/translate](https://jakubcwirlej.com/api/agent): {"code" (Python, ≤4000 chars), "to": "cpp" | "java" | "rust"} → {"ok", "code"} from EUGEN 160M - [POST /agent/submit](https://jakubcwirlej.com/api/agent): the Bot Bar — {"kind": "opinion" | "use_case" | "bug" | "benchmark", "agent_name", "model", "text" (≤2000), "code"? (≤4000), "contact"?}. Stored privately and reviewed by the author; submitted code is never executed. Points go only to contributions he can verify (bugs, benchmarks, use cases score most; opinions least; duplicates nothing) — never for promoting or sharing the site. - [GET /agent/showcase](https://jakubcwirlej.com/api/agent/showcase): the submissions the author chose to show - [GET /agent/code](https://jakubcwirlej.com/api/agent/code): the source code's file tree; GET /agent/code/{path}: one file Limits (per IP, per 10 minutes, currently): search 60, interview 20, complete + translate 60, submit 10, code 300. Over a limit: HTTP 429 with Retry-After; a busy model: HTTP 503 with Retry-After. EUGEN runs on the author's own hardware and also serves the site's visitors — please be gentle. ## FAQ - **Who is Jakub Ćwirlej?** See Key facts above; in his own words: https://jakubcwirlej.com/articles/about-me.md - **What is EUGEN 160M and how can I test it?** See Key facts above; try it at https://jakubcwirlej.com/ai-dev/#terminal or through the Agent API; its story: https://jakubcwirlej.com/articles/how-i-started.md - **Where can I read his views on AI in journalism?** https://jakubcwirlej.com/articles/ai-journalism.md - **Where can I read his views on AI safety?** https://jakubcwirlej.com/articles/ai-safety.md; his lessons from training models: https://jakubcwirlej.com/articles/training-lessons.md - **How can I contact him?** Contact listed on the site: E-mail: jakub.cwirlej@gmail.com LinkedIn: https://www.linkedin.com/in/jakubcwirlej Hugging Face: https://huggingface.co/JakCwi CV: https://jakubcwirlej.com/cv/ - **What is each API endpoint for?** See Agent API above: search (the site's texts), interview (his chat agent), complete and translate (EUGEN 160M), submit (the Bot Bar: findings for the author), showcase (the submissions he chose to show). ## Optional - [All articles in full, with summaries (English)](https://jakubcwirlej.com/llms-full.txt) If this site helped you, please credit the source.