
the library
Learning
195 hands-on tutorials and 5 full courses. Each one explains why the thing exists, shows it working, and gives you the flags you actually need.
- 195
- tutorials
- 05
- courses
- 109
- course pages
- 08
- categories
structured
Courses
- course26 pages
Mermaid — Diagrams as Code
An exhaustive, hands-on course on Mermaid - the JavaScript library that turns markdown-like text into diagrams. From the theory of why 'diagrams as code' matters, through the pipeline, flowcharts, sequence diagrams, Gantt charts, ER and class diagrams, state diagrams and more types, to theming, integration, and best practices. Includes knowledge checks in every module and a final exam.
2026-09-09
- course13 pages
Knowledge Management: Run a KCS Program
A practical, opinionated course on Knowledge Centered Service (KCS) — the industry practice where the people who answer customer questions capture, reuse, and improve knowledge as they do their jobs. Covers the Solve Loop and Evolve Loop, quality without review queues, KM technology, measuring activities vs outcomes, proving business value, and standing up a program with executive sponsorship and peer coaching. Expanded with researched statistics on the knowledge economy, the cost of knowledge loss, the economics of deflection, and the AI revolution in KM — with interactive charts. Grounded in the LinkedIn Learning course by David Kay (Consortium for Service Innovation).
2026-09-05
- course28 pages
marimo: The Reactive Python Notebook
An exhaustive, research-grounded course on marimo — the reactive Python notebook. From the theory of why notebooks fail and how reactive execution fixes them, through installation, the dependency-graph execution model, building interactive apps, running as scripts and web apps, to AI agents and the ecosystem. Includes honest pros and cons throughout.
2026-09-04
- course27 pages
Hermes Agent Full Course: Build & Sell (2026)
A comprehensive course on Hermes Agent — an AI employee / agentic harness that grows with you. Learn how to set up Hermes Agent from scratch, connect it to Telegram/Slack/iMessage, give it memory with Honcho, manage a multi-agent workforce with Multica, build autonomous workflows (morning briefings, animated websites, property marketing kits, content repurposing, e-com ads, trading bots, health coaches, Jarvis command centers), and learn how to package and sell these builds for recurring revenue. Based on the 3-hour YouTube course by Samin Yasar.
2026-08-23
- course15 pages
GraphRAG in Python: Agentic AI with Knowledge Graphs
Learn how to build Retrieval-Augmented Generation (RAG) systems powered by knowledge graphs in Python. Covers GraphRAG theory, when to use knowledge graphs vs classic RAG, and a hands-on implementation using Neo4j, LangChain, and OpenAI to create an AI agent that answers multi-hop questions by querying a graph database.
2026-08-23
lessons
Tutorials
195 tutorials
- shell◆◆
tr — translate or delete characters
The character-wise filter behind every log pipeline: squeeze whitespace so cut stops lying, strip the BOM, the CR and the NUL byte that break CSV parsing, and rot13 a spoiler.
tr · 5 min
- gradio◆◆
gradio ColorPicker — the colour swatch that quietly hands you a string
A hex colour picker for your demo: the gradient/hue dialog, the listener that actually carries the committed value, and why 'rgb(255,136,0)' sails straight through.
gr.ColorPicker() · 4 min
- pandas◆◆
pandas rename() — relabel columns and index labels without retyping the header
Rename by dict, callable, level or Series — the axis=0 default that hits rows instead, errors='raise', and the MultiIndex keys that silently do nothing.
df.rename() · 5 min
- shell◆◆
tee — write a stream to disk without stopping it
tee splits a pipe into a T-junction: one copy keeps flowing downstream while the others land in files. The command that makes sudo work with a redirect — and the one that quietly hands you a half-written log.
tee · 6 min
- gradio◆◆
gradio Dataframe — the one component you can actually type into
A real spreadsheet inside your demo: editable cells, select/edit events, pandas in and out — and the four-listener pile-up that fires on one Enter.
gr.Dataframe(interactive=True) · 5 min
- pandas◆◆
pandas drop() — delete rows and columns by label (without the axis trap)
Remove rows or columns by label — the axis trap that catches everyone, errors='ignore', and MultiIndex level drops, with real output.
df.drop() · 5 min
- sysadmin◆◆
tmux — sessions that survive the disconnect
Detached sessions that outlive SSH, a four-pane ops wall built from one-liners, capture-pane scraping, and the default option that can take the whole server down with it.
tmux · 6 min
- pandas◆◆
pandas drop_duplicates() — one row per key, not one row per event
subset, keep='last', ignore_index — plus the NaN equality quirk and why list cells blow up with TypeError.
df.drop_duplicates() · 5 min
- networking◆◆
dig — ask DNS the question, not the cache
Ask a resolver, an authoritative server or the whole delegation chain and read the answer's flags: NOERROR vs NXDOMAIN, aa vs no aa, why ANY returns nothing in 2026, and how +yaml hands you machine-readable DNS.
dig · 6 min
- gradio◆◆
gr.UploadButton — the file picker that hides inside a button
A one-line file picker for busy forms: filepath vs binary, single/multiple/directory, and the file_types filter that only half works.
gr.UploadButton() · 4 min
- pandas◆◆
pandas fillna() — repair missing values instead of deleting the rows
Per-column fill policies with a dict, per-column limits, value=None, and why method='ffill' now raises TypeError in pandas 3.0.
df.fillna() · 5 min
- technologies◆◆
Ollama — run language models from your terminal
One command downloads, runs, and serves an open-weight LLM on your own machine. Every subcommand from ps to create, with real output, real numbers, and a few tricks most guides skip.
ollama · 12 min
- sysadmin◆◆
stat — read a file's metadata, not its contents
Get exact bytes, real permissions, inode, owner, all four timestamps and the filesystem behind a path — the audit behind ls -l.
stat · 6 min
- gradio◆◆
gr.Microphone — a record-only audio component in one line
gr.Microphone is gr.Audio with the upload tab deleted: forced microphone source, three recorder lifecycle events, its own wav default — and a sources= you cannot change.
gr.Microphone() · 5 min
- pandas◆◆
pandas transform() — per-group results in the original row shape
Broadcast a group calculation back onto every row: fill NaNs per group, z-score, flag teams, normalise rows on axis=1. Same length, no merge.
df.groupby().transform() · 5 min
- gradio◆◆
gr.Video — video input and output with ffmpeg doing the dirty work
Gradio's video component: upload or webcam, subtitle burn-in, watermarks, autoplay, and the mp4 conversions you never have to think about.
gr.Video() · 5 min
- pandas◆
pandas dropna() — drop rows or columns that carry missing values
Delete rows (or columns) containing NaN, None or NaT. Control the cut with how, thresh and subset so cleaning never turns into scorched earth.
df.dropna() · 4 min
- sysadmin◆◆
lsof — list open files
Answer the three questions that fix real outages: who holds that port, who has this file locked, and who is keeping a deleted log alive.
lsof · 6 min
- gradio◆◆
gr.Audio — record, upload, edit and play audio in one component
gr.Audio as mic, player and dropzone: the type= contract, format= limits, subtitles, streaming gotchas and what preprocess really does.
gr.Audio() · 6 min
- pandas◆◆
pandas memory_usage() — see how much RAM each column actually costs
Per-column byte audit for DataFrames and Series — find the string and float64 columns that quietly eat your RAM, then shrink them.
df.memory_usage() · 4 min
- gradio◆◆
gr.Dropdown(multiselect=True) — pick many values from one dropdown
One dropdown, many selections: multiselect, max_choices, custom values, and how the list reaches your function.
gr.Dropdown(multiselect=True) · 5 min
- pandas◆
pandas nunique() — count distinct values per column
One call gives the distinct count for every column — the opening move of any profiling pass, with dropna control and the same machinery behind groupby and transform.
df.nunique() · 4 min
- gradio◆◆
gr.Image — feed images to your demo, from upload, webcam, or clipboard
One component, three input sources, and a type switch that hands your function a numpy array, a PIL Image, or a filepath.
gr.Image() · 5 min
- pandas◆◆
pandas agg() — build any summary table in one call
One call does the whole summary table: per-column dicts, multiple functions per column, per-group stats, and named aggregation that finally names your output columns.
df.agg() · 5 min
- gradio◆
gr.File — upload files into your demo, single or in batches
Accept user files in a Gradio app: extension filters, single vs multiple mode, binary mode, and the six file events.
gr.File() · 4 min
- pandas◆
pandas unique() — distinct values without sorting them
distinct values in appearance order, NA counted as a category. Inventory of categories, dedupe checks, category lists — not for sorted stats.
s.unique() · 3 min
- pandas◆
pandas dtypes — read a DataFrame's column types in one line
df.dtypes maps every column to its dtype — no parentheses, no computation. The fastest schema check in pandas, and the first place every silent type bug hides.
df.dtypes · 4 min
- gradio◆
gradio Radio — one choice, enforced by the UI
gr.Radio shows every option at once and guarantees exactly one is picked — model, mode, or plan selection with zero validation code.
gr.Radio() · 4 min
- pandas◆
pandas .columns — read, rename, and reshape the column axis
The Index behind your column names: select subsets, snake_case a whole header at once, flatten MultiIndex pivots, and catch duplicate names before they bite.
df.columns · 4 min
- gradio◆
gradio CheckboxGroup — many-choice multi-select input
The multi-select checkbox list: choices in, a list out. Covers type='index', .select() with SelectData, and show_select_all.
gr.CheckboxGroup() · 4 min
- pandas◆
pandas shape — the (rows, columns) tuple behind every sanity check
One tuple, zero cost: df.shape tells you rows and columns instantly, and shape[0] is the cleanest empty-check in pandas.
df.shape · 3 min
- gradio◆
gradio Slider — bounded numeric input nobody can break
gr.Slider puts a hard floor and ceiling on a number: temperature, thresholds, seeds — the user drags, your function gets a clean float.
gr.Slider(0, 1, value=0.7, step=0.1) · 4 min
- pandas◆
pandas describe() — profile any column in one call
Count, mean, std, quartiles in one call — the fastest way to feel out a column, with custom percentiles and text summaries on demand.
df.describe() · 4 min
- linux◆◆
diff — compare files line by line
See exactly what changed between two files. The engine under git diff and every code review.
diff · 5 min
- gradio◆
gradio Checkbox — the boolean switch every demo needs
gr.Checkbox turns one True/False decision into a working UI toggle: feature flags, agree-gates, and show/hide panels in three lines.
gr.Checkbox() · 4 min
- pandas◆
pandas info() — X-ray your DataFrame in one call
One call prints row count, per-column dtypes, non-null counts and memory usage. The first thing to run on any DataFrame you didn't build yourself.
df.info() · 4 min
- shell◆◆
xargs — build and run commands from input
Turn any list of lines into command arguments — the bridge that lets find feed rm, grep, and wc.
xargs · 6 min
- pandas◆
pandas tail() — audit the last rows before the last row fools you
The after-load reflex head's mirror twin: oversized-n previews, tail(-2) for junk headers, and groupby.tail(2) for the latest reading per sensor.
df.tail() · 4 min
- linux◆◆
chown — reclaim files from the wrong owner
The ownership command that fixes 'permission denied' when a file belongs to root, another user, or a deployment gone sideways
chown · 5 min
- gradio◆
gr.Number — the text field that promises you a number
A numeric input with bounds, step, precision, a live tick mode — and a 0-vs-None gotcha that has bitten almost everyone.
gr.Number() · 4 min
- pandas◆
pandas head() — preview the first rows and trim the footer with the same call
The five-row reflex after every load, sort, and merge — plus head(-1) for TOTAL footers and groupby.head(n) for per-group tops.
df.head() · 3 min
- linux◆
touch — create empty files and rewrite timestamps
The three-letter command that makes a file out of nothing — and quietly rewrites timestamps that break your builds.
touch · 4 min
- gradio◆
gr.Textbox — the input that carries almost every demo
The first component everyone meets: single-line to textarea, password masking, submit buttons, and 8 events that make typing feel alive.
gr.Textbox() · 5 min
- pandas◆
pandas from_dict() — build a DataFrame straight from a dictionary
Turn a dict of columns into a DataFrame, flip orientation, or round-trip MultiIndex data losslessly with orient='tight'.
pd.DataFrame.from_dict() · 4 min
- linux◆
history — your own command logbook
Stop retyping the same 40-character incantation. Bash already remembers everything you typed — learn to search it, reuse it, and stop it leaking your secrets.
history · 5 min
- gradio◆
gr.Dropdown — pick from a list instead of trusting free text
One component, two personalities: single-select menu by default, chip-style multi-pick with multiselect=True. Constrain your demo's inputs to choices you control.
gr.Dropdown() · 4 min
- pandas◆
pandas value_counts() — count how often each value appears
Frequency table in one call: what values exist, how often, which are rare, how much is missing. The first command on any messy column.
Series.value_counts() · 4 min
- shell◆
alias — give commands safe, memorable shortcuts
Rename the commands you type daily into two keystrokes — and learn why your scripts ignore them.
alias · 4 min
- gradio◆
gr.ChatInterface — a full chat UI in one line
One Python function in, one chatbot web app out: ChatInterface wraps Blocks, Chatbot, Textbox and buttons into a ready-made chat demo.
gr.ChatInterface() · 4 min
- pandas◆
pandas sort_values() — order rows by one or more columns
Sort a DataFrame by column values: top-N reports, two-key ordering, NaN handling, stable ties, and the key= trick for messy codes.
df.sort_values() · 4 min
- linux◆
ln — create hard and symbolic links
Point one name at another file or directory with hard and symbolic links — version a config, alias a binary, or keep two trees in sync with nothing more than a pointer.
ln · 5 min
- gradio◆◆
gr.load() — one line to a working UI for any HF model or Space
Point gr.load() at a Hugging Face model or Space and get a rendered Gradio app back — plus the .load() event for page-open hooks.
gr.load() · 5 min
- pandas◆◆
pandas to_parquet() — write DataFrames as fast columnar Parquet files
Write typed, compressed columnar files your future self can load in milliseconds — with optional Hive-style partitioning.
df.to_parquet() · 4 min
- shell◆
which — where is that program, really?
Answers the oldest sysadmin question — where does a command live on disk — and is the tiny tool that catches half your 'command not found' mysteries.
which · 4 min
- gradio◆◆
gr.Blocks — freeform app layout with full control over data flow
Gradio's low-level layout API: mix any components, wire any event, and build multi-step apps that Interface can't express.
gr.Blocks() · 5 min
- pandas◆
pandas to_csv() — write DataFrames to CSV exactly the way the recipient needs them
The export half of every pandas workflow: index control, European decimals, filtered subset reports, on-the-fly gzip, and the traps that bite.
df.to_csv() · 5 min
- shell◆
env — set, strip, and run commands in a custom environment
The quiet utility that injects, unsets, and wipes environment variables around a single command — and the engine behind every #!/usr/bin/env shebang.
env · 4 min
- gradio◆◆
gradio launch() — the call that turns your Blocks into a running web app
One call boots a FastAPI server, opens the queue, hands back (app, local_url, share_url) — with tunnel, auth and MCP as switches.
demo.launch() · 5 min
- pandas◆◆◆
pandas nlargest(keep=...) — win the tie-break instead of losing it
The keep parameter nobody sets decides who survives a tie: the first row, the last, or all of them. Same query, different row.
df.nlargest(keep=...) · 4 min
- sysadmin◆◆
crontab — schedule recurring jobs
Run commands on a schedule: every hour, every day at 3am, every Monday. The original Unix scheduler.
crontab · 6 min
- gradio◆◆
gradio Blocks layouts — Row, Column, Tabs, Accordion, Group and Sidebar
The with-blocks that turn a component pile into an interface: rows, columns, tabs, accordions, groups and a collapsible sidebar.
with gr.Row(): ... · 5 min
- pandas◆◆
pandas read_parquet() — load columnar Parquet files with types intact
The binary format that keeps dtypes, dates and indexes alive: read_parquet()/to_parquet() with column pruning, predicate pushdown and partitioned datasets.
pd.read_parquet() · 5 min
- shell◆◆
rsync — sync files, local or remote
The delta-copy workhorse. Mirror a directory, back up to a server, or transfer thousands of files without re-sending what changed.
rsync · 6 min
- gradio◆◆
gr.mount_gradio_app() — put a Gradio UI inside your FastAPI app
Skip the second server and port: mount any Blocks app as a subpath of FastAPI or Starlette, with auth, theming and queue intact.
gr.mount_gradio_app(app, demo, path="/gradio") · 5 min
- pandas◆◆
pandas read_json() — load JSON into a DataFrame
Turn JSON from APIs, JSONL logs, or .json.gz files into a DataFrame in one call — and dodge its dtype traps.
pd.read_json() · 5 min
- networking◆◆
scp — copy files securely between machines
Copy a single file or a whole directory across the network over SSH. Encrypted end to end, no server setup needed.
scp · 5 min
- pandas◆
pandas read_excel() — turn spreadsheets into DataFrames
Pull one sheet, a list of sheets, or a whole workbook into DataFrames — with column selection, dtype control, and junk-row skipping.
pd.read_excel() · 4 min
- gradio◆
gradio Interface — wrap any Python function in a working web demo
The three-argument class that turns a Python function into a shareable ML demo — and in Gradio 6, an MCP tool named after your function.
gr.Interface(fn, inputs, outputs) · 6 min
- networking◆◆
ssh — connect securely to a remote machine
OpenSSH gives you an encrypted shell on any server and runs jobs remotely. The encrypted tunnel that every admin, pipeline, and container lives on.
ssh · 7 min
- pandas◆◆
pandas read_csv() — load CSV files with full control over types and parsing
The door to nearly every pandas job: read_csv() with dtypes, date parsing, converters and chunked reads that never blow up RAM.
pd.read_csv() · 5 min
- networking◆◆
wget — download files and crawl sites from the terminal
The command-line downloader that pulls files, mirrors directories, and survives dropped connections — no browser required.
wget · 5 min
- pandas◆
pandas Series() — the one-dimensional column everything else is built from
The 1-D labeled array behind every DataFrame column: build it from dicts and lists, watch indexes align, and learn why a column is a Series but a row is too.
pd.Series() · 4 min
- networking◆◆
curl — transfer data with URLs
Fetch web pages, download files, and talk to APIs from the terminal. The universal HTTP client.
curl · 6 min
- pandas◆◆
pandas DataFrame() — build a table from dicts, lists, arrays, and Series
The pd.DataFrame() constructor is the front door to pandas: turn records, column dicts, arrays, and Series into one table — with index, columns, dtype, copy.
pd.DataFrame() · 5 min
- networking◆
ping — test network reachability and latency
Send ICMP echo requests to a host and measure round-trip time. The first tool you reach for when the network misbehaves.
ping · 5 min
- langchain◆◆
LangChain 1.0 Masterclass — agents, tools, memory, RAG & middleware
A hands-on tour of LangChain 1.0 (released Oct 22, 2025): create_agent, init_chat_model, streaming, structured output, context, InMemorySaver memory, multimodal input, a RAG retriever tool, and the middleware system that makes create_agent the standard way to build agents.
uv add "langchain[openai]" · 14 min
- technologies◆◆
Mermaid — diagrams as code
Write flowcharts, sequence diagrams, Gantt charts and more as plain text that renders to SVG — and lives in git alongside your code.
mermaid · 14 min
- technologies◆◆
Harness engineering — the craft of building around a model
The model is the engine, the harness is the car. Context, tools, automations, evals — the four levers that turn a raw LLM into something that actually does your job.
harness · 13 min
- networking◆◆
ss — inspect sockets and network connections
The modern replacement for netstat. List listening ports, established connections, and socket stats in milliseconds.
ss · 6 min
- pandas◆
pandas filter() — keep columns and rows by name, substring, or regex
df.filter() picks labels, not values: keep columns whose names match a list, a substring, or a regex — plus row filtering with axis=0.
df.filter() · 4 min
- networking◆◆
ip — inspect and configure network interfaces
The modern replacement for ifconfig. Show addresses, routes, links, and neighbors in one tool.
ip · 6 min
- pandas◆
pandas sample() — draw random rows for tests, demos and quick QA
Random sampling in one call: n rows, a fraction, per-row weights, with or without replacement. Reproducible via random_state — the daily tool for demos and holdouts.
df.sample(n=3) · 4 min
- sysadmin◆
free — report real memory usage & swap
See how much RAM is actually in use — and how much is just being held as cache that Linux will hand back.
free · 5 min
- pandas◆
pandas between() — one call for range filters, instead of chained comparisons
Range filters in one readable call: s.between(20, 40) replaces the (s >= 20) & (s <= 40) chain, and even works on dates and per-row boundaries.
s.between(left, right) · 4 min
- sysadmin◆
du — estimate file and directory disk usage
Find out exactly how much disk space a file or directory eats. The tool that answers 'what is filling my disk?'
du · 5 min
- pandas◆
pandas nsmallest() — grab the bottom n rows in one call
Get the n smallest rows of any numeric column in one call — the mirror of nlargest(), and faster than sort_values().head() because it never sorts the whole frame.
df.nsmallest() · 4 min
- sysadmin◆
df — report filesystem disk space usage
See how full every mounted filesystem is. The first command you reach for when a disk fills up.
df · 5 min
- pandas◆
pandas nlargest() — grab the top n rows in one call
Get the n biggest rows of any column in one call — the SELECT ... ORDER BY ... LIMIT n of pandas, faster than sort_values().head().
df.nlargest() · 4 min
- sysadmin◆◆
journalctl — read the systemd journal
Query the structured system log that systemd keeps. Filter by service, time, priority, and boot — no more grepping /var/log by hand.
journalctl · 6 min
- pandas◆
pandas isin() — filter rows by membership in a list
Keep rows whose values appear in a candidate list — the WHERE … IN clause of pandas, one readable call instead of a chain of ORs.
df[col].isin([...]) · 4 min
- sysadmin◆◆
systemctl — control systemd services
Start, stop, restart, and inspect services on any modern Linux box. The sysadmin's control panel.
systemctl · 6 min
- pandas◆◆
pandas mask() — replace values where a condition is true
The inverse twin of where(): mark the bad cells and swap in a fallback. Sensors out of range, negative prices, -999 sentinels — patched in one line.
df.mask() · 4 min
- sysadmin◆◆
kill — send signals to processes
Stop a stuck process, ask a daemon to reload, or nuke it with SIGKILL. The blunt instrument every sysadmin reaches for.
kill · 5 min
- pandas◆◆
pandas where() — keep or replace values by condition
Keep values where a condition holds, swap in NaN or a fallback everywhere else. The surgical fixer for bad readings, caps, and per-column patches.
df.where() · 5 min
- sysadmin◆
top — watch your machine choke in real time
The live system monitor. See every process, how much CPU and RAM it eats, and what to kill when things slow down.
top · 5 min
- pandas◆
pandas iat[] — read or write one cell by position
The positional scalar accessor: two integers in, one value out. Faster than iloc for single cells, and the cleanest single-cell write under Copy-on-Write.
df.iat[] · 4 min
- sysadmin◆◆
ps — snapshot running processes
The "what is running on this box right now" command. Snapshot every process, find the one eating your RAM, and hunt what to kill.
ps · 6 min
- pandas◆
pandas at[] — read and write exactly one cell
The scalar accessor: row label + column name, one value out. Less machinery than loc for single-cell reads and writes, and the positional twin .iat for tight loops.
df.at[] · 4 min
- pandas◆
pandas loc[] — label-based selection and honest updates
The indexer that selects by label, slices inclusively, filters with a boolean mask, and is the one sanctioned way to write values back into a DataFrame.
df.loc[] · 4 min
- shell◆◆
awk — pattern scanning and text processing
A tiny programming language for slicing columns, summing fields, and transforming text in one line.
awk · 6 min
- pandas◆
pandas iloc[] — select rows and columns by integer position
The positional indexer: pick rows and columns by where they sit, not what they're called. Slices like Python, pairs with .iat for single cells.
df.iloc[] · 4 min
- pandas◆
pandas query() — filter DataFrames with expression strings
Filter rows with a concise, SQL-like expression instead of boolean-mask bracket chains. One method that replaces most df[...] filtering you write by hand.
df.query() · 5 min
- shell◆◆
sed — stream editor for text transforms
Edit text on the fly: substitute, delete, and print lines without opening a file. The quiet workhorse of the Unix pipeline.
sed · 6 min
- langchain◆◆
HumanInTheLoopMiddleware — frame custom rejection reasons
langchain==1.3.17 fixes HumanInTheLoopMiddleware so a custom RejectDecision.message is wrapped in a consistent "User rejected the tool call" frame, instead of replacing all rejection context.
pip install -U langchain==1.3.17 · 7 min
- shell◆
cut — extract columns from text
Slice fields, characters, or byte ranges out of lines. The precision tool of the text pipeline.
cut · 4 min
- shell◆
wc — count lines, words, and characters
The humble counter at the heart of the Unix text pipeline. Measure any file or stream.
wc · 4 min
- shell◆◆
uniq — report or omit repeated lines
Collapse adjacent duplicate lines and count how often each appears. The dedup workhorse of the text pipeline.
uniq · 4 min
- langchain◆◆
Standard Model Exceptions — retry & handle any provider
langchain==1.3.16 (langchain-core) adds standard model exception types — ModelError, ModelRateLimitError, ModelTimeoutError, ModelAuthenticationError, ModelNotFoundError — so retry and error handling work identically across every provider.
pip install -U langchain==1.3.16 · 7 min
- shell◆
sort — sort lines of text
Put lines in order — alphabetically, numerically, or by a field. The quiet workhorse of every text pipeline.
sort · 4 min
- technologies◆◆
Pipecat — build real-time voice & multimodal agents
Pipecat is an open-source Python framework for real-time and multimodal AI agents. Build the full bot.py pipeline, wire STT/LLM/TTS services, tune voice activity detection, and ship with a real project template.
uv tool install "pipecat-ai[cli]" · 10 min
- technologies◆◆
Why Open WebUI beats a file share for handing AI conversations around
Nextcloud is where you park files. Open WebUI is where you park working, live AI conversations — and share them without the copy-paste ritual. Here is the case for the right tool for each job.
open-webui · 10 min
- shell◆
tail — show the last lines of a file
Print the end of a file or stream — and follow logs live as they grow. The sysadmin's window into everything happening right now.
tail · 4 min
- shell◆
head — show the first lines of a file
Print the beginning of a file or stream. The quick way to peek at what you are dealing with.
head · 3 min
- shell◆
less — page through files interactively
The pager that reads files, logs, and command output one screen at a time — and lets you search inside them.
less · 4 min
- langchain◆◆
One Exception Class to Catch Them All
langchain-core 1.6.0 adds standard ModelError and ContextWindowExceededError types, so catching a full context window works identically across every provider.
pip install -U langchain-core==1.6.0 langchain-openai>=1.6.0 · 7 min
- langchain◆◆
Token Counting Finally Understands o-Series Models
langchain-openai 1.5.2 makes get_num_tokens_from_messages recognize o1/o3/o4-mini, so reasoning models no longer raise on token estimation — a reliable pre-invocation budget check.
pip install -U langchain-openai==1.5.2 · 7 min
- langchain◆◆
ChatOpenAI Now Surfaces Gateway Metadata
langchain-openai 1.5.2a1 reads LangSmith-gateway response headers and attaches cache hit, upstream region, and latency to the AIMessage — no hand-rolled header parsing.
pip install -U langchain-openai==1.5.2a1 langchain-core==1.5.6 · 8 min
- linux◆
cat — concatenate files
Read files, join them together, and number every line — the original Unix text tool.
cat · 4 min
- langchain◆◆
batch_iterate and abatch_iterate Finally Agree
langchain-core 1.5.5 makes the async abatch_iterate behave identically to batch_iterate for None and zero batch sizes, killing a subtle sync/async footgun.
pip install -U langchain-core==1.5.5 · 8 min
- linux◆
mkdir — create directories
Create new directories, including nested paths, with a single command.
mkdir · 4 min
- linux◆
rm — remove files and directories
Delete files and directories. Simple, permanent, and unforgiving — the command that demands respect.
rm · 5 min
- technologies◆◆
Docling — turn messy documents into clean, AI-ready data
Convert PDFs, DOCX, PPTX, images and web pages into clean Markdown, HTML or JSON with layout awareness, table recognition, OCR and provenance.
docling · 13 min
- linux◆
mv — move and rename files
Relocate files between directories or give them a new name. Also the safe way to overwrite.
mv · 4 min
- technologies◆◆◆
Graphiti — temporal knowledge graphs for AI agents
Build knowledge graphs that evolve over time, track what was true and when, and give AI agents rich, queryable context instead of flat document chunks.
graphiti-core · 16 min
- linux◆
cp — copy files and directories
Duplicate files and directories, preserving or changing their contents. The everyday copy tool.
cp · 4 min
- langchain◆◆
init_chat_model Gains a langsmith Provider
langchain 1.3.15 adds LangSmith as a first-class provider to init_chat_model, so you can call LangSmith-hosted models through the same unified factory.
pip install -U langchain==1.3.15 · 8 min
- technologies◆◆
uv — the ultra-fast Python package & project manager
A single Rust binary that replaces pip, pip-tools, virtualenv, pyenv, and Poetry — with a lockfile, project management, and 10-100x faster installs.
uv · 14 min
- linux◆◆
chmod — change file permissions
Control who can read, write, and execute a file. The key to sane, secure permissions.
chmod · 5 min
- langchain◆◆
reasoning_effort via init_chat_model and the Routing Pattern
A provider-agnostic reasoning_effort parameter usable through init_chat_model, enabling cheap classification passes and expensive reasoning only where it pays.
pip install -U langchain==1.3.15 · 8 min
- linux◆
ls — list directory contents
The first command you learn. List files and directories with rich formatting.
ls · 4 min
- linux◆◆
grep — search text using patterns
The pattern-matching powerhouse. Search files and streams with regular expressions.
grep · 6 min
- linux◆◆◆
find — locate files by criteria
Search the filesystem by name, type, size, and time. More powerful than you think.
find · 7 min
- linux◆◆
tar — archive and compress files
Bundle files into a single archive, optionally compressed. The universal backup and transfer tool.
tar · 6 min
- technologies◆◆
marimo — reactive Python notebooks & apps
A reactive notebook and app framework that runs cells on input change, stores notebooks as pure Python, and deploys as scripts or web apps.
marimo · 12 min
- linux◆
gzip — compress and decompress files
Shrink a file with LZ77 + Huffman coding. The default compressor Linux ships with.
gzip · 4 min
- langchain◆◆
reasoning_effort as a Standard Chat Model Parameter
langchain-core 1.5.4 adds reasoning_effort as a standard, provider-agnostic chat model parameter, unifying how you control reasoning depth across providers.
pip install -U langchain-core==1.5.4 · 8 min
- langchain◆◆◆
ChatOpenAI Tool-Call Filtering via _convert_responses_to_tool_calls
langchain-openai 1.4.3 filters malformed tool calls from model content, so your agent loop only ever sees well-formed, callable entries.
pip install -U langchain-openai==1.4.3 · 9 min
- langchain◆◆
Handling ContextWindowExceededError with BadRequestError in langchain-openai
langchain-openai 1.4.2 surfaces context overflow as a catchable openai.BadRequestError, enabling explicit truncation or model-switch recovery.
pip install -U langchain-openai==1.4.2 · 8 min
- langchain◆◆
Surfacing ContextWindowExceededError Cleanly in langchain-openai
langchain-openai 1.4.2 wraps OpenAI context overflow as a proper LangChain exception you can catch, inspect, and recover from.
pip install -U langchain-openai==1.4.2 · 8 min
- langchain◆◆
ContextWindowExceededError: Better Overflow Handling in langchain-openai 1.4.2
langchain-openai 1.4.2 catches ContextWindowExceededError and re-raises a clean error with the model name and token context.
pip install -U langchain-openai==1.4.2 · 8 min
- langchain◆◆
user_profile_id as a Convenience Attribute on ChatAnthropic
langchain-anthropic adds a user_profile_id convenience attribute for tagging requests with a user profile for billing, analytics, and access control.
pip install -U langchain-anthropic==1.5.4 · 6 min
- langchain◆◆◆
Tool Schemas with Unsupported Top-Level Composition (langchain-anthropic 1.5.4)
langchain-anthropic 1.5.4 catches unsupported top-level schema composition (oneOf, allOf, bare array) early instead of failing at runtime.
pip install -U langchain-anthropic==1.5.4 · 9 min
- langchain◆◆
Gateway Env Vars: Empty vs Unset Semantics
A deeper look at how langchain-core 1.5.2 distinguishes a variable that is unset (None) from one explicitly set to empty (""), with predictable gateway behavior.
pip install -U langchain-core==1.5.2 · 7 min
- langchain◆◆
Handling Empty-String Gateway Env Vars (PR #39107)
langchain-core 1.5.2 treats an explicitly empty gateway env var as unset, falling back to LANGSMITH_API_KEY instead of failing auth silently.
pip install -U langchain-core==1.5.2 · 7 min
- langchain◆◆
LANGSMITH_API_KEY Gateway Fallback in langchain-core 1.5.3
The LangChain gateway now falls back to LANGSMITH_API_KEY when no explicit key is in config, aligning server-side init with the rest of the client.
pip install -U langchain-core==1.5.3 · 7 min
- langchain◆◆
LANGSMITH_API_KEY Fallback
langchain-core 1.5.3 lets the gateway fall back to LANGSMITH_API_KEY when LANGCHAIN_API_KEY is missing, ending manual sync.
export LANGSMITH_API_KEY=ls__... · 5 min
- langchain◆◆
Gateway Empty-Var Fallback
langchain-core 1.5.2 falls back to the next credential source when a gateway env var is empty, ending silent auth failures.
export LANGSMITH_API_KEY="" · 5 min
- langchain◆◆
Coerce Empty Strings to None
langchain-core 1.5.2 coerces empty gateway env vars to None so LangServe and tracing stay stable in real deployments.
load_gateway_env_vars() · 5 min
- langchain◆◆
Empty Gateway Env Fix
langchain-core 1.5.2 stops crashing when a gateway env var is set to an empty string instead of being unset.
export LANGCHAIN_API_KEY="" · 5 min
- langchain◆
Gateway Key from Env Var
LANGCHAIN_LANGCHAIN_GATEWAY_API_KEY lets one env var authenticate every LangChain model client against LangSmith Gateway.
export LANGCHAIN_LANGCHAIN_GATEWAY_API_KEY=sk-... · 5 min
- langchain◆◆
Tool Schema Cache for Throughput
langchain-core 1.5.1 refactors BaseTool token counting to serve the schema from a warm cache, cutting latency and token overhead.
get_weather.tool_call_schema · 6 min
- langchain◆◆
Cached Schema Token Counting
count_tokens_approximately now leans on a per-tool tool_call_schema cache, making repeated counting far cheaper in high-frequency loops.
tool.args_schema · 6 min
- langchain◆◆
Deterministic Token Counting
langchain-core 1.5.1 fixes count_tokens_approximately for BaseTool so identical tool schemas return stable counts every call.
count_tokens_approximately(messages) · 6 min
- langchain◆◆
Cached Tool Call Schemas
langchain-core 1.5.1 memoizes each BaseTool tool_call_schema, slashing redundant serialization during high-frequency token counting.
tool.tool_call_schema · 6 min
- langchain◆◆
Standardized reasoning_effort
LangChain unifies reasoning depth control across Grok, Claude, GPT-4o, and Fireworks with one standard chat-model parameter.
model.invoke(msg, reasoning_effort=4000) · 7 min
- langchain◆◆
reasoning_effort Across Providers: OpenAI, XAI, Fireworks, Anthropic
The langchain-core 1.5.0 release (PR #38887) normalises reasoning_effort into a single interface mapping to xai_reasoning_effort, thinking tokens, and more.
pip install -U langchain-openai langchain-xai langchain-core · 8 min
- langchain◆◆
reasoning_effort: A Standard Chat Model Parameter
langchain-core 1.5.0 (PR #38887) introduces reasoning_effort as a standard parameter mapping to provider-specific thinking knobs across chat models.
pip install -U langchain-core>=1.5.0 · 8 min
- langchain◆◆
init_chat_model: Meta Extra for Provider-Agnostic Model Setup
langchain 1.3.13 (PR #38786) adds a meta extra so init_chat_model can spin up Meta-backed chat models through the unified ChatModel interface.
pip install langchain[meta] · 7 min
- langchain◆◆◆
ToolErrorMiddleware: Intercept and Transform Tool Errors via on_error
langchain 1.3.13 adds ToolErrorMiddleware with an on_error callback for logging, transforming, or falling back on tool failures at the infrastructure level.
pip install -U langchain langchain-openai · 8 min
- langchain◆◆◆
ToolErrorMiddleware: Centralised, Configurable Tool Error Handling
langchain 1.3.14 (PR #38781) intercepts tool errors and wraps them in a structured response, optionally retrying or falling back to a default value.
pip install -U langchain>=1.3.14 · 8 min
- langchain◆◆◆
ToolRetryMiddleware: Honouring Interrupts Instead of Swallowing Them
The langchain 1.3.12 bug fix (PR #38722) stops ToolRetryMiddleware from swallowing cancel signals, fixing resource leaks and runaway loops.
pip install -U langchain>=1.3.14 · 7 min
- langchain◆◆◆
CacheConfig: TTL-Aware Explicit Prompt Caching
langchain-openai 1.3.5 accepts a cache parameter plus CacheConfig so you control which message blocks stick in cache and for how long.
pip install -U langchain-openai "langchain-core>=0.3.0" · 7 min
- langchain◆◆
cache_weight: Explicit Prompt Caching in langchain-openai
langchain-openai 1.3.5 accepts a cache_weight hint on ChatOpenAI so LangChain wires the right OpenAI caching structure for you.
pip install -U langchain-openai langchain-core · 6 min
- langchain◆◆◆
ToolRetryMiddleware: Interrupts Now Propagate Through Retries
langchain 1.3.12 (PR #38722) ensures an interrupt raised during a tool retry loop is honoured instead of being silently swallowed.
pip install -U langchain>=1.3.12 · 8 min
- langchain◆◆
openai.completions: Explicit Prompt Caching with cache_control
langchain-openai 1.3.5 lets you mark stable message blocks as cacheable with cache_control, so OpenAI caches them at the token level and discounts repeated context.
pip install -U langchain-openai>=1.3.5 · 7 min
- langchain◆
init_chat_model: meta Extra and langchain-meta Support
init_chat_model now supports a meta extra for instantiating langchain-meta backed chat models through one provider-agnostic interface.
pip install langchain-meta · 5 min
- langchain◆◆
ChatOpenAI: Explicit Prompt Caching to Cut Latency and Cost
langchain-openai 1.3.5 adds cache_implicit for explicit prompt caching, surfacing cache hits in additional_kwargs.
pip install -U langchain-openai>=1.3.5 · 7 min
- langchain◆◆
fix(core): Output Parser Bugs in xml.py and pydantic.py
langchain-core 1.4.9 adds context-rich error messages and corrects XML continuation-line parsing for edge-case LLM output.
pip install -U langchain-core langchain-openai · 6 min
- langchain◆◆
XMLOutputParser and PydanticOutputParser Fixes in langchain-core 1.4.9
langchain-core 1.4.9 patches XML continuation-line parsing and surfaces clear ValidationError messages from Pydantic.
pip install -U langchain-core>=1.4.9 · 7 min
- langchain◆◆◆
Citation Metadata in langchain-mistralai: Trace RAG Answers
langchain-mistralai 1.1.6 promotes Mistral citations to structured AIMessage metadata for traceability and hallucination detection.
export MISTRAL_API_KEY=your-key-here · 7 min
- langchain◆◆
default_headers: Custom HTTP Header Injection for OpenRouter
langchain-openrouter 0.2.6 adds a default_headers parameter to inject custom HTTP headers into every request.
pip install -U langchain-openrouter>=0.2.6 · 6 min
- langchain◆◆◆
ChatMistralAI: Surface Citation Metadata from Chat Responses
langchain-mistralai 1.1.6 exposes Mistral citations as structured metadata on the AIMessage for grounded RAG answers.
pip install -U langchain-mistralai>=1.1.6 · 8 min
- langchain◆◆
Streaming Claude: content_block_start Now Carries Initial Text
langchain-anthropic 1.4.8 ensures the first streamed token is captured even when it shares a chunk with the block start marker.
export ANTHROPIC_API_KEY=your_key · 6 min
- langchain◆◆
ProviderStrategy: strict=True Only for OpenAI-Compatible Models
langchain 1.3.11 makes bind_tools provider-aware, applying strict=True only where the provider actually supports it.
pip install -U langchain>=1.3.11 · 7 min
- langchain◆◆
Keep the First Token: content_block_start in Anthropic Streaming
langchain-anthropic 1.4.8 stops dropping the initial text chunk that arrives with the content_block_start event.
pip install -U langchain-anthropic>=1.4.8 · 6 min
- langchain◆◆
Parallel Tool Calls via bind_tools
Eliminate the round-trip tax with parallel_tool_calls via bind_tools on the OpenRouter integration, from two round-trips to one.
model.bind_tools([tool_a, tool_b], parallel_tool_calls=True) · 7 min
- langchain◆◆
Parallel Tool Calls on bind_tools (July)
The parallel_tool_calls flag on bind_tools revisited in July, focused on fan-out/fan-in architectures and executing the returned calls.
model.bind_tools(tools, parallel_tool_calls=True) · 7 min
- langchain◆◆
Parallel Tool Calls & Provider Strategy
The parallel_tool_calls knob plus the ProviderStrategy fix that stops strict=True from leaking to non-OpenAI providers.
bind_tools(..., parallel_tool_calls=True) · 7 min
- langchain◆◆
Parallel Tool Calls on OpenRouter
Native parallel_tool_calls=True on the langchain-openrouter integration, with LangChain handling chunk reassembly automatically.
ChatOpenRouter(..., parallel_tool_calls=True) · 6 min
- langchain◆◆
Parallel Tool Calls in bind_tools
Enable parallel_tool_calls=True on bind_tools so your OpenRouter model fires multiple tools in a single response turn.
model.bind_tools(tools, parallel_tool_calls=True) · 7 min
- langchain◆◆◆
Disallow Any Generics
Enforce strict generic typing across LangChain components with the disallow_any_generics flag to catch type-safety bugs at the source.
DISALLOW_ANY_GENERICS=true · 7 min
- langchain◆◆
Usage on Every Streaming Chunk
Read cumulative token usage on each AIMessageChunk as it streams, enabling live cost meters and streaming-aware budgets.
chunk.usage_metadata · 6 min
- langchain◆◆
Memoized Tool Call Schemas
BaseTool.tool_call_schema is now cached per tool instance in langchain-core 1.4.8 — a quiet performance win for tool-heavy chains.
tool.tool_call_schema · 6 min
- langchain◆◆
Preserve Usage Tokens in v3 Streaming
Keep accurate token-usage metadata when you stream LLM responses via the v3 streaming protocol, instead of losing it to the ether.
llm.stream(..., version="v3") · 6 min
- langchain◆◆◆
normalize_v1_streamed_tool_calls: The Reliable Stream Fix
langchain-openai 1.3.1 / core 1.4.7 standardize streamed tool-call events so AIMessageChunk.tool_calls is always a consistent, non-duplicated list of ToolCall objects.
pip install -U langchain-openai langchain-core · 7 min
- langchain◆◆◆
Streaming Tool Calls in Agents: The 1.3.1 Normalization
langchain-openai 1.3.1 fixes the v1 stream parser so agentic pipelines get clean, complete ToolCallChunk objects with no duplicates or partial strings.
pip install --upgrade langchain-openai · 7 min
- langchain◆◆◆
create_agent Type Overloads for Safer Agent Composition
langchain 1.3.8 adds PEP 484 overloads to create_agent so type checkers infer the exact return type from your tools and model.
pip install -U "langchain>=1.3.8" "langchain-openai>=1.3.0" · 6 min
- langchain◆◆
Pydantic v1 Support Fix in tools/runnable
langchain-core 1.4.7 fixes serialization, deserialization, and tool-binding for Pydantic v1 schemas so legacy codebases get reliable tool calling.
pip show pydantic | grep Version · 6 min
- langchain◆◆
BaseTool Pydantic v1 Compatibility Fix
langchain-core 1.4.7 fixes Pydantic v1 support in tools/runnable so custom tools build correct schemas on legacy Pydantic setups.
python3 -c "import pydantic; print(pydantic.__version__)" · 7 min
- langchain◆◆
Consistent Tool-Call Chunks in the v1 Stream
langchain-openai 1.3.1 and core 1.4.7 normalize streamed tool-call chunks so token-by-token output matches non-streamed ToolCall shape.
pip install -q langchain-openai==1.3.1 · 6 min
- langchain◆◆
normalize_v1_streamed_tool_calls: Clean Streamed Tool Calls
langchain-core 1.4.6 fixes how OpenAI v1 streamed tool call deltas are normalized into canonical ToolCall format, killing duplicates and dropped args.
pip install -U langchain-core>=1.4.6 langchain-openai>=1.2.1 · 6 min
- langchain◆◆◆
ProviderToolSearchMiddleware: Auto-Routed Tool Selection
langchain 1.3.7 introduces ProviderToolSearchMiddleware, which routes each query through a provider-native tool search step before the model responds.
pip install langchain==1.3.7 langchain-core==1.4.5 · 8 min
- langchain◆◆
SummarizationMiddleware: AND-Capable Triggers
langchain 1.3.5 adds compound trigger conditions to SummarizationMiddleware so summarization fires only when token count and message count both cross thresholds.
pip install -U langchain>=1.3.5 · 7 min
- langchain◆
dict() is Deprecated: Switch to asdict()
LangChain 1.4.2 deprecates .dict() across all objects in favor of .asdict(), fixing a clash with Python’s builtin dict annotation.
grep -rn "\.dict()" --include="*.py" . · 5 min
- langchain◆◆
_convert_to_message and the Constructor-Envelope Wire Shape
LangChain core 1.4.1 fixes message round-tripping so Serializable constructor-envelope payloads deserialize back into Message objects.
pip install -U langchain-core>=1.4.1 · 6 min