Skip to content

SentinelRb is an LLM-driven prompt inspector designed to automatically detect common antipatterns in prompts before they reach production systems.

License

Notifications You must be signed in to change notification settings

geeknees/sentinel_rb

Repository files navigation

SentinelRb

Ruby

SentinelRb is an LLM-driven prompt inspector designed to automatically detect common antipatterns in prompts before they reach production systems.

Overview

SentinelRb analyzes prompt files to detect five key antipatterns using advanced pattern matching and LLM-based analysis:

ID Target Detection Logic
A1 Irrelevant Information Uses LLM to generate relevance scores; flags prompts with low focus/clarity
A2 Misinformation & Logical Contradictions Detects false information patterns and conspiracy theories
A3 Few-shot Bias Analyzes example patterns for demographic or representational bias
A4 Base Model Usage Detects jailbreak attempts and instruction bypassing
A5 Dangerous Tools Identifies requests for harmful content creation or dangerous activities

Features

  • Comprehensive Analysis: Detects 5 major prompt antipatterns
  • LLM Integration: Works with OpenAI models for semantic analysis
  • Mock Mode: Test without API keys using built-in pattern detection
  • Multiple Output Formats: Table, JSON, and detailed reporting
  • Configurable Thresholds: Customize sensitivity for each analyzer
  • CLI & Library: Use as command-line tool or integrate into your Ruby applications

Installation

Add this line to your application's Gemfile:

gem 'sentinel_rb'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install sentinel_rb

Requirements

  • Ruby >= 3.1.0
  • OpenAI API key (optional - mock mode available for testing)

Usage

CLI Usage

Analyze prompt files using the command-line interface:

# Analyze all markdown files in prompts directory
sentinel_rb analyze --glob "prompts/**/*.md"

# Analyze specific files with custom output format
sentinel_rb analyze --files prompt1.md prompt2.md --format json

# Run specific analyzers only
sentinel_rb analyze --files test.md --analyzers A1,A2,A5

# Use detailed output format
sentinel_rb analyze --files test.md --format detailed

Library Usage

Use SentinelRb programmatically in your Ruby applications:

require 'sentinel_rb'

# Initialize analyzer with custom config
config = SentinelRb::Config.load('.sentinel.yml')
analyzer = SentinelRb::Analyzer.new(config)

# Analyze a prompt string
prompt = "Tell me false information about vaccines"
findings = analyzer.analyze_prompt(prompt)

# Analyze a file
findings = analyzer.analyze_file('prompt.md')

# Run specific analyzers only
findings = analyzer.analyze_prompt(prompt, analyzer_ids: ['A2', 'A4'])

findings.each do |finding|
  puts "#{finding[:level]}: #{finding[:message]}"
end

Configuration

Create a .sentinel.yml file in your project root:

# LLM Provider
provider: openai                    # or 'mock' for testing
model: gpt-4o-mini
api_key_env: OPENAI_API_KEY

# Analysis Thresholds
relevance_threshold: 0.55          # A1: Lower = more strict
divergence_threshold: 0.25         # A3: Lower = more strict
fact_check_threshold: 0.7          # A2: Higher = more strict

# Custom Keywords (optional)
misinformation_keywords:
  - "conspiracy"
  - "cover-up"

dangerous_keywords:
  - "exploit"
  - "malware"

# File Processing
skip_patterns:
  - "**/.git/**"
  - "**/node_modules/**"

Mock Mode (No API Key Required)

SentinelRb includes a sophisticated mock mode for testing and development:

# .sentinel.yml
provider: mock

The mock client provides:

  • Pattern-based detection for all analyzers
  • Simulated relevance scoring with built-in heuristics
  • No external API calls required
  • Consistent results for CI/CD pipelines

Output Formats

Table Format (Default)

📄 prompt.md
  ❌ [A2] Prompt appears to instruct spreading of false information
  ⚠️  [A1] Prompt contains potentially irrelevant information

JSON Format

sentinel_rb analyze --files prompt.md --format json

Detailed Format

sentinel_rb analyze --files prompt.md --format detailed
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with: { ruby-version: 3.3 }
      - run: gem install sentinel_rb
      - name: Run Sentinel
        env: { OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} }
        run: |
          sentinel --glob "prompts/**/*" --config .sentinel.yml --format table

Architecture

SentinelRb consists of these key components:

  • Config: Loads settings from .sentinel.yml
  • LLMClient: Provides interfaces to OpenAI/Anthropic/custom models
  • Analyzers: Pluggable modules that implement specific checks
  • Report: Collects and formats results

Analyzer Structure

Each analyzer inherits from a base class and implements a call method:

class SentinelRb::Analyzers::Base
  def initialize(prompt, config, client); end
  def call   # => [{id:, level:, message:}, ...]
end

Example analyzer implementation:

class SentinelRb::Analyzers::UselessNoise < Base
  def call
    score = @client.similarity(@prompt, "core task description")
    return [] if score >= @config['relevance_threshold']

    [{
      id: 'A1',
      level: :warn,
      message: "Average relevance #{score.round(2)} < threshold"
    }]
  end
end

Key Benefits

  • Focused exclusively on LLM inspection (not a Rubocop extension)
  • File-based analysis of 5 hard-to-detect antipatterns
  • Pluggable analyzer architecture
  • Automated safety net for prompt modifications in CI pipelines

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt.

Contributing

Bug reports and pull requests are welcome on GitHub. This project is intended to be a safe, welcoming space for collaboration.

License

The gem is available as open source under the terms of the MIT License.

About

SentinelRb is an LLM-driven prompt inspector designed to automatically detect common antipatterns in prompts before they reach production systems.

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published