ToolStore Agent
feat: toolsets with @tool decorator, in-process execution, no auto-install
c37b3fd
|
Raw
History Blame Contribute Delete
5.8 kB

text‑transform

Diff computation, regex extraction, Markdown table generation, and text statistics. Pure‑stdlib toolkit for the text‑munging tasks agents do constantly but currently need throw‑away scripts for.


When to Use This Toolset

  • Comparing two versions of text and getting a unified diff
  • Extracting structured data from unstructured text using regex
  • Converting tabular data (list of dicts) into Markdown tables for reports
  • Computing readability statistics for generated content
  • Validating that text transformations produced expected results

Process

General Text Transformation Workflow

Understand the input → Choose the right function → Execute → Validate output
  1. Understand what you're starting with: Is it a single string? Two strings to compare? Structured data? Unstructured text with patterns?
  2. Choose the right function(s) based on the task
  3. Execute — most functions are one‑shot; combine them for multi‑step transforms
  4. Validate — use text_stats to confirm the output has reasonable characteristics, or text_diff to verify that a transformation produced expected changes

Function Reference

text_diff

Compute a unified diff between two text blocks.

When to use:

  • Comparing two versions of a file or output
  • Showing exactly what changed after a transformation
  • Verifying that an edit only changed what you intended

Args:

  • original (str) — The original text
  • modified (str) — The modified text
  • context_lines (int, optional) — Lines of context around changes (default 3)
  • label_a (str, optional) — Label for original in header
  • label_b (str, optional) — Label for modified in header

Returns: {diff, added, removed, changed}

Workflow tip: After applying a transformation, use text_diff(original=before, modified=after) to confirm the diff contains only expected changes.

regex_extract

Find all regex matches with positions, capture groups, and named groups.

When to use:

  • Extracting URLs, emails, dates, or IDs from text
  • Parsing structured patterns from semi‑structured output
  • Validating that expected patterns exist in generated text

Args:

  • text (str) — The text to search
  • pattern (str) — Python regex pattern
  • flags (list, optional) — ["IGNORECASE"], ["MULTILINE"], ["DOTALL"], or combinations
  • max_matches (int, optional) — Limit matches returned (0 = all)

Returns: {matches: [{index, start, end, text, groups, named_groups?}], count}

markdown_table

Convert structured data to a formatted Markdown table.

When to use:

  • Generating report tables from data
  • Formatting query results for display
  • Creating documentation tables from structured data

Args:

  • data (list) — List of dicts, each dict = one row
  • columns (list, optional) — Column order (default: keys from first row)
  • align (str, optional) — "left" (default), "center", or "right"

Returns: {markdown, rows, columns}

text_stats

Compute readability and structure statistics for a text block.

When to use:

  • Checking if generated content is at an appropriate reading level
  • Validating that output has expected word/character counts
  • Profiling text before processing (e.g., for summarization)

Args:

  • text (str) — The text to analyze

Returns: {chars, words, lines, sentences, paragraphs, avg_word_len, avg_sentence_len, flesch_reading_ease}

Flesch Reading Ease scale:

Score Level
90–100 Very easy (5th grade)
60–70 Plain English (8th–9th grade)
30–50 College level
0–30 Very difficult (graduate)

Common Patterns

Pattern: Extract and Verify

regex_extract → extract all URLs from text
Check count of matches against expectations
If count differs → investigate with text_diff

Pattern: Diff‑Based Validation

Save original text
Apply transformation (edit, reformat, translate)
text_diff(original, transformed) → show what changed
Verify only expected changes appear in diff

Pattern: Data → Markdown Report

Parse/collect data into list of dicts
markdown_table → formatted table
Embed table in report markdown
text_stats on final report → sanity check

Pattern: Text Quality Check

text_stats on generated content
Check flesch_reading_ease — is it appropriate for the audience?
Check avg_sentence_len — too long? (>25 words = complex)
Adjust content and re‑check

Guidelines

Do

  • Use text_diff after any transformation to verify changes are expected
  • Anchor regex patterns with ^ and $ when matching complete lines
  • Use max_matches for large texts to avoid overwhelming output
  • Check text_stats on output to catch structural issues (e.g., all text collapsed to one line)
  • Use regex_extract with flags=["IGNORECASE"] when case doesn't matter

Don't

  • Don't use regex to parse nested structures (HTML, JSON, XML) — use proper parsers
  • Don't trust regex patterns without testing on edge cases first
  • Don't generate markdown tables with inconsistent column counts across rows
  • Don't treat Flesch score as absolute — it's a rough heuristic, not a quality guarantee
  • Don't text_diff on very large files (10k+ lines) — use context_lines=0 or compare smaller chunks

Regex Pattern Pitfalls

  • Greedy quantifiers: .* matches too much — use .*? for non‑greedy
  • Dot matches newline: Use flags=["DOTALL"] if you want . to match \n
  • Unescaped special chars: Escape ., *, +, ?, [, ], (, ), {, }, |, ^, $
  • Character classes: \d matches Unicode digits too — use [0-9] for ASCII‑only