pykel 1.0.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.
- pykel-1.0.0/.github/ISSUE_TEMPLATE/bug_report.md +29 -0
- pykel-1.0.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- pykel-1.0.0/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- pykel-1.0.0/.github/PULL_REQUEST_TEMPLATE.md +16 -0
- pykel-1.0.0/.github/dependabot.yml +12 -0
- pykel-1.0.0/.github/workflows/ci.yml +46 -0
- pykel-1.0.0/.github/workflows/security.yml +92 -0
- pykel-1.0.0/.gitignore +8 -0
- pykel-1.0.0/CHANGELOG.md +33 -0
- pykel-1.0.0/CODE_OF_CONDUCT.md +54 -0
- pykel-1.0.0/CONTRIBUTING.md +51 -0
- pykel-1.0.0/DESIGN.md +347 -0
- pykel-1.0.0/LICENSE +21 -0
- pykel-1.0.0/PKG-INFO +202 -0
- pykel-1.0.0/README.md +99 -0
- pykel-1.0.0/SECURITY.md +46 -0
- pykel-1.0.0/USAGE.md +749 -0
- pykel-1.0.0/examples/01_tool_and_rag_agent.py +94 -0
- pykel-1.0.0/examples/02_multi_agent_pipeline.py +52 -0
- pykel-1.0.0/pyproject.toml +129 -0
- pykel-1.0.0/src/kel/__init__.py +47 -0
- pykel-1.0.0/src/kel/agents/__init__.py +14 -0
- pykel-1.0.0/src/kel/agents/agent.py +160 -0
- pykel-1.0.0/src/kel/agents/events.py +18 -0
- pykel-1.0.0/src/kel/agents/orchestration.py +133 -0
- pykel-1.0.0/src/kel/agents/tool.py +20 -0
- pykel-1.0.0/src/kel/brain/__init__.py +16 -0
- pykel-1.0.0/src/kel/brain/brain.py +56 -0
- pykel-1.0.0/src/kel/brain/loop_control.py +22 -0
- pykel-1.0.0/src/kel/brain/router.py +75 -0
- pykel-1.0.0/src/kel/brain/scheduler.py +44 -0
- pykel-1.0.0/src/kel/brain/types.py +12 -0
- pykel-1.0.0/src/kel/budget/__init__.py +15 -0
- pykel-1.0.0/src/kel/budget/budgeted.py +55 -0
- pykel-1.0.0/src/kel/budget/errors.py +11 -0
- pykel-1.0.0/src/kel/budget/pricing.py +29 -0
- pykel-1.0.0/src/kel/budget/tracker.py +74 -0
- pykel-1.0.0/src/kel/budget/types.py +27 -0
- pykel-1.0.0/src/kel/caching/__init__.py +11 -0
- pykel-1.0.0/src/kel/caching/cache.py +53 -0
- pykel-1.0.0/src/kel/caching/cached.py +101 -0
- pykel-1.0.0/src/kel/caching/key.py +36 -0
- pykel-1.0.0/src/kel/context/__init__.py +18 -0
- pykel-1.0.0/src/kel/context/errors.py +19 -0
- pykel-1.0.0/src/kel/context/eviction.py +41 -0
- pykel-1.0.0/src/kel/context/loop.py +64 -0
- pykel-1.0.0/src/kel/context/tokens.py +26 -0
- pykel-1.0.0/src/kel/context/window.py +51 -0
- pykel-1.0.0/src/kel/heal/__init__.py +15 -0
- pykel-1.0.0/src/kel/heal/diagnoser.py +51 -0
- pykel-1.0.0/src/kel/heal/errors.py +12 -0
- pykel-1.0.0/src/kel/heal/healer.py +74 -0
- pykel-1.0.0/src/kel/heal/learning.py +19 -0
- pykel-1.0.0/src/kel/heal/types.py +20 -0
- pykel-1.0.0/src/kel/memory/__init__.py +18 -0
- pykel-1.0.0/src/kel/memory/consolidation.py +29 -0
- pykel-1.0.0/src/kel/memory/episodic.py +53 -0
- pykel-1.0.0/src/kel/memory/memory.py +33 -0
- pykel-1.0.0/src/kel/memory/procedural.py +30 -0
- pykel-1.0.0/src/kel/memory/semantic.py +70 -0
- pykel-1.0.0/src/kel/memory/working.py +13 -0
- pykel-1.0.0/src/kel/models/__init__.py +57 -0
- pykel-1.0.0/src/kel/models/base.py +88 -0
- pykel-1.0.0/src/kel/models/errors.py +31 -0
- pykel-1.0.0/src/kel/models/providers/__init__.py +0 -0
- pykel-1.0.0/src/kel/models/providers/anthropic.py +277 -0
- pykel-1.0.0/src/kel/models/providers/cohere.py +399 -0
- pykel-1.0.0/src/kel/models/providers/gemini.py +347 -0
- pykel-1.0.0/src/kel/models/providers/mistral.py +266 -0
- pykel-1.0.0/src/kel/models/providers/openai.py +380 -0
- pykel-1.0.0/src/kel/models/registry.py +191 -0
- pykel-1.0.0/src/kel/models/structured.py +132 -0
- pykel-1.0.0/src/kel/models/types.py +126 -0
- pykel-1.0.0/src/kel/monitoring/__init__.py +4 -0
- pykel-1.0.0/src/kel/monitoring/dashboard.py +139 -0
- pykel-1.0.0/src/kel/monitoring/metrics.py +116 -0
- pykel-1.0.0/src/kel/observability/__init__.py +17 -0
- pykel-1.0.0/src/kel/observability/instrumented.py +59 -0
- pykel-1.0.0/src/kel/observability/otel.py +58 -0
- pykel-1.0.0/src/kel/observability/sinks.py +43 -0
- pykel-1.0.0/src/kel/observability/tracer.py +93 -0
- pykel-1.0.0/src/kel/observability/types.py +17 -0
- pykel-1.0.0/src/kel/prompting/__init__.py +13 -0
- pykel-1.0.0/src/kel/prompting/cot.py +23 -0
- pykel-1.0.0/src/kel/prompting/few_shot.py +29 -0
- pykel-1.0.0/src/kel/prompting/react.py +30 -0
- pykel-1.0.0/src/kel/py.typed +0 -0
- pykel-1.0.0/src/kel/ratelimit/__init__.py +4 -0
- pykel-1.0.0/src/kel/ratelimit/limiter.py +71 -0
- pykel-1.0.0/src/kel/ratelimit/rate_limited.py +43 -0
- pykel-1.0.0/src/kel/realtime/__init__.py +9 -0
- pykel-1.0.0/src/kel/realtime/dual_path.py +31 -0
- pykel-1.0.0/src/kel/realtime/providers.py +26 -0
- pykel-1.0.0/src/kel/retrieval/__init__.py +20 -0
- pykel-1.0.0/src/kel/retrieval/chroma_store.py +99 -0
- pykel-1.0.0/src/kel/retrieval/embeddings.py +47 -0
- pykel-1.0.0/src/kel/retrieval/loaders.py +40 -0
- pykel-1.0.0/src/kel/retrieval/pgvector_store.py +131 -0
- pykel-1.0.0/src/kel/retrieval/pinecone_store.py +110 -0
- pykel-1.0.0/src/kel/retrieval/qdrant.py +133 -0
- pykel-1.0.0/src/kel/retrieval/retriever.py +73 -0
- pykel-1.0.0/src/kel/retrieval/splitter.py +78 -0
- pykel-1.0.0/src/kel/retrieval/store.py +71 -0
- pykel-1.0.0/src/kel/retrieval/types.py +17 -0
- pykel-1.0.0/src/kel/retrieval/weaviate_store.py +123 -0
- pykel-1.0.0/src/kel/runtime/__init__.py +16 -0
- pykel-1.0.0/src/kel/runtime/checkpoint.py +41 -0
- pykel-1.0.0/src/kel/runtime/executor.py +141 -0
- pykel-1.0.0/src/kel/runtime/graph.py +57 -0
- pykel-1.0.0/src/kel/runtime/interrupt.py +16 -0
- pykel-1.0.0/src/kel/sdk/__init__.py +11 -0
- pykel-1.0.0/src/kel/sdk/banner.py +44 -0
- pykel-1.0.0/src/kel/sdk/build.py +32 -0
- pykel-1.0.0/src/kel/sdk/cli.py +91 -0
- pykel-1.0.0/src/kel/sdk/serve.py +84 -0
- pykel-1.0.0/src/kel/specs/__init__.py +22 -0
- pykel-1.0.0/src/kel/specs/eval.py +40 -0
- pykel-1.0.0/src/kel/specs/frontmatter.py +21 -0
- pykel-1.0.0/src/kel/specs/llm_eval.py +63 -0
- pykel-1.0.0/src/kel/specs/loader.py +47 -0
- pykel-1.0.0/src/kel/specs/types.py +35 -0
- pykel-1.0.0/src/kel/storage/__init__.py +10 -0
- pykel-1.0.0/src/kel/storage/artifacts.py +47 -0
- pykel-1.0.0/src/kel/storage/blob.py +50 -0
- pykel-1.0.0/src/kel/storage/checkpoint_store.py +98 -0
- pykel-1.0.0/src/kel/storage/s3.py +58 -0
- pykel-1.0.0/src/kel/testing/__init__.py +23 -0
- pykel-1.0.0/src/kel/testing/assertions.py +44 -0
- pykel-1.0.0/src/kel/testing/cassette.py +29 -0
- pykel-1.0.0/src/kel/testing/recording.py +38 -0
- pykel-1.0.0/src/kel/testing/replay.py +42 -0
- pykel-1.0.0/src/kel/tools/__init__.py +33 -0
- pykel-1.0.0/src/kel/tools/code_exec.py +61 -0
- pykel-1.0.0/src/kel/tools/search_registry.py +62 -0
- pykel-1.0.0/src/kel/tools/shell_tool.py +57 -0
- pykel-1.0.0/src/kel/tools/sql_tool.py +68 -0
- pykel-1.0.0/src/kel/tools/web_fetch.py +99 -0
- pykel-1.0.0/src/kel/tools/web_search.py +340 -0
- pykel-1.0.0/tests/helpers.py +60 -0
- pykel-1.0.0/tests/providers/test_anthropic.py +207 -0
- pykel-1.0.0/tests/providers/test_cohere.py +200 -0
- pykel-1.0.0/tests/providers/test_gemini.py +124 -0
- pykel-1.0.0/tests/providers/test_mistral.py +116 -0
- pykel-1.0.0/tests/providers/test_openai.py +292 -0
- pykel-1.0.0/tests/test_agent.py +68 -0
- pykel-1.0.0/tests/test_agent_streaming.py +69 -0
- pykel-1.0.0/tests/test_brain.py +157 -0
- pykel-1.0.0/tests/test_budget.py +89 -0
- pykel-1.0.0/tests/test_caching.py +149 -0
- pykel-1.0.0/tests/test_chroma_store.py +90 -0
- pykel-1.0.0/tests/test_cli.py +100 -0
- pykel-1.0.0/tests/test_context_window.py +45 -0
- pykel-1.0.0/tests/test_credentials_optional.py +62 -0
- pykel-1.0.0/tests/test_heal.py +114 -0
- pykel-1.0.0/tests/test_instrumented.py +121 -0
- pykel-1.0.0/tests/test_interrupt.py +110 -0
- pykel-1.0.0/tests/test_llm_eval.py +54 -0
- pykel-1.0.0/tests/test_loaders.py +39 -0
- pykel-1.0.0/tests/test_loop.py +47 -0
- pykel-1.0.0/tests/test_memory.py +111 -0
- pykel-1.0.0/tests/test_monitoring.py +158 -0
- pykel-1.0.0/tests/test_orchestration.py +94 -0
- pykel-1.0.0/tests/test_pgvector_store.py +99 -0
- pykel-1.0.0/tests/test_pinecone_store.py +63 -0
- pykel-1.0.0/tests/test_prompting.py +65 -0
- pykel-1.0.0/tests/test_qdrant.py +128 -0
- pykel-1.0.0/tests/test_ratelimit.py +86 -0
- pykel-1.0.0/tests/test_realtime.py +64 -0
- pykel-1.0.0/tests/test_registry.py +129 -0
- pykel-1.0.0/tests/test_retrieval.py +165 -0
- pykel-1.0.0/tests/test_runtime.py +153 -0
- pykel-1.0.0/tests/test_serve.py +56 -0
- pykel-1.0.0/tests/test_specs.py +114 -0
- pykel-1.0.0/tests/test_storage.py +187 -0
- pykel-1.0.0/tests/test_structured.py +69 -0
- pykel-1.0.0/tests/test_testing.py +108 -0
- pykel-1.0.0/tests/test_tools_code_exec.py +62 -0
- pykel-1.0.0/tests/test_tools_search_registry.py +49 -0
- pykel-1.0.0/tests/test_tools_shell.py +44 -0
- pykel-1.0.0/tests/test_tools_sql.py +57 -0
- pykel-1.0.0/tests/test_tools_web_fetch.py +121 -0
- pykel-1.0.0/tests/test_tools_web_search.py +211 -0
- pykel-1.0.0/tests/test_tracer.py +56 -0
- pykel-1.0.0/tests/test_types.py +33 -0
- pykel-1.0.0/tests/test_weaviate_store.py +132 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Report something that isn't working as expected
|
|
4
|
+
title: "[Bug] "
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
**Describe the bug**
|
|
10
|
+
A clear, concise description of what's wrong.
|
|
11
|
+
|
|
12
|
+
**To Reproduce**
|
|
13
|
+
Minimal code to reproduce the behavior:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
# your repro here
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Expected behavior**
|
|
20
|
+
What you expected to happen instead.
|
|
21
|
+
|
|
22
|
+
**Environment**
|
|
23
|
+
- kel version: `python -c "import kel; print(kel.__version__)"`
|
|
24
|
+
- Python version:
|
|
25
|
+
- OS:
|
|
26
|
+
- Relevant extras installed (e.g. `kel[qdrant]`):
|
|
27
|
+
|
|
28
|
+
**Additional context**
|
|
29
|
+
Anything else that might help — logs, tracebacks, related issues.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest a new capability or improvement
|
|
4
|
+
title: "[Feature] "
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
**What problem does this solve?**
|
|
10
|
+
Describe the use case — what are you trying to build, and what's missing?
|
|
11
|
+
|
|
12
|
+
**Proposed solution**
|
|
13
|
+
What would the API/behavior look like? A sketch is great:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
# how you'd want to use it
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Alternatives considered**
|
|
20
|
+
Any workarounds you're using today, or other approaches you thought about.
|
|
21
|
+
|
|
22
|
+
**Additional context**
|
|
23
|
+
Links to similar features in other frameworks, related issues, etc.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
|
|
3
|
+
<!-- What does this PR change, and why? -->
|
|
4
|
+
|
|
5
|
+
## Checklist
|
|
6
|
+
|
|
7
|
+
- [ ] `ruff check src tests` passes
|
|
8
|
+
- [ ] `mypy src` passes
|
|
9
|
+
- [ ] `pytest -q` passes
|
|
10
|
+
- [ ] New/changed provider or vector-store adapters remain credentials-optional (work via env vars / ambient cloud credentials with no explicit key)
|
|
11
|
+
- [ ] Tests added or updated for the change
|
|
12
|
+
- [ ] Docs (`README.md`/`USAGE.md`/`CHANGELOG.md`) updated if user-facing behavior changed
|
|
13
|
+
|
|
14
|
+
## Related issues
|
|
15
|
+
|
|
16
|
+
<!-- e.g. Closes #123 -->
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [develop, main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [develop, main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
lint:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- uses: actions/setup-python@v5
|
|
16
|
+
with:
|
|
17
|
+
python-version: "3.12"
|
|
18
|
+
|
|
19
|
+
- name: Install kel (dev)
|
|
20
|
+
run: pip install -e ".[dev]"
|
|
21
|
+
|
|
22
|
+
- name: Ruff lint
|
|
23
|
+
run: ruff check src tests
|
|
24
|
+
|
|
25
|
+
- name: mypy
|
|
26
|
+
run: mypy src
|
|
27
|
+
|
|
28
|
+
test:
|
|
29
|
+
strategy:
|
|
30
|
+
fail-fast: false
|
|
31
|
+
matrix:
|
|
32
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
33
|
+
python-version: ["3.10", "3.11", "3.12"]
|
|
34
|
+
runs-on: ${{ matrix.os }}
|
|
35
|
+
steps:
|
|
36
|
+
- uses: actions/checkout@v4
|
|
37
|
+
|
|
38
|
+
- uses: actions/setup-python@v5
|
|
39
|
+
with:
|
|
40
|
+
python-version: ${{ matrix.python-version }}
|
|
41
|
+
|
|
42
|
+
- name: Install kel (dev)
|
|
43
|
+
run: pip install -e ".[dev]"
|
|
44
|
+
|
|
45
|
+
- name: Run tests
|
|
46
|
+
run: pytest -q
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
name: DevSecOps
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [develop, main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [develop, main]
|
|
8
|
+
schedule:
|
|
9
|
+
# weekly, so newly-disclosed CVEs in already-merged dependencies get
|
|
10
|
+
# caught even when nobody pushes new code that week
|
|
11
|
+
- cron: "0 6 * * 1"
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
security-events: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
trivy-scan:
|
|
19
|
+
name: Trivy (vulnerabilities, secrets, misconfig)
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
|
|
24
|
+
- name: Trivy filesystem scan (report, non-blocking)
|
|
25
|
+
uses: aquasecurity/trivy-action@master
|
|
26
|
+
with:
|
|
27
|
+
scan-type: fs
|
|
28
|
+
scan-ref: .
|
|
29
|
+
scanners: vuln,secret,misconfig
|
|
30
|
+
format: sarif
|
|
31
|
+
output: trivy-results.sarif
|
|
32
|
+
severity: CRITICAL,HIGH,MEDIUM
|
|
33
|
+
exit-code: "0"
|
|
34
|
+
|
|
35
|
+
- name: Upload results to GitHub Security tab
|
|
36
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
37
|
+
with:
|
|
38
|
+
sarif_file: trivy-results.sarif
|
|
39
|
+
|
|
40
|
+
- name: Fail build on CRITICAL findings
|
|
41
|
+
uses: aquasecurity/trivy-action@master
|
|
42
|
+
with:
|
|
43
|
+
scan-type: fs
|
|
44
|
+
scan-ref: .
|
|
45
|
+
scanners: vuln,secret
|
|
46
|
+
severity: CRITICAL
|
|
47
|
+
exit-code: "1"
|
|
48
|
+
|
|
49
|
+
pip-audit:
|
|
50
|
+
name: pip-audit (known CVEs in dependencies)
|
|
51
|
+
runs-on: ubuntu-latest
|
|
52
|
+
steps:
|
|
53
|
+
- uses: actions/checkout@v4
|
|
54
|
+
|
|
55
|
+
- uses: actions/setup-python@v5
|
|
56
|
+
with:
|
|
57
|
+
python-version: "3.12"
|
|
58
|
+
|
|
59
|
+
- name: Upgrade pip
|
|
60
|
+
run: pip install --upgrade pip
|
|
61
|
+
|
|
62
|
+
- name: Install kel with all extras
|
|
63
|
+
run: pip install -e ".[all]"
|
|
64
|
+
|
|
65
|
+
- name: Install pip-audit
|
|
66
|
+
run: pip install pip-audit
|
|
67
|
+
|
|
68
|
+
- name: Run pip-audit
|
|
69
|
+
# GHSA-f4j7-r4q5-qw2c / PYSEC-2026-311 (chromadb): pre-auth code
|
|
70
|
+
# injection in a *running Chroma server* via trust_remote_code=true
|
|
71
|
+
# on the collections endpoint. kel only ships a chromadb client
|
|
72
|
+
# adapter (kel.retrieval.chroma_store) — it never runs a Chroma
|
|
73
|
+
# server or sets that flag — so this finding doesn't apply here.
|
|
74
|
+
# No fixed chromadb version exists yet (affects 1.0.0 through
|
|
75
|
+
# latest); revisit and drop this ignore once one ships.
|
|
76
|
+
run: pip-audit --ignore-vuln GHSA-f4j7-r4q5-qw2c
|
|
77
|
+
|
|
78
|
+
bandit:
|
|
79
|
+
name: Bandit (Python SAST)
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
steps:
|
|
82
|
+
- uses: actions/checkout@v4
|
|
83
|
+
|
|
84
|
+
- uses: actions/setup-python@v5
|
|
85
|
+
with:
|
|
86
|
+
python-version: "3.12"
|
|
87
|
+
|
|
88
|
+
- name: Install Bandit
|
|
89
|
+
run: pip install bandit
|
|
90
|
+
|
|
91
|
+
- name: Run Bandit (medium severity and above)
|
|
92
|
+
run: bandit -r src/kel -ll -f txt
|
pykel-1.0.0/.gitignore
ADDED
pykel-1.0.0/CHANGELOG.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- PEP 561 `py.typed` marker and dynamic single-sourced versioning.
|
|
12
|
+
- PyPI metadata: classifiers, keywords, `project.urls`.
|
|
13
|
+
- Ruff lint and mypy type-check jobs in CI.
|
|
14
|
+
- ASCII banner shown by the `kel` CLI (`kel --version` / bare `kel`).
|
|
15
|
+
- CHANGELOG, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY docs and GitHub issue/PR templates.
|
|
16
|
+
|
|
17
|
+
## [0.1.0] - 2026-07-24
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- Core model gateway with Anthropic, OpenAI, Cohere, Gemini, and Mistral adapters — all credentials-optional by design (env vars / ambient cloud credentials work with no explicit key).
|
|
21
|
+
- Observability (tracer, spans, sinks), budget tracking, rate limiting, and response caching.
|
|
22
|
+
- Context window management and memory (episodic + semantic) subsystems.
|
|
23
|
+
- Retrieval: Qdrant, Pinecone, Weaviate, Chroma, and pgvector vector stores; recursive text splitter; PDF loader.
|
|
24
|
+
- Agent runtime with graph-based execution, streaming, human-in-the-loop interrupts, and structured output.
|
|
25
|
+
- Tooling: web fetch (SSRF-hardened), web search, SQL, and shell tools.
|
|
26
|
+
- Testing utilities: cassette recording/replay, LLM-graded evals, span/trace assertions.
|
|
27
|
+
- Storage: file/S3 blob storage, checkpointing (hardened against unsafe deserialization).
|
|
28
|
+
- Lightweight, stdlib-only monitoring dashboard with live-refreshing metrics.
|
|
29
|
+
- `.md`-based agent specs, CLI (`run`/`eval`/`trace`), and `serve()` HTTP runtime.
|
|
30
|
+
- DevSecOps pipeline: Trivy, pip-audit, and Bandit scanning; Dependabot.
|
|
31
|
+
|
|
32
|
+
[Unreleased]: https://github.com/kprasad7/kel/compare/v0.1.0...HEAD
|
|
33
|
+
[0.1.0]: https://github.com/kprasad7/kel/releases/tag/v0.1.0
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in
|
|
6
|
+
our community a harassment-free experience for everyone, regardless of
|
|
7
|
+
age, body size, visible or invisible disability, ethnicity, sex
|
|
8
|
+
characteristics, gender identity and expression, level of experience,
|
|
9
|
+
education, socio-economic status, nationality, personal appearance,
|
|
10
|
+
race, religion, or sexual identity and orientation.
|
|
11
|
+
|
|
12
|
+
## Our Standards
|
|
13
|
+
|
|
14
|
+
Examples of behavior that contributes to a positive environment:
|
|
15
|
+
|
|
16
|
+
- Demonstrating empathy and kindness toward other people
|
|
17
|
+
- Being respectful of differing opinions, viewpoints, and experiences
|
|
18
|
+
- Giving and gracefully accepting constructive feedback
|
|
19
|
+
- Focusing on what is best for the community
|
|
20
|
+
|
|
21
|
+
Examples of unacceptable behavior:
|
|
22
|
+
|
|
23
|
+
- The use of sexualized language or imagery, and sexual attention or advances
|
|
24
|
+
- Trolling, insulting or derogatory comments, and personal or political attacks
|
|
25
|
+
- Public or private harassment
|
|
26
|
+
- Publishing others' private information without explicit permission
|
|
27
|
+
|
|
28
|
+
## Enforcement Responsibilities
|
|
29
|
+
|
|
30
|
+
Project maintainers are responsible for clarifying and enforcing standards
|
|
31
|
+
of acceptable behavior and will take appropriate, fair corrective action
|
|
32
|
+
in response to any behavior deemed inappropriate, threatening, offensive,
|
|
33
|
+
or harmful.
|
|
34
|
+
|
|
35
|
+
## Scope
|
|
36
|
+
|
|
37
|
+
This Code of Conduct applies within all community spaces (issues, pull
|
|
38
|
+
requests, discussions) and when an individual is officially representing
|
|
39
|
+
the project in public spaces.
|
|
40
|
+
|
|
41
|
+
## Enforcement
|
|
42
|
+
|
|
43
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
44
|
+
reported to the maintainers via a GitHub issue marked confidential or by
|
|
45
|
+
contacting the repository owner directly through GitHub. All complaints
|
|
46
|
+
will be reviewed and investigated promptly and fairly.
|
|
47
|
+
|
|
48
|
+
## Attribution
|
|
49
|
+
|
|
50
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
51
|
+
version 2.1, available at
|
|
52
|
+
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html.
|
|
53
|
+
|
|
54
|
+
[homepage]: https://www.contributor-covenant.org
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Contributing to kel
|
|
2
|
+
|
|
3
|
+
Thanks for considering a contribution. This project is young, so small,
|
|
4
|
+
focused pull requests are the easiest to review and merge.
|
|
5
|
+
|
|
6
|
+
## Getting set up
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
git clone https://github.com/kprasad7/kel.git
|
|
10
|
+
cd kel
|
|
11
|
+
python -m venv .venv
|
|
12
|
+
. .venv/Scripts/activate # Windows; use `source .venv/bin/activate` on macOS/Linux
|
|
13
|
+
pip install -e ".[dev]"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Before opening a PR
|
|
17
|
+
|
|
18
|
+
Run the same checks CI runs:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
ruff check src tests
|
|
22
|
+
mypy src
|
|
23
|
+
pytest -q
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
All three must pass. If you touch a provider or vector-store adapter that
|
|
27
|
+
requires a third-party SDK, install it via the relevant extra (e.g.
|
|
28
|
+
`pip install -e ".[qdrant]"`) and add tests against an injected fake
|
|
29
|
+
client — tests should never require live credentials or a live account.
|
|
30
|
+
|
|
31
|
+
## Guidelines
|
|
32
|
+
|
|
33
|
+
- **Credentials stay optional.** Every provider/store adapter must work
|
|
34
|
+
when no explicit API key is passed, falling back to environment
|
|
35
|
+
variables or ambient cloud credentials (IAM role, Workload Identity,
|
|
36
|
+
IRSA). Don't add a required-key check that breaks that path.
|
|
37
|
+
- **No new abstractions for their own sake.** kel's whole pitch is fewer
|
|
38
|
+
layers than the alternatives — prefer a direct implementation over a new
|
|
39
|
+
interface unless at least two call sites need it.
|
|
40
|
+
- **Security-sensitive changes** (deserialization, subprocess/shell
|
|
41
|
+
execution, URL fetching, SQL construction) need a one-line comment
|
|
42
|
+
explaining why the operation is safe, not just that it works.
|
|
43
|
+
- **Docstrings over comments** for adapters: explain what real-world
|
|
44
|
+
deployment scenario a design choice serves (e.g. "works under EKS IRSA
|
|
45
|
+
with no key at all"), not what the code does line by line.
|
|
46
|
+
|
|
47
|
+
## Reporting bugs / requesting features
|
|
48
|
+
|
|
49
|
+
Open a [GitHub issue](https://github.com/kprasad7/kel/issues). For
|
|
50
|
+
security vulnerabilities, see [SECURITY.md](SECURITY.md) instead of
|
|
51
|
+
filing a public issue.
|