From e2ad2a4e1b67e00f976d9229922e86c36d0a2df8 Mon Sep 17 00:00:00 2001 From: Philip Potter Date: Thu, 16 Jan 2025 10:24:55 +0000 Subject: [PATCH 1/5] Pin ruff to 0.9.1 and reformat --- test-integration/test_integration/util.py | 48 +++++++++++------------ tox.ini | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/test-integration/test_integration/util.py b/test-integration/test_integration/util.py index 4016a64a52..88d6826037 100644 --- a/test-integration/test_integration/util.py +++ b/test-integration/test_integration/util.py @@ -55,9 +55,9 @@ def assert_versions_match(semver_version: str, pep440_version: str): ) # Check base release version - assert ( - semver_release == pep440_groups["release"] - ), f"Release versions do not match: {semver_release} != {pep440_groups['release']}" + assert semver_release == pep440_groups["release"], ( + f"Release versions do not match: {semver_release} != {pep440_groups['release']}" + ) # Check prerelease status semver_pre = semver_groups["prerelease"] @@ -67,35 +67,35 @@ def assert_versions_match(semver_version: str, pep440_version: str): if semver_pre: if semver_pre.startswith("alpha"): - assert ( - pep440_groups["pre_l"] == "a" - ), "Alpha pre-release status does not match" - assert not pep440_groups[ - "dev" - ], "Semver pre-release cannot also be a PEP440 dev build" + assert pep440_groups["pre_l"] == "a", ( + "Alpha pre-release status does not match" + ) + assert not pep440_groups["dev"], ( + "Semver pre-release cannot also be a PEP440 dev build" + ) if semver_pre.startswith("beta"): - assert ( - pep440_groups["pre_l"] == "b" - ), "Beta pre-release status does not match" - assert not pep440_groups[ - "dev" - ], "Semver pre-release cannot also be a PEP440 dev build" + assert pep440_groups["pre_l"] == "b", ( + "Beta pre-release status does not match" + ) + assert not pep440_groups["dev"], ( + "Semver pre-release cannot also be a PEP440 dev build" + ) if semver_pre.startswith("rc"): - assert ( - pep440_groups["pre_l"] == "rc" - ), "Release candidate pre-release status does not match" - assert not pep440_groups[ - "dev" - ], "Semver pre-release cannot also be a PEP440 dev build" + assert pep440_groups["pre_l"] == "rc", ( + "Release candidate pre-release status does not match" + ) + assert not pep440_groups["dev"], ( + "Semver pre-release cannot also be a PEP440 dev build" + ) if semver_pre.startswith("dev"): assert pep440_groups["dev_l"] == "dev", "Dev build status does not match" - assert ( - semver_groups["buildmetadata"] == pep440_groups["local"] - ), f"Local/build metadata component does not match: {semver_groups['buildmetadata']} != {pep440_groups['local']}" + assert semver_groups["buildmetadata"] == pep440_groups["local"], ( + f"Local/build metadata component does not match: {semver_groups['buildmetadata']} != {pep440_groups['local']}" + ) def random_string(length): diff --git a/tox.ini b/tox.ini index 450462c728..848b138b83 100644 --- a/tox.ini +++ b/tox.ini @@ -34,7 +34,7 @@ commands = [testenv:lint] base_python = python3.12 skip_install = true -deps = ruff +deps = ruff==0.9.1 commands = ruff check python/cog ruff format --check python From d04f127b8157eeae389bb5376f2cd420b08c2612 Mon Sep 17 00:00:00 2001 From: Philip Potter Date: Thu, 16 Jan 2025 10:25:14 +0000 Subject: [PATCH 2/5] convert Scope to attrs.frozen --- python/cog/server/scope.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/python/cog/server/scope.py b/python/cog/server/scope.py index 7487c63b7e..737c230e78 100644 --- a/python/cog/server/scope.py +++ b/python/cog/server/scope.py @@ -3,16 +3,14 @@ from contextvars import ContextVar from typing import Callable, Generator, Optional, Union +from attrs import frozen + from ..types import ExperimentalFeatureWarning +@frozen class Scope: - def __init__( - self, - *, - record_metric: Callable[[str, Union[float, int]], None], - ) -> None: - self.record_metric = record_metric + record_metric: Callable[[str, Union[float, int]], None] _current_scope: ContextVar[Optional[Scope]] = ContextVar("scope", default=None) From 100784903827cbace7c2142ff378b6b4037d95e3 Mon Sep 17 00:00:00 2001 From: Philip Potter Date: Thu, 16 Jan 2025 11:59:44 +0000 Subject: [PATCH 3/5] Move _tag_var to Scope This moves _tag_var to Scope, so that we have a single ContextVar rather than multiple. --- python/cog/server/scope.py | 15 +++++++++++++-- python/cog/server/worker.py | 18 +++++------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/python/cog/server/scope.py b/python/cog/server/scope.py index 737c230e78..30229d21be 100644 --- a/python/cog/server/scope.py +++ b/python/cog/server/scope.py @@ -1,9 +1,9 @@ import warnings from contextlib import contextmanager from contextvars import ContextVar -from typing import Callable, Generator, Optional, Union +from typing import Any, Callable, Generator, Optional, Union -from attrs import frozen +from attrs import evolve, frozen from ..types import ExperimentalFeatureWarning @@ -11,6 +11,7 @@ @frozen class Scope: record_metric: Callable[[str, Union[float, int]], None] + _tag: Optional[str] = None _current_scope: ContextVar[Optional[Scope]] = ContextVar("scope", default=None) @@ -37,6 +38,16 @@ def scope(sc: Scope) -> Generator[None, None, None]: _current_scope.reset(s) +@contextmanager +def evolve_scope(**kwargs: Any) -> Generator[None, None, None]: + new_scope = evolve(current_scope(), **kwargs) + s = _current_scope.set(new_scope) + try: + yield + finally: + _current_scope.reset(s) + + def emit_metric(name: str, value: Union[float, int]) -> None: """ DEPRECATED: This function will be removed in a future version of cog. diff --git a/python/cog/server/worker.py b/python/cog/server/worker.py index c63780c3f7..f283f789c6 100644 --- a/python/cog/server/worker.py +++ b/python/cog/server/worker.py @@ -1,6 +1,5 @@ import asyncio import contextlib -import contextvars import inspect import multiprocessing import os @@ -58,15 +57,12 @@ InvalidStateException, ) from .helpers import SimpleStreamRedirector, StreamRedirector -from .scope import Scope, scope +from .scope import Scope, current_scope, evolve_scope, scope if PYDANTIC_V2: from .helpers import unwrap_pydantic_serialization_iterators _spawn = multiprocessing.get_context("spawn") -_tag_var: contextvars.ContextVar[Optional[str]] = contextvars.ContextVar( - "tag", default=None -) _PublicEventType = Union[Done, Log, PredictionOutput, PredictionOutputType] @@ -407,7 +403,7 @@ def __init__( self._cancelable = False self._max_concurrency = max_concurrency - # for synchronous predictors only! async predictors use _tag_var instead + # for synchronous predictors only! async predictors use current_scope()._tag instead self._sync_tag: Optional[str] = None self._has_async_predictor = is_async @@ -483,10 +479,8 @@ def record_metric(self, name: str, value: Union[float, int]) -> None: @property def _current_tag(self) -> Optional[str]: - # if _tag_var is set, use that (only applies within _apredict()) - tag = _tag_var.get() - if tag: - return tag + if self._has_async_predictor: + return current_scope()._tag return self._sync_tag def _load_predictor(self) -> Optional[BasePredictor]: @@ -687,9 +681,7 @@ async def _apredict( predict: Callable[..., Any], redirector: SimpleStreamRedirector, ) -> None: - _tag_var.set(tag) - - with self._handle_predict_error(redirector, tag=tag): + with evolve_scope(tag=tag), self._handle_predict_error(redirector, tag=tag): future_result = predict(**payload) if future_result: From 2f12ead687006d087dd229e354fc8fbe0b9cf574 Mon Sep 17 00:00:00 2001 From: Philip Potter Date: Thu, 16 Jan 2025 12:25:13 +0000 Subject: [PATCH 4/5] Avoid warnings --- python/cog/server/scope.py | 6 +++++- python/cog/server/worker.py | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/python/cog/server/scope.py b/python/cog/server/scope.py index 30229d21be..d326cf4b46 100644 --- a/python/cog/server/scope.py +++ b/python/cog/server/scope.py @@ -23,6 +23,10 @@ def current_scope() -> Scope: category=ExperimentalFeatureWarning, stacklevel=1, ) + return _get_current_scope() + + +def _get_current_scope() -> Scope: s = _current_scope.get() if s is None: raise RuntimeError("No scope available") @@ -40,7 +44,7 @@ def scope(sc: Scope) -> Generator[None, None, None]: @contextmanager def evolve_scope(**kwargs: Any) -> Generator[None, None, None]: - new_scope = evolve(current_scope(), **kwargs) + new_scope = evolve(_get_current_scope(), **kwargs) s = _current_scope.set(new_scope) try: yield diff --git a/python/cog/server/worker.py b/python/cog/server/worker.py index f283f789c6..40f8ff0b5a 100644 --- a/python/cog/server/worker.py +++ b/python/cog/server/worker.py @@ -57,7 +57,7 @@ InvalidStateException, ) from .helpers import SimpleStreamRedirector, StreamRedirector -from .scope import Scope, current_scope, evolve_scope, scope +from .scope import Scope, _get_current_scope, evolve_scope, scope if PYDANTIC_V2: from .helpers import unwrap_pydantic_serialization_iterators @@ -480,7 +480,7 @@ def record_metric(self, name: str, value: Union[float, int]) -> None: @property def _current_tag(self) -> Optional[str]: if self._has_async_predictor: - return current_scope()._tag + return _get_current_scope()._tag return self._sync_tag def _load_predictor(self) -> Optional[BasePredictor]: From 85b85bfeaec2e71907c3dcb036108c2d5ef60145 Mon Sep 17 00:00:00 2001 From: zhoufanjin Date: Fri, 17 Jan 2025 01:25:23 +0800 Subject: [PATCH 5/5] chore: fix some comments Signed-off-by: zhoufanjin --- pkg/cli/run.go | 2 +- tools/install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/cli/run.go b/pkg/cli/run.go index bbb28b8a2f..84415ec83b 100644 --- a/pkg/cli/run.go +++ b/pkg/cli/run.go @@ -39,7 +39,7 @@ func newRunCommand() *cobra.Command { addFastFlag(cmd) flags := cmd.Flags() - // Flags after first argment are considered args and passed to command + // Flags after first argument are considered args and passed to command // This is called `publish` for consistency with `docker run` cmd.Flags().StringArrayVarP(&runPorts, "publish", "p", []string{}, "Publish a container's port to the host, e.g. -p 8000") diff --git a/tools/install.sh b/tools/install.sh index 13f7733938..fd0365481e 100644 --- a/tools/install.sh +++ b/tools/install.sh @@ -180,7 +180,7 @@ main() { esac fi - # Check the users sudo priviledges + # Check the users sudo privileges if [ -z "${SUDO+set}" ]; then SUDO="sudo" fi