loopllm 0.7.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.
- loopllm-0.7.0/.cursor/mcp.json +11 -0
- loopllm-0.7.0/.github/ISSUE_TEMPLATE/bug_report.md +28 -0
- loopllm-0.7.0/.github/ISSUE_TEMPLATE/feature_request.md +18 -0
- loopllm-0.7.0/.github/copilot-instructions.md +21 -0
- loopllm-0.7.0/.github/pull_request_template.md +19 -0
- loopllm-0.7.0/.github/workflows/ci.yml +34 -0
- loopllm-0.7.0/.github/workflows/publish.yml +37 -0
- loopllm-0.7.0/.gitignore +46 -0
- loopllm-0.7.0/.vscode/mcp.json +12 -0
- loopllm-0.7.0/.vscode/settings.json +16 -0
- loopllm-0.7.0/CHANGELOG.md +79 -0
- loopllm-0.7.0/CODE_OF_CONDUCT.md +59 -0
- loopllm-0.7.0/CONTRIBUTING.md +64 -0
- loopllm-0.7.0/LICENSE +21 -0
- loopllm-0.7.0/PKG-INFO +454 -0
- loopllm-0.7.0/README.md +408 -0
- loopllm-0.7.0/_scratch/.gitkeep +0 -0
- loopllm-0.7.0/benchmarks/adaptive_vs_fixed.py +245 -0
- loopllm-0.7.0/benchmarks/results/adaptive_vs_fixed.md +12 -0
- loopllm-0.7.0/docs/demo/agent_loop_demo.md +115 -0
- loopllm-0.7.0/docs/launch/show-hn.md +94 -0
- loopllm-0.7.0/examples/agent_loop.py +108 -0
- loopllm-0.7.0/examples/basic_loop.py +33 -0
- loopllm-0.7.0/examples/bayesian_exit.py +79 -0
- loopllm-0.7.0/examples/demo_cdv_mcp.py +70 -0
- loopllm-0.7.0/examples/elicitation_demo.py +172 -0
- loopllm-0.7.0/examples/task_orchestration.py +176 -0
- loopllm-0.7.0/img/Screenshot_20260222_171552_Chrome.jpg +0 -0
- loopllm-0.7.0/img/Screenshot_20260222_171624_Chrome.jpg +0 -0
- loopllm-0.7.0/img/agent_loop.gif +0 -0
- loopllm-0.7.0/img/agent_loop.svg +43 -0
- loopllm-0.7.0/pyproject.toml +99 -0
- loopllm-0.7.0/scripts/generate_cdv_gif.py +150 -0
- loopllm-0.7.0/scripts/publish_pypi.sh +39 -0
- loopllm-0.7.0/src/loopllm/__init__.py +69 -0
- loopllm-0.7.0/src/loopllm/__main__.py +5 -0
- loopllm-0.7.0/src/loopllm/adaptive_exit.py +78 -0
- loopllm-0.7.0/src/loopllm/agent_loop.py +299 -0
- loopllm-0.7.0/src/loopllm/cli.py +521 -0
- loopllm-0.7.0/src/loopllm/elicitation.py +519 -0
- loopllm-0.7.0/src/loopllm/engine.py +376 -0
- loopllm-0.7.0/src/loopllm/evaluator_factory.py +72 -0
- loopllm-0.7.0/src/loopllm/evaluators.py +419 -0
- loopllm-0.7.0/src/loopllm/guards.py +254 -0
- loopllm-0.7.0/src/loopllm/local_loop.py +273 -0
- loopllm-0.7.0/src/loopllm/mcp_server.py +2657 -0
- loopllm-0.7.0/src/loopllm/plan_registry.py +412 -0
- loopllm-0.7.0/src/loopllm/priors.py +604 -0
- loopllm-0.7.0/src/loopllm/provider.py +51 -0
- loopllm-0.7.0/src/loopllm/providers/__init__.py +15 -0
- loopllm-0.7.0/src/loopllm/providers/agent.py +64 -0
- loopllm-0.7.0/src/loopllm/providers/mock.py +64 -0
- loopllm-0.7.0/src/loopllm/providers/ollama.py +95 -0
- loopllm-0.7.0/src/loopllm/providers/openrouter.py +101 -0
- loopllm-0.7.0/src/loopllm/serve.py +297 -0
- loopllm-0.7.0/src/loopllm/step_scorer.py +190 -0
- loopllm-0.7.0/src/loopllm/store.py +1126 -0
- loopllm-0.7.0/src/loopllm/tasks.py +599 -0
- loopllm-0.7.0/tests/conftest.py +71 -0
- loopllm-0.7.0/tests/test_agent_loop.py +152 -0
- loopllm-0.7.0/tests/test_benchmark.py +39 -0
- loopllm-0.7.0/tests/test_elicitation.py +305 -0
- loopllm-0.7.0/tests/test_engine.py +187 -0
- loopllm-0.7.0/tests/test_evaluators.py +88 -0
- loopllm-0.7.0/tests/test_guards.py +113 -0
- loopllm-0.7.0/tests/test_integration.py +123 -0
- loopllm-0.7.0/tests/test_local_loop.py +315 -0
- loopllm-0.7.0/tests/test_plan_registry.py +261 -0
- loopllm-0.7.0/tests/test_priors.py +132 -0
- loopllm-0.7.0/tests/test_prompt_engineering.py +275 -0
- loopllm-0.7.0/tests/test_step_scorer.py +106 -0
- loopllm-0.7.0/tests/test_store.py +321 -0
- loopllm-0.7.0/tests/test_tasks.py +396 -0
- loopllm-0.7.0/vscode-loopllm/.gitignore +4 -0
- loopllm-0.7.0/vscode-loopllm/LICENSE +1 -0
- loopllm-0.7.0/vscode-loopllm/media/icon.svg +16 -0
- loopllm-0.7.0/vscode-loopllm/package-lock.json +3487 -0
- loopllm-0.7.0/vscode-loopllm/package.json +110 -0
- loopllm-0.7.0/vscode-loopllm/src/dashboardProvider.ts +419 -0
- loopllm-0.7.0/vscode-loopllm/src/dataProvider.ts +149 -0
- loopllm-0.7.0/vscode-loopllm/src/extension.ts +181 -0
- loopllm-0.7.0/vscode-loopllm/src/promptLabProvider.ts +475 -0
- loopllm-0.7.0/vscode-loopllm/src/statusBar.ts +93 -0
- loopllm-0.7.0/vscode-loopllm/src/statusWatcher.ts +105 -0
- loopllm-0.7.0/vscode-loopllm/tsconfig.json +19 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Report a problem with loopllm
|
|
4
|
+
title: "bug: "
|
|
5
|
+
labels: bug
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
**Describe the bug**
|
|
9
|
+
A clear and concise description of what went wrong.
|
|
10
|
+
|
|
11
|
+
**To reproduce**
|
|
12
|
+
Steps or a minimal snippet (CLI command, MCP tool call, or Python):
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Expected behavior**
|
|
18
|
+
What you expected to happen.
|
|
19
|
+
|
|
20
|
+
**Environment**
|
|
21
|
+
- loopllm version: (`pip show loopllm`)
|
|
22
|
+
- Python version:
|
|
23
|
+
- OS:
|
|
24
|
+
- Provider: agent / ollama / openrouter / mock
|
|
25
|
+
- IDE (if MCP): VS Code / Cursor / other
|
|
26
|
+
|
|
27
|
+
**Logs / output**
|
|
28
|
+
Paste any relevant error output.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest an idea or improvement for loopllm
|
|
4
|
+
title: "feat: "
|
|
5
|
+
labels: enhancement
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
**What problem does this solve?**
|
|
9
|
+
A clear description of the use case or pain point.
|
|
10
|
+
|
|
11
|
+
**Proposed solution**
|
|
12
|
+
What you'd like to happen (a new tool, config, provider, etc.).
|
|
13
|
+
|
|
14
|
+
**Alternatives considered**
|
|
15
|
+
Any workarounds or other approaches you've thought about.
|
|
16
|
+
|
|
17
|
+
**Additional context**
|
|
18
|
+
Links, references, or examples.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# PromptLoop — Agent Instructions
|
|
2
|
+
|
|
3
|
+
PromptLoop is an MCP server for prompt quality, refinement loops, and Conservative
|
|
4
|
+
Dual-Verify agent-loop control. See [README.md](../README.md) for architecture,
|
|
5
|
+
tools, and examples.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Required on every message
|
|
10
|
+
|
|
11
|
+
Always call `loopllm_intercept` with the user's exact prompt before responding. Do not skip this even for simple requests.
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
loopllm_intercept(prompt="<user's exact message>")
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Act on the returned `route`: `elicit` → clarify first | `decompose` → plan first | `refine` → proceed directly.
|
|
18
|
+
|
|
19
|
+
For non-trivial tasks use `loopllm_run_pipeline` as the entry point.
|
|
20
|
+
|
|
21
|
+
For multi-step iterative work, use `loopllm_loop_start` → `loopllm_loop_step(step_output=...)` → `loopllm_loop_end`. Submit step artifacts; do not self-grade.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
<!-- What does this PR change and why? -->
|
|
4
|
+
|
|
5
|
+
## Changes
|
|
6
|
+
|
|
7
|
+
<!-- Bullet the key changes. -->
|
|
8
|
+
|
|
9
|
+
## Verification
|
|
10
|
+
|
|
11
|
+
- [ ] `python -m pytest tests/ -q` passes
|
|
12
|
+
- [ ] `ruff check src/ tests/` clean
|
|
13
|
+
- [ ] `mypy --strict src/loopllm/` clean
|
|
14
|
+
- [ ] Added/updated tests for new behavior
|
|
15
|
+
- [ ] Updated README / CHANGELOG if user-facing
|
|
16
|
+
|
|
17
|
+
## Notes
|
|
18
|
+
|
|
19
|
+
<!-- Anything reviewers should know (trade-offs, follow-ups). -->
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
|
|
19
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: ${{ matrix.python-version }}
|
|
23
|
+
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
run: pip install -e ".[dev]"
|
|
26
|
+
|
|
27
|
+
- name: Lint with ruff
|
|
28
|
+
run: ruff check src/ tests/
|
|
29
|
+
|
|
30
|
+
- name: Type check with mypy
|
|
31
|
+
run: mypy --strict src/loopllm/
|
|
32
|
+
|
|
33
|
+
- name: Run tests
|
|
34
|
+
run: pytest tests/ -v
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
publish:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: "3.12"
|
|
20
|
+
|
|
21
|
+
- name: Build
|
|
22
|
+
run: |
|
|
23
|
+
pip install build twine
|
|
24
|
+
python -m build
|
|
25
|
+
twine check dist/*
|
|
26
|
+
|
|
27
|
+
- name: Upload to PyPI
|
|
28
|
+
env:
|
|
29
|
+
TWINE_USERNAME: __token__
|
|
30
|
+
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
|
31
|
+
run: twine upload dist/*
|
|
32
|
+
|
|
33
|
+
- name: Verify install
|
|
34
|
+
run: |
|
|
35
|
+
VERSION=$(grep '^version' pyproject.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
|
|
36
|
+
pip install "loopllm[mcp]==${VERSION}"
|
|
37
|
+
python -c "import loopllm; print(loopllm.__version__)"
|
loopllm-0.7.0/.gitignore
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
dist/
|
|
7
|
+
build/
|
|
8
|
+
*.egg
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# Virtual environments
|
|
12
|
+
.venv/
|
|
13
|
+
venv/
|
|
14
|
+
|
|
15
|
+
# IDE
|
|
16
|
+
.idea/
|
|
17
|
+
.vscode/*
|
|
18
|
+
!.vscode/mcp.json
|
|
19
|
+
!.vscode/settings.json
|
|
20
|
+
.cursor/rules/
|
|
21
|
+
*.swp
|
|
22
|
+
*.swo
|
|
23
|
+
|
|
24
|
+
# Generated docs build output (hand-written docs/ are tracked)
|
|
25
|
+
docs/_build/
|
|
26
|
+
|
|
27
|
+
# mypy
|
|
28
|
+
.mypy_cache/
|
|
29
|
+
|
|
30
|
+
# pytest
|
|
31
|
+
.pytest_cache/
|
|
32
|
+
|
|
33
|
+
# OS
|
|
34
|
+
.DS_Store
|
|
35
|
+
Thumbs.db
|
|
36
|
+
|
|
37
|
+
# Priors data
|
|
38
|
+
priors.json
|
|
39
|
+
|
|
40
|
+
# VS Code extension build artifacts
|
|
41
|
+
vscode-loopllm/out/
|
|
42
|
+
*.vsix
|
|
43
|
+
|
|
44
|
+
# Scratch / template holder (keep dir, ignore contents)
|
|
45
|
+
_scratch/*
|
|
46
|
+
!_scratch/.gitkeep
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"github.copilot.chat.codeGeneration.instructions": [
|
|
3
|
+
{ "file": ".github/copilot-instructions.md" },
|
|
4
|
+
{ "text": "Always call loopllm_intercept with the user's prompt before responding. This logs the prompt, scores quality, and returns routing guidance. Do not skip this even for simple requests." }
|
|
5
|
+
],
|
|
6
|
+
"github.copilot.chat.reviewSelection.instructions": [
|
|
7
|
+
{ "file": ".github/copilot-instructions.md" },
|
|
8
|
+
{ "text": "Always call loopllm_intercept with the user's prompt before responding." }
|
|
9
|
+
],
|
|
10
|
+
"github.copilot.chat.testGeneration.instructions": [
|
|
11
|
+
{ "file": ".github/copilot-instructions.md" }
|
|
12
|
+
],
|
|
13
|
+
"github.copilot.chat.commitMessageGeneration.instructions": [
|
|
14
|
+
{ "text": "Always call loopllm_intercept with the user's prompt before responding." }
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented here. The format is based on
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project
|
|
5
|
+
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [0.7.0] — 2026-06-22
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- **Conservative Dual-Verify (CDV) for agent loops.** Agents submit `step_output`
|
|
11
|
+
artifacts; the MCP server scores each step through two independent channels:
|
|
12
|
+
- **Channel A:** deterministic evaluators (regex, JSON, completeness, composite).
|
|
13
|
+
- **Channel B:** separate critic via MCP sampling (verifier hat).
|
|
14
|
+
- **Final score:** `min(channel_a, channel_b)` — the stricter channel wins.
|
|
15
|
+
- New modules: `src/loopllm/step_scorer.py`, `src/loopllm/guards.py`,
|
|
16
|
+
`src/loopllm/evaluator_factory.py`.
|
|
17
|
+
- Composable **guard stack** on verified scores: timeout, token budget, output-repeat,
|
|
18
|
+
plateau, threshold, Bayesian ROI, max steps, budget exhausted.
|
|
19
|
+
- `loopllm_loop_start` accepts verifier recipe (`evaluator_type`, `quality_criteria`,
|
|
20
|
+
`required_patterns`, `max_wall_ms`, `max_tokens`).
|
|
21
|
+
- `loopllm_loop_step` is now async and artifact-primary (`step_output`); legacy
|
|
22
|
+
`score` self-report still works with deprecation warning.
|
|
23
|
+
- Verdict JSON exposes `channel_a_score`, `channel_b_score`, `score_source`,
|
|
24
|
+
`deficiencies` for demos and debugging.
|
|
25
|
+
- Tests: `tests/test_step_scorer.py`, `tests/test_guards.py` (CDV inflation-block test).
|
|
26
|
+
- Package exports: `DualVerifyScore`, `conservative_dual_verify`, `GuardStack`.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- `AgentLoopController` uses `GuardStack` instead of inline `_decide` logic.
|
|
30
|
+
- `AgentLoopSession` stores verifier config, step artifacts, token accumulators.
|
|
31
|
+
- `CallObservation.prompt_tokens` / `completion_tokens` populated on `loop_end`.
|
|
32
|
+
- README and demo doc reframed around Conservative Dual-Verify.
|
|
33
|
+
|
|
34
|
+
## [0.6.0] — 2026-06-21
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
- **Adaptive agent loops.** A new `AgentLoopController` (`src/loopllm/agent_loop.py`)
|
|
38
|
+
brings the Bayesian early-exit machinery to an agent's own plan → act → observe
|
|
39
|
+
loop. Lifecycle: `start` → `step` → `end`.
|
|
40
|
+
- Suggests a learned step budget and quality threshold per `task_type` from
|
|
41
|
+
`AdaptivePriors` — no training data required.
|
|
42
|
+
- Returns a continue/stop verdict on each step (goal reached, plateau, low
|
|
43
|
+
expected ROI, or budget exhausted) using the same logic as
|
|
44
|
+
`BayesianExitCondition`.
|
|
45
|
+
- Records every completed loop so future budgets sharpen over time.
|
|
46
|
+
- Four new MCP tools (now 28 total): `loopllm_loop_start`, `loopllm_loop_step`,
|
|
47
|
+
`loopllm_loop_end`, `loopllm_loop_status`.
|
|
48
|
+
- `AgentLoopController` and `AgentLoopSession` exported from the package root.
|
|
49
|
+
- Runnable example `examples/agent_loop.py` and walkthrough
|
|
50
|
+
`docs/demo/agent_loop_demo.md`.
|
|
51
|
+
- Reproducible benchmark `benchmarks/adaptive_vs_fixed.py` comparing adaptive
|
|
52
|
+
stopping against fixed/threshold strategies (adaptive: ~41% fewer steps than a
|
|
53
|
+
fixed 6-step budget at 99.7% goal-reach).
|
|
54
|
+
- Tests: `tests/test_agent_loop.py`, `tests/test_benchmark.py`.
|
|
55
|
+
- Repo hygiene: `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, GitHub issue/PR
|
|
56
|
+
templates, `[project.urls]` + classifiers in `pyproject.toml`, CI badge, and a
|
|
57
|
+
committed `.cursor/mcp.json` for Cursor auto-detection.
|
|
58
|
+
|
|
59
|
+
### Changed
|
|
60
|
+
- README deduplicated and corrected (28 tools, 204 tests, schema v4); added
|
|
61
|
+
"Adaptive agent loops" and "Benchmark" sections.
|
|
62
|
+
|
|
63
|
+
### Fixed
|
|
64
|
+
- Version drift: `__init__.__version__` now matches `pyproject.toml`.
|
|
65
|
+
|
|
66
|
+
## [0.5.0]
|
|
67
|
+
|
|
68
|
+
### Added
|
|
69
|
+
- Online SGD weight learning and Thompson Sampling for question ordering
|
|
70
|
+
(SQLite schema v4).
|
|
71
|
+
- Prompt Lab sidebar panel in the VS Code extension.
|
|
72
|
+
- Expanded MCP surface to 24 tools, MCP Sampling, and persistent confidence-gated
|
|
73
|
+
plans.
|
|
74
|
+
|
|
75
|
+
## [0.4.0]
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
- Prompt quality scoring system (5 deterministic dimensions, grade A–F) and the
|
|
79
|
+
initial VS Code extension.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our
|
|
6
|
+
community a harassment-free experience for everyone, regardless of age, body
|
|
7
|
+
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
8
|
+
identity and expression, level of experience, education, socio-economic status,
|
|
9
|
+
nationality, personal appearance, race, religion, or sexual identity and
|
|
10
|
+
orientation.
|
|
11
|
+
|
|
12
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
13
|
+
diverse, inclusive, and healthy community.
|
|
14
|
+
|
|
15
|
+
## Our Standards
|
|
16
|
+
|
|
17
|
+
Examples of behavior that contributes to a positive environment include:
|
|
18
|
+
|
|
19
|
+
- Demonstrating empathy and kindness toward other people
|
|
20
|
+
- Being respectful of differing opinions, viewpoints, and experiences
|
|
21
|
+
- Giving and gracefully accepting constructive feedback
|
|
22
|
+
- Accepting responsibility and apologizing to those affected by our mistakes
|
|
23
|
+
- Focusing on what is best for the overall community
|
|
24
|
+
|
|
25
|
+
Examples of unacceptable behavior include:
|
|
26
|
+
|
|
27
|
+
- The use of sexualized language or imagery, and sexual attention or advances
|
|
28
|
+
- Trolling, insulting or derogatory comments, and personal or political attacks
|
|
29
|
+
- Public or private harassment
|
|
30
|
+
- Publishing others' private information without explicit permission
|
|
31
|
+
- Other conduct which could reasonably be considered inappropriate in a
|
|
32
|
+
professional setting
|
|
33
|
+
|
|
34
|
+
## Enforcement Responsibilities
|
|
35
|
+
|
|
36
|
+
Community maintainers are responsible for clarifying and enforcing our standards
|
|
37
|
+
of acceptable behavior and will take appropriate and fair corrective action in
|
|
38
|
+
response to any behavior that they deem inappropriate, threatening, offensive,
|
|
39
|
+
or harmful.
|
|
40
|
+
|
|
41
|
+
## Scope
|
|
42
|
+
|
|
43
|
+
This Code of Conduct applies within all community spaces, and also applies when
|
|
44
|
+
an individual is officially representing the community in public spaces.
|
|
45
|
+
|
|
46
|
+
## Enforcement
|
|
47
|
+
|
|
48
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
49
|
+
reported to the maintainers responsible for enforcement via the repository's
|
|
50
|
+
issue tracker or a private channel where available. All complaints will be
|
|
51
|
+
reviewed and investigated promptly and fairly.
|
|
52
|
+
|
|
53
|
+
## Attribution
|
|
54
|
+
|
|
55
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
56
|
+
version 2.1, available at
|
|
57
|
+
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
|
|
58
|
+
|
|
59
|
+
[homepage]: https://www.contributor-covenant.org
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Contributing to PromptLoop (`loopllm`)
|
|
2
|
+
|
|
3
|
+
Thanks for your interest in improving PromptLoop. This guide covers local setup,
|
|
4
|
+
the branch/commit conventions, and the checks your change must pass.
|
|
5
|
+
|
|
6
|
+
## Local setup
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
git clone https://github.com/azank1/loop-llm
|
|
10
|
+
cd loop-llm
|
|
11
|
+
pip install -e ".[dev]"
|
|
12
|
+
python -m pytest tests/ -q # 219 tests (215 pass, 4 integration skipped)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Branch naming convention
|
|
16
|
+
|
|
17
|
+
Branches follow a compact `<initials>/<type>/<short>` scheme:
|
|
18
|
+
|
|
19
|
+
- `<initials>` — the author's initials (e.g. `az`)
|
|
20
|
+
- `<type>` — `ft` (feature), `fix`, `chore`, `docs`, `refactor`, `test`
|
|
21
|
+
- `<short>` — a terse, hyphenated descriptor
|
|
22
|
+
|
|
23
|
+
Examples: `az/ft/cdv-v07`, `az/fix/store-migration`, `az/docs/readme`.
|
|
24
|
+
|
|
25
|
+
Do **not** include tool, assistant, or AI names in branch names or commit
|
|
26
|
+
metadata.
|
|
27
|
+
|
|
28
|
+
## Authorship
|
|
29
|
+
|
|
30
|
+
All commits on this repository are authored by `azank1 <azanhyder49@gmail.com>`.
|
|
31
|
+
Use squash-merge PRs into `main`; delete feature branches after merge.
|
|
32
|
+
|
|
33
|
+
## Commits & pull requests
|
|
34
|
+
|
|
35
|
+
- Use clear, imperative commit subjects (e.g. `feat: adaptive agent loops`).
|
|
36
|
+
- Keep commits focused; add tests for any new tool or behavior under `tests/`.
|
|
37
|
+
- Open PRs against `main`. CI (Python 3.11–3.13) must be green.
|
|
38
|
+
|
|
39
|
+
## Checks (run before pushing)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
ruff check src/ tests/
|
|
43
|
+
mypy --strict src/loopllm/
|
|
44
|
+
python -m pytest tests/ -q
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Where things live
|
|
48
|
+
|
|
49
|
+
| Area | File |
|
|
50
|
+
|---|---|
|
|
51
|
+
| Core refinement loop | `src/loopllm/engine.py` |
|
|
52
|
+
| Bayesian priors / learning | `src/loopllm/priors.py` |
|
|
53
|
+
| Adaptive agent loops | `src/loopllm/agent_loop.py` |
|
|
54
|
+
| Conservative Dual-Verify scoring | `src/loopllm/step_scorer.py` |
|
|
55
|
+
| Agent-loop guard stack | `src/loopllm/guards.py` |
|
|
56
|
+
| Evaluator factory | `src/loopllm/evaluator_factory.py` |
|
|
57
|
+
| Bayesian early stopping | `src/loopllm/adaptive_exit.py` |
|
|
58
|
+
| MCP tools (28) | `src/loopllm/mcp_server.py` |
|
|
59
|
+
| SQLite persistence (schema v4) | `src/loopllm/store.py` |
|
|
60
|
+
| CLI | `src/loopllm/cli.py` |
|
|
61
|
+
| Providers (agent/ollama/openrouter/mock) | `src/loopllm/providers/` |
|
|
62
|
+
|
|
63
|
+
By contributing, you agree your contributions are licensed under the project's
|
|
64
|
+
[MIT License](LICENSE).
|
loopllm-0.7.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 azank1
|
|
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.
|