axolotl-ai-cloud--axolotl
78ec5d9290
ci-cd / build-axolotl-uv (<nil>, 130, 13.0.0, linux/amd64,linux/arm64, 3.12, 2.11.0) (push) Has been cancelled
ci-cd / build-axolotl-uv (<nil>, 130, 13.0.0, true, linux/amd64,linux/arm64, 3.12, 2.12.0) (push) Has been cancelled
ci-cd / build-axolotl-cloud-uv (<nil>, 130, 13.0.0, linux/amd64,linux/arm64, 3.12, 2.11.0) (push) Has been cancelled
ci-cd / build-axolotl-cloud-uv (<nil>, 130, 13.0.0, true, linux/amd64,linux/arm64, 3.12, 2.12.0) (push) Has been cancelled
ci-cd / build-axolotl-cloud-no-tmux-uv (<nil>, 130, 13.0.0, linux/amd64,linux/arm64, 3.12, 2.11.0) (push) Has been cancelled
ci-cd / build-axolotl-cloud-no-tmux-uv (<nil>, 130, 13.0.0, true, linux/amd64,linux/arm64, 3.12, 2.12.0) (push) Has been cancelled
ci-cd-base / build-base-uv (130, 13.0.0, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.12.0, 9.0 10.0 10.3 12.0+PTX) (push) Has been cancelled
ci-cd-base / build-base-uv (130, 13.0.0, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.12.1, 9.0 10.0 10.3 12.0+PTX) (push) Has been cancelled
ci-cd-base / build-base-uv (130, 13.0.0, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.13.0, 9.0 10.0 10.3 12.0+PTX) (push) Has been cancelled
ci-cd-base / build-base-uv (132, 13.2.1, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.13.0, 9.0 10.0 10.3 12.0+PTX, https://download.pytorch.org/whl/cu132) (push) Has been cancelled
ci-cd-base / build-base-uv (130, 13.0.0, , Dockerfile-uv-base, linux/amd64,linux/arm64, 3.12, 2.11.0, 9.0 10.0 10.3 12.0+PTX) (push) Has been cancelled
Tests / PyTest (3.12, 2.12.1) (push) Has been cancelled
Tests / PyTest (3.12, 2.13.0) (push) Has been cancelled
docker-e2e-tests / gate-skip-e2e (push) Has been cancelled
docker-e2e-tests / docker-e2e-tests-1st (<nil>, 130, 13.0.0, 1, 3.12, 2.12.1) (push) Has been cancelled
docker-e2e-tests / docker-e2e-tests (<nil>, 130, 13.0.0, 1, 3.12, 2.11.0) (push) Has been cancelled
docker-e2e-tests / docker-e2e-kernel-tests (<nil>, 130, 13.0.0, 1, 3.12, 2.11.0) (push) Has been cancelled
docker-e2e-tests / docker-e2e-kernel-tests (<nil>, 130, 13.0.0, 1, 3.12, 2.12.1) (push) Has been cancelled
docker-e2e-tests / docker-e2e-cleanup (<nil>, 130, 13.0.0, 1, 3.12, 2.12.1) (push) Has been cancelled
Publish Docs / build-deploy (push) Has been cancelled
Tests / PyTest from Source Dist (3.12, 2.11.0) (push) Has been cancelled
Tests / PyTest from Source Dist (3.12, 2.12.1) (push) Has been cancelled
Tests / PyTest from Source Dist (3.12, 2.13.0) (push) Has been cancelled
Tests / pre-commit (push) Has been cancelled
Tests / Prefetch S3 once to prime the CDN cache (push) Has been cancelled
Tests / PyTest (3.12, 2.11.0) (push) Has been cancelled
108 行
3.3 KiB
Python
108 行
3.3 KiB
Python
import os
|
|
import tempfile
|
|
|
|
|
|
def _dummy_cfg(output_dir: str, append: bool = False):
|
|
# Minimal object with attributes used by prepare_debug_log
|
|
class Cfg:
|
|
def __init__(self, out, append):
|
|
self.output_dir = out
|
|
self._append = append
|
|
|
|
def get(self, key, default=None):
|
|
if key in {"resume_from_checkpoint", "auto_resume_from_checkpoints"}:
|
|
return self._append
|
|
return default
|
|
|
|
return Cfg(output_dir, append)
|
|
|
|
|
|
def read(path: str) -> str:
|
|
with open(path, "r", encoding="utf-8") as f:
|
|
return f.read()
|
|
|
|
|
|
def test_file_only_stream_writes_after_prepare(monkeypatch):
|
|
from axolotl.utils import tee
|
|
|
|
with tempfile.TemporaryDirectory() as td:
|
|
# Avoid stdout tee in this test
|
|
monkeypatch.setenv("AXOLOTL_TEE_STDOUT", "0")
|
|
cfg = _dummy_cfg(td, append=False)
|
|
|
|
# before prepare: writing to file_only_stream creates no file
|
|
tee.file_only_stream.write("before\n")
|
|
tee.file_only_stream.flush()
|
|
assert not os.path.exists(os.path.join(td, "debug.log"))
|
|
|
|
# prepare and write
|
|
path = tee.prepare_debug_log(cfg)
|
|
assert os.path.basename(path) == "debug.log"
|
|
tee.file_only_stream.write("hello\n")
|
|
tee.file_only_stream.flush()
|
|
|
|
content = read(path)
|
|
assert "hello" in content
|
|
|
|
tee.close_debug_log()
|
|
|
|
|
|
def test_stdout_is_mirrored_after_prepare(capsys, monkeypatch):
|
|
from axolotl.utils import tee
|
|
|
|
with tempfile.TemporaryDirectory() as td:
|
|
cfg = _dummy_cfg(td, append=False)
|
|
try:
|
|
# Install tee while capture is disabled so stdout tee wraps real stdout.
|
|
with capsys.disabled():
|
|
monkeypatch.setenv("AXOLOTL_TEE_STDOUT", "1")
|
|
path = tee.prepare_debug_log(cfg)
|
|
import sys
|
|
|
|
print("printed-line")
|
|
sys.stdout.flush()
|
|
|
|
# Now verify file contains the line
|
|
content = read(path)
|
|
assert "printed-line" in content
|
|
finally:
|
|
tee.close_debug_log()
|
|
|
|
|
|
def test_truncate_vs_append_behavior(monkeypatch):
|
|
from axolotl.utils import tee
|
|
|
|
with tempfile.TemporaryDirectory() as td:
|
|
# Avoid stdout tee in this test
|
|
monkeypatch.setenv("AXOLOTL_TEE_STDOUT", "0")
|
|
# First run creates file with A
|
|
cfg = _dummy_cfg(td, append=False)
|
|
_ = tee.prepare_debug_log(cfg)
|
|
try:
|
|
tee.file_only_stream.write("A\n")
|
|
tee.file_only_stream.flush()
|
|
finally:
|
|
tee.close_debug_log()
|
|
|
|
# Second run with append=False truncates
|
|
cfg2 = _dummy_cfg(td, append=False)
|
|
path2 = tee.prepare_debug_log(cfg2)
|
|
try:
|
|
tee.file_only_stream.write("B\n")
|
|
tee.file_only_stream.flush()
|
|
content = read(path2)
|
|
assert "A\n" not in content and "B\n" in content
|
|
finally:
|
|
tee.close_debug_log()
|
|
|
|
# Third run with append=True preserves existing
|
|
cfg3 = _dummy_cfg(td, append=True)
|
|
path3 = tee.prepare_debug_log(cfg3)
|
|
try:
|
|
tee.file_only_stream.write("C\n")
|
|
tee.file_only_stream.flush()
|
|
content = read(path3)
|
|
assert "B\n" in content and "C\n" in content
|
|
finally:
|
|
tee.close_debug_log()
|