prompt-database 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- prompt_database-0.1.0/.editorconfig +25 -0
- prompt_database-0.1.0/.gitattributes +29 -0
- prompt_database-0.1.0/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- prompt_database-0.1.0/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
- prompt_database-0.1.0/.github/ISSUE_TEMPLATE/prompt_submission.md +49 -0
- prompt_database-0.1.0/.github/PULL_REQUEST_TEMPLATE.md +28 -0
- prompt_database-0.1.0/.github/workflows/ci.yml +40 -0
- prompt_database-0.1.0/.github/workflows/publish.yml +32 -0
- prompt_database-0.1.0/.github/workflows/validate-prompts.yml +78 -0
- prompt_database-0.1.0/.gitignore +89 -0
- prompt_database-0.1.0/CHANGELOG.md +32 -0
- prompt_database-0.1.0/CONTRIBUTING.md +68 -0
- prompt_database-0.1.0/LICENSE +38 -0
- prompt_database-0.1.0/Makefile +36 -0
- prompt_database-0.1.0/PKG-INFO +244 -0
- prompt_database-0.1.0/README.md +207 -0
- prompt_database-0.1.0/SECURITY.md +66 -0
- prompt_database-0.1.0/curated_advanced_prompts_v2.json +144562 -0
- prompt_database-0.1.0/elite_custom_prompts.json +156 -0
- prompt_database-0.1.0/examples/basic_usage.py +115 -0
- prompt_database-0.1.0/pyproject.toml +73 -0
- prompt_database-0.1.0/src/prompt_database/__init__.py +7 -0
- prompt_database-0.1.0/src/prompt_database/cli.py +927 -0
- prompt_database-0.1.0/src/prompt_database/db.py +611 -0
- prompt_database-0.1.0/src/prompt_database/exporters.py +157 -0
- prompt_database-0.1.0/src/prompt_database/ingest.py +325 -0
- prompt_database-0.1.0/src/prompt_database/py.typed +0 -0
- prompt_database-0.1.0/src/prompt_database/quality.py +238 -0
- prompt_database-0.1.0/src/prompt_database/schema.sql +224 -0
- prompt_database-0.1.0/src/prompt_database/tester.py +215 -0
- prompt_database-0.1.0/src/prompt_database/validate.py +149 -0
- prompt_database-0.1.0/submissions/TEMPLATE.jsonl +1 -0
- prompt_database-0.1.0/tests/__init__.py +0 -0
- prompt_database-0.1.0/tests/test_cli_enhancements.py +113 -0
- prompt_database-0.1.0/tests/test_db.py +158 -0
- prompt_database-0.1.0/tests/test_exporters.py +101 -0
- prompt_database-0.1.0/tests/test_quality.py +68 -0
- prompt_database-0.1.0/tests/test_tester.py +53 -0
- prompt_database-0.1.0/tests/test_validate.py +97 -0
- prompt_database-0.1.0/web/.gitignore +3 -0
- prompt_database-0.1.0/web/app/globals.css +22 -0
- prompt_database-0.1.0/web/app/layout.tsx +20 -0
- prompt_database-0.1.0/web/app/page.tsx +43 -0
- prompt_database-0.1.0/web/app/prompt-browser.tsx +228 -0
- prompt_database-0.1.0/web/next-env.d.ts +6 -0
- prompt_database-0.1.0/web/next.config.ts +7 -0
- prompt_database-0.1.0/web/package-lock.json +1661 -0
- prompt_database-0.1.0/web/package.json +23 -0
- prompt_database-0.1.0/web/postcss.config.mjs +7 -0
- prompt_database-0.1.0/web/prompts-data.json +1 -0
- prompt_database-0.1.0/web/tsconfig.json +41 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# EditorConfig helps maintain consistent coding styles
|
|
2
|
+
# https://editorconfig.org
|
|
3
|
+
|
|
4
|
+
root = true
|
|
5
|
+
|
|
6
|
+
[*]
|
|
7
|
+
charset = utf-8
|
|
8
|
+
end_of_line = lf
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
trim_trailing_whitespace = true
|
|
11
|
+
|
|
12
|
+
[*.{py,sh}]
|
|
13
|
+
indent_style = space
|
|
14
|
+
indent_size = 4
|
|
15
|
+
|
|
16
|
+
[*.{json,yml,yaml}]
|
|
17
|
+
indent_style = space
|
|
18
|
+
indent_size = 2
|
|
19
|
+
|
|
20
|
+
[*.md]
|
|
21
|
+
trim_trailing_whitespace = false
|
|
22
|
+
max_line_length = off
|
|
23
|
+
|
|
24
|
+
[Makefile]
|
|
25
|
+
indent_style = tab
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Auto detect text files and perform LF normalization
|
|
2
|
+
* text=auto
|
|
3
|
+
|
|
4
|
+
# Source code
|
|
5
|
+
*.py text eol=lf
|
|
6
|
+
*.sh text eol=lf
|
|
7
|
+
*.md text eol=lf
|
|
8
|
+
*.txt text eol=lf
|
|
9
|
+
*.json text eol=lf
|
|
10
|
+
*.yml text eol=lf
|
|
11
|
+
*.yaml text eol=lf
|
|
12
|
+
|
|
13
|
+
# Git LFS - Track large files
|
|
14
|
+
*.db filter=lfs diff=lfs merge=lfs -text
|
|
15
|
+
*.sqlite filter=lfs diff=lfs merge=lfs -text
|
|
16
|
+
*.sqlite3 filter=lfs diff=lfs merge=lfs -text
|
|
17
|
+
|
|
18
|
+
# Large JSON files (if you decide to commit them)
|
|
19
|
+
curated_advanced_prompts*.json filter=lfs diff=lfs merge=lfs -text
|
|
20
|
+
|
|
21
|
+
# Binary files
|
|
22
|
+
*.pkl binary
|
|
23
|
+
*.pickle binary
|
|
24
|
+
*.npy binary
|
|
25
|
+
*.npz binary
|
|
26
|
+
*.pt binary
|
|
27
|
+
*.pth binary
|
|
28
|
+
*.h5 binary
|
|
29
|
+
*.hdf5 binary
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: Report a bug or issue
|
|
4
|
+
title: '[BUG] '
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Bug Description
|
|
10
|
+
<!-- A clear description of the bug -->
|
|
11
|
+
|
|
12
|
+
## Steps to Reproduce
|
|
13
|
+
1.
|
|
14
|
+
2.
|
|
15
|
+
3.
|
|
16
|
+
|
|
17
|
+
## Expected Behavior
|
|
18
|
+
<!-- What you expected to happen -->
|
|
19
|
+
|
|
20
|
+
## Actual Behavior
|
|
21
|
+
<!-- What actually happened -->
|
|
22
|
+
|
|
23
|
+
## Environment
|
|
24
|
+
- OS:
|
|
25
|
+
- Python version:
|
|
26
|
+
- Database version:
|
|
27
|
+
|
|
28
|
+
## Additional Context
|
|
29
|
+
<!-- Screenshots, logs, or other relevant information -->
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature Request
|
|
3
|
+
about: Suggest a new feature or improvement
|
|
4
|
+
title: '[FEATURE] '
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Feature Description
|
|
10
|
+
<!-- Clear description of the proposed feature -->
|
|
11
|
+
|
|
12
|
+
## Use Case
|
|
13
|
+
<!-- Why is this feature needed? What problem does it solve? -->
|
|
14
|
+
|
|
15
|
+
## Proposed Solution
|
|
16
|
+
<!-- How should this feature work? -->
|
|
17
|
+
|
|
18
|
+
## Alternatives Considered
|
|
19
|
+
<!-- Other approaches you've thought about -->
|
|
20
|
+
|
|
21
|
+
## Additional Context
|
|
22
|
+
<!-- Any other relevant information -->
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Prompt Submission
|
|
3
|
+
about: Submit new attack prompts for the database
|
|
4
|
+
title: '[PROMPT] '
|
|
5
|
+
labels: prompt-addition
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Prompt Information
|
|
10
|
+
|
|
11
|
+
**Attack Technique:**
|
|
12
|
+
<!-- e.g., Prompt Extraction, Jailbreak, etc. -->
|
|
13
|
+
|
|
14
|
+
**Complexity Level:**
|
|
15
|
+
<!-- basic | intermediate | advanced -->
|
|
16
|
+
|
|
17
|
+
**Attack Vector:**
|
|
18
|
+
<!-- Direct | Indirect | Hybrid -->
|
|
19
|
+
|
|
20
|
+
## Prompt Content
|
|
21
|
+
```
|
|
22
|
+
[Paste the attack prompt here]
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Description
|
|
26
|
+
<!-- How this attack works, what it attempts to do -->
|
|
27
|
+
|
|
28
|
+
## Test Results
|
|
29
|
+
<!-- Which models did you test this against? What were the results? -->
|
|
30
|
+
|
|
31
|
+
**Tested Models:**
|
|
32
|
+
- [ ] Claude Sonnet 4.5
|
|
33
|
+
- [ ] GPT-4
|
|
34
|
+
- [ ] Other (specify):
|
|
35
|
+
|
|
36
|
+
**Success Rate:**
|
|
37
|
+
|
|
38
|
+
**Sample Response:**
|
|
39
|
+
```
|
|
40
|
+
[If applicable, paste a redacted example of the model's response]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Attribution
|
|
44
|
+
<!-- If this is based on published research, provide citation/link -->
|
|
45
|
+
|
|
46
|
+
## Responsible Use Declaration
|
|
47
|
+
- [ ] I confirm this submission is for defensive security research only
|
|
48
|
+
- [ ] I have not tested this against production systems without authorization
|
|
49
|
+
- [ ] This prompt does not contain sensitive/proprietary information
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
## Description
|
|
2
|
+
<!-- Briefly describe what this PR does -->
|
|
3
|
+
|
|
4
|
+
## Type of Change
|
|
5
|
+
- [ ] Bug fix
|
|
6
|
+
- [ ] New prompt additions
|
|
7
|
+
- [ ] Database improvements
|
|
8
|
+
- [ ] Documentation update
|
|
9
|
+
- [ ] Other (please describe):
|
|
10
|
+
|
|
11
|
+
## Testing
|
|
12
|
+
<!-- Describe how you tested your changes -->
|
|
13
|
+
|
|
14
|
+
- [ ] Tested prompts against multiple models
|
|
15
|
+
- [ ] Verified database integrity
|
|
16
|
+
- [ ] Checked for duplicates
|
|
17
|
+
- [ ] Validated categorization
|
|
18
|
+
|
|
19
|
+
## Checklist
|
|
20
|
+
- [ ] Code follows project style guidelines
|
|
21
|
+
- [ ] Comments added for complex logic
|
|
22
|
+
- [ ] Documentation updated (if needed)
|
|
23
|
+
- [ ] No sensitive data included
|
|
24
|
+
- [ ] Commits follow conventional format
|
|
25
|
+
- [ ] Changes are for defensive research purposes only
|
|
26
|
+
|
|
27
|
+
## Additional Context
|
|
28
|
+
<!-- Any other relevant information -->
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
with:
|
|
19
|
+
lfs: true
|
|
20
|
+
|
|
21
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: ${{ matrix.python-version }}
|
|
25
|
+
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: pip install -e ".[dev]"
|
|
28
|
+
|
|
29
|
+
- name: Lint with ruff
|
|
30
|
+
run: |
|
|
31
|
+
ruff check src/ tests/
|
|
32
|
+
ruff format --check src/ tests/
|
|
33
|
+
|
|
34
|
+
- name: Run tests
|
|
35
|
+
run: pytest tests/ -v --tb=short
|
|
36
|
+
|
|
37
|
+
- name: Verify build command
|
|
38
|
+
run: |
|
|
39
|
+
prompt-db build --data-dir . --output /tmp/ci_test.db --force
|
|
40
|
+
prompt-db --db /tmp/ci_test.db stats
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
publish:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
id-token: write # trusted publishing
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
with:
|
|
18
|
+
lfs: true
|
|
19
|
+
|
|
20
|
+
- name: Set up Python
|
|
21
|
+
uses: actions/setup-python@v5
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.12"
|
|
24
|
+
|
|
25
|
+
- name: Install build tools
|
|
26
|
+
run: pip install hatchling build
|
|
27
|
+
|
|
28
|
+
- name: Build package
|
|
29
|
+
run: python -m build
|
|
30
|
+
|
|
31
|
+
- name: Publish to PyPI
|
|
32
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
name: Validate Prompt Submissions
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- "submissions/**"
|
|
7
|
+
- "*.jsonl"
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
validate:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
pull-requests: write
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
with:
|
|
19
|
+
lfs: true
|
|
20
|
+
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
|
|
26
|
+
- name: Install prompt-database
|
|
27
|
+
run: pip install -e .
|
|
28
|
+
|
|
29
|
+
- name: Build reference database
|
|
30
|
+
run: prompt-db build --data-dir . --output /tmp/reference.db --force
|
|
31
|
+
|
|
32
|
+
- name: Find submission files
|
|
33
|
+
id: find-files
|
|
34
|
+
run: |
|
|
35
|
+
# Find new/changed JSONL or text files in submissions/ or root
|
|
36
|
+
FILES=$(git diff --name-only --diff-filter=ACM origin/main... -- 'submissions/*.jsonl' 'submissions/*.txt' '*.jsonl' | head -20)
|
|
37
|
+
echo "files=$FILES" >> "$GITHUB_OUTPUT"
|
|
38
|
+
if [ -z "$FILES" ]; then
|
|
39
|
+
echo "No submission files found"
|
|
40
|
+
echo "found=false" >> "$GITHUB_OUTPUT"
|
|
41
|
+
else
|
|
42
|
+
echo "found=true" >> "$GITHUB_OUTPUT"
|
|
43
|
+
echo "Found files: $FILES"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
- name: Validate submissions
|
|
47
|
+
if: steps.find-files.outputs.found == 'true'
|
|
48
|
+
run: |
|
|
49
|
+
EXIT=0
|
|
50
|
+
for file in ${{ steps.find-files.outputs.files }}; do
|
|
51
|
+
echo "=== Validating: $file ==="
|
|
52
|
+
prompt-db --db /tmp/reference.db validate "$file" --check-dupes || EXIT=1
|
|
53
|
+
done
|
|
54
|
+
exit $EXIT
|
|
55
|
+
|
|
56
|
+
- name: Post validation summary
|
|
57
|
+
if: always() && steps.find-files.outputs.found == 'true'
|
|
58
|
+
uses: actions/github-script@v7
|
|
59
|
+
with:
|
|
60
|
+
script: |
|
|
61
|
+
const body = `### Prompt Submission Validation
|
|
62
|
+
|
|
63
|
+
The submission validation workflow ran on this PR.
|
|
64
|
+
Check the [Actions log](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.
|
|
65
|
+
|
|
66
|
+
**What's checked:**
|
|
67
|
+
- Minimum content length (10+ chars)
|
|
68
|
+
- Attack pattern detection (60+ regex patterns)
|
|
69
|
+
- Quality scoring (must score 15+/100)
|
|
70
|
+
- Duplicate detection against existing database
|
|
71
|
+
`;
|
|
72
|
+
|
|
73
|
+
github.rest.issues.createComment({
|
|
74
|
+
issue_number: context.issue.number,
|
|
75
|
+
owner: context.repo.owner,
|
|
76
|
+
repo: context.repo.repo,
|
|
77
|
+
body: body
|
|
78
|
+
});
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Database files (built from JSON sources via `prompt-db build`)
|
|
2
|
+
*.db
|
|
3
|
+
*.db-journal
|
|
4
|
+
*.db-wal
|
|
5
|
+
*.db-shm
|
|
6
|
+
*.sqlite
|
|
7
|
+
*.sqlite3
|
|
8
|
+
|
|
9
|
+
# Python
|
|
10
|
+
__pycache__/
|
|
11
|
+
*.py[cod]
|
|
12
|
+
*$py.class
|
|
13
|
+
*.so
|
|
14
|
+
.Python
|
|
15
|
+
build/
|
|
16
|
+
develop-eggs/
|
|
17
|
+
dist/
|
|
18
|
+
downloads/
|
|
19
|
+
eggs/
|
|
20
|
+
.eggs/
|
|
21
|
+
lib/
|
|
22
|
+
lib64/
|
|
23
|
+
parts/
|
|
24
|
+
sdist/
|
|
25
|
+
var/
|
|
26
|
+
wheels/
|
|
27
|
+
*.egg-info/
|
|
28
|
+
.installed.cfg
|
|
29
|
+
*.egg
|
|
30
|
+
|
|
31
|
+
# Virtual environments
|
|
32
|
+
venv/
|
|
33
|
+
env/
|
|
34
|
+
ENV/
|
|
35
|
+
.venv
|
|
36
|
+
|
|
37
|
+
# IDEs
|
|
38
|
+
.vscode/
|
|
39
|
+
.idea/
|
|
40
|
+
*.swp
|
|
41
|
+
*.swo
|
|
42
|
+
*~
|
|
43
|
+
.DS_Store
|
|
44
|
+
|
|
45
|
+
# Logs
|
|
46
|
+
*.log
|
|
47
|
+
logs/
|
|
48
|
+
*.log.*
|
|
49
|
+
|
|
50
|
+
# Temporary files
|
|
51
|
+
tmp/
|
|
52
|
+
temp/
|
|
53
|
+
*.tmp
|
|
54
|
+
*.bak
|
|
55
|
+
*.backup
|
|
56
|
+
|
|
57
|
+
# Research data (comment out if you want to commit datasets)
|
|
58
|
+
prompt_injection_datasets/
|
|
59
|
+
extracted_prompts/
|
|
60
|
+
raw_data/
|
|
61
|
+
datasets/
|
|
62
|
+
|
|
63
|
+
# API keys and secrets
|
|
64
|
+
.env
|
|
65
|
+
.env.local
|
|
66
|
+
*.key
|
|
67
|
+
*.pem
|
|
68
|
+
credentials.json
|
|
69
|
+
config.local.*
|
|
70
|
+
|
|
71
|
+
# OS files
|
|
72
|
+
Thumbs.db
|
|
73
|
+
.DS_Store
|
|
74
|
+
desktop.ini
|
|
75
|
+
|
|
76
|
+
# Jupyter
|
|
77
|
+
.ipynb_checkpoints/
|
|
78
|
+
*.ipynb_checkpoints
|
|
79
|
+
|
|
80
|
+
# Model files (often too large for git)
|
|
81
|
+
*.pt
|
|
82
|
+
*.pth
|
|
83
|
+
*.ckpt
|
|
84
|
+
*.safetensors
|
|
85
|
+
*.bin
|
|
86
|
+
models/
|
|
87
|
+
|
|
88
|
+
# Large JSON files (optional - uncomment if too large)
|
|
89
|
+
# extracted_prompts.json
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.1.0] - 2026-03-30
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **Python package** (`prompt-database`) installable via `pip install -e .`
|
|
12
|
+
- **`prompt-db` CLI** with commands: `build`, `stats`, `search`, `export`, `info`, `audit`, `curate`
|
|
13
|
+
- **SQLite schema** with FTS5 full-text search, SHA256 content-hash deduplication, and schema versioning
|
|
14
|
+
- **OWASP LLM Top 10 (2025)** category mapping with correct descriptions
|
|
15
|
+
- **MITRE ATLAS** technique IDs on categories for threat model interoperability
|
|
16
|
+
- **Quality scoring engine** with 60+ regex patterns for identifying real attacks vs. noise
|
|
17
|
+
- **Data curation pipeline** — audit and remove non-attack content (removes ~67% noise)
|
|
18
|
+
- **Ingestion pipeline** for `curated_advanced_prompts_v2.json` and `elite_custom_prompts.json`
|
|
19
|
+
- **Test result tracking** with automatic success_rate aggregation
|
|
20
|
+
- **19 passing tests** covering schema, CRUD, search, dedup, quality, and build
|
|
21
|
+
- **Export** to JSON, JSONL, and CSV formats
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
- Database is now built from JSON sources via `prompt-db build` (no longer committed as binary)
|
|
25
|
+
- Deduplication reduced 8,568 records to 3,983 unique prompts
|
|
26
|
+
- Quality curation further reduces to ~1,300 high-signal attack prompts
|
|
27
|
+
|
|
28
|
+
### Removed
|
|
29
|
+
- Binary `prompts.db` from git tracking (build it yourself from JSON sources)
|
|
30
|
+
- Phantom file references in README (db_manager.py, schema.sql, etc. that never existed)
|
|
31
|
+
|
|
32
|
+
[0.1.0]: https://github.com/scthornton/prompt-database/releases/tag/v0.1.0
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Contributing to Prompt Database
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to this defensive security research project!
|
|
4
|
+
|
|
5
|
+
## Code of Conduct
|
|
6
|
+
|
|
7
|
+
This project is for **defensive security research only**. All contributions must:
|
|
8
|
+
- Focus on improving security defenses
|
|
9
|
+
- Not enable or encourage malicious use
|
|
10
|
+
- Comply with responsible disclosure practices
|
|
11
|
+
|
|
12
|
+
## How to Contribute
|
|
13
|
+
|
|
14
|
+
### Reporting Issues
|
|
15
|
+
- Use GitHub Issues for bug reports and feature requests
|
|
16
|
+
- Provide clear reproduction steps
|
|
17
|
+
- Include relevant context and examples
|
|
18
|
+
|
|
19
|
+
### Contributing Prompts
|
|
20
|
+
When adding new attack prompts to the database:
|
|
21
|
+
|
|
22
|
+
1. **Quality over quantity** - Focus on sophisticated, novel attacks
|
|
23
|
+
2. **Categorization** - Properly tag with attack technique and complexity
|
|
24
|
+
3. **Documentation** - Explain the attack mechanism and expected behavior
|
|
25
|
+
4. **Testing** - Verify the prompt works as described
|
|
26
|
+
5. **Attribution** - Credit original sources when applicable
|
|
27
|
+
|
|
28
|
+
### Contribution Process
|
|
29
|
+
|
|
30
|
+
1. Fork the repository
|
|
31
|
+
2. Create a feature branch (`git checkout -b feature/your-feature`)
|
|
32
|
+
3. Make your changes
|
|
33
|
+
4. Test thoroughly
|
|
34
|
+
5. Commit with clear messages (`git commit -m 'Add: sophisticated context manipulation technique'`)
|
|
35
|
+
6. Push to your fork (`git push origin feature/your-feature`)
|
|
36
|
+
7. Open a Pull Request
|
|
37
|
+
|
|
38
|
+
### Commit Message Format
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
Type: Brief description
|
|
42
|
+
|
|
43
|
+
Longer explanation if needed.
|
|
44
|
+
|
|
45
|
+
- Bullet points for details
|
|
46
|
+
- Reference issues: #123
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Types: `Add`, `Fix`, `Update`, `Refactor`, `Docs`, `Test`
|
|
50
|
+
|
|
51
|
+
### Code Style
|
|
52
|
+
- Follow PEP 8 for Python code
|
|
53
|
+
- Use meaningful variable names
|
|
54
|
+
- Add comments for complex logic
|
|
55
|
+
- Keep functions focused and testable
|
|
56
|
+
|
|
57
|
+
### Testing
|
|
58
|
+
- Test prompts against multiple models when possible
|
|
59
|
+
- Document success rates and model responses
|
|
60
|
+
- Report findings responsibly
|
|
61
|
+
|
|
62
|
+
## Questions?
|
|
63
|
+
|
|
64
|
+
Open an issue or reach out to the maintainers.
|
|
65
|
+
|
|
66
|
+
## License
|
|
67
|
+
|
|
68
|
+
By contributing, you agree that your contributions will be licensed under the MIT License.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Scott Thornton
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
RESPONSIBLE USE NOTICE
|
|
26
|
+
|
|
27
|
+
This database contains prompt injection and adversarial attack examples for
|
|
28
|
+
DEFENSIVE SECURITY RESEARCH ONLY. By using this software, you agree to:
|
|
29
|
+
|
|
30
|
+
1. Use these materials only for legitimate security research, testing, and
|
|
31
|
+
defense development purposes
|
|
32
|
+
2. Not use these materials to attack, compromise, or harm any systems without
|
|
33
|
+
explicit authorization
|
|
34
|
+
3. Comply with all applicable laws and regulations
|
|
35
|
+
4. Not weaponize or distribute these materials for malicious purposes
|
|
36
|
+
|
|
37
|
+
The authors and contributors are not responsible for any misuse of this
|
|
38
|
+
database or the materials contained within it.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
.PHONY: install dev test lint format build curate stats clean help
|
|
2
|
+
|
|
3
|
+
help: ## Show this help
|
|
4
|
+
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
|
5
|
+
|
|
6
|
+
install: ## Install the package
|
|
7
|
+
pip install -e .
|
|
8
|
+
|
|
9
|
+
dev: ## Install with dev dependencies
|
|
10
|
+
pip install -e ".[dev]"
|
|
11
|
+
|
|
12
|
+
test: ## Run tests
|
|
13
|
+
pytest tests/ -v
|
|
14
|
+
|
|
15
|
+
lint: ## Run linter
|
|
16
|
+
ruff check src/ tests/
|
|
17
|
+
ruff format --check src/ tests/
|
|
18
|
+
|
|
19
|
+
format: ## Auto-format code
|
|
20
|
+
ruff format src/ tests/
|
|
21
|
+
ruff check --fix src/ tests/
|
|
22
|
+
|
|
23
|
+
build: ## Build the database from JSON sources
|
|
24
|
+
prompt-db build --data-dir . --output prompts.db --force
|
|
25
|
+
|
|
26
|
+
curate: build ## Build and curate (remove noise)
|
|
27
|
+
prompt-db --db prompts.db curate
|
|
28
|
+
|
|
29
|
+
stats: ## Show database statistics (build first if needed)
|
|
30
|
+
@test -f prompts.db || $(MAKE) build
|
|
31
|
+
prompt-db --db prompts.db stats
|
|
32
|
+
|
|
33
|
+
clean: ## Remove generated files
|
|
34
|
+
rm -f prompts.db prompts.db-wal prompts.db-shm
|
|
35
|
+
rm -rf __pycache__ .pytest_cache .ruff_cache
|
|
36
|
+
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
|