aether-context 0.3.0__py3-none-any.whl
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.
- aether_context/__init__.py +29 -0
- aether_context/_log.py +33 -0
- aether_context/cli.py +1191 -0
- aether_context/config.py +206 -0
- aether_context/context_pool.py +819 -0
- aether_context/encoder.py +213 -0
- aether_context/errors.py +93 -0
- aether_context/local_llm.py +846 -0
- aether_context/mpo.py +151 -0
- aether_context/py.typed +0 -0
- aether_context/quantize.py +86 -0
- aether_context/session.py +829 -0
- aether_context/slice_loader.py +501 -0
- aether_context/tokenizer.py +64 -0
- aether_context/ui.py +253 -0
- aether_context/witness.py +356 -0
- aether_context-0.3.0.dist-info/METADATA +429 -0
- aether_context-0.3.0.dist-info/RECORD +23 -0
- aether_context-0.3.0.dist-info/WHEEL +5 -0
- aether_context-0.3.0.dist-info/entry_points.txt +2 -0
- aether_context-0.3.0.dist-info/licenses/LICENSE +201 -0
- aether_context-0.3.0.dist-info/licenses/NOTICE.md +19 -0
- aether_context-0.3.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# aether-context (Unlimited Context)
|
|
2
|
+
# Copyright (c) 2026 Aether AI
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
"""aether-context — virtual memory for an LLM's attention (local-first, numpy-only core).
|
|
5
|
+
|
|
6
|
+
"Unlimited" means *reach, not attention*: the model keeps its native window; the engine
|
|
7
|
+
externalizes overflow to a local pool and pages the right slices back in via retrieval.
|
|
8
|
+
|
|
9
|
+
The whole product is three lines:
|
|
10
|
+
|
|
11
|
+
from aether_context import Session
|
|
12
|
+
|
|
13
|
+
s = Session(model="ollama/qwen2.5", pool_gb=5)
|
|
14
|
+
s.run("Build me a full-stack weightlifting tracker app.")
|
|
15
|
+
|
|
16
|
+
No Ollama? ``Session(model="mock", pool_gb=5)`` runs the engine end-to-end with a built-in
|
|
17
|
+
deterministic model (offline, zero deps) — great for trying the API, tests, and CI.
|
|
18
|
+
|
|
19
|
+
Public surface (intentionally tiny):
|
|
20
|
+
* :class:`Session` — the lifecycle controller you drive.
|
|
21
|
+
* :func:`load_model` — resolve a model spec / bring-your-own backend to a ``LocalLLM``.
|
|
22
|
+
* :data:`__version__` — the package version.
|
|
23
|
+
"""
|
|
24
|
+
from aether_context.local_llm import load_model
|
|
25
|
+
from aether_context.session import Session
|
|
26
|
+
|
|
27
|
+
__version__ = "0.3.0"
|
|
28
|
+
|
|
29
|
+
__all__ = ["Session", "load_model", "__version__"]
|
aether_context/_log.py
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# aether-context (Unlimited Context)
|
|
2
|
+
# Copyright (c) 2026 Aether AI
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
"""Logging seam for aether-context.
|
|
5
|
+
|
|
6
|
+
Library discipline: a library never configures the root logger and never prints. Each
|
|
7
|
+
module gets a named logger under the ``aether_context`` namespace with a ``NullHandler``
|
|
8
|
+
attached, so it stays silent unless the host application configures logging. There is no
|
|
9
|
+
``print()`` anywhere in the package — use ``get_logger(__name__)`` instead.
|
|
10
|
+
"""
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import logging
|
|
14
|
+
|
|
15
|
+
_ROOT_NAME = "aether_context"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_logger(name: str) -> logging.Logger:
|
|
19
|
+
"""Return a namespaced logger with a ``NullHandler`` attached.
|
|
20
|
+
|
|
21
|
+
The logger is placed under the ``aether_context`` root namespace so a host app can
|
|
22
|
+
configure the whole package with one call (``logging.getLogger("aether_context")``).
|
|
23
|
+
A ``NullHandler`` is attached idempotently so the library is silent by default and
|
|
24
|
+
never emits "No handlers could be found" warnings.
|
|
25
|
+
"""
|
|
26
|
+
full_name = name if name.startswith(_ROOT_NAME) else f"{_ROOT_NAME}.{name}"
|
|
27
|
+
logger = logging.getLogger(full_name)
|
|
28
|
+
if not any(isinstance(h, logging.NullHandler) for h in logger.handlers):
|
|
29
|
+
logger.addHandler(logging.NullHandler())
|
|
30
|
+
return logger
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
__all__ = ["get_logger"]
|