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.
Files changed (85) hide show
  1. loopllm-0.7.0/.cursor/mcp.json +11 -0
  2. loopllm-0.7.0/.github/ISSUE_TEMPLATE/bug_report.md +28 -0
  3. loopllm-0.7.0/.github/ISSUE_TEMPLATE/feature_request.md +18 -0
  4. loopllm-0.7.0/.github/copilot-instructions.md +21 -0
  5. loopllm-0.7.0/.github/pull_request_template.md +19 -0
  6. loopllm-0.7.0/.github/workflows/ci.yml +34 -0
  7. loopllm-0.7.0/.github/workflows/publish.yml +37 -0
  8. loopllm-0.7.0/.gitignore +46 -0
  9. loopllm-0.7.0/.vscode/mcp.json +12 -0
  10. loopllm-0.7.0/.vscode/settings.json +16 -0
  11. loopllm-0.7.0/CHANGELOG.md +79 -0
  12. loopllm-0.7.0/CODE_OF_CONDUCT.md +59 -0
  13. loopllm-0.7.0/CONTRIBUTING.md +64 -0
  14. loopllm-0.7.0/LICENSE +21 -0
  15. loopllm-0.7.0/PKG-INFO +454 -0
  16. loopllm-0.7.0/README.md +408 -0
  17. loopllm-0.7.0/_scratch/.gitkeep +0 -0
  18. loopllm-0.7.0/benchmarks/adaptive_vs_fixed.py +245 -0
  19. loopllm-0.7.0/benchmarks/results/adaptive_vs_fixed.md +12 -0
  20. loopllm-0.7.0/docs/demo/agent_loop_demo.md +115 -0
  21. loopllm-0.7.0/docs/launch/show-hn.md +94 -0
  22. loopllm-0.7.0/examples/agent_loop.py +108 -0
  23. loopllm-0.7.0/examples/basic_loop.py +33 -0
  24. loopllm-0.7.0/examples/bayesian_exit.py +79 -0
  25. loopllm-0.7.0/examples/demo_cdv_mcp.py +70 -0
  26. loopllm-0.7.0/examples/elicitation_demo.py +172 -0
  27. loopllm-0.7.0/examples/task_orchestration.py +176 -0
  28. loopllm-0.7.0/img/Screenshot_20260222_171552_Chrome.jpg +0 -0
  29. loopllm-0.7.0/img/Screenshot_20260222_171624_Chrome.jpg +0 -0
  30. loopllm-0.7.0/img/agent_loop.gif +0 -0
  31. loopllm-0.7.0/img/agent_loop.svg +43 -0
  32. loopllm-0.7.0/pyproject.toml +99 -0
  33. loopllm-0.7.0/scripts/generate_cdv_gif.py +150 -0
  34. loopllm-0.7.0/scripts/publish_pypi.sh +39 -0
  35. loopllm-0.7.0/src/loopllm/__init__.py +69 -0
  36. loopllm-0.7.0/src/loopllm/__main__.py +5 -0
  37. loopllm-0.7.0/src/loopllm/adaptive_exit.py +78 -0
  38. loopllm-0.7.0/src/loopllm/agent_loop.py +299 -0
  39. loopllm-0.7.0/src/loopllm/cli.py +521 -0
  40. loopllm-0.7.0/src/loopllm/elicitation.py +519 -0
  41. loopllm-0.7.0/src/loopllm/engine.py +376 -0
  42. loopllm-0.7.0/src/loopllm/evaluator_factory.py +72 -0
  43. loopllm-0.7.0/src/loopllm/evaluators.py +419 -0
  44. loopllm-0.7.0/src/loopllm/guards.py +254 -0
  45. loopllm-0.7.0/src/loopllm/local_loop.py +273 -0
  46. loopllm-0.7.0/src/loopllm/mcp_server.py +2657 -0
  47. loopllm-0.7.0/src/loopllm/plan_registry.py +412 -0
  48. loopllm-0.7.0/src/loopllm/priors.py +604 -0
  49. loopllm-0.7.0/src/loopllm/provider.py +51 -0
  50. loopllm-0.7.0/src/loopllm/providers/__init__.py +15 -0
  51. loopllm-0.7.0/src/loopllm/providers/agent.py +64 -0
  52. loopllm-0.7.0/src/loopllm/providers/mock.py +64 -0
  53. loopllm-0.7.0/src/loopllm/providers/ollama.py +95 -0
  54. loopllm-0.7.0/src/loopllm/providers/openrouter.py +101 -0
  55. loopllm-0.7.0/src/loopllm/serve.py +297 -0
  56. loopllm-0.7.0/src/loopllm/step_scorer.py +190 -0
  57. loopllm-0.7.0/src/loopllm/store.py +1126 -0
  58. loopllm-0.7.0/src/loopllm/tasks.py +599 -0
  59. loopllm-0.7.0/tests/conftest.py +71 -0
  60. loopllm-0.7.0/tests/test_agent_loop.py +152 -0
  61. loopllm-0.7.0/tests/test_benchmark.py +39 -0
  62. loopllm-0.7.0/tests/test_elicitation.py +305 -0
  63. loopllm-0.7.0/tests/test_engine.py +187 -0
  64. loopllm-0.7.0/tests/test_evaluators.py +88 -0
  65. loopllm-0.7.0/tests/test_guards.py +113 -0
  66. loopllm-0.7.0/tests/test_integration.py +123 -0
  67. loopllm-0.7.0/tests/test_local_loop.py +315 -0
  68. loopllm-0.7.0/tests/test_plan_registry.py +261 -0
  69. loopllm-0.7.0/tests/test_priors.py +132 -0
  70. loopllm-0.7.0/tests/test_prompt_engineering.py +275 -0
  71. loopllm-0.7.0/tests/test_step_scorer.py +106 -0
  72. loopllm-0.7.0/tests/test_store.py +321 -0
  73. loopllm-0.7.0/tests/test_tasks.py +396 -0
  74. loopllm-0.7.0/vscode-loopllm/.gitignore +4 -0
  75. loopllm-0.7.0/vscode-loopllm/LICENSE +1 -0
  76. loopllm-0.7.0/vscode-loopllm/media/icon.svg +16 -0
  77. loopllm-0.7.0/vscode-loopllm/package-lock.json +3487 -0
  78. loopllm-0.7.0/vscode-loopllm/package.json +110 -0
  79. loopllm-0.7.0/vscode-loopllm/src/dashboardProvider.ts +419 -0
  80. loopllm-0.7.0/vscode-loopllm/src/dataProvider.ts +149 -0
  81. loopllm-0.7.0/vscode-loopllm/src/extension.ts +181 -0
  82. loopllm-0.7.0/vscode-loopllm/src/promptLabProvider.ts +475 -0
  83. loopllm-0.7.0/vscode-loopllm/src/statusBar.ts +93 -0
  84. loopllm-0.7.0/vscode-loopllm/src/statusWatcher.ts +105 -0
  85. loopllm-0.7.0/vscode-loopllm/tsconfig.json +19 -0
@@ -0,0 +1,11 @@
1
+ {
2
+ "mcpServers": {
3
+ "loopllm": {
4
+ "command": "/home/azank/loop-llm/.venv/bin/loopllm",
5
+ "args": ["mcp-server", "--provider", "agent"],
6
+ "env": {
7
+ "LOOPLLM_MODEL": "agent"
8
+ }
9
+ }
10
+ }
11
+ }
@@ -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__)"
@@ -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,12 @@
1
+ {
2
+ "servers": {
3
+ "loopllm": {
4
+ "type": "stdio",
5
+ "command": "loopllm",
6
+ "args": ["mcp-server", "--provider", "agent"],
7
+ "env": {
8
+ "LOOPLLM_MODEL": "agent"
9
+ }
10
+ }
11
+ }
12
+ }
@@ -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.