Skip to main content

Generate static MD tip files for Drupal development tips using various LLM providers

Project description

Drupal Tip Generator

Generate static MD tip files for the drupal-tip skill using various LLM providers.

Setup

1. Create Virtual Environment

cd ~/.claude/skills/drupal-tip
python3 -m venv .venv
source .venv/bin/activate
pip install openai anthropic

2. Configure API Keys

Copy the example environment file and add your keys:

cp .env.example .env

Edit .env with your API keys (use TIPGEN_ prefix):

TIPGEN_ANTHROPIC_API_KEY=sk-ant-...
TIPGEN_OPENAI_API_KEY=sk-...
TIPGEN_OPENROUTER_API_KEY=sk-or-...

Usage

Get a Random Existing Tip (FAST!)

Get a tip from the pre-generated database instantly — no API call needed:

.venv/bin/python tip_generator.py --random-tip
.venv/bin/python tip_generator.py --random-tip --tip-category core-service
.venv/bin/python tip_generator.py --list-existing

List Available Categories

.venv/bin/python tip_generator.py --list-categories

Generate Tips

Using Anthropic:

.venv/bin/python tip_generator.py -c 35 -n 5 -p anthropic

Using OpenAI (batch mode - 50% cheaper):

.venv/bin/python tip_generator.py -c 35 -n 5 -p openai

Using OpenRouter:

.venv/bin/python tip_generator.py -c 35 -n 5 -p openrouter

Arguments

Argument Description
-c, --category Category number(s) or all
-n, --count Number of tips per category (default: 5)
-p, --provider LLM provider: anthropic, openai, openrouter
-m, --model Override default model
-u, --api-url Custom API URL for OpenAI/Anthropic-compatible endpoints
-t, --max-tokens Maximum tokens for response (default: 4096)
--tips-dir Custom tips directory (or set TIPGEN_TIPS_DIR env var or tips_dir in config.json)
--save-truncated Save tips even if truncated (use with caution)
--no-wait Don't wait for batch completion
--dry-run Show what would be done without calling API
--list-categories List all available categories
--random-tip Get a random existing tip (fast, no API)
--list-existing List categories with existing tips
--tip-category Filter random tip by category name
--validate Enable validation mode
--validate-file Validate a specific tip file
--validate-category Validate all tips in a category
--validate-all Validate all tips across all categories

Examples

# Generate 3 tips for category 35 (core-service)
.venv/bin/python tip_generator.py -c 35 -n 3 -p openrouter

# Generate 5 tips for multiple categories
.venv/bin/python tip_generator.py -c 35,36,37 -n 5 -p openrouter

# Generate 1 tip for ALL categories
.venv/bin/python tip_generator.py -c all -n 1 -p openrouter

# Use a specific model
.venv/bin/python tip_generator.py -c 35 -n 5 -p openrouter -m anthropic/claude-opus-4

# Use a custom API URL (e.g., Together.xyz, local LLM server)
.venv/bin/python tip_generator.py -c 35 -n 5 -p openai -u https://api.together.xyz/v1

# Increase max tokens for longer responses (avoid truncation)
.venv/bin/python tip_generator.py -c 60 -n 20 -p openai --max-tokens 8192

# Save tips even if truncated (use with caution)
.venv/bin/python tip_generator.py -c 35 -n 5 -p openai --save-truncated

Batch API Notes

Provider Batch Support Discount Notes
Anthropic Yes 50% Uses message-batches-2024-09-24 beta
OpenAI Yes 50% Results within 24h
OpenRouter ⚠️ Sync only - Batch API not supported

Check Batch Status

If you ran batch mode with --no-wait:

.venv/bin/python tip_generator.py --check-batch BATCH_ID -p anthropic
.venv/bin/python tip_generator.py --check-batch BATCH_ID -p openai --save-results

Output

Tips are saved to tips/{category-name}/{uuid}.md with 8-character random IDs:

tips/
├── core-service/
│   ├── a1b2c3d4.md
│   └── e5f6g7h8.md
└── rare-drush-command/
    └── 9i0j1k2l.md

Each file has frontmatter:

---
category: core-service
title: [Generated title]
---

[Tip content]

Configuration

Categories and the prompt template are defined in config.json:

{
  "prompt_template": "Generate a Drupal tip for category #{cat_id}: {cat_desc}...",
  "code_language": "php",
  "tips_dir": "/path/to/custom/tips",
  "categories": {
    "1": {"name": "proposed-new-module", "desc": "Proposed new module"},
    "35": {"name": "core-service", "desc": "Lesser-known core service"}
  }
}

Tips Directory Configuration

The tips directory can be configured via (in priority order):

  1. CLI argument: --tips-dir /path/to/tips
  2. Environment variable: TIPGEN_TIPS_DIR=/path/to/tips
  3. Config file: "tips_dir": "/path/to/tips" in config.json
  4. Default: tips/ folder in the package directory

To add or modify categories, edit config.json directly - no code changes needed.

Development

Running Tests

# Dry run to verify configuration
.venv/bin/python tip_generator.py -c 35 -n 1 -p openrouter --dry-run

Validation

Validate generated tips for formatting issues, truncation, and quality:

# Validate a single file
.venv/bin/python tip_generator.py --validate --validate-file tips/core-service/a1b2c3d4.md

# Validate all tips in a category
.venv/bin/python tip_generator.py --validate --validate-category core-service

# Validate ALL tips across all categories
.venv/bin/python tip_generator.py --validate --validate-all

Validation Checks

  • Formatting: Frontmatter structure, code block balance, line counts
  • Completeness: Truncation patterns (trailing ..., [TODO], incomplete code blocks)
  • Quality: Generic openings, placeholder text, excessive code ratio
  • Fake Content: Non-existent Drupal APIs, hallucinated functions, wrong service names

Web Viewer

A simple web UI to browse tips:

pip install flask
python tip_viewer.py                    # http://localhost:5000
python tip_viewer.py --port 8080        # Custom port
python tip_viewer.py --host 0.0.0.0     # Public access
python tip_viewer.py --debug            # Debug mode

Features:

  • Filter tips by category
  • Get random tip with one click
  • View all tips or browse by category

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drupaltools_tip_generator-0.2.0.tar.gz (39.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

drupaltools_tip_generator-0.2.0-py3-none-any.whl (30.2 kB view details)

Uploaded Python 3

File details

Details for the file drupaltools_tip_generator-0.2.0.tar.gz.

File metadata

File hashes

Hashes for drupaltools_tip_generator-0.2.0.tar.gz
Algorithm Hash digest
SHA256 dd3a17f2125a98d991ba83cf73d25740e3cce6d07b5ada5f5fbc6dcdbc3c05cf
MD5 9fd65ae9664486ff0ab8a9c5ca765ad8
BLAKE2b-256 ff8594f6f935c13cdcb97843621cef1ec59d57548cab37cdaf6cd0bb3d7e4f11

See more details on using hashes here.

File details

Details for the file drupaltools_tip_generator-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for drupaltools_tip_generator-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9badbfb7ca369f64ab22682e635fa4426e3fc784ee087adbbc31447497b77a03
MD5 b3118cbf1ab4ab98741c046f4c10b125
BLAKE2b-256 7906e4d37f4a2b73b6101291b564b861c7707fdfe2e1fdca02f50618792c42a2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page