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.
@@ -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"]