- Eliminate core/ directory into cache/, runtime/, network/ subpackages plus flat modules
- Split cache.py (647 lines) into cache/{buffer,strategy,pool}.py by layer
- Add explicit ContiguousStrategy, make AllocationStrategy a real ABC
- Move TaskCacheState to cache/strategy.py, drop string forward references
- Rename api/ to network/, server.py to app.py
- Move sample.py into runtime/ alongside executor and graph
- Simplify TaskCacheManager.__init__ to single pool param
- Expose pool.strategy and pool.req_pool as public properties
- Fix KVCache import in attention_backend.py (TYPE_CHECKING guard)
- Fix steady-state decode reading uninitialized position_ids on first step
28 lines
912 B
Python
28 lines
912 B
Python
import logging
|
|
import os
|
|
|
|
|
|
def setup_logging(level: str = "INFO"):
|
|
"""Attach a StreamHandler to the ``astrai`` logger (idempotent).
|
|
|
|
Call once per process at the top of CLI scripts.
|
|
Set ``ASTR_LOG_LEVEL`` env var to override the default level.
|
|
|
|
Level names: ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, ``CRITICAL``.
|
|
``DEBUG`` enables per-step prefill/decode timing logs
|
|
(:func:`astrai.inference.runtime.executor.timed`).
|
|
"""
|
|
logger = logging.getLogger("astrai")
|
|
if logger.handlers:
|
|
return
|
|
level_name = os.environ.get("ASTR_LOG_LEVEL", level).upper()
|
|
logger.setLevel(getattr(logging, level_name, logging.INFO))
|
|
handler = logging.StreamHandler()
|
|
handler.setFormatter(
|
|
logging.Formatter(
|
|
"%(asctime)s | %(levelname)-7s | %(name)s | %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S",
|
|
)
|
|
)
|
|
logger.addHandler(handler)
|