Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix pf version #2588

Merged
merged 17 commits into from
Apr 2, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# ---------------------------------------------------------

VERSION = "0.0.1"
import importlib.metadata

__version__ = importlib.metadata.version("promptflow-devkit")

VERSION: str = __version__
2 changes: 2 additions & 0 deletions src/promptflow-core/promptflow/core/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,5 @@
import importlib.metadata

__version__ = importlib.metadata.version("promptflow-core")

VERSION: str = __version__
26 changes: 25 additions & 1 deletion src/promptflow-devkit/promptflow/_cli/_pf/entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,14 @@
from promptflow._cli._pf._upgrade import add_upgrade_parser, upgrade_version # noqa: E402
from promptflow._cli._pf.help import show_privacy_statement, show_welcome_message # noqa: E402
from promptflow._cli._user_agent import USER_AGENT # noqa: E402
from promptflow._sdk._utils import get_promptflow_sdk_version, print_pf_version # noqa: E402
from promptflow._sdk._utils import ( # noqa: E402
get_promptflow_azure_version,
get_promptflow_core_version,
get_promptflow_devkit_version,
get_promptflow_sdk_version,
get_promptflow_tracing_version,
print_pf_version,
)
from promptflow._utils.logger_utils import get_cli_sdk_logger # noqa: E402
from promptflow._utils.user_agent_utils import setup_user_agent_to_operation_context # noqa: E402

Expand Down Expand Up @@ -128,6 +135,23 @@ def main():
command_args = sys.argv[1:]
if len(command_args) == 1 and command_args[0] == "version":
version_dict = {"promptflow": get_promptflow_sdk_version()}
# check tracing version
version_tracing = get_promptflow_tracing_version()
if version_tracing:
version_dict["promptflow-tracing"] = version_tracing
# check azure version
version_azure = get_promptflow_azure_version()
if version_azure:
version_dict["promptflow-azure"] = version_azure
# check core version
version_core = get_promptflow_core_version()
if version_core:
version_dict["promptflow-core"] = version_core
# check devkit version
version_devkit = get_promptflow_devkit_version()
if version_devkit:
version_dict["promptflow-devkit"] = version_devkit

version_dict_string = (
json.dumps(version_dict, ensure_ascii=False, indent=2, sort_keys=True, separators=(",", ": ")) + "\n"
)
Expand Down
2 changes: 1 addition & 1 deletion src/promptflow-devkit/promptflow/_cli/_user_agent.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ---------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# ---------------------------------------------------------
from promptflow._version import VERSION
from promptflow.client._version import VERSION

USER_AGENT = "{}/{}".format("promptflow-cli", VERSION)
2 changes: 1 addition & 1 deletion src/promptflow-devkit/promptflow/_internal/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@
set_context,
transpose,
)
from promptflow._version import VERSION
from promptflow.client._version import VERSION
from promptflow.core._serving.response_creator import ResponseCreator
from promptflow.core._serving.swagger import generate_swagger
from promptflow.core._serving.utils import (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
from promptflow._sdk._utils import get_promptflow_sdk_version, read_write_by_user
from promptflow._utils.logger_utils import get_cli_sdk_logger
from promptflow._utils.yaml_utils import dump_yaml, load_yaml
from promptflow._version import VERSION
from promptflow.client._version import VERSION
from promptflow.exceptions import PromptflowException, UserErrorException

logger = get_cli_sdk_logger()
Expand Down
2 changes: 1 addition & 1 deletion src/promptflow-devkit/promptflow/_sdk/_user_agent.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ---------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# ---------------------------------------------------------
from promptflow._version import VERSION
from promptflow.client._version import VERSION

USER_AGENT = "{}/{}".format("promptflow-sdk", VERSION)
56 changes: 53 additions & 3 deletions src/promptflow-devkit/promptflow/_sdk/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -326,13 +326,63 @@ def incremental_print(log: str, printed: int, fileout) -> int:
def get_promptflow_sdk_version() -> str:
try:
return promptflow.__version__
except AttributeError:
except ImportError:
# if promptflow is installed from source, it does not have __version__ attribute
return "0.0.1"
return None


def get_promptflow_tracing_version() -> Union[str, None]:
try:
from promptflow.tracing._version import __version__

return __version__
except ImportError:
return None


def get_promptflow_core_version() -> Union[str, None]:
try:
from promptflow.core._version import __version__

return __version__
except ImportError:
return None


def get_promptflow_devkit_version() -> Union[str, None]:
try:
from promptflow.client._version import __version__

return __version__
except ImportError:
return None


def get_promptflow_azure_version() -> Union[str, None]:
try:
from promptflow.azure._version import __version__

return __version__
except ImportError:
return None


def print_pf_version():
print("promptflow\t\t\t {}".format(get_promptflow_sdk_version()))
version_promptflow = get_promptflow_sdk_version()
if version_promptflow:
print("promptflow\t\t\t {}".format(version_promptflow))
version_tracing = get_promptflow_tracing_version()
if version_tracing:
print("promptflow-tracing\t\t {}".format(version_tracing))
version_core = get_promptflow_core_version()
if version_core:
print("promptflow-core\t\t\t {}".format(version_core))
version_devkit = get_promptflow_devkit_version()
if version_devkit:
print("promptflow-devkit\t\t {}".format(version_devkit))
version_azure = get_promptflow_azure_version()
if version_azure:
print("promptflow-azure\t\t {}".format(version_azure))
print()
print("Executable '{}'".format(os.path.abspath(sys.executable)))
print("Python ({}) {}".format(platform.system(), sys.version))
Expand Down
18 changes: 15 additions & 3 deletions src/promptflow-devkit/promptflow/client/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,21 @@
# ---------------------------------------------------------
__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore


_imported_attr = {}


# control plane sdk functions
from promptflow._sdk._load_functions import load_flow, load_run
# Use lazy import to avoid circular import
# Circular path: PFClient -> UserAgent -> client._version -> client.__init__ -> PFClient
def __getattr__(name):
if name in _imported_attr:
return _imported_attr[name]
if name in ["PFClient", "load_run", "load_flow"]:
from promptflow._sdk._load_functions import load_flow, load_run # noqa: F401
from .._sdk._pf_client import PFClient # noqa: F401

from .._sdk._pf_client import PFClient
_imported_attr[name] = locals()[name]
return _imported_attr[name]

__all__ = ["PFClient", "load_run", "load_flow"]
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
9 changes: 9 additions & 0 deletions src/promptflow-devkit/promptflow/client/_version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# ---------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# ---------------------------------------------------------

import importlib.metadata

__version__ = importlib.metadata.version("promptflow-devkit")

VERSION: str = __version__
Loading