From 8dd829ab787c94516d57940d91086711bd22fb5e Mon Sep 17 00:00:00 2001 From: Robben Wang <350053002@qq.com> Date: Wed, 27 Sep 2023 16:38:31 +0800 Subject: [PATCH 01/26] Refine docstring's format in flow_executor.py (#640) # Description Refine docstring's format in flow_executor.py ![image](https://github.com/microsoft/promptflow/assets/17527303/571ec62d-ca56-4a7e-b3e6-c538166f043d) # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [X] Pull request includes test coverage for the included changes. Co-authored-by: Robben Wang --- src/promptflow/promptflow/executor/flow_executor.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/promptflow/promptflow/executor/flow_executor.py b/src/promptflow/promptflow/executor/flow_executor.py index 22a65de1019..a029272cf67 100644 --- a/src/promptflow/promptflow/executor/flow_executor.py +++ b/src/promptflow/promptflow/executor/flow_executor.py @@ -748,10 +748,7 @@ def exec_bulk( self._node_concurrency = node_concurrency # Apply default value in early stage, so we can use it both in line execution and aggregation nodes execution. - inputs = [ - FlowExecutor._process_input_values(self._flow.inputs, each_line_input) - for each_line_input in inputs - ] + inputs = [FlowExecutor._process_input_values(self._flow.inputs, each_line_input) for each_line_input in inputs] run_id = run_id or str(uuid.uuid4()) with self._run_tracker.node_log_manager: OperationContext.get_instance().run_mode = RunMode.Batch.name @@ -1197,9 +1194,12 @@ def enable_streaming_for_llm_flow(self, stream_required: Callable[[], bool]): If the stream_required callback returns True, the LLM node will return a generator of strings. Otherwise, the LLM node will return a string. - :param stream_required: A callback that takes no arguments and returns a boolean value indicating whether + + :param stream_required: A callback that takes no arguments and returns a boolean value indicating whether \ streaming results should be enabled for the LLM node. :type stream_required: Callable[[], bool] + + :return: None """ for node in self._flow.nodes: if ( From 06230c4469fc634bc4a27128e0a8551d0563d21c Mon Sep 17 00:00:00 2001 From: Han Wang Date: Wed, 27 Sep 2023 18:04:03 +0800 Subject: [PATCH 02/26] [SDK] Support VNet workspace discovery URL (#645) # Description Please add an informative description that covers that changes made by the pull request and link all relevant issues. # All Promptflow Contribution checklist: - [ ] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [ ] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [ ] Title of the pull request is clear and informative. - [ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --- .../promptflow/azure/_restclient/flow_service_caller.py | 3 ++- .../sdk_cli_azure_test/e2etests/test_run_operations.py | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/promptflow/promptflow/azure/_restclient/flow_service_caller.py b/src/promptflow/promptflow/azure/_restclient/flow_service_caller.py index 1893c538f22..4f11ec2d44d 100644 --- a/src/promptflow/promptflow/azure/_restclient/flow_service_caller.py +++ b/src/promptflow/promptflow/azure/_restclient/flow_service_caller.py @@ -99,7 +99,8 @@ def __init__(self, workspace, credential, base_url=None, region=None, **kwargs): # self._service_context = workspace.service_context if base_url is None: - base_url = workspace.discovery_url.replace("discovery", "") + # handle vnet scenario, it's discovery url will have workspace id after discovery + base_url = workspace.discovery_url.split("discovery")[0] # for dev test, change base url with environment variable base_url = os.environ.get(self.FLOW_CLUSTER_ADDRESS, default=base_url) diff --git a/src/promptflow/tests/sdk_cli_azure_test/e2etests/test_run_operations.py b/src/promptflow/tests/sdk_cli_azure_test/e2etests/test_run_operations.py index 7a197ad6581..1ddda96d4c1 100644 --- a/src/promptflow/tests/sdk_cli_azure_test/e2etests/test_run_operations.py +++ b/src/promptflow/tests/sdk_cli_azure_test/e2etests/test_run_operations.py @@ -671,3 +671,11 @@ def test_get_detail_against_partial_fail_run(self, remote_client, pf, runtime) - pf.runs.stream(run=run.name) detail = remote_client.get_details(run=run.name) assert len(detail) == 3 + + def test_vnext_workspace_base_url(self, pf): + from promptflow.azure._restclient.service_caller_factory import _FlowServiceCallerFactory + + mock_workspace = MagicMock() + mock_workspace.discovery_url = "https://promptflow.azure-api.net/discovery/workspaces/fake_workspace_id" + service_caller = _FlowServiceCallerFactory.get_instance(workspace=mock_workspace, credential=MagicMock()) + assert service_caller.caller._client._base_url == "https://promptflow.azure-api.net/" From 34ba0afe70899ef0376bc432041d4437ea633767 Mon Sep 17 00:00:00 2001 From: Heyi Tang Date: Wed, 27 Sep 2023 19:00:05 +0800 Subject: [PATCH 03/26] [Executor][Image] Enable gen meta for image type (#643) # Description Enable gen meta for image type by adding the image annotation parsing logic. # All Promptflow Contribution checklist: - [x] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [x] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [x] Title of the pull request is clear and informative. - [x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. Co-authored-by: Heyi Tang --- src/promptflow/promptflow/contracts/tool.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/promptflow/promptflow/contracts/tool.py b/src/promptflow/promptflow/contracts/tool.py index bdbbd4b42e8..e436cf99606 100644 --- a/src/promptflow/promptflow/contracts/tool.py +++ b/src/promptflow/promptflow/contracts/tool.py @@ -10,6 +10,7 @@ from promptflow._constants import CONNECTION_NAME_PROPERTY from .types import PromptTemplate, Secret +from .multimedia import Image T = TypeVar("T", bound="Enum") @@ -86,6 +87,8 @@ def from_type(t: type) -> "ValueType": return ValueType.SECRET if t == PromptTemplate: return ValueType.PROMPT_TEMPLATE + if t == Image: + return ValueType.IMAGE return ValueType.OBJECT def parse(self, v: Any) -> Any: # noqa: C901 From 5ce282f43020c832629cd5d9bb1338fa16435110 Mon Sep 17 00:00:00 2001 From: chenslucky <75061414+chenslucky@users.noreply.github.com> Date: Wed, 27 Sep 2023 19:09:11 +0800 Subject: [PATCH 04/26] Add error handling for is_custom_strong_type function (#649) # Description Error message: ![image](https://github.com/microsoft/promptflow/assets/75061414/31c19d8b-be0b-472e-afca-631b30ed3e9a) Test result: ![image](https://github.com/microsoft/promptflow/assets/75061414/e127ddda-6639-40f2-a6d0-df68b352d7d8) # All Promptflow Contribution checklist: - [x] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [x] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [x] Title of the pull request is clear and informative. - [ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --------- Co-authored-by: cs_lucky --- src/promptflow/promptflow/contracts/tool.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/promptflow/promptflow/contracts/tool.py b/src/promptflow/promptflow/contracts/tool.py index e436cf99606..b8cba43c193 100644 --- a/src/promptflow/promptflow/contracts/tool.py +++ b/src/promptflow/promptflow/contracts/tool.py @@ -182,10 +182,13 @@ def is_connection_value(val: Any) -> bool: @staticmethod def is_custom_strong_type(val): """Check if the given value is a custom strong type connection.""" - from promptflow._sdk.entities import CustomStrongTypeConnection - return issubclass(val, CustomStrongTypeConnection) + # TODO: replace the hotfix "try-except" with a more graceful solution." + try: + return issubclass(val, CustomStrongTypeConnection) + except Exception: + return False @staticmethod def serialize_conn(connection: Any) -> dict: From 8dd3af8af208b80c3110a42bd6c0e90a6601b486 Mon Sep 17 00:00:00 2001 From: chjinche <49483542+chjinche@users.noreply.github.com> Date: Wed, 27 Sep 2023 19:18:19 +0800 Subject: [PATCH 05/26] modify tool test workflow (#650) # Description modify tool tests workflow to unblock forked repo PRs. # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --- .github/workflows/tools_tests.yml | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/.github/workflows/tools_tests.yml b/.github/workflows/tools_tests.yml index 139f4f0a38e..b7116b5a5a3 100644 --- a/.github/workflows/tools_tests.yml +++ b/.github/workflows/tools_tests.yml @@ -1,8 +1,10 @@ name: tools_tests on: - # Triggers the workflow pull request events but only for the main branch - pull_request: - branches: [ main ] + pull_request_target: + paths: + - src/promptflow-tools/** + - '**tools_tests.yml' + workflow_dispatch: jobs: run_tool_ci_job: # The type of runner that the job will run on @@ -16,32 +18,18 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - name: Checkout repository uses: actions/checkout@v3 - - - name: Check for changes - id: check_changes - run: | - git fetch origin ${{ github.base_ref }} # Fetch the base branch - CHANGED=$(git diff --name-only FETCH_HEAD..HEAD -- 'src/promptflow-tools/') - if [ -n "$CHANGED" ]; then - echo "Changes detected in src/promptflow-tools/" - echo "run_tests=true" >> $GITHUB_OUTPUT - else - echo "No changes detected in src/promptflow-tools/" - echo "run_tests=false" >> $GITHUB_OUTPUT - fi + with: + ref: ${{ github.event.pull_request.head.sha || github.ref }} - name: Setup - if: steps.check_changes.outputs.run_tests == 'true' run: | python -m pip install --upgrade pip pip install promptflow pip install pytest pytest_mock pip install azure-identity azure-keyvault-secrets - name: Generate configs - if: steps.check_changes.outputs.run_tests == 'true' run: | python ./scripts/tool/generate_connection_config.py --tenant_id ${{ secrets.TENANT_ID }} --client_id ${{ secrets.CLIENT_ID }} --client_secret ${{ secrets.CLIENT_SECRET }} - name: Run tests - if: steps.check_changes.outputs.run_tests == 'true' run: | pytest ./src/promptflow-tools/tests \ No newline at end of file From 93c47112d580aab7f6261a0e2a7cc1285ed656ef Mon Sep 17 00:00:00 2001 From: chjinche <49483542+chjinche@users.noreply.github.com> Date: Wed, 27 Sep 2023 20:41:44 +0800 Subject: [PATCH 06/26] fix serp api tests (#653) # Description fix serp api tests. Verified at local. ![image](https://github.com/microsoft/promptflow/assets/49483542/b1e939ed-83b6-443f-892d-860a2cd690f6) # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [X] Pull request includes test coverage for the included changes. --- .github/workflows/tools_tests.yml | 2 +- src/promptflow-tools/tests/test_aoai.py | 2 +- src/promptflow-tools/tests/test_serpapi.py | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/tools_tests.yml b/.github/workflows/tools_tests.yml index b7116b5a5a3..b68bec69826 100644 --- a/.github/workflows/tools_tests.yml +++ b/.github/workflows/tools_tests.yml @@ -23,9 +23,9 @@ jobs: - name: Setup run: | python -m pip install --upgrade pip - pip install promptflow pip install pytest pytest_mock pip install azure-identity azure-keyvault-secrets + pip install -r ./src/promptflow-tools/requirements.txt - name: Generate configs run: | python ./scripts/tool/generate_connection_config.py --tenant_id ${{ secrets.TENANT_ID }} --client_id ${{ secrets.CLIENT_ID }} --client_secret ${{ secrets.CLIENT_SECRET }} diff --git a/src/promptflow-tools/tests/test_aoai.py b/src/promptflow-tools/tests/test_aoai.py index 0fa4fa9ab4d..32d1088b0d6 100644 --- a/src/promptflow-tools/tests/test_aoai.py +++ b/src/promptflow-tools/tests/test_aoai.py @@ -93,7 +93,7 @@ def test_aoai_stream_chat(self, aoai_provider, example_prompt_template, chat_his answer += next(result) except Exception: break - assert "additional details you can include" in answer.lower() + assert "additional details" in answer.lower() @pytest.mark.parametrize( "params, expected", diff --git a/src/promptflow-tools/tests/test_serpapi.py b/src/promptflow-tools/tests/test_serpapi.py index 0174e6d2d44..3ebd2a8563c 100644 --- a/src/promptflow-tools/tests/test_serpapi.py +++ b/src/promptflow-tools/tests/test_serpapi.py @@ -25,21 +25,21 @@ def test_engine(self, serp_connection): assert int(result_dict["search_parameters"]["count"]) == num assert result_dict["search_parameters"]["safe_search"].lower() == "strict" - def test_invalid_api_key(self, serpapi_connection): - serpapi_connection.api_key = "hello" + def test_invalid_api_key(self, serp_connection): + serp_connection.api_key = "hello" query = "cute cats" num = 2 engine = Engine.GOOGLE.value error_msg = "Invalid API key. Your API key should be here: https://serpapi.com/manage-api-key" with pytest.raises(UserErrorException) as exc_info: - search(connection=serpapi_connection, query=query, num=num, engine=engine) + search(connection=serp_connection, query=query, num=num, engine=engine) assert error_msg == exc_info.value.args[0] @pytest.mark.parametrize("engine", [Engine.GOOGLE.value, Engine.BING.value]) - def test_invalid_query(self, serpapi_connection, engine): + def test_invalid_query(self, serp_connection, engine): query = "" num = 2 error_msg = "Missing query `q` parameter." with pytest.raises(UserErrorException) as exc_info: - search(connection=serpapi_connection, query=query, num=num, engine=engine) + search(connection=serp_connection, query=query, num=num, engine=engine) assert error_msg == exc_info.value.args[0] From 378e8b847b37464c7cf9c0eae817d6163f3e4006 Mon Sep 17 00:00:00 2001 From: Philip Gao Date: Thu, 28 Sep 2023 11:30:48 +0800 Subject: [PATCH 07/26] Fix testing matrix to remove python 3 12 (#647) # Description 3.12 is too pre-release, some tools like pytest-mock doesn't support pre-release version of python. # All Promptflow Contribution checklist: - [x] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [x] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [x] Title of the pull request is clear and informative. - [x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [x] Pull request includes test coverage for the included changes. --- .github/workflows/promptflow-release-testing-matrix.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/promptflow-release-testing-matrix.yml b/.github/workflows/promptflow-release-testing-matrix.yml index c8b50214d3e..d2c88f5ffb4 100644 --- a/.github/workflows/promptflow-release-testing-matrix.yml +++ b/.github/workflows/promptflow-release-testing-matrix.yml @@ -30,7 +30,7 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] testType: [sdk-cli, executor] - pythonVersion: ['3.8', '3.9', '3.10', '3.11', '3.12'] + pythonVersion: ['3.8', '3.9', '3.10', '3.11'] runs-on: ${{ matrix.os }} steps: - name: checkout @@ -39,8 +39,8 @@ jobs: run: env | sort >> $GITHUB_OUTPUT shell: bash -el {0} - - name: Conda Setup - ${{ matrix.os }} - Python Version ${{ matrix.pythonVersion }} - uses: "./.github/actions/step_create_conda_environment" + - name: Python Env Setup - ${{ matrix.os }} - Python Version ${{ matrix.pythonVersion }} + uses: "./.github/actions/step_create_python_environment" with: pythonVersion: ${{ matrix.pythonVersion }} - name: Build wheel @@ -66,7 +66,6 @@ jobs: run: | gci env:* | sort-object name az account show - conda activate release-env python "../../scripts/building/run_coverage_tests.py" ` -p promptflow ` -t ${{ github.workspace }}/src/promptflow/tests/sdk_cli_azure_test ${{ github.workspace }}/src/promptflow/tests/sdk_cli_test ` @@ -81,7 +80,6 @@ jobs: run: | gci env:* | sort-object name az account show - conda activate release-env pip install langchain python scripts/building/run_coverage_tests.py ` -p ${{ github.workspace }}/src/promptflow/promptflow ` From 0dcea10ded53995342433a957a45578db62cb29b Mon Sep 17 00:00:00 2001 From: chjinche <49483542+chjinche@users.noreply.github.com> Date: Thu, 28 Sep 2023 13:35:23 +0800 Subject: [PATCH 08/26] pin pf version in tools tests (#658) # Description pin pf version in tools tests # All Promptflow Contribution checklist: - [x] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [x] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [x] Title of the pull request is clear and informative. - [x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --- src/promptflow-tools/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/promptflow-tools/requirements.txt b/src/promptflow-tools/requirements.txt index 32be5caf2a2..687de74549b 100644 --- a/src/promptflow-tools/requirements.txt +++ b/src/promptflow-tools/requirements.txt @@ -1,2 +1,3 @@ google-search-results==2.4.1 -promptflow +# TODO: remove version pinning. This is a temporary workaround for a bug in the latest version of promptflow +promptflow==0.1.0b6 From 429bc3be160473d9dda365e0662b4da1dce94939 Mon Sep 17 00:00:00 2001 From: Honglin <0mza987@gmail.com> Date: Thu, 28 Sep 2023 16:51:28 +0800 Subject: [PATCH 09/26] [Release] Release/promptflow/0.1.0b7.post1 (#659) # Description Please add an informative description that covers that changes made by the pull request and link all relevant issues. # All Promptflow Contribution checklist: - [ ] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [ ] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [ ] Title of the pull request is clear and informative. - [ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --------- Co-authored-by: Han Wang Co-authored-by: Han Wang Co-authored-by: promptflow release --- examples/flows/standard/basic/README.md | 6 +++--- src/promptflow/CHANGELOG.md | 7 ++++++- src/promptflow/promptflow/_cli/_params.py | 3 ++- src/promptflow/promptflow/_cli/_pf_azure/_run.py | 1 + src/promptflow/promptflow/_version.py | 2 +- src/promptflow/setup.py | 1 + 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/examples/flows/standard/basic/README.md b/examples/flows/standard/basic/README.md index 18faf182ecf..8642d513ad7 100644 --- a/examples/flows/standard/basic/README.md +++ b/examples/flows/standard/basic/README.md @@ -51,7 +51,7 @@ pf run create --flow . --data ./data.jsonl --stream pf run list # get a sample run name -name=$(pf run list -r 10 | jq '.[] | select(.name | contains("basic_default")) | .name'| head -n 1 | tr -d '"') +name=$(pf run list -r 10 | jq '.[] | select(.name | contains("basic_variant_0")) | .name'| head -n 1 | tr -d '"') # show specific run detail pf run show --name $name @@ -92,7 +92,7 @@ pf run create --flow . --data ./data.jsonl --stream --environment-variables AZUR pf run create --file run.yml --stream # show outputs -name=$(pf run list -r 10 | jq '.[] | select(.name | contains("basic_default")) | .name'| head -n 1 | tr -d '"') +name=$(pf run list -r 10 | jq '.[] | select(.name | contains("basic_variant_0")) | .name'| head -n 1 | tr -d '"') pf run show-details --name $name ``` @@ -118,7 +118,7 @@ pfazure run create --file run.yml --stream --runtime demo-mir pfazure run list -r 3 # get a sample run name -name=$(pfazure run list -r 100 | jq '.[] | select(.name | contains("basic_default")) | .name'| head -n 1 | tr -d '"') +name=$(pfazure run list -r 100 | jq '.[] | select(.name | contains("basic_variant_0")) | .name'| head -n 1 | tr -d '"') # show specific run detail pfazure run show --name $name diff --git a/src/promptflow/CHANGELOG.md b/src/promptflow/CHANGELOG.md index be2a5a932fb..149470e0c43 100644 --- a/src/promptflow/CHANGELOG.md +++ b/src/promptflow/CHANGELOG.md @@ -1,6 +1,11 @@ # Release History -## 0.1.0b7 (Upcoming) +## 0.1.0b7.post1 (2023.09.28) + +### Bug Fixed +- Fix extra dependency bug when importing `promptflow` without `azure-ai-ml` installed. + +## 0.1.0b7 (2023.09.27) ### Features Added diff --git a/src/promptflow/promptflow/_cli/_params.py b/src/promptflow/promptflow/_cli/_params.py index 4611cb4c9a4..cae388285b2 100644 --- a/src/promptflow/promptflow/_cli/_params.py +++ b/src/promptflow/promptflow/_cli/_params.py @@ -4,7 +4,8 @@ import argparse -from azure.ai.ml.constants._common import MAX_LIST_CLI_RESULTS +# TODO: avoid azure dependency here +MAX_LIST_CLI_RESULTS = 50 class AppendToDictAction(argparse._AppendAction): # pylint: disable=protected-access diff --git a/src/promptflow/promptflow/_cli/_pf_azure/_run.py b/src/promptflow/promptflow/_cli/_pf_azure/_run.py index 68473144ef6..a3e1720a5fc 100644 --- a/src/promptflow/promptflow/_cli/_pf_azure/_run.py +++ b/src/promptflow/promptflow/_cli/_pf_azure/_run.py @@ -465,6 +465,7 @@ def show_run_details( """Show a run details from cloud.""" pf = _get_azure_pf_client(subscription_id, resource_group, workspace_name, debug=debug) details = pf.runs.get_details(run=flow_run_id, max_results=max_results, all_results=all_results) + details.fillna(value="(Failed)", inplace=True) # replace nan with explicit prompt pretty_print_dataframe_as_table(details) diff --git a/src/promptflow/promptflow/_version.py b/src/promptflow/promptflow/_version.py index 68ee238ac5d..a9b98c3b556 100644 --- a/src/promptflow/promptflow/_version.py +++ b/src/promptflow/promptflow/_version.py @@ -2,4 +2,4 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # --------------------------------------------------------- -VERSION = "0.0.1" +VERSION = "0.1.0b7.post1" diff --git a/src/promptflow/setup.py b/src/promptflow/setup.py index de530eae473..11a86b99e62 100644 --- a/src/promptflow/setup.py +++ b/src/promptflow/setup.py @@ -44,6 +44,7 @@ "tiktoken>=0.4.0", "strictyaml>=1.5.0,<2.0.0", # used to identify exact location of validation error "waitress>=2.1.2,<3.0.0", # used to serve local service + "opencensus-ext-azure<2.0.0", # configure opencensus to send telemetry to azure monitor ] setup( From 683f17db0dbff3ed63990ec158a2ed3b93d2736c Mon Sep 17 00:00:00 2001 From: Robben Wang <350053002@qq.com> Date: Thu, 28 Sep 2023 17:25:14 +0800 Subject: [PATCH 10/26] Make error message format more robust. (#642) # Description If we set parameter does not align with `message_format`, show to customer. For now, we will throw KeyError, which is one bad experience for customer. For example: ``` ex = PromptflowException( message_format="Test exception message with parameters: {param}, {param1}.", param="test_param", ) ``` Will raise KeyError for ex.message, since we don't have `param1`. After this PR, ex.message = "Test exception message with parameters: test_param, ." # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [X] Pull request includes test coverage for the included changes. --------- Co-authored-by: Robben Wang --- src/promptflow/promptflow/exceptions.py | 12 ++++++++++-- .../executor/unittests/executor/test_exceptions.py | 14 ++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 src/promptflow/tests/executor/unittests/executor/test_exceptions.py diff --git a/src/promptflow/promptflow/exceptions.py b/src/promptflow/promptflow/exceptions.py index ea8a5ef147e..8b7084ac8d8 100644 --- a/src/promptflow/promptflow/exceptions.py +++ b/src/promptflow/promptflow/exceptions.py @@ -75,8 +75,16 @@ def message_parameters(self): if not self._kwargs: return {} - arguments = self.get_arguments_from_message_format(self.message_format) - return {k: v for k, v in self._kwargs.items() if k in arguments} + required_arguments = self.get_arguments_from_message_format(self.message_format) + parameters = {} + for argument in required_arguments: + if argument not in self._kwargs: + # Set a default value for the missing argument to avoid KeyError. + # For long term solution, use CI to guarantee the message_format and message_parameters are in sync. + parameters[argument] = f"<{argument}>" + else: + parameters[argument] = self._kwargs[argument] + return parameters @cached_property def serializable_message_parameters(self): diff --git a/src/promptflow/tests/executor/unittests/executor/test_exceptions.py b/src/promptflow/tests/executor/unittests/executor/test_exceptions.py new file mode 100644 index 00000000000..19b1f6984e8 --- /dev/null +++ b/src/promptflow/tests/executor/unittests/executor/test_exceptions.py @@ -0,0 +1,14 @@ +import pytest + +from promptflow.exceptions import PromptflowException + + +@pytest.mark.unittest +class TestExceptions: + def test_exception_message(self): + ex = PromptflowException( + message_format="Test exception message with parameters: {param}, {param1}.", + param="test_param", + ) + + assert ex.message == "Test exception message with parameters: test_param, ." From 82058ff1e348447c38cdbada19eb35ad2397acc7 Mon Sep 17 00:00:00 2001 From: Honglin <0mza987@gmail.com> Date: Thu, 28 Sep 2023 17:42:38 +0800 Subject: [PATCH 11/26] [Fix] Recover main branch sdk version to 0.0.1 (#663) # Description Please add an informative description that covers that changes made by the pull request and link all relevant issues. # All Promptflow Contribution checklist: - [ ] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [ ] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [ ] Title of the pull request is clear and informative. - [ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --- src/promptflow/promptflow/_version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/promptflow/promptflow/_version.py b/src/promptflow/promptflow/_version.py index a9b98c3b556..68ee238ac5d 100644 --- a/src/promptflow/promptflow/_version.py +++ b/src/promptflow/promptflow/_version.py @@ -2,4 +2,4 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # --------------------------------------------------------- -VERSION = "0.1.0b7.post1" +VERSION = "0.0.1" From 65f8537e5e0a6d6a54b30c3dba5fe85ffcf50e94 Mon Sep 17 00:00:00 2001 From: liuyuhang13 <20365062+liuyuhang13@users.noreply.github.com> Date: Thu, 28 Sep 2023 18:37:28 +0800 Subject: [PATCH 12/26] Update sdk to support file_path type (#621) # Description Update SDK, support file_path when generate tools meta. # Test Test result with private sdk in build 20230925.4_105908422: ![image](https://github.com/microsoft/promptflow/assets/20365062/23483ec9-ec65-46ae-8aa2-ac55d2b83b67) ![image](https://github.com/microsoft/promptflow/assets/20365062/6928fd27-7c3d-4a1a-8a31-7f096ab9eaea) ![image](https://github.com/microsoft/promptflow/assets/20365062/023ac53c-a4e2-4fca-bd0f-d8c8132aed4d) ![image](https://github.com/microsoft/promptflow/assets/20365062/5b7aaeff-1ecc-4379-b9b5-08ef2bd3f6c9) # All Promptflow Contribution checklist: - [ ] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [ ] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [ ] Title of the pull request is clear and informative. - [ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. Co-authored-by: Yuhang Liu Co-authored-by: Dawei Cai Co-authored-by: chjinche <49483542+chjinche@users.noreply.github.com> --- src/promptflow/promptflow/contracts/tool.py | 7 ++++++- src/promptflow/promptflow/contracts/types.py | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/promptflow/promptflow/contracts/tool.py b/src/promptflow/promptflow/contracts/tool.py index b8cba43c193..8ac80e5669b 100644 --- a/src/promptflow/promptflow/contracts/tool.py +++ b/src/promptflow/promptflow/contracts/tool.py @@ -9,7 +9,7 @@ from promptflow._constants import CONNECTION_NAME_PROPERTY -from .types import PromptTemplate, Secret +from .types import FilePath, PromptTemplate, Secret from .multimedia import Image T = TypeVar("T", bound="Enum") @@ -35,6 +35,7 @@ class ValueType(str, Enum): PROMPT_TEMPLATE = "prompt_template" LIST = "list" OBJECT = "object" + FILE_PATH = "file_path" IMAGE = "image" @staticmethod @@ -61,6 +62,8 @@ def from_value(t: Any) -> "ValueType": return ValueType.STRING if isinstance(t, list): return ValueType.LIST + if isinstance(t, FilePath): + return ValueType.FILE_PATH return ValueType.OBJECT @staticmethod @@ -87,6 +90,8 @@ def from_type(t: type) -> "ValueType": return ValueType.SECRET if t == PromptTemplate: return ValueType.PROMPT_TEMPLATE + if t == FilePath: + return ValueType.FILE_PATH if t == Image: return ValueType.IMAGE return ValueType.OBJECT diff --git a/src/promptflow/promptflow/contracts/types.py b/src/promptflow/promptflow/contracts/types.py index 28942d04d4e..ecf651c6870 100644 --- a/src/promptflow/promptflow/contracts/types.py +++ b/src/promptflow/promptflow/contracts/types.py @@ -19,3 +19,9 @@ class PromptTemplate(str): """This class is used to hint a parameter is a prompt template.""" pass + + +class FilePath(str): + """This class is used to hint a parameter is a file path.""" + + pass From 037f627e93c53020acc7023574039a8dcb890e1a Mon Sep 17 00:00:00 2001 From: jiazengcindy <95729303+jiazengcindy@users.noreply.github.com> Date: Thu, 28 Sep 2023 18:44:27 +0800 Subject: [PATCH 13/26] [custom tool] Provide guidance for configuring tool icon (#616) # Description Provide guidance for configuring tool icon. # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --- .cspell.json | 3 +- docs/README.md | 2 +- docs/concepts/concept-tools.md | 2 +- .../develop-a-tool/add-a-tool-icon.md | 58 ++++++++++++++++ .../create-and-use-tool-package.md} | 6 +- docs/how-to-guides/develop-a-tool/index.md | 10 +++ docs/how-to-guides/index.md | 2 +- .../custom-tool-with-icon-in-extension.png | Bin 0 -> 77486 bytes .../icons/custom-tool-icon.png | Bin 0 -> 692 bytes scripts/tool/convert_image_to_data_url.py | 64 ++++++++++++++++++ src/promptflow-tools/README.md | 2 +- 11 files changed, 141 insertions(+), 8 deletions(-) create mode 100644 docs/how-to-guides/develop-a-tool/add-a-tool-icon.md rename docs/how-to-guides/{how-to-create-and-use-your-own-tool-package.md => develop-a-tool/create-and-use-tool-package.md} (98%) create mode 100644 docs/how-to-guides/develop-a-tool/index.md create mode 100644 docs/media/contributing/custom-tool-with-icon-in-extension.png create mode 100644 examples/tools/tool-package-quickstart/my_tool_package/icons/custom-tool-icon.png create mode 100644 scripts/tool/convert_image_to_data_url.py diff --git a/.cspell.json b/.cspell.json index f885efb1ffb..dace721b1c5 100644 --- a/.cspell.json +++ b/.cspell.json @@ -126,7 +126,8 @@ "tcsetattr", "pysqlite", "AADSTS700082", - "levelno" + "levelno", + "LANCZOS" ], "allowCompoundWords": true } diff --git a/docs/README.md b/docs/README.md index cc5cc1dcd23..a31ace9a786 100644 --- a/docs/README.md +++ b/docs/README.md @@ -10,7 +10,7 @@ Below is a table of important doc pages. |----------------|----------------| |Quick start|[Get started with prompt flow](./how-to-guides/quick-start.md)| |Concepts|[Flows](./concepts/concept-flows.md)
[Tools](./concepts/concept-tools.md)
[Connections](./concepts/concept-connections.md)
[Variants](./concepts/concept-variants.md)
| -|How-to guides|[How to initialize and test a flow](./how-to-guides/init-and-test-a-flow.md)
[How to run and evaluate a flow](./how-to-guides/run-and-evaluate-a-flow.md)
[How to tune prompts using variants](./how-to-guides/tune-prompts-with-variants.md)
[How to deploy a flow](./how-to-guides/deploy-a-flow/index.md)
[How to create and use your own tool package](./how-to-guides/how-to-create-and-use-your-own-tool-package.md)| +|How-to guides|[How to initialize and test a flow](./how-to-guides/init-and-test-a-flow.md)
[How to run and evaluate a flow](./how-to-guides/run-and-evaluate-a-flow.md)
[How to tune prompts using variants](./how-to-guides/tune-prompts-with-variants.md)
[How to deploy a flow](./how-to-guides/deploy-a-flow/index.md)
[How to create and use your own tool package](./how-to-guides/develop-a-tool/create-and-use-tool-package.md)| |Tools reference|[LLM tool](./tools-reference/llm-tool.md)
[Prompt tool](./tools-reference/prompt-tool.md)
[Python tool](./tools-reference/python-tool.md)
[SERP API tool](./tools-reference/serp-api-tool.md)
[Embedding tool](./tools-reference/embedding_tool.md)|| diff --git a/docs/concepts/concept-tools.md b/docs/concepts/concept-tools.md index b1cacb667c8..437ec031329 100644 --- a/docs/concepts/concept-tools.md +++ b/docs/concepts/concept-tools.md @@ -22,7 +22,7 @@ Our partners also contributes other useful tools for advanced scenarios, here ar ## Custom tools You can create your own tools that can be shared with your team or anyone in the world. -Learn more on [Custom tool package creation and usage](../how-to-guides/how-to-create-and-use-your-own-tool-package.md) +Learn more on [Create and Use Tool Package](../how-to-guides/develop-a-tool/create-and-use-tool-package.md) ## Next steps diff --git a/docs/how-to-guides/develop-a-tool/add-a-tool-icon.md b/docs/how-to-guides/develop-a-tool/add-a-tool-icon.md new file mode 100644 index 00000000000..1c4393c3f6f --- /dev/null +++ b/docs/how-to-guides/develop-a-tool/add-a-tool-icon.md @@ -0,0 +1,58 @@ +# Add a Tool Icon +A tool icon serves as a graphical representation of your tool in the user interface (UI). Follow this guidance to add a custom tool icon when developing your own tool package. + +Adding a custom tool icon is optional. If you do not provide one, the system uses a default icon. + +## Prerequisites + +- Create a tool package as described in [Create and Use Tool Package](create-and-use-tool-package.md). +- Prepare a custom tool icon image. The image should meet following requirements: + - The image should be in `PNG` or `JPG` format. + - 16x16 pixel image to avoid distortion from resizing. + - Avoid complex images with much detail or contrast as they may not resize well. + You could see for example. +- Install dependencies of generating icon data URI: + + ``` + pip install pillow + ``` +## Generate a tool icon data URI +Run below command under the root folder to generate a data URI for your custom tool icon. Make sure the output file has an `.html` extension, this makes it easier to check the image's data URI: +``` +python \tool\convert_image_to_data_url.py --image-path -o +``` +For example: +``` +python D:\proj\github\promptflow\scripts\tool\convert_image_to_data_url.py --image-path D:\proj\github\promptflow\examples\tools\tool-package-quickstart\my_tool_package\icons\custom-tool-icon.png -o output.html +``` +The content of `output.html` looks like the following, and you can open it in a web browser to see the result. +```html + + +My Image + + +``` + +## Use the tool icon data URI in the tool YAML +In the auto-generated tool YAML file, customize the tool icon by adding the data URI: +```yaml +hello_world.tools.hello_world_tool.get_greeting_message + function: get_greeting_message + inputs: + connection: + type: + - CustomConnection + input_text: + type: + - string + module: hello_world.tools.hello_world_tool + name: Hello World Tool + description: This is hello world tool + type: python + icon: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACq0lEQVR4nKWTPWxTVxiGn3N/bF/fGyd2YxsQ5LdSmoqGgKJMEQNZYGBFkVhY2JGYmFG3ioWZpWukqqpaqaVKq6pFIAECAkSxMA6RHZP4Jnbs+O/6xvdjcCLKT6ee7ZwjvfrOc55XiYjwP5bx740IZDf3+PVZicdrVeK2yfzJJBem02iaQv1XQCCCCNz+Lce91R1mRvtYd5uEDIfl9SqpWIjZLxOIgPooRQtE0JQiU6xx91mJfNkjZoX47vIkM2Nx6l6Xmz9kWHywgVIQBB++WImI1Nv7fP/XOqah0fKFdH8YQwXcf1Vh6WWZTrfLaDLK4rVZrJD+wSQGwJrbQtc0rs4PAXDr5xy/PHW5NJsmGQuhNI0/XrisFmtMjwxwOLVCYXTaTdq+kHagXq0iAo4phE2dn564XD8/zLlTRwn8gK1dQaHQtfcgDDMcwQo1Wc43mEp16YpibdsjEKHdEX5/8YZEpIhjCckBi9a+ibfvETEsIobdY1Bp+Pz4cAvP67C522IsbeN1A0zd5r77LWF7hebe1xxJrzKRmON56W/OHDnHwskbaCIQt03OTsbJljxeuz4rxSYXp2JcmYszedQhrNscj/ehJIKuQpiaBegHEFVPoOHBKOPpKMXdNtlSmzt/bpC0XTb9LxgcmGDq2CT5mpC0hhiO1UhGe8ANBYgCQ1dcnR9iJGnxT6ZMrtLmbV1H78/QrD0nagQ82ljCP+HzqLBEsB8wP7bQ+8ZDpoauuHA6xfnpFA3Px4mY3M2cJbeTZjTxFQYm44lv0MRkPDH1aRcOtdaUwon0rgrbBdbd10S1AXJbWRxzkLXNLDEz1VP54wDtQLHuQUl36xUKpTzl6jYFN89OdYeCm6eyV3mv8mdKxuFxueHS8PawTJuW3yAacmh26jiRfhL2IO8AhSUo7nmFnjUAAAAASUVORK5CYII= +``` + +## Verify the tool icon in VS Code extension +Follow [steps](create-and-use-tool-package.md#use-your-tool-from-vscode-extension) to use your tool from VS Code extension. Your tool displays with the custom icon: +![custom-tool-with-icon-in-extension](../../media/contributing/custom-tool-with-icon-in-extension.png) \ No newline at end of file diff --git a/docs/how-to-guides/how-to-create-and-use-your-own-tool-package.md b/docs/how-to-guides/develop-a-tool/create-and-use-tool-package.md similarity index 98% rename from docs/how-to-guides/how-to-create-and-use-your-own-tool-package.md rename to docs/how-to-guides/develop-a-tool/create-and-use-tool-package.md index 0bd7c4309cc..c690df56bc3 100644 --- a/docs/how-to-guides/how-to-create-and-use-your-own-tool-package.md +++ b/docs/how-to-guides/develop-a-tool/create-and-use-tool-package.md @@ -1,10 +1,10 @@ -# Custom tool package creation and usage +# Create and Use Tool Package In this document, we will guide you through the process of developing your own tool package, offering detailed steps and advice on how to utilize your creation. The custom tool is the prompt flow tool developed by yourself. If you find it useful, you can follow this guidance to make it a tool package. This will enable you to conveniently reuse it, share it with your team, or distribute it to anyone in the world. After successful installation of the package, your custom "tool" will show up in VSCode extension as below: -![custom-tool-list](../media/contributing/custom-tool-list-in-extension.png) +![custom-tool-list](../../media/contributing/custom-tool-list-in-extension.png) ## Create your own tool package Your tool package should be a python package. To try it quickly, just use [my-tools-package 0.0.1](https://pypi.org/project/my-tools-package/) and skip this section. @@ -115,7 +115,7 @@ hello-world-proj/ ``` * Step3: Go to the extension and open one flow folder. Click 'flow.dag.yaml' and preview the flow. Next, click `+` button and you will see your tools. You may need to reload the windows to clean previous cache if you don't see your tool in the list. -![auto-list-tool-in-extension](../media/contributing/auto-list-tool-in-extension.png) +![auto-list-tool-in-extension](../../media/contributing/auto-list-tool-in-extension.png) ## FAQ diff --git a/docs/how-to-guides/develop-a-tool/index.md b/docs/how-to-guides/develop-a-tool/index.md new file mode 100644 index 00000000000..87c8525639d --- /dev/null +++ b/docs/how-to-guides/develop-a-tool/index.md @@ -0,0 +1,10 @@ +# Develop a tool +We provide guides on how to develop a tool and use it. + +```{toctree} +:maxdepth: 1 +:hidden: + +create-and-use-tool-package +add-a-tool-icon +``` \ No newline at end of file diff --git a/docs/how-to-guides/index.md b/docs/how-to-guides/index.md index 6e904742c9c..32cd01d1a67 100644 --- a/docs/how-to-guides/index.md +++ b/docs/how-to-guides/index.md @@ -14,7 +14,7 @@ enable-streaming-mode manage-connections manage-runs column-mapping -how-to-create-and-use-your-own-tool-package +develop-a-tool/index faq ``` diff --git a/docs/media/contributing/custom-tool-with-icon-in-extension.png b/docs/media/contributing/custom-tool-with-icon-in-extension.png new file mode 100644 index 0000000000000000000000000000000000000000..a71c3e62f8aa874f7c4a3b77c8fea82f6ac925ab GIT binary patch literal 77486 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

pLVCRtBg)f5jD=al~bXgr$|O|lztmeP`5HS zG<1wLjMoWCW|Eq0(#KJCu{sq`9HdG0^Reb?YVp-M=uf1xnJ;}?Oz!Hj zXtP+C&>(0QZ9_}y9&o|)PQoppsPq%=hRAMg=pv+nCmV7JWhW0#5@eCJ7>dZp`A&Vz zQ;+c%)R_GtX-zvjAXo=mwWkMO4*j>|VNsOdi^y>}rBbIjeww{`bk5C^o?)${P=>h7e8`^AAmFX;rAgP`_+OktDyVxd?tEfZRg5l+mey& z$z9~hpIkVJxz@JhFizZ_J|9Duc&8Wbl^zlsdJm@R=|tTXnXPh|l4abewK-@j=H{m; z+8HCl^!VK{bj&mnwYH$Gx}q|d&tDF$2W@Iz9{8Q0rb4IVhoz){7(zJKfa2_f9SkP) z?{otagq*r*KM?_zG3_@LH&?B})97J^v-mT^rW)eZosJ%bj%Er!IV$BY!N$kLH8C;&-ytL>Iy;*~uE+piA7Rj{f{hA;o6hOStI*A&~^g}tR5Pl`q zV{MR4ZtcK%@)k+P>!*+(cNLF%ST_;N1)Ww2@#h`=gBGg`4U2*H+OYq)^D7)`;tWL{ z*-7G7Mban2TUy$nUM)%I^Vd$)tPY`Z+LHz(?@)-}5CF?N`Vxk1bu3gc{y3 z=Iflm#Jb7)j80DPPWyahhU{lmzj)^}NPzs4%TFmAeCG4VC}#{i8{q0nT-4r53U(;( z<)6}2R=(QX|Cu4~&X)4#-OQ&@}f_E{XWmYctiyG%|x9fSEHJzW^Z zyl;86(p-4+3i9_S>4p+(?d>X>Pxxo$?I?XdesFmr=Q6sugcs;V^6KtOA)YF_6WQEC+2<1+@t&mPR~IJ?;QF(?t*#9ccN{QV z@<}TfGgz1k~^Qs z$zJY%lfeY(OE^Ab6~JNVxL6``th2RAD2IePfha_a9k92M;yfW?M|5;#!*aa)tsluA zO#F~o%Z4fWtLE}|@u;%C>-HG!DXBN#BO&p)7D*S1aGj=j`+|d?l`FM4yQ%BdoW^Av znolg9H9|vs0-et%3-Nu}E$6f@C?Zy>}10!a(qqy!VKPriA zQ0kyok6Y)yp*|}3J|3@Xx?1!-=G@q`iv3M2Kb_{uGSK;M6j#idx_wr9lIhifzN9wA z>t8wQ2&|rgnH@A(;#PP4GH{_yt4niFu$McElSqZzP=YDvb{2Ss2j?HcKu@0-nA@#c z@UsbbH6t5eTy&4MD0$90+>zdevN@2Q zdEf{n|KFe%f;%fmM!qOPY?(Ycnv;@|81{jk$U!GPx5^|Yq|u(^`!Mx%v^gzx zLeKkHw7nH8MsG!}@r%^^PJ2TI${uJ*kL?H2L1bgo{XWhIOICJ1EOsL$o`_uf*+s;O1Qo@MGOhAIu_XxsEMWd@XEz~|M`Hy zZ%x>xUHG23?L+#;hXc=rq=8UcAyQ$L$EN>>tapsBYm4@Vo2F62HfW5dNgCU>ZQHh! zHnzQE+qP{x*|BXtyQk;e_x|oXzU*&ntv%P8W6n9o9~gbU-AlOw^gU$JMpWZGF+;H0 z)=>4Nm;3vMg!3!@hk!VfeGHOWz^06ky+uAO!2|)(XRO)RhD7k0yoKbgyFY@`6W(w3 zf11XBEHlH+QN}Po%TU_Y?I-dnbQGxb1I3fd5e8hI*sdi|CSGP2z5<;?4AYo;=y39j z`kpRW3O-xvH%n-*#G4?V(<6d9@O4r9(I!wmF#l%hKYTTt{!Fi&0ai2|4?!iCZenI%{HTp?;|g($2w63TzSFx3OGUVqDFO6MQ zsKyaCQ(V%oSuv~z4io+w0suAsvA#6^5JC)V;q*;IjDqb{si(!XZkpVTmSemZDJvE7 z%%Q}FX_11sm$Y&AOQ|au7PD0!a`;kG+un8~5ILjYn9ClP%XSSy#mW_PPMv8hdErTy z5umechgvW!ZY@8Kv5OX;F1B#0(CsQBA~&iUCn=Q(E``-I9f~bH`^}HM2`N5t!^fQa z(bNNoth~){-``pNjJN1f2@mB#rNYmv^9<(TxDu^U2bt(`q~B=fkF{Oh4J{a^5eeHz zIwJMEh_jW$MKe@9{rLF_)1P8N-oBWLnM%FMj%dDI)7(Rj#Xf|MnTN1v`-)=qqBXZpI0A<~NZ?r3g(L4-isSZa2N}4?hub}4m z>ThYKHIcPIkY&Mpy2sGsS1y~I@0vI-(zxYAOP=w(@Aw`Y14Dhzn7NRIX+5wd2oV1P z5z6DBu%ZjtPvwB<7w!m@=viyWcxHM*_IC3?H0utfvE36C^P}p`b`?EX^ZJ(V;e^M8 zEum=Ik91(dlk>Io*7CJ~1Ew4m(Y<+U&IOwB7Uu#|p;@f6FI(3|J@RL?D~ee}! zIYz?`W6#WaPxOgmQu~db1{V=*EW6X@ZXj-NDCen(h|>2}ykEO>iB<0EI7gNcKe?@0 z_Y_&80AG1`KGEmb@$4>}e3o_#u9KOc1eZjl7bNHGLCHnQgcHwdv)`BMSs7D~wr#LI zOOm3dV`ks>bSre!_-x*9=n?>QaOR7iVB89JrP1!+1rcl(0zq$vp(z?`8`4@iaL(C%wn*@=(&Mo4kTRvz%4XHSIzAL-zEuFfM_QAKm zh#>ia6l-HKy%vPGoIhho8SkCVpje<7623G4svxK>^wtj=$RWDlh^9@qs_V<3=fG5jfDRr1bl+4+meOxeC%oC=rZ?>iz&N~xU^lYzM z-uNZkPB1m>wqO|@gpjjBLJLE-tf;+~HrBG&yhJTJ zC-s7TPFfsGUnz20PEYBanR#883}C(BV83&rn8uYk- zY9Zvd`R!Qirr@_l0*)M*d^CmAx@!GjWV6+R%o37X!ve90~So-A_3?TKN3i2)BmlG#4|T5 zkCPq<9{X;%e_+>Ij(F94J&?-=Vl%0LK9kOkN_Zv!>U`{r&0$*o;z{L7qmoBbr`&y5 z-I|l*`(jqRy7srt-ccGREpJZ3a>j*2%7 z2&ts+Ab!yZbkqyzI}Dh~J|e;lphm)NWgOO3H@BuQs6HnBEBp%Goh-a}2Qu~L^7los z^@DPooLLK9|J}K{dk==Pwi=z*l0s5W@*lK_;~ySiuMKS;=f+br7q_N#V+8fT#prJK zKWFB!?*XBP|2a5nXeV}j`Mam{xfuUHv_AzwmYyp|C69Ov=jneN8J~b@|A$n2=+cd> ztx5EMZt*|#LXc{I@a2EyXBXptEF^nvs!Abh|CmBL>ofi3f$$;;1=NsrFI_I^@gVs{ z`*v&yRB^sMU)aCxHI1{gv#b9P12I)_JO$c#fSZ$Z?V{b379YBMFzNvyh5|CQ2iJK@ zg<5d2uc@mc>fWyUsTZC36jo?WGBIL6*JDuEV^M!KGO76Q4PDOdl>}WtJ}-YP`lwSu z%tlym{S<*N&KHeP8=NzXV4IpgNOv>b(sBj(c_WCRTmQ=^ zsAb!mUGD6bC)e#&gM_rDf17(#|A}{Hz<(+41C%`*ob5f;bVGe-ND@G@HPz@+#<5b1? zo67v0A^uWoLoFq<52Rka>N$X^VxZM|2m%$|d#Pb_oJ!GcF56ER4xE?JkByo4HL@T8 zZqLrPW~ua36HeI*9^b2d2Tx^1pGc^A-vnH0_W7^An9vZxSP)j3$NH4(=#ju|ci3-oG81RIH##0VF?qA&#$p^fl;9^3=ZwbI@sPG=pc+W73Fs z@{^*nxhVG<2^?}XV6B4e@Q2EKTfT;iinSU`w;>q;_u)(AMPe$!%ahRvINm!lj($_UWR={38U;zDphEl ztBYRf{UShUTB!!A$6|2>n^Tu`cYoB+-DWZTuX{%McaIzt@FFIn{N4J^v48eJh9!vS zhY|E?i7|VXTMW*j6@9jtPGF8Lze_=j1PB}ddkn>gln9Y@d#@`!Cg)T2DIBaV*&H+< z7`G4aEe3m)#2(Mbf*hznOh2)>3<)`5pCDqx?{1g-7l+nszuC)G{DQk^D8zyyAJF27 z5%m4yHN74bae=XM|IG~NKmDujpq`@bOB3kiSY-mwExKMxCnD(Wq!{D=ML2p)w`>td zFd_`%ogbuWV#;M-qeP{UPsGfbZ-s!0d`Y-A#!jSkORqKUKY`$CXAzKIpfec!Ju5{rRO_pqdoKbU*Q(*mhl82Xj1=zY}7Cc)zV(HwgT^ zfBEo5#)m8a3^C!%aRpiW-}zOOXXG$Dlyuzx%@RlB}WRZ)aKgY}s z)6V{sjR7=)Qxrs#7_Y-;U-C=Vry$#CBxpo*?u$BN@Es{`%VJ?`^-aHIS@>n&!&HL& zHm>IPtR9bUNIcNsXtU-5N4i@hE6WH4Yb4nRYLL+6WurfmSzb>`Jt#C05^!4-u?{BJ z!@(L$3(nn`CMnRN?IufwC9^}6|5m%fT@7AfJAr;`6&b+`47OL+^_oMG$Y4UvbM5;n z=BP7$#qr7ctZ&NGk!7nALy1TYEi@onK_((*sid;e?5okI}${p-*}HXh_V3UBhN4F55ti zwm(U`6G#YdLNg|CS$u5sTo+np2b54y80`+jsHrsYfJ=XqQdn@t^u?r&MMV{-?%!qh zg8Vj-;-^Y)r1RuMCXvR5mRziH>gj0`p7*alBQMLqpEdTJ|Bvm7pN{01;Cwe0a1dZp z3K7|tEz_(Ve8LiO*EhLZ&|bn}AN$J|gE+TEa?y<;B;j{g_)=jDD?excN!Sck3HV;F zMDNGf3p`KBB{Nww=f<`#@zR*1392gYmn=#5oPpjR=fV%$vC`S}uFYTDV`bFPy6smG zv+J(xMq76HJX$NiOuP(8Up#MY_>-8iPjcV-CUFu&9OAIcw45`Z9MNPwOtae@4r3%O zUZb=>;&t?LdN)JWanV;RYx|2H@;+!SMextv7P3b`?~h;np6@9vTM93r*ex8rBzPFk zd6>EP@`rLp%xt!$G8$D2m0nYb2s?U5ynnkye7LmM?z*0E{%+YNSorf+Pr`&y%e+!= zv`@RY?;CYj*o6|uO&T6>;(k5Uy||@{sOht^rrc*?XDGEhSD<*Z55#{q*W;=NlAy8) zA#8!4{byG@s_(>De9=KwxE#e1Qrd7WYJ@INI_MKP5nCe8C_{JXMrgfNwVwt>BXXG0 znY$5jQxnP&#MG5R{tFC7G)WTx8uBSDrH13m!>s3v3&KdC|FYWbEOsZqdxW03Hd4`& z*r5J*H0fktL;ai!+}3XuxSU}}cL=km>|x5dZV+{+S}uxC#JPp33HswVpTi{01h4M~ zraWrDoTgbWw%tOfyJkX`y+MChy2kRm$D&C_f_I^roC`pchVD{9*R`f@PEng&MirW0 zJxpqIfE(s$xwv->ckxnZZ(c#nDl$cWQ<@28a)-&6&)Ype8l`mv=bTs3${sC<(li4T^6qGnd z-XAOh4LL;vfnY>>k~T#Q@mW)Nwvpu z^|Q^pXZr@H?0=c{G#2lNAw?(x>Zw4Vt+#ZBgY zYn2J^tsZ5;PC)M#(_L^9zL*6HHz%*P#GFvQ(DhJf@;L+hpop~V3cU38Yd?SJ}qX6HQ zMl8rwE|h140<3p$_j53v1=;jh?gp!hWzE}lck2WLRjcYBE9m+&v}-@IAg4h9ZD`VW z6ux$zuU|j@0KrYVAmPpy6D*sGRNBlHmC4KM7go++C(chIJnFO<)vFcvqK(d3?Tyx5 zjmKH(uSePGNh%t}stkCBexR(1T<4*bkjb#b#Vo7WO&v_7lgf*}W5-L=?W`U|@68wu zd0ml^lxT~py@~Ke_n&PA4zRQQ8yYD#KUTZCfZsC#K?8RcvNs24M81z#5FTp=3ylJF zd8Z^XY_lnH`ajBW;7MQY8ZJvFOl+cS?Mk)zLnRk&BJ?gBo0;AuhLBIpz1(u;Nq13E zOuKtAQe@F(%})_HYps0etrzk8X2^!9X-!GsMAr(I=auRLgiIf50Swa@t33Q|G5)NW zP9qlZU6xXc0Ql;r;Q1KAcbXI zVARKe3wjl#(-Q>-Dx7jlMM?Me&%)G`IM?);vh%r5`C-k?0j7sL!I;CcJEYukxoaOS{;dT!o4`y{|1$4YvhT3-l$)D1Nr0EK69V*-XVN;Hw8=I|e>OGn@6dB#KS(YjCVSdIgOwsMznHv zfchJO;xG|@>?|7ojR!wgeWYXi*xPWr^Q=Y?PYy z5`Dk@u9^|Zr&KFQ=5ZBH=ao@TL&%JWPn-7wAe!Ii71e0mG9ee*3ke?;%{beoE$7th ziU_oynHk8wkSzomE*#Gjh1S~5k%g0w%iFDl9-(XH2PiwcZNQu#BOBr-S)(wvyXRoi zcx4MwtL8&2NX+;8>^oTO3$?YDi2|AfOxAsN)oNYxteS0u6DV-AQro<9wBPq2I4j!) z2<$7&n7AwYMR){ftY+$%DQD|OluaH}byL1S7mnY~tO#3NGrAkDh-9aJQKmvpSLkaDRQ&-83dE-}1IlgAnAL-2zbE+qcQ7@IK zRScdNVib50>*ptZAb$t+nVKr0F;wqcY#vrfB%8^jn-`#nT8zKiHseMdE7xk+aRkUQi|`Bcve-gX zwzB1pSAwTw!{U@seWZgS$~k58s+7XXmxz7ifOsXsq-hn&a;aehq|Bl-y3*58cdt3x z{2MOdfASmfvk%b@=YmBF=fJ_hneiU8 z!vh3F!+XWYXJv8V%h|CpgdN=PaLkzFvbnPeaNzyU)5qZvm?7&VFS2Br@3_cV`R;0b zX0N=DGon2BiRli9<2yB>Aba}**rzDz7+@D zOtKzYV(zbPT!oo1mPEk!>R;TR7}@{TIOL--JK}1Z5xtc!eq8U$$l`Ws*xA@&@ge02Z+3(VBu6-7|L1+3+;>u*ICqtGaC(V%AWJQKkg!(>D9R_4*lY?!hPe+) zO@HEt8g%YXl$g(WlK`eeVegXY^>zFymKPTDH9XYI{&Ikxu@1b zP(%QqM7Vc?|ycaL2CKM3_0C$Y0Igw z7}C;>ilxS^mBkR>fZQiOSFwT^u|76bkS0&{SK^bUe)#ApISx!k2F!bkiFTRE*!QQ^ zJW1AG)X-j((1Nk#jofFU;m%%BKv-|iQ3!@>J_mBJ-~P`P0g8Nsb)H9~wVaLTo4}hl z2*F}AwTd-KFu@qEH0>D9ncE!A5F+}5g{4Hf>0F#p0aW2gTu&)BdrGU%+{wi48!b@Q zpZC@cd>}%k8`aMr56YU&)%@+Wm-F@aTv^yy zY2H1mGvaVgEtPs9TTfm9+B3U(k>dwHaen2hT&$2qqD1Z6Qn^NTvAcP3>)3a3V7;htcJ2_X6 z;N9E+DF%~Vk%mPm^c=mQt1E}C-n}4wZGLmg<^3^Ea2hG6`uFF^jEY@CG0Am14o*^I zZ+ziPWa`6Dx_6-DfjD;YPL zCfv40FKVP?%?lZS(R>9CkeKlvLvp_LSsyD4RX`FluOh?AQ2plNAtEBeq&Et?hf~Ww zjZY5l`S4|6AOc680rR#So7GMrJUl$4Pmd%+ahVD-1|*4=xwWM?H#cXxP_7B$t_G>g z$Yk1X_q*DPnu7$N(ybD|Qt+m6xK=;ipP$Ezi;IWa*^Sy8T`jJzo*Y{Cq>)2gZ%6IV z#DBZ@f7U-A@&DB}fr^TXNu%>?Us+SLOytK_o+Iti_kS`2XxH@5=a1^+{I;dm4Uh37 zeD%Acgl68`^+tsON3oAgLp;_hBe`;4lh<5b!R)LdbZu}9-dzy`cV@RnQQt#fTn-OS zuE;AFe>b32a=AI!MO%b4ZJ4>&IYh~8i?jK49wJ5UO!;^(Q4uS+gc6y>)NwpFN6w^? zOn9v*(hKOcM%Py$b4$F2ig$ZVyZB0{gvdo79=JI8LYTQB?dn5Dp zI(kMcp1fiq$(bEhdPeIf6?p2OO1qr|#blzS%x(hI=Y`6~KY)Fl$+&v09x2+e(!%_! z)ed5SUs|q7=6gouij0!>#PNm2*M)bSb-eDQb%mt87HZ;JlrVuDARL*(>(lK_p==I= zM`II7eEjglgfhs7S{V}QLbb-owHLWNS+aZTcUNvOGKt$RyzU>QqVUD|9S3sa{zm`l z(a}}VTT`!RiO!1AjFdS@H*7rE@ah1~??v7+A;0(19O`oUHw?@#AbPRF!ZKZPN@q*Hv2cr<=>Z{^I55lci+7%v=BOKy?ucwCCS z-QRfmo&I!+?6w08yy;C@TXy-GTT7jrx{AH)_h%8g^DwxL;)0IkCfCegcYbzcf1wZf zqz{9~x$g!)hOKb=#_8rNT{4si!~a9NxTzsa2&YV|f-&+%ERyT45qD8JlSi;UpuqVk znfk4%{k{|Y>GH_Y%~rjwiJAlUxBT=Kpq3M7aw=QBNWMqalm5`^>$-RTo^-|J=AtbQ z%@2=?CNx^zYSG3-#A^#0aB$c&5Pm)zBwpo`8)a+@lI(fvqxQ-I!2(?ptY1L594WPK z7+<(w2r6cX*escrEA_4hDBSL^68P9NEtadx%ggj?ej5lp5d@oXC~%kzA^;}KX>0Fi z_0!d+8GDu2iNs&vSDeP<*njMgu`WzZOfDb^ej>vjeF|a*$A?9uxEOo@DJHc!tXp7Y zQJd02cV@yqu6B5L{JZl|hA+qbDn%&0A0F*NLF#0QBhbtEfS`=!vQLc(!|XS@k4RQv z5k$7vuKd_zQ69drlWi@ReqQcygQAGWz~j;PHJ4s*6B zOq-fJK!qlscMu4^LmvJieLqAe-VJ5eKYcmO{OSApWHHbXgR>=16)M8{CpFxVNJ)t& zXyzpq#5*gI+5XJbQLj6SSUAjE<9B>+%a|-%_{1mxsJ%`iNC;^QJ5@|t*)a8a z1rgqB$5Us^`Q%zd#U$m3_2e*sq~yJw|7g)!U?4<1j`oK~m#Ro3#035>zh)RCnmCJ+ zWe`(u(s3$(XO)6JDW}&YjJFQZo(!qU^S%`f}Gp9>;0`G!L@x&+-wio?KzsT?+kgQ#x_PGQG)YhzL)PsYbO zuOgw1qinwxnHd=mH@kd~PEI)TI0X>g;BYw>#XIWi6jvIo@5{HN=2}uMuuHi2mk!l& zKA6(tq>S?Ice2*jq1t6goi zICyLvFUwLhyLOQ^?9MD#zGuqAoXsem_I6bwELepQ*J6rvk7%f2THn2S{aw-Y*HQK> zb@lyqi>g1Eo2U_Z3js6ZXu?|B$;+O`Yrk8>7~Rl2bR8IC3*E{@z*w*EmMirE5HK~z zYA)D3YeXKZhsZ)0$m`#u?D{3;o}<%37-owZF%qbe<$(tP24kQCCC*wQyl_Z7pj5Hd zwqyPz%yfE~ox$5eWH*}7O;5ZaW(r|9GAZXW)N0C|*!gHPz;f9xQ>#qKmf?UH=o?4x zl&^&GwcU6Cx2<}+ut7IP*bNRtYF~Mfd(UXi@t7q%5>NS5p1p2_SsV6TBlkD~Zh^<~ zP{y(>;-o^^-QyQoKKlD1Np6IiBA$toy}WP4*;+-viN>XmUi>{)X0}7D+7Y7Zb2)hN zl2X~S3tt)-|F72SO;6^5{IHLETm?@PleMJ23{{ny!s#j{M=k=l@%)N($8K%U;{e9G z65h+Umf8WNM`Txh1_zmPNPj}Msv_CbA}I(+>B(H85{H4SCbDAA!hqLj2bL6>p3Pv) zSnBxR6^8=>1x;{c^L5skixcOReVdzusdegHr0OBY@uC)jP)ke8bz1pFf~eB{y`?-a z9nJen-JVus%or(<$mD?gEr%V<1Y^q{`UUI|9=lU%0362F7n`7;xv>nyk|{gzaQKPl zDj_x7*;uv&(Y+)%H=WI)Rxi_gNRS`Lc)(rxzU{<#-vlD%K$*8k`=;;2JEM@Z=thsw zDw$6UBFHz10_<;UW*#vr@iz`S8SJJDD57`)fpA-Nb!nuhK%2!HyOpaf4%>$%j%X%d zu!k?WZPDBy1iv(sX%y4dWLsO?+6eW2Jw>#?KE_8&p;?+L~F3^#y1V$MGCU9`- zp+cic?%ZvmrPc*xnPo39umwU)U9nj@@RWa=#K?&i6b^iug4teoGx&gJ9}JFj*gD19 z^TbCI@iIwTi=z|Bj5wTZoR07UK>{3V+Li#Fa9)d0=TK2` zru{RV;=V|`U0OYo#IZGPe|C_j_#zZ_!G!p+=W0Lx=bSB{X5jqL0K@IVAwaOZBBMAY z!87D!tvDyvYBqNi_fg&a_K22n80iwGp=`Q)>6PK(V8o4>RSgv=1c6n5w1ne6r^=|A z1DRwjEz0@4g)7)hhskD{4&ujUcFl1w_*N*HYs$;Hmi7>jR`5 zM8Kbv-6m{Jt<(tQ=c__Y)o7Y{AnKlLjmNA`FT-aV&4o;-HxUf)II}w5?!1rRgd@o{ zX*JIuyT2+bdaHLdof|*xXS9~qRg})$Z96WvySE^mt`)o-k~2`WO99dwwY~4P%^e2g z1ZykK?c{?3!br#p+!HQ>{R1et@2c+{(7U-@ll#}7tUO(My-wfH-)AE`o{`r&Ohc9M zhNm`FYZ%REKlp2dtR8WA8w0>3c;ucL1_#tr(V$T#`7L*(7 zID$xYDYW_l-^S;OkWSo;Xwg3oURwtfpMn7^gY^B4Q<%W(4)nKU5ajEFVMPL)=kj5} z>JYju3sm`a2nvz(2g#fHLBX?X z$98SnOEKs8o}sCwQGgvaVymm0^$m^l(pN+tYEmi6o2kAAJY%-)fZJ|Igc>fwgVyAO zh;Oz2WcTnuBwc`?e7$_W#N}`d-S^0ZLi>rPiQEyMkFNigC4gq#iuy1G;5@Fe1N%V zPp`T@hV`(k@oIsOjZpj}27fm_+1PavD;fVJ{rZy)#U_&T#8;_Rm6q(f6%@`ZkTl&x zwP~@4rK0&5nN3Gxcoa79rc+s3)6ByF$)qww;oVvbmKN z2M!jc9N`2Lg?3giw@@jE@cE!7*g6xb-)veBMNDVrvYtO~mK)j$fO!Fx5g8?h0XCFL zH9X84cA@tt<*lCndy0;Qg`O4lpY~0=YUSeR&XwzgyGcxrZgUh-mkZhuUmKWkuE`V3 zWFI>{;8SY_ay;SLY#J5S5uHi7xfhUJMVy5E4HZ*t#_Yloa1}kryvi!hWLP$jRgu?W z_qZ~|y4B%fyhYX71Kf{?HyTPiYR@WeM#2N@>T6UWSiSs@8VU=|vO}Ph&3L9_-HM(d zC6n4zM)DaCCMVuSBb6JDf+~0(x#S_|VBphOWM7Ay;}))pnIQMgmU}}%gqsKsB`pR(MuiCp^4UyE@ZVOc)09Bzlj&nz@5ov!= z0or+af?+ZKXmqqSmiFYAZKgojVqo`*NqItu8pE?6FHtV}&8~aDzv5;EMDaza%1det z(io%^?H=&G1=YCUTT#Q=4iP@`Qr`sp${CrF=04r^XKC$;`(nM>u&MBwi2&T){_gID@lH-w6d~j2GbRJe2rqvA3=exsw?)RnwMBhc0@;_`= zx0lNS&ZdK2&)=ond*f-x@oV%G9NUMIUZ7s+M5Bwq>rrHtnCyuhUTT@PN{32va zQOSeEX-a*%6n255AY&9!BMEHeiPmBeGYcnhzGMW+rl(r+J7;hjTEK&Uu84gg)0;sH zg5gt*!NoLl5lRkUh<)KJ8l+uP;yZG-nc{Ob(&Yi#@D{d?j0>lG@eJ<9;# z%SCg=uVfDz%{0et{8TKN9uW8Yr3KO4dAv@|>0J9T<9#pk#(SMpDqfJ)>{zcdm;L!J z{w|^gaRMhfli-$X_aWPibG9hrF1JZ~Ey2^9EE}2f)GTPXNN-ZYzkBy{K=!aeisMZl zm1Av^^IQ~3M)uXfd~th|eA?UhTP)qJ6uTyLMe-kU;e#sQ#&y2?A#$5%<$3i0p$Pm1 z_>M3-bH;!DKt6Z4Z4Wm$7S#3Z_X%fwl&}pR*u)2fWa0TG@qT!jM0Gvj_b4Ik#Y~1v z;`6D3<6i|cU&r96^v#<+j#9*S{LwMkF#lpkbHw*JDBy>+dPp8R`UtnVGolo zsE1l0?Zw#F{K2q5l4CfK$=`#vkvF|bs2zVgj(I2JC0bg9%Y0lk@wxxQ$18M}EDu(v ze@@Mf%Qiz%Hf$&kGCbNiVe6UpeA|-P-RYDs$vTFU(V6so!oJ#U><_B%76Xh9gYy6c z*aZuZmETowOH}M!gHm{ba9I7_P9Z0^7OdFdYz}v^+ztsRj9BXlWs;E(5BE-OGwmvs z&65~C)poD93+@8gp<_9bTt`hHDw<0!wl{?sQ+iJx43ptVZ_BLX1*%}gsZ43fQj`s8 zf|&bp7ZloaSS$fh&QV@0@?89|=#{iia3)11dI~;=E=3_(X);5pm&4~W*Hud0jMMe9 zd2P?rmo_8K$;}sRii+{nLk(aSD;6I%H3my!(gh!@kiJ;(go9O^Lt5&BNly3WAy!uE z+Uc~IHQzB!5R<*GBVZ!Auy{DLJKViCPs=Ri+3>-f8XYlxd(rlEtzIdT~<*BFU1nXhxSNU30GknLKyg8HUbvXhl3twyk#lkde9_AYN*%-0Q zwKTUQZp6)_{(4V3xr-Z{tE!j-Ndm2;KkGe|A1QlI1BU7 zvt=rQ1X+Wb>jK;_LHsN?19+avJ`o-_Mr=$!FuFhg4rq;~hTZz!Gh8*0kZatthl4S= z2TET*l9+xU9_{$+Q|ztXm$_?l0iyx%?(oKuMFppsREGZX04Esk&JQ0S4Rk&wN7=CN zrrR&0y_gI%GJEd!{L=~mnspM*e4H-i$4*`s9`HlxIt)U43p=8(OGW4d)ZKiKyg6{7 zRg94J@Ji+i%KHdQzn>epomA)Jz;Gb2*!7{MJ^aD1=dK#4Pt|~~RG||Y`FWl-47O$oLhkD>6FiP(8C;CGL z*Dod7ufxZ1^zqjqQRG`T+nuq5z@EHF39|eH;BCn4nG7EozY~4&PnsXCgHaqkiz$Sq z@Y1GhQ@OayY4bdQ%T;{)S#$hbh6J&qj$WWlk?ynoiv9$9itFXrlN`E%y?T?D* zDd2OZHk&yUn)4$uoqx8PhssA0g{sG@Zk2>!C5F3dErx8`;~e2E9SgiWJWQjF4+oSj z(F>UcRY-=jH<)H{=S9Q^*C3s-Vu#B@nmO{w*eaD{pEWVJF%4 zyVRgj0Q?EHgsecE1i@1AyO!}$T$IOSJZ5#H1W{f9H0Ia%yWO9fEZVQnyCpPB<;YNQ zh|(BS-?9|5aD94Jr~9eBW|mAysyt~B*kc}dOn2-YO(QdVZNYOm?ZTUd>(NVQ8q6kM=B@X-%q|_>2Pt-HHW92 zl4Ov2q^wZ9YPd!f%aP)E%9OqaO4U6vN3j0v7ftVWq8ot8&tthhfNpD{p4+c0Qd>uq z6n z?K?}Ahi@-qfnDLRS}fl!c)u<@-8FQSS$k|_JzXVsoE+YOq(-&99}~R~A3d)D8?zg) zYa55++D|dYikUg#jsX#UBwUv;ucsStW$m|=Gp=ue-jjb6eXTXG2e{vCrK!B$A0poi zJ01ZYQ=moN)w&0pjU*0i=ZW*&HIf8CbHIZ>{UHuwhWxx~A6FW|G;`wo{q5X6ZRC&q z?b9~*o4&O6@U&Chfx|jTXEyy!`}Ih5g%2w`wc=_iUFox2~_ItUGeSlIK$VFRBS8+#RG_Ef`#*k|gNPgSHNT3yx-x8Eof-8B1!#6vrfw7CIK{Bq04%K7Skz;VbhjhY^XDxIh`<~E081^=6}6-1;f%S!J5;-|O|XHuK+W$4 zlxq^e25|U?Xy#|4uUm8nBVnI{SRaWrl@tHzqiTe^tS}pmSZz*$PeT{^txkXOahcNn zfFwJ3Cds_E6D`Vyeqz-Qa_p(-g7Vz;9f!byWP?^2Kctu>s7&}c4P-<6D3Vb}l>?gw z#Z~oj%2?+Ew?mH^f^B{c7;P@0T@O67OH1dLG|M2(3_8IClH{>8)Ta@~!zkk`=ph4s z#%U59YUPcf;#q54t49}yhbx`!0Cu2x#u;0S<3M#&yHxf#qE1aa zF(;y5zqs(Iq6?Y0=%TaZI62YT>=fwt;tzpYyXiDmd=gjTmFU${l%;-d0=R;u$85cT zlpM93%A%||`c{$T7BCT$d|VKxKvr(hp*x)H5q^d{UGD2%T<5e;yL)lUs3YP?Tp)ni zEHm;A^W%yO&)mexq|`gZSgT=m|E;ysbN`&0w}hEl#dOrv!a;;Pcdoj1v(|`pEAIkj zN_kP%L%m4<30?mBPdb z5o2au#9Yq5D{nphaOtO6YF@6L4cLn#uiG$Id4rXO+sF%G9D>GB1a3q2IrLV za0hYFB@vH53%3Zh@U3)Z65g^rW}VgW2ph;j))MW+JBVa7$JRy*KMSw;aw}Ow;uo$A zLHQOP^g0^UTw>`?;_*qb-0&kV^Ie&&Aa=(>n#!X&sc{)fpznOms1IEFxcbeAiZ&Dm z$K*PQf7wsaco?#T8@zngdODxtr~WWrQ+dQcFoecw+o6*PsewVS<=(GGY}`>AF9)eS z9F(T~+9DV`qvd@gXRQX?7C*2bkz|7KaUgdVBQSB0+2oKsDb{mG91SLm^yD$;`?Bx= zSwN^D>3xVOC^qc+Ykvtg93+n&-tMYjld@U-9}hf$8EcP(9DeBt7Zz z;VS&0>2X+SXpoHP9KTXQB8?8HBz`=T@U8;+kUcRZ((K+Hyw6ueiy~pPgD}x;fNKW$ywN<-W-5S8=k{ zo@d@Qq&R1_DS`1rvVSEGm*ie(20vxPgdrzEk!j48%bNFPbF%5E$FXAm#GWZ}k{@_Of%!v#3DqUkuk! zXnJmSy6&hT3@%7^n4!>Gqy|-gKHqM{uaeV8cFrw;ycZ^G=%oT7aW3gpWO!fG{C+vM ztT}Vkw&8e+f$9fNHi}4=dZw`bghR|tTX#zg?2J=o)5xB-5jYI+U9Qtjj7XBP#F0E= zaT2*r7V{6aS6r;%0shi{6palG%$T*Gu$mvw=6Lkcb)3Uf+z!?c*@0K|l2v)^dmO&Z zi*wg2(R!Gpce6d_WkmZnm?&>?wU}StGq+qSt?A7jaD?*Kt9?cUEX!1aQT@ z+-Kc=%(co!*hS|)Lh7EfLPGmEMC&X?)KTI2XD0p0^aBFCf=4^4C*Baa7r6c4Ak%Z^b;;2kFsh2;m` zLHf4?liT{kN!%%`C^X;1*$gDzD?X1S8R%-u5eu%#NGFsfKX4_)WpD#z1Wo9kU(lzJ zzUU9~0rjOOks?s6y+jCy*W&1qAAU+-@u@~L846<`Wv?6lMc>#Ebu-)T48r}ml`{ds zmijTjzjPsbO%kSgT)swnk`C*+%J_2MGwB* z55BR4uRH$ZpL!F2e{|>z85`eKA^B;|M(v}37n!wBu8jtm$MX#?Ktfw0ySHvd&JF5(aoJkR>W31UWc z*7mTFkb~Zo#;eec#A5h!u)nTJCTy2-1K_vemv zPp7n+8eh8Me{h5LcrJ(sh5Vmg=BdS&__|*S48;P;8DC$;5Yvk!v{V}u0XwD5ssk7~ zPz7B4t>6If?9Ko@^p7KI>-KZhmc0d|+D!3uxwQpuI^V7w$jWL#tvG9XCSM1#EQkKo z2RI;XlD0h8ECzW0*z9S>V=?jETb`E7p5R(XyGm1mJN!@W{OFn?009Nkn|#;pKVT!S zoW%Pk+Wc57Pl@Grp2?Y^$?t^4>fQoQ-(Z>_;fv0-pwcKq8CSWSjF`{qitnXvf6x(A zURh0F1^VEUo*|eUB)Laob3rV?BljN&x20&-xJ|$t8d@EiyE!5ob_`XJOvHh0cuU{! zT-G^^BOFQa;MN>Fq$^I3-!)9obWY$RLmF?ZEH=K}2{|?IBQvW*VeL71&8up<-lHSs zxBZ@_Lm&M`w(ul2z($UIlgC`y{1unmi_+qyy?oo+&^V{UX6dpfni6l(g^B7w94ZQD z;_t~(Y~WaZwc!gxcNCZi?FOU&A|D5Vxd$`mN7ydIG~69HJttaBOM_|JUmko~rwpvn zj7pG$6{jMT$v#NnD^rze|BtJ)jEgGl);@@|grXn~A|Nf@-QC^N4BZ{l-Cas|=g{39 zLnGac#L)4M`kd#S-#Z`n$31)RyVts||3amubgEqZ9O_k}-?^T_7ZbD;+%S87Fm!!3 zm5DLcucZTXVU2g4-XLLTCHS#0k69IyhI=7OoX8z|M&88WRf_KKi-)kIaz*8%otvU@ z94-lBpK*FH33O+}#0qx+BIu+2^as8g%Nz!Joi@y5iziuCsnhC|x_#9@_p^Vz=0pGB z(V3=;G3t5%Pc<|#y6*^fXD96mRxuV2C{N#?BrDT=F4v{>x+zOgX{!@GecJoNa_T~N z;4ATBI)O_S6GlC}T1IfF+_GeK)c zvk#~3$zmI~GA=Ng&_lJEAp(gRe_w?t4&rD2G^M;Ua$M=fNwG# zk7+p?Hw9f*PXJ42PSv1Eb{iLs=*b;3LdZur9+&F3(oD|u*!Q#Z_G~tdGE>}H>-$~z zCfuHDBPXXD_(iComChUIE_?mWTEnN>?SEohokI@q$sKDy>%g?0;Gml&vm6NRw1#!f zM}c1?!7>@9%Y@AuXzYZaLYZeDtA!k`iU@Lvs|h1#4+RFpIbtRJAX&GV+B>#-`lnhniJ47 z1{pK_Y{!_S{UHAN{_yLSupxfTFf*X{vLT~rd+X$R7a*{b`D{$$!|KMD{UBeCic#-p z{1MGd43sm^p4gl1!ep)uL6S>!H!vJnC?*AVQsKsP%fjj1n&GSx7wA!L8UlWa?6@tE zKQfX=kg9st$-p22b(_l(=a7#Ew;(Z|xg$P^OhOXWwi7(?T*HOD<1&;lznQq_rysjH z>mTA%)XJ8*avX!-nq`WYS41xj&9IMV#czOi&sY5kj%&N`j%OH$&~r{t8rHd>8*Ia> zrQ^qr>E<5{`~rkyCq$-Biik`rp_&5q&Sv<2r_!d4`i*tf`|X$UQ76akRVI1Rdzb59 zH&|uTM?zyXr!9XH(tk42(&2${ct&`Z5)897r((KZ^uZ0?n2tlFB&+?efm8N9g0D#@ zmyXToT27$BomcX1LzF&`xpk*@nhx$Ym#`8cPHFMckhH_&H^#pPPhN4e#%Il?p-d#Y za5r>R@nkc65oTl5sx=NXb8b>Toeo%fee!-1&u*c$t}vGBcGXdP0X>D$<1B}Nz0eMl zFtYTUch~CCcH3w1a^>NcKk9)29`9x(#nk&q+wp}t%}=sa;VC$BdXYLuDuc~pJYf>x zs$I71IL^I_HPO8p^_|VnM3~n7o7#tfu{SJR;QuUHkYDj+o7l;>wFxxGjdy+6fGX0S z*oCI=&DRJP*%+iJG_*cT&pXrc7ZGUOKYm}$%6lG{r%_LOh>W}k@OR228HZ?>&&c40 zyboZP>N^#H%bL)(ZJ)0Tth;{r6OuQB|K`ncd|uO&fDK1?V9GBV+<~r+jazqc3SZs_qz-zwFWY_Y(}GRx5XT@AdrfJl8&~~DQ>(+%vTbD$$cCOj^up6E9+(%O7LVdF7FBtMtGcLTL+izt>!y4B=IFd zJ1TCrlmN`jDCY(8T1otz0YftvHXyVV$I|hdCi8@o)5vp_3$`Q<69%$4!t9h}2;n-o zc^lmpjboO1sV$oIS7H#^FLYaCuk~Ovo=YnQ?60i(p6>|h-xq_5u}V@HQm)7T>5?~l zwri^c^=Y0h5KLs|#Sn7T zi~_h8Y#iI!sRl4!MZMY4;tyrp$+^1g#~U92ls}m|lI+AI0N<@ceX?Yn3$bJv-jg_Q zkiPyB0FsGE&p}JC@zlojXF)deC-)B)&B4>+#E{AW_W0z#qx0XTcNb>Rh5i%C&saUa znrj^2bDVYdjv6a%0K0Lb><1H z&gVm%_SFb=0UUr-%_>=3I=!~V3_UbMM4bR05D4Un4WI>K8ilf{887Gv8>c0sDF%Ne zODO?ed+w`YTL{c82@;@ky~eZiUF^@SenSz<*SV0>Ft>0Y#s501VSgv7O(R~8Z^@eI z0*#cCVDq$HoM?74hKSeWqRuYygZ(6;ivrwJT6m|^p;F9_a$yJt@%2c=WUOHW<>b!B z+ux{gBYgOo+9}=>juI`GZRb1=wyV7V6|mbi-!@ZAaQHb1L=Kn1zkWaZHSn!(DAL4t zrcJI*S`y%rVJK>e|JdU*_@$%idO6-sVsFytni-q{N;Zev`Gke)X!|`Pdq|vEIumBo zN^8lzYjUr9%ZW)Mg{38Ww8K>Jqw!mM?hV`5iLijh{mGmv_shM*E`PW`1rXY7w?E;# z7Vx{;vU+SNPgIQZ?LT)yKDUWu$fwlho6tYB@t^%ij|qL==32Y?SUXf{Fu z_-m|ep~j79&!0k&&|EniGNKs`c-;a9e_zMx^*$LHzS-=l7tGHlICK}gUlpWY>XaTE z>VN*lS6hN3=TVBheWR}DVC%B(eIJ zK2_mbH=%Df8~8V&KwS>?8x>?};kps z3MRB|JdP*^H-)^n<^Ne39I%&qGsw$rOZTx^lIpE=dMCmjZ^!#!A*Qr?B`AA6TWOBr ztmQx5p}FnXm^98u%rq;grGg~rLRyv8I;aQ!=}nD|I`wj?Nd5|Wolb6<=&*S!=^8A9 z*WDud1um0M$Lm$CM|-mYz~%(rm5!Z~8Ux7j?gAFCj#9)wd_-DRDYi@}AqMo*mG8lU zSC9cIk_W*IMe3oXtzH1W1-5M>l+T$fiW`4|eC+VI=@wTeuC41*_VMNR-$mMBQ{oo> zHGaO~+d<$ELk@HA{V|?dNZE%p6(LS?I2AV2xC=xX76wWG?;VNZj^0v*OyQKwQU%OX z8LoX?v{^nmq}o4qKA>fkj8HWV?X!aw?;FtG%44iIB*veo=EfE0p67?o-{7aR;k*kU zlxZ%$lg;kcg4B_ug;HTheR(Hps`55Z_zmGq%8H*(&rZQA=K2a`li|gm&->vM-BGxQ zFe#;UmYl>Xo+21Vu=`@=< zn+t*ZFjGjvU3Y!B0IO39<3CEW=wDtaXiQMgM$L39)=-P{(mqd)ZGZZ25wkq%H(^Bf zqr_C58%X`kut852X!H=kOxF*&dJ~nkSQXE?1CwX?C%zB3-}Mv^KsDEX>G;Rn`vElhB1-(u-4SAf$~&4pz?Q@%5z$fsD@LWNEJca=7XVkoBxapCe~?gu z(=1|T?UK& zdmPBjdG)*CZUp*>Qno@7uT+Oi+gV~?*Whq{FBJf^IPB48kC&|iS**+#U5&!46KzPP zBpgctPktzAZWN11tL=*>79Z9d@Eam6w`X=ZBPM zLH1)q-pe7f`vqHcY6i+%V9|H8ba}=L3n{)h2|}ykcg`%)Mtqk;br^Bm%&}hSaYn7K z@L<#juipiTe1^kjRGQ!V9P;W;Z3T7s<~ghuzk(CuymH@)>wqZQI29V-xIs0_Q#AU^ z%RnHP?QhCfdNKky`dh_4oYK{}(I;Z4*WizcZ@#3}<@AE@a=7ML`R}t)nW3Q!=S7 zU($YoDrPe2n#DLi(M@Qx9Q zhOUs=Pu4RmJ**-LRV{)|tL`Z_?T1=)ACnaA(H9QR6i5=nsWhhKpC}nX7p|)%t!iWQ zkLM<0)_f+RL36POR(ZwegQYp4l#v9&*Pd;H%a|>zxlB>n4I=Do)f%%DQL50g?&6P7 z+tc(8t`Vzk0i^5-K2Fzi#MT&|o--tQv8Lb%{oY38J-p!ji+|Ua>+RNicUU z0y#M8XU@lUWhx&gX2z_Y)@C@W4-CVK7?5#GP?K-ANp0rqWP&HBrmj*j>2!dw8=LPr zH(B({MmV32#T}Vl=xeH0);?A{wAFgbHqQH}VJwkM7A2!?0>N2mVcC+V41JL@MCr3I z@vk?(zsC9S!9CEcFZ69XuV>@Us5?|ICcZNeO?Zr!iw+g-mQ98Mx)}q*{nd89x&^JC zd^Ho&wRE+n;l8G}Xa!^3b&HLrZ$k z1R`U#nGMI;{*^{L`mdy(zVg4wgA*w7vpC?Gm^7ubw{zp};+EgP`er>AtcpKt{K5%V zOCtq#*!hcN?xQj1w@ww2(OKwnQy1Hjei(b! z`GPs2p5LK$zF@TX=oFyk^}r|oEZ{4v$01_UpLF5cud3LlwGus`y7FG3n9>rebm$Dj zVgUbXZ!XkgJ$5Ns*10TST1_#Q@oxt-oVRQo zsbf58O?KAn9WsJSsB0Cua~?aMuQF~9Ys9l>mwO>x$r)9dt2Ts=LSl$cY+P47RFoBq zJHyH2!#s+59X8n6QWPo*>-yV!8^v+UMZ)v*TAfw%H2gHZuWBPy9X2|=mz(YLuFuxW zpmw40XM?UQs6cgkl%ca6%2f6gL9dNgZEI{?sEb_zX54&-MJ_MbZnT=7&J*Y5+*fK^ zX?`iUK(!^BGvt|kQ>db*b~F@6W@%-mLW|9J(Mr~u|4*xhC)3l?W}9TSG$QA>Ybcm)%93hsc#Lk z1+0ZL;5hIKB_cHUS{1FK6{4lI3`$je`P8{p5*gi4@WH5}nN(M7+{OWF16)|4ufKC8V*86yopqB5QEGGZQi;!3h z@D=E8d@8Nt{)yunGu6s>W6|yyrY}5OWvMM&+0?{@E##hwJf5rH8_Fyv`{-MliWjulPGnVpf zVLR7b@Z8SI*}QJfZ6=@34N8TUbJ>~O{-^OXoMbiItHKR-j1IBw%2s7xJFrkvGVR<< zLDP})O@}s(4N#F?o+Vryzo8PS%qf`j?R319fLnOf7tG)U_OzLA-Eb~So=D53au-+S ztLx-)C7wG+21cPblfH83~NrUn<>Dct#x zk~8&i)~xHgdW~KIw5YL3BUrdT+Fssp)SroCQ>FK)vU!{`gS23*6>6(j%$$NXN&u8M zvwp#>%PU99%AYG{d{p;EdSEA6Cb_y$&@_9O(Qt$9gcnKrpz!U>@~vA&Lc&k|-2Qce zxbY@MC1fdp%O`Km^*R3M=E^8MVVWajgZawE2r)HN@ZZj}yzWB-dWg((2TuT=) zh7}!4pfID|#oIY@Xl(T|!@J_fc}qL14l=X=YplPW;*aMkk4tbU+k@Qu11s5bX1`;* z_(5WJWOxA?lb>6E$#|vP1`o`>G_cFAWv~*CvBm{R ziLJZ`6te--6OBFMY zgE&QE<@V9wFKiysdl=|t#bttogE7U09Q+G)eG|?y83p1R z7%Yz)D=Z}tRXI%ysl5m1rmc|5J9EVJJX6k^O`?Nc2-U|U7%WCNd#Ul*WQMmXRXQCz znIbmwJ~Yu!_t_O$s__?9Jd`z%>5%L18jMp(A1?mnn%|FBe8G)y25n8_DSm3mUaWHF z#yB*v%O8lYR5Gbn&I+alx%MZqpK0kDT>&kW{2R+RepF;Mm6GEr&)1jWad7C@RB$_) zZ=Zn@>>M%LobS`>9WGE=T{cmoCMuv`gucBxZyxhlDk{sd&cjp&pl;vtQL+6B+E2 z83S@|Tjz3uJ#Iy@(j4oI3$$1h1ELsPwR&02LlkJVCzu^4%`$luHc(q2gYyj(J-#&00>%2wmWBK$>%EdO`?zonv)A7m4Rb?LY;aBHOo@iqJ_1U!A zUqp*MBmu`mq%W(8PKFhHfcsP4Alf{*!;6UMMAFTrDtH>Mm2GFf4tRy%%!=SJ!qTgAJj{%&Jf>!!QF{7Um)%+ z(9XlPrM}-xPJCBVUy73d)61>ab@QdxHo}r(Jzw(q>7s#f_C606KHfduZH0O~N3pzAnBib)jzcvlD_Rk$UB^ZfH0zBf1?J2e|e5{^PY?aNpUQ{@i{SL(s@ zyvrLIfj2Ot-W*jwLIQIXjyDNCY{WCR`Y)YlTT?9WUge|{Juy5z$P>*%OB7eMvql}^ zxfWFqr8u#g&pyYNp4}6!aq^bbR&>sIZ`{`S7+ze>WxF_kKwrqk$0@NIfugU^x0V{V*eb~f`*!j2T{nAz^tdo3THoSw#o`!m zVrT}kU`@u`g?`5VHWS!9k;yqr);3?bO45}dKrqArB27OK(j-A;8tH=ROW+~F%9?`Z z#I&kZR_ikngY|HTy0wxD_j<&k)%bOXwSgY2AeTsK;^R`4-Wg#DX>F6|eyN=Ab&Z&AvTsS%Ud@7et{$QL@d${8#SeBZPeN9p9-6D`h_{!4no3pqskj zUN0$#*thuRP`8X{Szpv50=wa~28qUJsq$)yZo4ABA1775e%2wU2`;YumS|II3A(O; zWhD;*?1pzA-Jf*QzZ16}^W(;VO|J2-b4LIk9h{^YL{lXQzlenom?ZpXSrZ(fhKMeAZSd z>}IqGVA;9044HZ{chnU~TjeR>x^OZVRxqk!HGaPJR|W;T?mvFk6Ys&W0bP1>C2IJj z*kq~~#_jPv?&wF#O-Bj^wJ0@fAifJ=wN?td&~`{#)GXHKuNHwj@+oy@;K@gfNg1-0 zP}f`W*`=v$V`K+tELqOi&mGv|;DdEF-k}eF|1CI^?Q?I@et%R()Y8XYq+8*2TCs``b3rTFWg=!4tdbCiP4}~lxacT$d9epHGFYYon9tWgtp-=!lolt#n zGp3-^K#ubXL&t6IJ|dNv_(D^aZtFrq1S>JWv2gHo&>`eN+HJ&OrO|pF&-ns=h+l;G zn|xc&^HtHhmit1ruo&r?#;2)v7a%VmF6r5o6oEyWNffKuyhhcfw;-o(L3EVQn=X(N8Ioaa0EgP=MWuP#f_;z?Q z`g}bV^6uEjsvbj=BVz7SLVRUQn+vy_5)vDx(qCu#N5e0-z~@`Q#sY}QM$KS4fKA#LdWy=n32MtF%B2TExbZZpRXs&9njqa7I_LhkLii#dODRiDBQul8etgyD!oc# zw8bPK=uFI5gg-xL7%Jb_cRs@S!=PAsdVq~ke{f>EFf?jRhB{A$#od9e=k6yZ0^Iv) zHs|`RDXl!=)^ijD*<4-80)5WHLJftEo=<43o4x+UT*up%Rnnu%^M1RiaT+?}>3Jgz zS-H8Nu$b0li5NbUSZU;v`e>-wQ_5xjE}y~V8KUVMd6kPu0*+OYU_3vcLElMJarfuieeQVlDj>L+`_h_dt<8^k1r#%-$)A#@HzB zETZ>w;k|)n-|3C5j@Pk}2%F3Z&c+!t_chXrIhDmrQSug-%0shnGc*>fLoiJ=8uIvT zA>qhmICMoS`UX~h4$QpcZ+Uz|ySk4-MF>_n_TR8HlGUl%ItN-TvCy^pe3xoe(m@valU zo##Jhu|ieJWo+e|70&X{Qa8ltr6yf6beVihu^7EpPgMQd$0|)mb)dVA4$qkDw)=1w zzH`*4D}S>qOXmzF&Vms}!UsD;sb>OXS4sqA`7|aO&vKr8gAUSdcdxyOvOSDC7^W5! zDC}7ducw>6zpa?U7q*iML)oSy@s8E_)A0USs-XbPM^}aCSbfrj!bw|W+*jGdsMM^v z8h4w1J+ZzbSqvXZkZNb47_Q;^F*?>jc;6f)Q3{M=Vh@r5qEa9O{vQRtDIz-h+@C{9|Pw+ji zMpsVt&hQ?pQj1|P!lcxM6TnHU&8^0)W)Kg;({OjOJ_34nOE)m>as37``}wdIg#=R(ju|&653e~WGsnw#i*!z& z1~y~XWj2}s-4${NVUP@#6R7Ef6dmr(E$9E;40Lbi`q`?8V^pXH%1(O)b9}4~g0$ws zP?$=%n%ztsWW*F*9dy)Z^Tn!3f3C1logu`^m%^gAL^7jYD45XgRBf{fVLF%dSm33~ zgvaHx#a867ZD#}9D9M^<7Pdc7w3`WK&mg*3fE(9>4TR*Pc&ad>RwIQt#T$%Xd@7c( zmCu`7(s_-V5ehP#zg@BsvV3k#nDl$Q3a7TGBP?=nF;wkOjl4_EuJgl7zsLcDC%1?V zJU0>jOkI|4GdF}v0za&$s8NU1kx(N7(zd?-=!&0&l*af{&SLG-aS+PG=F4D>+-9^LuQEHe( z&HkCrNQYJ>x2^UWPkUE=aN66ljDHjDi_RMbqF7#u57CY~w%_5y0)~XNe4mc>J!jkL z>`kbd`%aubXEw)L3~}3^svMe(Cc7(lkotJ{k1vd8Z*z#7Hg@!dq+U?b57ECS0C4oZ zb+Dn^W8?875iU(jj$%!>SlkJL%)xvc;c{^Dff^nmqx#P?8Sf_MY<4u)NJb8NFT(>4 zaxp{*rP%~1dkoen(2enx&}uJ@2!UGObcP`!WGRj_p9wgya2p*$L(mT*MKf<UIbH=}JsepLQ#!9j_J9}{FU{?D*EVgM z6!e+YN~qOeF$bk^g*_p!DUvMM;DCG@mXsBIx7bz4?NI(N9yU z>!q!1)L0Bd;~y}ehE<%97-lPKerfllqdiLCUxdj)OSNA2xp9nR?}yd93_63-9z5~Pnhej$9in<@7X>( znvzfvPywuVhN+E|7HNxGo)L4YbxUn(Y-P0^a?K#!sTmvAoz=WqOByQXq&~G7JLo5~ zu(o_tc6Xph?#fp#Gmel~Px@WvkdJPLLLwWPN##;~eD;?>)Ur$E{5_CB^a!IY=THaZ zBflp6Lq|ms=xhO)Ckc;=%3|Kl%~Dn?{CuzL;h-F#xKbt4Ch1OIn7|LFkVRp)d|6P3 zT%yf~2i1HMKBe=zpyZxYRVxoh1|4Tf;~XTbvI7n;wCf-DGMs0N^Ia-D)ixgPE-h`q zD#z27Ca>U+_#Km=UgDqqqqcKVG&Zxcqu3UDFBQQA_2!d5(OC(WD>A1eSS;^ZwQ8+u zl4` zi)9kFd`7Ndg?JQEaMx+2+UYXka>DG*fEAUn$gRjyKK|LvPOg|U!CFaC6AN`}$!r*z zBx}Pps9qb#a-h7wP)F^sker#7u356v-ME2B*HeNpIJJRrxg`4WEj3}QgmlU{sBM=f zil~m2Z1qRF@54``CFQcLnr4(z1i*-M6F{k0OT1Lp$F(7IcEAeL6p1PjMF{acAm4$% z#-I-UQ-$#I-6>3K9)lC7t) zOd8S#+6i+S#sHMWZSr;wEIDkZdd1_gDQ+tpYxIOo?pew3QeqqkaEzb`p}F@Hr(puv z6v>F5cTgQ850ps?B`MJ(H+@Z{d#k#P8DZQnLjLN`G6w$@QIMA_mfgZj zE=K40KqrvAVhzoLbr4R9&`WapzB9PMH7z#yK1+4*>~NR!j*%7bQ)?$sEMytY{;V`* zGWHf*I55V>M+P6mxr82DEfq4dsbgDlxA}zF(AwDh*>FaZ?MoAjc!24~&*_@|`q9`s z${W!{tRvZL=tK>iOOrej`CKd*WK8i>LVeC@pjD;w<^%83s#e94R#{tS^|vV2LL*{T z@nA@yZg`Cg-#cY>v)1Jp>$ztmWI|p;B#SjctU`%%rv7w0K4v#uEtCfmz@$@;L zM?bE3&hWx0HogQkmO>Tp2J~`oO?lo1NpV@+&kmPKDPa@mEHbK zZ@goM)o2&J3~&K}*8`Sa%a#2VBGQkS=N1jl^h@N^Lfx_7Nj9*94yOhvAwv-l&Oi7{ z9)D0pVTH`i?Wz~KV?J&M0*916qoS=DcW;hy8piXd-=chBe}64uHrj2y+|nc#f}e}x z0{-eMCJ+x3IA?Po6qK}2R94yGQ;U##1A77Wdd6~ZZIWbl$tj8<0D?)4t=JIGMGC!h ztbno1(%(C#o*N z;(?j03EM{wUd5rk-ASn3_W312EUqy_Npx|tY_08st>)__%;vt$=g40%5$ie<_TWc5 z0>i(vbj3kQgnvsK;I+uKjk~G2xdK@6fV<)m%#2B1WBgAkSimA8J47P$`ZYIWcd)I;D)?@<%*4fP7a2foJ zrj%W95E84@KWRZwqL{RjD1w1|y9Z>j?kP+(@OF2_B!h7mdpA2Go9=`4brGvm{$s&3 zXBy+-)y@(eKB(Xga(EmLDpU@&gJ${qjep~}**&74%*`irSs-&Z{qTa%$2K(_1m`$-1=Qdp`#Pp`ZrU5m03R-{s!sc z{pF07~HYtw)AMP zqC_|QK3+9ECmC+(6~*7FfyWzTqd@V9$1jYNcygrh&}EWdZ&lFYBVMU@R|GyRfx5D7 zzkug-r#*W|4x^Nv4hAHj=!C(V@3Lqg!&rDg?tI=TJ9*71k2D+@mV zVAjVl%Ix3etr`xb(cYU@TJc{u=&j=!-(9az`}RWbVqTE2IB>vqJapk88iP z`_sRACL_G&QUM-&-cKT4AI_Ta#})|*UD$F{Y$8lSr1k6;e)<6-%)e^Cx}Te`ng z@9ze~jX~sV3mZh8be|t<1+<1mW)fql7&;0F--H#6R~i%0`}j+~#}itNb$0FRqlHfjG-hRgd`dbB#A@54td z?dGEM7dHC$62gx7C)`p=az!zc>|};zv3eJ4S8jQoz`Nplc5?n-thQYAUVfNn0AEWGiir8SAIhb9`N_j+bA8;E$1bjJf+me@Dun%jQv6 z&;bVbpR^Wy_d8Q)o7IJ}oOwyOv0a~TY&d?7!euSpKY);+8S9xF#F=>m|M$sO{2fm* za*)rkOrReU2i^tmA;`(5`rjb@b7zN;x<3GW!D?(m}`#pOif38Mef z(DYOLQ`|wzH)?_ekuI?E6o-%Ca&fXuK@>C4ozFY3x>^CsyiD!58@HvVq#T^r{7=K9 zquX-Q2a^ARmi^y1?Ekz8Rnw(I70pEMJ8?ug%5T{#3pFjzWZZ!7ci~y9=c=|0ZXnE? z&_OiCd$XF?*2Xi*^f#UHSEKk_t>+(@c?TxV%zyzq0&*+xTo7$8L+=T&o0M5_OIe?Tn6Mz_IfB zcz-`;+gKxalEaNBq37V|Rv0f?poA;Tm&V!^`D%jHXU&k_>?;jvl9Y!u+yq-OjHW!f zG7)m8ibgZLU#yh-y?*#)%>T5P=s&G$$EuSPG@FmucG+z(m9an=Gsug&)iMX01F$*c zjPFoYTX1xuj%By|CD4A;4u;HhF=<*$T+8bfPX`BBUt~B@V9?L3P8Zypi-%1Y zhO4{z0tzdN0vV>lN(mjwdd6MD8{eC|H`B8H?+?SNvr+J3x`rQby)ZXZb9JOc+79ph zFD1E9!!$%xjS7#KTlp$oWu$1P=PLs!KZzxs^cD%S0bpXN&^Bc-Z~Q`J&Nw8dSX^7;GnG=Co_W$#j&LZ+h$=5sbN9Yw2vIU3b%Qiu4g2g@K`umlP3H zfwMKXK(L4x-_an!@E)piPN8mQzkbfLnH9T`;J6q%KkU(!Q5ZOIqu~8JuhKJQO8eeg z{WtB_Pq7L1e0gYNInpv(cKf0Ea0F~)K}g!QeEcCKOQdw5se{2TQopZJ#71N_Z;!>s zPcSuS*iWR1xMZ1?7AQRMyK1JHlbO{;AzSJlnq~AIZv$(X%wjWr|1a( zLa`hcvxRXM-%W68UvNp=%e(e{<_MNrK*Es=cq&_?pwfNP%(*u;vZvzV>S_-`p0ezQ zvpaUsNv}mHpvZD_H4e{eLUp51F2({sKI@CJ;kny*n@g}*3Oh}rmAa$)RK6jSO0C2$ z+#q0NwFGaaN)B21%v$&4(+1tWS8SvxtHC2J9dKJ1Sh)dv%CC?&j<}MD<-yAsDH>uv zl4}AqoHvH>-!{8|#8g(^s<mzB2+}Gq`Z&n<`GWZ?ji?6Yl+Ab-OnG_;M|lJkd-R@R(Z14R@c-l zi6axYgwh}Jn2bXa(C~Izpr#H>sQlq*qqDO~Ur16i3@6!b+Wacf44vPPVC((+_ihg~ znWL@7kdLgEiNR?2d)5Yv&~($xi%hklSmei_&`c~C3OfI^{~q+cx=k2LPQJXNBy!*o zCpHK>E7jkUOidQ=X-5_FJm137 znPx1Oq_F8pwMbQUqR}TJ#r!(yxIoU)%&}&Bs(vG3Rn{G`wey;ogX|a|4JbGVe2|dy zko){wItNt5e{S#nm`4l>S$7RN)4)^^jT<)FQn|}M#!e05>oE@5Cc@9k)y+Bz?Q8EQ zEK_9*g+ss~I0W{24Yk0`r1+jT@`bi37w_f%BnXOz*+)zKnn0qhAAJ}8 zDgb52ekNaX-9TL5{TmECqGG242_eBG`V9&%?&9V;q~Py5&^sR_og6qTF@4y5Zy+Ay z88CsA2Wjr8gzk#kWPg7wksntq`N{ipt1VV-{K$4_3v--UIX8e3cvY7Yb10%MbSai( z-XDpw#%Sg@fc`~ATU{swj|=VRiBHiiuCU+350fH9Y~xU4sbJ}A*ln;Zsa!glupSTp zCEzH*cy*4waN_5Bn3z#G`I{Pc*!xdT-mqKga)zAjfxq(!$e6P+-=8_RAidtTwNkJ= zEnC*t&Y!A(h1QNvVf~C>n}zpHqBro1t}aFyJPj?(?mrCw35b_Gw~| zkI8|~7b_TSjM5a})}s&X^21-{TzE}Q<=^06K%wYo+1t9MfGEJ`0h92Q_`yON9BcJw zc}lI>;7Iq}_kJgtJ?N9@M`4kMlT}S2O1@55ksue&8>;oC+_o7hI^h1xL4@zU>Qle| zW6SeNjE{Owt9AYes*q(ws@z?g%I_lzs^#^3*aRHQdGJ%q^A(N$w0g%qtM}8f?+*rV zrvhwzrc8{xanq;{Kd%z80&aH8!8kclVK`MjgW`8$8Y8hA;ezCNoIs_`J=21V5mhaP zlDPBwS0(kivk25YB{E5IYV%E|bBl|)x#9j=7n?7643CHESMycgvic84FVpJJw*kP0 zdWEM9?f1wyG^}SXYtJ<|M_4yLLays~;`bLh-nzaQ(51GD$(v2SIS*KXN;U5wo9jHHiqKb1HGj^9>v*g^jAh*d5B?rydZ*O#h*j@`2%b>+-%G8r)O^grp1_FAt&MP%+&T z0w0up%U>R#&|39QsYQlkd9Y@2kP+(q46^@;YNZEPAET?jLhp7ZPto?OV#pO6H_Yx{6E?bN$=a8A%0^xsODqth_2@c0T{bREZ8*XIN)H_fV+qWzq2m&9U?c7E0NE)F!f zKCVZVSZCJt+MVHPB8GtcOmGEU$b!8Z8yl$>mUA1gp7On053@0_(`A9)AUt#KS1a!s2wqxhD21gb% zyB3sLQWJ#9`OIVW!>lIyd5EKUS#54kIEv5+s&<7;OFov=?hX~JLo)VywM;~j>{M~j zr=+B0i>s4!JWiWfsV7b4-*s`wsXReR2`NQ7+ZR2gyVVq3`|4ja%k1PN?)pXXzPfiL z({~Dj#jQ&CcT(+xmEq^bRLC5RAyhBcuvRhhO);-(`;~dwLtH#;ye(;=*!5F{Ix%kmGBrYo2KTLJWaYaW&<9aZI@g8)WqZaWigk&dVvce2ADU4(F_nPMd)1U9bZ=uQ5puQ-k3bvWp0-vW&kg zt+1_5Jbs-C`<{~&Nw?FtYMGO@R?zX|6wHj>?2tp&VUTz<0q0W9rw->#vnrfA5OM}# zv>cAbwtRrq_LjI2U^Miq#k6;^Inds&nV_q+i`lb=%@p5Q;uj*{tssM*j# zQ|hx>hr*5`0n*kwZS; z1d)c(At5QG|E2|=Yxx>LHlo6+6FNsbU{*obHPeSW{^*&pYxyq!68KWPq`CJjb`R+(7=r8X#+!+Z#gS?Wcmnun#)BT8gb@^ynLjq zo|;tp6$9>#?Sv}|qKbf_^1QwEa#v-0wYOR_C(p`e>Li@wm(WT6)ff@}yr0^zgKl}# z(DvC+!`oc{%O0A&_EG#gooUy-gE%ghiENWp8`qD2$Thy-wsr^=2UR zF3umdvEF=_L|0-`fc#C?Gkbk3HJd?ED8^|&Z6VB~)*b=Pzq=Yg+@tBZ`=%kHU(#8s z%jKpb^Tdx0nJ?tO8KIpg%Ye2r^6j98T4gS^eB7cGIXSi8b>4L{S2+?kO0dTyXJi;J zQO!M>cAp>;E2s4!B*N(?{f*kIxEQ27x{4IS>6iP?a?~xhLmRCnO+akxBfeDHVg8V7 zKueoa*&L6;pKp+sV{dOyseg0zh2Ta^eW-^ghEM&AfG0BM`C*1@G6eDN?=QK#G7)*v zM-fuxf>Kl2$!KieAjRzYnMN@XmV*%Y-uBR=BfHdLmcack3s-vKO>AvOKT}cVA#&62 z9G$2r1Ku^?nhRhOo*(di~Q}7GfIV{ZYnBXY=ul zgU@u}ZpWx7u)r2F$RM8KA`%S~GJ1<8bZJHs)EXmf)~{o4noW-6jP5MOry3w}fF=5f zE|Pq=2=y5Ye;7%rEDFE9LAUvjG|e^q`?HkDSiZ12Ir&*C4v!|M&20FY!)bDVJTkDJ zE+0GJIPYi;LuSo)PEPpkNYG44i=aL@6hpvYY%1F37^Xvsz{e1v2i&U=eiZ3piP09p z*&`!y0DKX`5ggM$zsli8RP}{%(uWd`^*ZL6jFJ-jAe(r5Gwtc6@6>P zA@mNNkoiQdgl;(kY*i=ax8%-}9inKZ?A2cUtp_;Yp^{*BP%I~smx~cvclbr^($89t z2$p`=ir}Gv8n97ccRsPUne0ErVCkR)tpH6~nIUrRH7n?6R)f+FX&5u~a}+$in8# zkKfA5EkJzhAy}7R^dBHMmF4W~S(npt;*p80?}fEzN11z7DYeak{#PmYm~F?WcWerZ z8trnIQlcy!bQflH3(6(zGU?cnSt@9J5Gl7xj}+rmK2&x6X@^0aIbeQ9xo+-y->Gka zh26~{``gC|oi?j1M%Ijym>1l|K8O!(m4^`4RnV)xt8blUhsj4Cf2mnXol^RfBL1;(B zJ$3LcruW*RXk#689ExLI9+`^5Tpu5Bzd1m4mTgRm1uRJ06&+tgjrbmZ;|L7Z2r#$~c*1)18xM`fcsc1P10^<1dQ^S_;U+i?* z^;hp#Rd|&x{b-Ht`V^df;`(P0u{Flo4bOUlIwd3T#y9T0`y0!Em(vt-hH*fmzu4EN zcA#b}PM6niHR|f>GB&^0?h~?^o-!h8^GRGEyxjcL{fKQRMw~tj3zfyN zi5C!(CN7GR5$x8L#4`j@l4xSQ(<#_^Q%q|D?)!h{235^>ly0MkKM9yg8t@g$Q$w$v z9Qd&>0&NI88A1a{2f1waWBUAZss027yFgh9q-kL3{@Bhkap)HBGwX^n>1WwqDDjyS{R#hD;KqPGWcW6b6 zkWU>W`d0#pa3jE`Nm8->-xYBHOzC*;A3iHTi6VNCJIiM}{fFZl(JKo-egFrUwv>SD zXZSA@vn+%pj|P!H@>CGDlWV{fHuf|x{S^5HQzIY!Iotc8E4+y7zN=9-5m$a~9Z&Wy zD)>VGPoK%7Gx$|Pvzd2HG2!DwnN%X@0@;ULCG5^J3NesbkJ(+V0WofOu&Oxww3AQ+ z^Dz0JSMXXxX#+obC6O~-p`#540D;$3@WEtw>_@GYmwcaV1*Nc_E3j@hXmM(O(e|GQ*w!UX5L_{B)3G^XcVNYln%gNFpJ> zR&DO1PcZxlj5xOd1%PpHw95ig>E90wtLvE#TKS|C2|@MBVro?irfJ?cyq>s>jpWID z%Jx$2E@l;{T(~^}zLw6351Q7E?=XD+=YKD?yGTV}G<8h*v zMD9|m&P?*TnL>$(W~G0Ns2KDs?4izVW4?y8NA0VRrsyEL&jRknCH_&7wW)hO*Tul} zik0s0Shp5+ANuk+ODzP+{bD&lsA5qzt8^Ev3g`f_Sdv!LGWvJg>;5z1iEsP%y;pWx(x`zYK~;)$R2Zu&>8V zf*gaqH~6OM*JY2CcJjEr#&6Epvd9%SJas>2|I#0I78wwradSePs<`L!j9yI86SaCAjHGPM4kO0k`SCDgAsHAFu) zRZY9xFrUAmhX$C})fdE-;~ULSlar&I4|B#Vq93OUef^YVPh`A|a}T3|R5>Yj7es+? zwu##d4{rx9&TbB&ns-MucV*DK2EdZqYPn}*U2HYlZG<5sd*v07+ZvPBoLbH`Vd_5~M z1@Og|$dT}Z5w!X*x76UI6CQDxC2XA7>ig%L1W+$-DbZS=hNo0>AStUOs9(8@DXH92 zt~bl2a6Ec0pRwpW9^Luz3Gc?|cE`&5%cPtFpO<4rzA)1g+Tr^L2VGA-o78ygIb6;B z;1DUQx5V&EoFZnJsjPZER?2~dIQ9WSA!|=I2qM0d9P^Iixa+BFL9qmIi1+}AXo8c| zMs8r!6LxKo{|cw^{&?_CX-R!bTx6A88&Il!{e5Ae)FO{P zS2WkPycPN=3c4Tho-@#1x;go~`4IcDr944T5q|_v1ZxD-{frNuKzpiNt^%z!WamUo zHlj~OaXTP{0!;a$0r0ocDCPlOVyL(YbK$CHR?5c}lXx&)Z1ruA7X&)ZwZOP;H9@lz zDtT0ZnaU|+peDC`f)|5Y?6l!#6OMXB*|Z zbd0mVJ$w}Y$S1YCjS&{z(wd}m(N=14w{vlpFb-AByj|Ho{mkYoW{9zI&u-uCcAWi5 zS%m>WDf4lK^F0rSE4SLzUgSPh=U#Q)J>q%JvkuBJ@@&RSco+ZHwEZUdad)4s_7>mH z`0V#)sWJx`W?n*Fhu=O2?>X`AV3!51!?>Y~)&V-l8Vr$YAY_?JsyBhmc&c>(uE@Ae zmlI#ADSG|D8zX+1<}ky4rqMs4io5j#Y9-2l^oDyrDfngT^j0oNc>JT?t@*JU*UP+X z6^Tm1n2Vo>6)S1ZWSbJLBUeMtg1l+*>2EaqHUtx*YN}P=qx)ZrK*RB#f>g9qH7r!$ z-#V5b!$M!BJvsm7UTCrOS?mRjO-5E>;I#M^nsMpj8+{|?ifQwoER**a=M=gp6erx@ zzC`yvQSv;vKb)|j6(6A2eetgUi`=rL&*@3#-AXEtqJZMjGnU9lZ_r7K^7tk!Y80>V+Cj zf1ffCAE6tm9o_)7y?VW|bX>Qopl5S{H`l=?`pIdKK0Lu>GlO`)O(@P_Bi)gQ(Cp*- zPf>T8zQ674E;>-6AVEVGA~&d~LCdPQ>gn4TD?H!1qDkxv;;RCNHQSHL{4QG7W<~B! zL~Q!Lk-@+CxtkDKQu(yNZ=cmamcpCH40o>+jX%7_Ji-j2=N8bdvPXqI*dLf!F>O=u z;wrqm^^?XZhJLI;`>f%z4L#b;qSFFdb1b>h=bU@i?Y0=G+wDD5pLdupkv*6b*6e zXPaL6A!!j1D^Wfh$nJDjVl{_YONkDt#k)6NoL#5Gv?OhHl=B#NW~Xv<1b|%vKD;1i z9Uyy^l8bC;Q&PpDBTFk%Rke?Vd}o{OMOb}~;6E2^J~>mNX~9jx3lIu zZnVOWWmF{(3d|I+WTQ>sd+@u5SY)3yG_ZHd{LEgpItEP6F{Z*imnC7U4YgZta>2DD zyPxJBcPS6TClofB-2&QCB2f2?DP}@gI1|9f@_MH=Eh(H208Rblu~4d@MG~iD$y6E0 zoDLy>AE{z833(W|)!Vw%vso<4+T7lE#Beb=M|9vQ&NJ%`4xdkyPCMhBAe-T;&dfIz zouoF$;)~I|58CwM<`uc*o3e&Mf}|PP&$?q6osxH>Vz54rb>jHNaw7kU3LV{kRa;S7 z>RFx6RTv&}?`Y*Ml6=Pek~8E^MH{+HnE`lj|K;&;)YI*+K5&624*yoxiVhL7h|jDu zF1_hC&M%w}#=Q^4q_nAa&Fp;pRk;=UX7;^A{~9+mOJiieLf8Ckero83+qe@;{h8X2 zw|WKL%2n@s$e14_6und{CUr@3h`h-VYIGny0eVW~JOmxbrh-%!)&vCSBcO`q$Id-l zFLRA{g5BFIhgt_%AF{RR9-=o6cP~UPDE&}1nRA6AeiiTz%V@@g!gyG4LTX~gileAl z2i-eHrEDr;yLb!JoUc%| zgJ~|T#A3-`yS`222*|oFNIO1p9=Un&@@aTcu3KUT`YNifu1Q>d9-iwXeACi=;UQAS z=I_}4?Ag4{`Z)C@%EW1wdZ|FDLNFIykIQZOd)51HK)6up4qkXF&~YMMR=SciR~CgN zXXEjjKI+jDA8i{PC-53yrmThF&g_veQkgzlKxMcyEyDcK3QuAO+vy2u*R>$HP6cJzt9xKJU5gTY2*dF12n*XBhf6w7%(x%i zec2A4#Wh^c!pn zO%nN*$KJs)igwbrzrUK}IM{%Ywz9Nyw~yV+Xc4RCw-$}kZR6qoxgy_``9$E`k!l7( zh{{-@+}hvgHe$EuMVkNw00J;aQ10z(J(9wSY7bZB{AE`dELLx2`8O-00s-C04n3{7 zLsd}A)_=!>U~4g2T2{%w{pjGqWwDVmo-$!Hl{C$th3Ne?*8B$O!Sm5X2x8Q*fd1Vw zt}8dj<@M#VKLXT7^aRz|KZj7kJ0tc{zhKrKO)rY`Z%zFt7n$N_c5>GoCpvxy3* zTeYemGY2dWVEi!Na_90ru1<-1i%+3D&m_`<7OT1wHNp(Yw1k`ZeklT7GOx}lA#ZsO7jAYf19QY~pe zPge!TDOu+!lkMsmm$BL^Q4+=Tn#poddMUazwhPAkTHVSy)BV;uuHN2C!!Lu*`Id^C zYQ=arlhF)sbhgMzg4_BRUj)*y)Hr?lY?($d&!XY?Jb}x2U|$e-ITRLsV|}pNs2Li* z?+MAzImX`Qb^PKC;;~t7f3l?NC!ZeLz-%C_z1cHhc^y9qG~Zo`UD9;RxlMAfe=*av zXLcZ*p{yDo@HNBNH0Tv-Ge`lfQ#y%UU$TdxWo*<&3o^=9Z@)oKq>DWlBo&f4R^l%# z72eo>SZsl~(13SoePMbvw8$&+x^>gEi+% zW{XPo1r7Y5UyJ{+ZXncfl+~O=fSc^>i1&x^h-Fgvt@0y8ZhDq}*SCksfrL7wLnnkk z7&2CGQtQTpLz75D>j`YwHB?Qf?SES8R%dEQCad?M#r5X=r?<4_IIXHO32<5l55b8Z zgvqrEwE`qkOUyhTJp6L7#*WO@LaT~-UVz}nlET6S zE_mqmfiQA<%!Qb)cO$fM5whHcKb2)G6RPcz_l~cGd_Fo9z5(`%_Bb_a0$v2YjrJ<9 zG6hhkEeqLd)rY)E)X5zFcLQEK(z#1tL{RZ_xD;4fIdI#qORmFYco=^D9p=gK`ORMu zBx$0+a2pfl+q)c*=2CEYg9*<`N8dtIMp3 zQmZ=S2NjrpG&Vfb*3n-7od1vnN1ssZh~?tr+Ux|7w9X*F1kJ2fB$1@y%@I+)AOj zvb8slf4{D1z=eEFK3sEj0!u9Y|BX&`tMcyz_^4ZcN30jgfOF zIgqBFmx*IZZuJB@v75mP1eOa!CxPXD;>h9s=&Ypl|@RlhLIAb#5}RgpCm z9~JH;CR^)+#WSmlrFASM6mdKB9FhUDZ3DD&><*0}uZ8?ZxzW^SnK+S7&w{(oK0kV# zxYy=Z-@JHYn@lSZ35a6Qs~>6qrMt-EZ&>N<$Rk);U46qRk{;RCb4o`16GL-XSG$cw zE`xZ8e!E&}E!39o?>9cv!0R{%j-mb;@$}$)iMM|i9j*7A2?FrKhy?fgXqOfNRAA|X zd`{rFn^X$j)9~n%2qmff!?p_pKlJk2T;}yqrssFuUr+F~n$p&lat9yqI`6Ew*n-}V z5e%~#Yi~;f!>gfxGo5(bj{pwj=N;&lj+6Ed0lwDRMkL)H6M>*Jj?w z*H;*F?ewk%(iYH2w0?Q8k5Q_ukk~>tkx4oIY@{X@4yQ7&A9K$$^sfaYADenwbq^xp zKbmW5dImX+<#l9TuJ%1%%0-nI{R)vcSB)cFTaBdU&9R)?iSc{PZ1cc&MemTF7@W7t zFtC$(4qLU14hLRI6>6=-_u9ySym}A98C$V2CK^gkvv=$19hZ{(TRzfy4P&abkh|5f4%U|)01V?*Bsp=t`L@0cP8~~N7wG8hy5x1 z1*`0v5kJi39dNk5Y4v`M>RS#mUIIQ(s~j}*rigeMoMypq+cP?7-I4A}Nf$XWfs z-cwgy-?lv=;S8QR*vhhTzzbHNRe{6E^&tY3Wae&Kpsmn|LxrIC*~cjP z^0V)WemC6ntc3!lS3VpxTk|J-{X>mA){(50Z!_t~^)5_POsdn#Y8{eJo6Su3CIRE9 z4AvIu+aL6@c@>UQYo(u<%)C$+o*6i;zE9@EE_8Zpu5>&0U3}6GN}+~3U`7FhdZ^(b zk%_U{g6DZFTcTf^ho^td=9&9B3K8d6ViG# zByb9$a0_RI8#AY?a82fGaahZc^^R3YGG{x|hU+irDKRr872cBJoQB~;5u^6Tjw5Xr z|3gI+IdH$}bv?x(YPzBnV|l4B$QO-E4Gk+1V^0rVtH)kM?7zi);rP{=3XvEEa7Pj* zorh4SYVxt;NQo279=yaI;Kj3rEasVcm9YeUK(NxQ_4a}Kk8p@MK zQtdu{P@`}m|Ho@Oq6O+xyU+idam})iy*kON+xFT2;{BlwIOKuBEmvunaw#?(CdMx z+`s?k{{A~Bp^qN@8+Q;jjk7fxuYuM?RRv0PUlH-{_2~Qk1L^;59G(7I4#^(KRkBtS zG~f=LQvo`@I!f{rXTNff-`?FZ3drI{c36MN60&l$NoFxvv{6}P1CH;7|A={Cgu{V`4A7D zZPfev3G+V!7rqS-1}>b~-oX)y9%+DUwpkd_YR+U)L(|HlDE0C2@yd)(s4(`AEo}(7 z^C)M0YU*Cbi@!%4I!x_b|ICB`Q+pZ%f*h;fMFfM!JJ{_ux#nT&_9!XCUo?46{JVlk)6rjN8J3UNYFi;t~dXe@LF=_G5DhaezIJH%>Hue_Vw=hHt$_%#(+= zw5W)Wa$HF6zxMMJTaj<>rDbIbWo2cFeVrVT7UT{&);Tr>#y;z@j+AK`3lHi6;T*<& z7OFp_=xD33$P9vSCqiha_m7F3et~u@tOW-_^K=L*iCQWu7Rw1IjI9lBfgYP7I=aU6 xy}wrS{dd(3KOQ03-`Q!jmEmi=W{SP<>E$x{|5nubIkw% literal 0 HcmV?d00001 diff --git a/examples/tools/tool-package-quickstart/my_tool_package/icons/custom-tool-icon.png b/examples/tools/tool-package-quickstart/my_tool_package/icons/custom-tool-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..06ad3e4a2f4e62e507fdd1d7b169d7f61d4aebc2 GIT binary patch literal 692 zcmV;l0!#ggP)Px%Zb?KzR5(wi(_2W>VHn5p?|+A!xj8Mf@=%zzAdNBu3rSN7D^V)+qO^-5P$9^u zZbZt!45F(L^iohinxe?zdrE?Q25Y9_sBeX$)S|Bju8^5A>I&3 zbf`Z^b_aPymVr+bR<2f=a5ogYT}SHPO_=9In%_?{GHK^x@;1&Tgs(!Dfg)occ2UN% z;3O+PggKjohMp-VW*2eEGNM!B_3cFOz@jKo(K1YKN|>kMdd&c1GY-zg1=BTZAw0;J z#_ma8+&a7(u-omj!=7vE-u2 zXd?HJkEfud#fC$aJV1zENkNi7oo0dTq$uxz`y~dX&rzusNZ*r6@3(g1wjQPH zYbzSndNQN0{7Ue%xu$nhJbq(lNt6&JiQsJ|2ns8yh8&s(syQ8#M_q3PS|2@kQlG5` zR!*t1vlRQ1l>^}^yd7&JVMiM6!;Sc={kRZcv^H>~HWQ0umb9208hfkB+Mmyp?s9ZK z0o>30hXe&Rnan$8$k=zD`kpGz#^+<~C`YFW;6Zln+6g3C!o47ZAmHA7K~NyO?*svb apx_7gX)NGSr-_*W0000 Date: Thu, 28 Sep 2023 23:45:09 -0700 Subject: [PATCH 14/26] New PF Tool: Open_Source_llm - Dev, Test, & Documentation (#531) # Description The open_source_llm PromptFlow tool. This tool allows users to access their Online Endpoint deployment of the Falcon, LlaMa-2, Dolly, and GTP-2 models from the Azure Machine Learning Model Catalog. More models to This PR includes the full functionality of the open_source_llm tool, along with quality assurance tests, documentation, and supporting common code. Screenshots for the tools appearance in VsCode and local test pass results follow. # All Promptflow Contribution checklist: - [x] **The pull request does not introduce [breaking changes]** - [x] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [x] **I have read the [contribution guidelines](../CONTRIBUTING.md).** ## General Guidelines and Best Practices - [x] Title of the pull request is clear and informative. - [x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [x] Pull request includes test coverage for the included changes. ### Screen Shot in VsCode image ### Tests image --------- Co-authored-by: chjinche <49483542+chjinche@users.noreply.github.com> --- .cspell.json | 3 +- .../open_source_llm_on_vscode_promptflow.png | Bin 0 -> 71130 bytes docs/reference/index.md | 1 + .../tools-reference/open_source_llm_tool.md | 65 +++ src/promptflow-tools/connections.json.example | 12 + .../promptflow/tools/common.py | 9 +- .../promptflow/tools/exception.py | 21 + .../promptflow/tools/open_source_llm.py | 415 ++++++++++++++++++ .../tools/yamls/open_source_llm.yaml | 25 ++ src/promptflow-tools/tests/conftest.py | 14 +- .../tests/test_open_source_llm.py | 180 ++++++++ 11 files changed, 739 insertions(+), 6 deletions(-) create mode 100644 docs/media/reference/tools-reference/open_source_llm_on_vscode_promptflow.png create mode 100644 docs/reference/tools-reference/open_source_llm_tool.md create mode 100644 src/promptflow-tools/promptflow/tools/open_source_llm.py create mode 100644 src/promptflow-tools/promptflow/tools/yamls/open_source_llm.yaml create mode 100644 src/promptflow-tools/tests/test_open_source_llm.py diff --git a/.cspell.json b/.cspell.json index dace721b1c5..54b272ce998 100644 --- a/.cspell.json +++ b/.cspell.json @@ -127,7 +127,8 @@ "pysqlite", "AADSTS700082", "levelno", - "LANCZOS" + "LANCZOS", + "Mobius" ], "allowCompoundWords": true } diff --git a/docs/media/reference/tools-reference/open_source_llm_on_vscode_promptflow.png b/docs/media/reference/tools-reference/open_source_llm_on_vscode_promptflow.png new file mode 100644 index 0000000000000000000000000000000000000000..8d6afabb69d2ecee09aa85a38211b332d70a39c1 GIT binary patch literal 71130 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 str: + response_json = json.loads(output) + try: + if response_key is None: + return response_json[0] + else: + return response_json[0][response_key] + except KeyError as e: + if response_key is None: + message = f"""Expected the response to fit the following schema: +`[ + +]` +Instead, received {response_json} and access failed at key `{e}`. +""" + else: + message = f"""Expected the response to fit the following schema: +`[ + {{ + "{response_key}": + }} +]` +Instead, received {response_json} and access failed at key `{e}`. +""" + raise OpenSourceLLMUserError(message=message) + + +class ModelFamily(str, Enum): + LLAMA = "LLaMa" + DOLLY = "Dolly" + GPT2 = "GPT-2" + FALCON = "Falcon" + + +class API(str, Enum): + CHAT = "chat" + COMPLETION = "completion" + + +class ContentFormatterBase: + """Transform request and response of AzureML endpoint to match with + required schema. + """ + + content_type: Optional[str] = "application/json" + """The MIME type of the input data passed to the endpoint""" + + accepts: Optional[str] = "application/json" + """The MIME type of the response data returned from the endpoint""" + + @staticmethod + def escape_special_characters(prompt: str) -> str: + """Escapes any special characters in `prompt`""" + return re.sub( + r'\\([\\\"a-zA-Z])', + r'\\\1', + prompt) + + @abstractmethod + def format_request_payload(self, prompt: str, model_kwargs: Dict) -> str: + """Formats the request body according to the input schema of + the model. Returns bytes or seekable file like object in the + format specified in the content_type request header. + """ + + @abstractmethod + def format_response_payload(self, output: bytes) -> str: + """Formats the response body according to the output + schema of the model. Returns the data type that is + received from the response. + """ + + +class GPT2ContentFormatter(ContentFormatterBase): + """Content handler for LLMs from the OSS catalog.""" + + def format_request_payload(self, prompt: str, model_kwargs: Dict) -> str: + input_str = json.dumps( + { + "inputs": {"input_string": [ContentFormatterBase.escape_special_characters(prompt)]}, + "parameters": model_kwargs, + } + ) + return input_str + + def format_response_payload(self, output: bytes) -> str: + return format_generic_response_payload(output, response_key="0") + + +class HFContentFormatter(ContentFormatterBase): + """Content handler for LLMs from the HuggingFace catalog.""" + + def format_request_payload(self, prompt: str, model_kwargs: Dict) -> str: + input_str = json.dumps( + { + "inputs": [ContentFormatterBase.escape_special_characters(prompt)], + "parameters": model_kwargs, + } + ) + return input_str + + def format_response_payload(self, output: bytes) -> str: + return format_generic_response_payload(output, response_key="generated_text") + + +class DollyContentFormatter(ContentFormatterBase): + """Content handler for the Dolly-v2-12b model""" + + def format_request_payload(self, prompt: str, model_kwargs: Dict) -> str: + input_str = json.dumps( + { + "input_data": {"input_string": [ContentFormatterBase.escape_special_characters(prompt)]}, + "parameters": model_kwargs, + } + ) + return input_str + + def format_response_payload(self, output: bytes) -> str: + return format_generic_response_payload(output, response_key=None) + + +class LlamaContentFormatter(ContentFormatterBase): + """Content formatter for LLaMa""" + + def __init__(self, api: API, chat_history: Optional[str] = ""): + super().__init__() + self.api = api + self.chat_history = chat_history + + @staticmethod + def parse_chat(chat_str: str) -> List[Dict[str, str]]: + # LLaMa only supports below roles. + separator = r"(?i)\n*(system|user|assistant)\s*:\s*\n" + chunks = re.split(separator, chat_str) + + # remove any empty chunks + chunks = [c.strip() for c in chunks if c.strip()] + + chat_list = [] + for index in range(0, len(chunks), 2): + role = chunks[index].lower() + + # Check if prompt follows chat api message format and has valid role. + try: + validate_role(role, valid_llama_roles) + except ChatAPIInvalidRole as e: + raise OpenSourceLLMUserError(message=e.message) + + if len(chunks) <= index + 1: + message = "Unexpected chat format. Please ensure the query matches the chat format of the model used." + raise OpenSourceLLMUserError(message=message) + + chat_list.append({ + "role": role, + "content": chunks[index+1] + }) + + return chat_list + + def format_request_payload(self, prompt: str, model_kwargs: Dict) -> str: + """Formats the request according the the chosen api""" + if "do_sample" not in model_kwargs: + model_kwargs["do_sample"] = True + + if self.api == API.CHAT: + prompt_value = LlamaContentFormatter.parse_chat(self.chat_history) + else: + prompt_value = [ContentFormatterBase.escape_special_characters(prompt)] + + return json.dumps( + { + "input_data": + { + "input_string": prompt_value, + "parameters": model_kwargs + } + } + ) + + def format_response_payload(self, output: bytes) -> str: + """Formats response""" + response_json = json.loads(output) + + if self.api == API.CHAT and "output" in response_json: + return response_json["output"] + elif self.api == API.COMPLETION and len(response_json) > 0 and "0" in response_json[0]: + return response_json[0]["0"] + else: + error_message = f"Unexpected response format. Response: {response_json}" + print(error_message, file=sys.stderr) + raise OpenSourceLLMOnlineEndpointError(message=error_message) + + +class ContentFormatterFactory: + """Factory class for supported models""" + + def get_content_formatter( + model_family: ModelFamily, api: API, chat_history: Optional[List[Dict]] = [] + ) -> ContentFormatterBase: + if model_family == ModelFamily.LLAMA: + return LlamaContentFormatter(chat_history=chat_history, api=api) + elif model_family == ModelFamily.DOLLY: + return DollyContentFormatter() + elif model_family == ModelFamily.GPT2: + return GPT2ContentFormatter() + elif model_family == ModelFamily.FALCON: + return HFContentFormatter() + + +class AzureMLOnlineEndpoint: + """Azure ML Online Endpoint models. + + Example: + .. code-block:: python + + azure_llm = AzureMLModel( + endpoint_url="https://..inference.ml.azure.com/score", + endpoint_api_key="my-api-key", + content_formatter=content_formatter, + ) + """ # noqa: E501 + + endpoint_url: str = "" + """URL of pre-existing Endpoint. Should be passed to constructor or specified as + env var `AZUREML_ENDPOINT_URL`.""" + + endpoint_api_key: str = "" + """Authentication Key for Endpoint. Should be passed to constructor or specified as + env var `AZUREML_ENDPOINT_API_KEY`.""" + + content_formatter: Any = None + """The content formatter that provides an input and output + transform function to handle formats between the LLM and + the endpoint""" + + model_kwargs: Optional[Dict] = None + """Key word arguments to pass to the model.""" + + def __init__( + self, + endpoint_url: str, + endpoint_api_key: str, + content_formatter: ContentFormatterBase, + deployment_name: Optional[str] = None, + model_kwargs: Optional[Dict] = None, + ): + self.endpoint_url = endpoint_url + self.endpoint_api_key = endpoint_api_key + self.deployment_name = deployment_name + self.content_formatter = content_formatter + self.model_kwargs = model_kwargs + + @property + def _identifying_params(self) -> Mapping[str, Any]: + """Get the identifying parameters.""" + _model_kwargs = self.model_kwargs or {} + return { + **{"model_kwargs": _model_kwargs}, + } + + @property + def _llm_type(self) -> str: + """Return type of llm.""" + return "azureml_endpoint" + + def _call_endpoint(self, body: bytes) -> bytes: + """call.""" + + headers = {"Content-Type": "application/json", "Authorization": ("Bearer " + self.endpoint_api_key)} + + # If this is not set it'll use the default deployment on the endpoint. + if self.deployment_name is not None: + headers["azureml-model-deployment"] = self.deployment_name + + req = urllib.request.Request(self.endpoint_url, body, headers) + response = urllib.request.urlopen(req, timeout=50) + result = response.read() + return result + + def __call__( + self, + prompt: str + ) -> str: + """Call out to an AzureML Managed Online endpoint. + Args: + prompt: The prompt to pass into the model. + stop: Optional list of stop words to use when generating. + Returns: + The string generated by the model. + Example: + .. code-block:: python + response = azureml_model("Tell me a joke.") + """ + _model_kwargs = self.model_kwargs or {} + + body = self.content_formatter.format_request_payload(prompt, _model_kwargs) + endpoint_request = str.encode(body) + endpoint_response = self._call_endpoint(endpoint_request) + response = self.content_formatter.format_response_payload(endpoint_response) + return response + + +class OpenSourceLLM(ToolProvider): + REQUIRED_CONFIG_KEYS = ["endpoint_url", "model_family"] + REQUIRED_SECRET_KEYS = ["endpoint_api_key"] + + def __init__(self, connection: CustomConnection): + super().__init__() + + conn_dict = dict(connection) + for key in self.REQUIRED_CONFIG_KEYS: + if key not in conn_dict: + accepted_keys = ",".join([key for key in self.REQUIRED_CONFIG_KEYS]) + raise OpenSourceLLMKeyValidationError( + message=f"""Required key `{key}` not found in given custom connection. +Required keys are: {accepted_keys}.""" + ) + for key in self.REQUIRED_SECRET_KEYS: + if key not in conn_dict: + accepted_keys = ",".join([key for key in self.REQUIRED_SECRET_KEYS]) + raise OpenSourceLLMKeyValidationError( + message=f"""Required secret key `{key}` not found in given custom connection. +Required keys are: {accepted_keys}.""" + ) + try: + self.model_family = ModelFamily[connection.configs['model_family']] + except KeyError: + accepted_models = ",".join([model.name for model in ModelFamily]) + raise OpenSourceLLMKeyValidationError( + message=f"""Given model_family '{connection.configs['model_family']}' not recognized. +Supported models are: {accepted_models}.""" + ) + self.connection = connection + + @tool + @handle_oneline_endpoint_error() + def call( + self, + prompt: PromptTemplate, + api: API, + deployment_name: Optional[str] = None, + model_kwargs: Optional[Dict] = {}, + **kwargs + ) -> str: + prompt = render_jinja_template(prompt, trim_blocks=True, keep_trailing_newline=True, **kwargs) + + content_formatter = ContentFormatterFactory.get_content_formatter( + model_family=self.model_family, + api=api, + chat_history=prompt + ) + + llm = AzureMLOnlineEndpoint( + endpoint_url=self.connection.configs['endpoint_url'], + endpoint_api_key=self.connection.secrets['endpoint_api_key'], + content_formatter=content_formatter, + deployment_name=deployment_name, + model_kwargs=model_kwargs + ) + + def _do_llm(llm: AzureMLOnlineEndpoint, prompt: str) -> str: + return llm(prompt) + + return _do_llm(llm, prompt) diff --git a/src/promptflow-tools/promptflow/tools/yamls/open_source_llm.yaml b/src/promptflow-tools/promptflow/tools/yamls/open_source_llm.yaml new file mode 100644 index 00000000000..f5bbd809164 --- /dev/null +++ b/src/promptflow-tools/promptflow/tools/yamls/open_source_llm.yaml @@ -0,0 +1,25 @@ +promptflow.tools.open_source_llm.OpenSourceLLM.call: + name: Open Source LLM + description: Use an Open Source model from the Azure Model catalog, deployed to an AzureML Online Endpoint for LLM Chat or Completion API calls. + type: custom_llm + module: promptflow.tools.open_source_llm + class_name: OpenSourceLLM + function: call + inputs: + connection: + type: + - CustomConnection + api: + enum: + - chat + - completion + type: + - string + deployment_name: + default: null + type: + - string + model_kwargs: + default: "{}" + type: + - object diff --git a/src/promptflow-tools/tests/conftest.py b/src/promptflow-tools/tests/conftest.py index 044f4c7bd0d..013ce5a25c3 100644 --- a/src/promptflow-tools/tests/conftest.py +++ b/src/promptflow-tools/tests/conftest.py @@ -8,6 +8,7 @@ # Avoid circular dependencies: Use import 'from promptflow._internal' instead of 'from promptflow' # since the code here is in promptflow namespace as well from promptflow._internal import ConnectionManager +from promptflow.connections import CustomConnection, OpenAIConnection, SerpConnection from promptflow.tools.aoai import AzureOpenAI PROMOTFLOW_ROOT = Path(__file__).absolute().parents[1] @@ -44,6 +45,11 @@ def serp_connection(): return ConnectionManager().get("serp_connection") +@pytest.fixture +def gpt2_custom_connection(): + return ConnectionManager().get("gpt2_connection") + + @pytest.fixture(autouse=True) def skip_if_no_key(request, mocker): mocker.patch.dict(os.environ, {"PROMPTFLOW_CONNECTIONS": CONNECTION_FILE}) @@ -51,8 +57,12 @@ def skip_if_no_key(request, mocker): conn_name = request.node.get_closest_marker('skip_if_no_key').args[0] connection = request.getfixturevalue(conn_name) # if dummy placeholder key, skip. - if "-api-key" in connection.api_key: - pytest.skip('skipped because no key') + if isinstance(connection, OpenAIConnection) or isinstance(connection, SerpConnection): + if "-api-key" in connection.api_key: + pytest.skip('skipped because no key') + elif isinstance(connection, CustomConnection): + if "endpoint_api_key" not in connection.secrets or "-api-key" in connection.secrets["endpoint_api_key"]: + pytest.skip('skipped because no key') # example prompts diff --git a/src/promptflow-tools/tests/test_open_source_llm.py b/src/promptflow-tools/tests/test_open_source_llm.py new file mode 100644 index 00000000000..6b75e54dac2 --- /dev/null +++ b/src/promptflow-tools/tests/test_open_source_llm.py @@ -0,0 +1,180 @@ +import pytest +from promptflow.tools.exception import ( + OpenSourceLLMOnlineEndpointError, + OpenSourceLLMUserError, + OpenSourceLLMKeyValidationError +) +from promptflow.tools.open_source_llm import OpenSourceLLM, API, ContentFormatterBase, LlamaContentFormatter + + +@pytest.fixture +def gpt2_provider(gpt2_custom_connection) -> OpenSourceLLM: + return OpenSourceLLM(gpt2_custom_connection) + + +@pytest.mark.usefixtures("use_secrets_config_file") +class TestOpenSourceLLM: + completion_prompt = "In the context of Azure ML, what does the ML stand for?" + chat_prompt = """user: +You are a AI which helps Customers answer questions. + +user: +""" + completion_prompt + + @pytest.mark.skip_if_no_key("gpt2_custom_connection") + def test_open_source_llm_completion(self, gpt2_provider): + response = gpt2_provider.call( + self.completion_prompt, + API.COMPLETION) + assert len(response) > 25 + + @pytest.mark.skip_if_no_key("gpt2_custom_connection") + def test_open_source_llm_completion_with_deploy(self, gpt2_provider): + response = gpt2_provider.call( + self.completion_prompt, + API.COMPLETION, + deployment_name="gpt2-8") + assert len(response) > 25 + + @pytest.mark.skip_if_no_key("gpt2_custom_connection") + def test_open_source_llm_chat(self, gpt2_provider): + response = gpt2_provider.call( + self.chat_prompt, + API.CHAT) + assert len(response) > 25 + + @pytest.mark.skip_if_no_key("gpt2_custom_connection") + def test_open_source_llm_chat_with_deploy(self, gpt2_provider): + response = gpt2_provider.call( + self.chat_prompt, + API.CHAT, + deployment_name="gpt2-8") + assert len(response) > 25 + + @pytest.mark.skip_if_no_key("gpt2_custom_connection") + def test_open_source_llm_con_url_chat(self, gpt2_custom_connection): + del gpt2_custom_connection.configs['endpoint_url'] + with pytest.raises(OpenSourceLLMKeyValidationError) as exc_info: + os = OpenSourceLLM(gpt2_custom_connection) + os.call(self.chat_prompt, API.CHAT) + assert exc_info.value.message == """Required key `endpoint_url` not found in given custom connection. +Required keys are: endpoint_url,model_family.""" + assert exc_info.value.error_codes == "UserError/ToolValidationError/OpenSourceLLMKeyValidationError".split("/") + + @pytest.mark.skip_if_no_key("gpt2_custom_connection") + def test_open_source_llm_con_key_chat(self, gpt2_custom_connection): + del gpt2_custom_connection.secrets['endpoint_api_key'] + with pytest.raises(OpenSourceLLMKeyValidationError) as exc_info: + os = OpenSourceLLM(gpt2_custom_connection) + os.call(self.chat_prompt, API.CHAT) + assert exc_info.value.message == ( + "Required secret key `endpoint_api_key` " + + """not found in given custom connection. +Required keys are: endpoint_api_key.""") + assert exc_info.value.error_codes == "UserError/ToolValidationError/OpenSourceLLMKeyValidationError".split("/") + + @pytest.mark.skip_if_no_key("gpt2_custom_connection") + def test_open_source_llm_con_model_chat(self, gpt2_custom_connection): + del gpt2_custom_connection.configs['model_family'] + with pytest.raises(OpenSourceLLMKeyValidationError) as exc_info: + os = OpenSourceLLM(gpt2_custom_connection) + os.call(self.completion_prompt, API.COMPLETION) + assert exc_info.value.message == """Required key `model_family` not found in given custom connection. +Required keys are: endpoint_url,model_family.""" + assert exc_info.value.error_codes == "UserError/ToolValidationError/OpenSourceLLMKeyValidationError".split("/") + + def test_open_source_llm_escape_chat(self): + danger = r"The quick \brown fox\tjumped\\over \the \\boy\r\n" + out_of_danger = ContentFormatterBase.escape_special_characters(danger) + assert out_of_danger == "The quick \\brown fox\\tjumped\\\\over \\the \\\\boy\\r\\n" + + def test_open_source_llm_llama_parse_chat_with_chat(self): + LlamaContentFormatter.parse_chat(self.chat_prompt) + + def test_open_source_llm_llama_parse_multi_turn(self): + multi_turn_chat = """user: +You are a AI which helps Customers answer questions. + +What is the best movie of all time? + +assistant: +Mobius, which starred Jared Leto + +user: +Why was that the greatest movie of all time? +""" + LlamaContentFormatter.parse_chat(multi_turn_chat) + + def test_open_source_llm_llama_parse_system_not_accepted(self): + bad_chat_prompt = """system: +You are a AI which helps Customers answer questions. + +user: +""" + self.completion_prompt + with pytest.raises(OpenSourceLLMUserError) as exc_info: + LlamaContentFormatter.parse_chat(bad_chat_prompt) + assert exc_info.value.message == ( + "The Chat API requires a specific format for prompt definition," + + " and the prompt should include separate lines as role delimiters: 'assistant:\\n','user:\\n'." + + " Current parsed role 'system' does not meet the requirement. If you intend to use the Completion " + + "API, please select the appropriate API type and deployment name. If you do intend to use the Chat " + + "API, please refer to the guideline at https://aka.ms/pfdoc/chat-prompt or view the samples in our " + + "gallery that contain 'Chat' in the name.") + assert exc_info.value.error_codes == "UserError/OpenSourceLLMUserError".split("/") + + def test_open_source_llm_llama_parse_ignore_whitespace(self): + bad_chat_prompt = f"""system: +You are a AI which helps Customers answer questions. + +user: + +user: +{self.completion_prompt}""" + with pytest.raises(OpenSourceLLMUserError) as exc_info: + LlamaContentFormatter.parse_chat(bad_chat_prompt) + assert exc_info.value.message == ( + "The Chat API requires a specific format for prompt definition, and " + + "the prompt should include separate lines as role delimiters: 'assistant:\\n','user:\\n'. Current parsed " + + "role 'system' does not meet the requirement. If you intend to use the Completion API, please select the " + + "appropriate API type and deployment name. If you do intend to use the Chat API, please refer to the " + + "guideline at https://aka.ms/pfdoc/chat-prompt or view the samples in our gallery that contain 'Chat' " + + "in the name.") + assert exc_info.value.error_codes == "UserError/OpenSourceLLMUserError".split("/") + + def test_open_source_llm_llama_parse_chat_with_comp(self): + with pytest.raises(OpenSourceLLMUserError) as exc_info: + LlamaContentFormatter.parse_chat(self.completion_prompt) + assert exc_info.value.message == ( + "The Chat API requires a specific format for prompt definition, and " + + "the prompt should include separate lines as role delimiters: 'assistant:\\n','user:\\n'. Current parsed " + + "role 'in the context of azure ml, what does the ml stand for?' does not meet the requirement. If you " + + "intend to use the Completion API, please select the appropriate API type and deployment name. If you do " + + "intend to use the Chat API, please refer to the guideline at https://aka.ms/pfdoc/chat-prompt or view " + + "the samples in our gallery that contain 'Chat' in the name.") + assert exc_info.value.error_codes == "UserError/OpenSourceLLMUserError".split("/") + + @pytest.mark.skip_if_no_key("gpt2_custom_connection") + def test_open_source_llm_llama_endpoint_miss(self, gpt2_custom_connection): + gpt2_custom_connection.configs['endpoint_url'] += 'completely/real/endpoint' + os = OpenSourceLLM(gpt2_custom_connection) + with pytest.raises(OpenSourceLLMOnlineEndpointError) as exc_info: + os.call( + self.completion_prompt, + API.COMPLETION) + assert exc_info.value.message == ( + "Exception hit calling Oneline Endpoint: " + + "HTTPError: HTTP Error 424: Failed Dependency") + assert exc_info.value.error_codes == "UserError/OpenSourceLLMOnlineEndpointError".split("/") + + @pytest.mark.skip_if_no_key("gpt2_custom_connection") + def test_open_source_llm_llama_deployment_miss(self, gpt2_custom_connection): + os = OpenSourceLLM(gpt2_custom_connection) + with pytest.raises(OpenSourceLLMOnlineEndpointError) as exc_info: + os.call( + self.completion_prompt, + API.COMPLETION, + deployment_name="completely/real/deployment-007") + assert exc_info.value.message == ( + "Exception hit calling Oneline Endpoint: " + + "HTTPError: HTTP Error 404: Not Found") + assert exc_info.value.error_codes == "UserError/OpenSourceLLMOnlineEndpointError".split("/") From 0b96369cc9c26c1652b78ecbc09283a0fe713cae Mon Sep 17 00:00:00 2001 From: Robben Wang <350053002@qq.com> Date: Sat, 7 Oct 2023 18:08:11 +0800 Subject: [PATCH 15/26] numexpr is one optional package for langchain, install it for e2e test. (#682) # Description Langchain changed numexpr as optional package in https://github.com/langchain-ai/langchain/pull/11049. So, `pip install langchain` will not install `numexpr`. Add `pip install numexpr` to fix e2e test because we need call `langchain.agents.load_tools.load_tools`. Test failed because can't apply this branch's yaml to install numexpr. Trigger e2e test separately and test succeeded. https://github.com/microsoft/promptflow/actions/runs/6440435201 # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. Co-authored-by: Robben Wang --- .github/workflows/promptflow-executor-e2e-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/promptflow-executor-e2e-test.yml b/.github/workflows/promptflow-executor-e2e-test.yml index 5bb9140aa0e..439c5648d74 100644 --- a/.github/workflows/promptflow-executor-e2e-test.yml +++ b/.github/workflows/promptflow-executor-e2e-test.yml @@ -75,6 +75,8 @@ jobs: gci env:* | sort-object name az account show pip install langchain + # numexpr is required by langchain in e2e tests. + pip install numexpr python scripts/building/run_coverage_tests.py ` -p ${{ env.testWorkingDirectory }}/promptflow ` -t ${{ env.testWorkingDirectory }}/tests/executor/e2etests ` From aafdf4ef2fa1ffc2d9f5e67281f3d5940c5de649 Mon Sep 17 00:00:00 2001 From: ChenJieting <40321821+ChenJieting@users.noreply.github.com> Date: Sun, 8 Oct 2023 10:22:09 +0800 Subject: [PATCH 16/26] add a FAQ item for how to make the installed tool visible in VSCode Extension (#679) # Description We noticed that some users cannot see the tool in the tool list of VSCode Extension after they installed it via `pip install [tool-package-name]`. They may need to reload the window to refresh. So we add a FAQ item in docs/how-to-guides/faq.md. # All Promptflow Contribution checklist: - [x] **The pull request does not introduce [breaking changes].** - [x] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [x] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [x] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [x] Title of the pull request is clear and informative. - [x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [x] Pull request includes test coverage for the included changes. --- docs/how-to-guides/faq.md | 18 ++++++++++++++++++ docs/media/how-to-guides/vscode-tool-list.png | Bin 0 -> 86719 bytes 2 files changed, 18 insertions(+) create mode 100644 docs/media/how-to-guides/vscode-tool-list.png diff --git a/docs/how-to-guides/faq.md b/docs/how-to-guides/faq.md index 33a4a60c820..6ea0806d4a9 100644 --- a/docs/how-to-guides/faq.md +++ b/docs/how-to-guides/faq.md @@ -33,3 +33,21 @@ For more detail about keyring third-party backend, please refer to 'Third-Party If you are using WSL, this is a known issue for `webbrowser` under WSL; see [this issue](https://github.com/python/cpython/issues/89752) for more information. Please try to upgrade your WSL to 22.04 or later, this issue should be resolved. If you are still facing this issue with WSL 22.04 or later, or you are not even using WSL, please open an issue to us. + +### Installed tool not appearing in VSCode Extension tool list + +After installing a tool package via `pip install [tool-package-name]`, the new tool may not immediately appear in the tool list within the VSCode Extension, as shown below: + +![VSCode Extension tool list](../media/how-to-guides/vscode-tool-list.png) + +This is often due to outdated cache. To refresh the tool list and make newly installed tools visible: + +1. Open the VSCode Extension window. + +2. Bring up the command palette by pressing "Ctrl+Shift+P". + +3. Type and select the "Developer: Reload Webviews" command. + +4. Wait a moment for the tool list refreshing. + +Reloading clears the previous cache and populates the tool list with any newly installed tools. So that the missing tools are now visible. diff --git a/docs/media/how-to-guides/vscode-tool-list.png b/docs/media/how-to-guides/vscode-tool-list.png new file mode 100644 index 0000000000000000000000000000000000000000..b0705321976f404f4ffd0d53744d3303147568a3 GIT binary patch literal 86719 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 gr0BlXBt!SDnhqw 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 Date: Sun, 8 Oct 2023 10:48:12 +0800 Subject: [PATCH 17/26] Filter out None for exceptions's message_parameter (#680) `string.Formatter().parse(message_format)` will generate None in field_name. Filter it out since it may introduce issue for jsonify. Another option is using regular expressions, Here's a comparison of both options from gpt: Using string.Formatter().parse(): Pros: - The built-in string.Formatter().parse() method is designed specifically for parsing format strings, so it is likely to handle edge cases correctly. - This method doesn't require an additional import. Cons: - The code might be less readable for people who are not familiar with the string.Formatter() class and its .parse() method. - It requires an additional function (iter_field_name()) and a loop to filter out the None values. Using re (regular expressions): Pros: - The code is more concise and easier to read for those familiar with regular expressions. - It requires fewer lines of code and directly extracts the field names, so no additional function or loop is needed for filtering None values. Cons: - Regular expressions might not catch all edge cases specific to format strings (although it will work correctly for most common cases). - People not familiar with regular expressions might find this approach less readable. In summary, both methods will work for most common cases. However, if you are mainly concerned with readability and conciseness, the regular expression method is a better choice. On the other hand, if you prioritize **handling all edge cases related to format strings**, the string.Formatter().parse() method is the safer option. Related PR: https://github.com/microsoft/promptflow/pull/642 # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --------- Co-authored-by: Robben Wang --- src/promptflow/promptflow/exceptions.py | 4 +++- .../tests/executor/unittests/executor/test_exceptions.py | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/promptflow/promptflow/exceptions.py b/src/promptflow/promptflow/exceptions.py index 8b7084ac8d8..6ec0ddc9aa5 100644 --- a/src/promptflow/promptflow/exceptions.py +++ b/src/promptflow/promptflow/exceptions.py @@ -180,7 +180,9 @@ def iter_field_name(): return for _, field_name, _, _ in string.Formatter().parse(message_format): - yield field_name + # Last one field_name is always None, filter it out to avoid exception. + if field_name is not None: + yield field_name # Use set to remove duplicates return set(iter_field_name()) diff --git a/src/promptflow/tests/executor/unittests/executor/test_exceptions.py b/src/promptflow/tests/executor/unittests/executor/test_exceptions.py index 19b1f6984e8..93ccb56ddaf 100644 --- a/src/promptflow/tests/executor/unittests/executor/test_exceptions.py +++ b/src/promptflow/tests/executor/unittests/executor/test_exceptions.py @@ -12,3 +12,4 @@ def test_exception_message(self): ) assert ex.message == "Test exception message with parameters: test_param, ." + assert None not in ex.message_parameters From 78de851b85d923710c8592ad28920b7377e9123c Mon Sep 17 00:00:00 2001 From: zhen Date: Sun, 8 Oct 2023 16:27:10 +0800 Subject: [PATCH 18/26] [Flow test] Support python node return streaming output (#674) # Description ```yaml inputs: chat_history: type: list is_chat_history: true question: type: string is_chat_input: true outputs: answer: type: string reference: ${stream.output.answer} is_chat_output: true nodes: - name: stream type: python source: type: code path: stream.py inputs: chat_history: ${inputs.chat_history} question: ${inputs.question} ``` python tool ```python from promptflow import tool from typing import Generator def stream(question: str) -> Generator[str, None, None]: for word in question: yield word @tool def my_python_tool(chat_history: list[dict], question: str) -> dict: return {"answer": stream(question)} ``` # All Promptflow Contribution checklist: - [ ] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [ ] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [ ] Title of the pull request is clear and informative. - [ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --- .../_sdk/operations/_test_submitter.py | 13 +++++++++--- .../tests/sdk_cli_test/e2etests/test_cli.py | 13 ++++++++++++ .../flow.dag.yaml | 21 +++++++++++++++++++ .../stream.py | 12 +++++++++++ 4 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 src/promptflow/tests/test_configs/flows/chat_flow_with_python_node_streaming_output/flow.dag.yaml create mode 100644 src/promptflow/tests/test_configs/flows/chat_flow_with_python_node_streaming_output/stream.py diff --git a/src/promptflow/promptflow/_sdk/operations/_test_submitter.py b/src/promptflow/promptflow/_sdk/operations/_test_submitter.py index 204648f346f..3e5f1f4912a 100644 --- a/src/promptflow/promptflow/_sdk/operations/_test_submitter.py +++ b/src/promptflow/promptflow/_sdk/operations/_test_submitter.py @@ -236,10 +236,17 @@ def print_chat_output(output): def get_result_output(output): if isinstance(output, GeneratorType): if output in generator_record: - output = iter(generator_record[output].items) + if hasattr(generator_record[output], "items"): + output = iter(generator_record[output].items) + else: + output = iter(generator_record[output]) else: - proxy = output.gi_frame.f_locals["proxy"] - generator_record[output] = proxy + if hasattr(output.gi_frame.f_locals, "proxy"): + proxy = output.gi_frame.f_locals["proxy"] + generator_record[output] = proxy + else: + generator_record[output] = list(output) + output = generator_record[output] return output def resolve_generator(flow_result): diff --git a/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py b/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py index e08eedee185..4b0fb992f6b 100644 --- a/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py +++ b/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py @@ -798,6 +798,19 @@ def mock_input(*args, **kwargs): detail_path = Path(FLOWS_DIR) / "chat_flow_with_stream_output" / ".promptflow" / "chat.detail.json" assert detail_path.exists() + chat_list = ["hi", "what is chat gpt?"] + run_pf_command( + "flow", + "test", + "--flow", + f"{FLOWS_DIR}/chat_flow_with_python_node_streaming_output", + "--interactive", + ) + output_path = Path(FLOWS_DIR) / "chat_flow_with_stream_output" / ".promptflow" / "chat.output.json" + assert output_path.exists() + detail_path = Path(FLOWS_DIR) / "chat_flow_with_stream_output" / ".promptflow" / "chat.detail.json" + assert detail_path.exists() + # Validate terminal output chat_list = ["hi", "what is chat gpt?"] run_pf_command("flow", "test", "--flow", f"{FLOWS_DIR}/chat_flow", "--interactive", "--verbose") diff --git a/src/promptflow/tests/test_configs/flows/chat_flow_with_python_node_streaming_output/flow.dag.yaml b/src/promptflow/tests/test_configs/flows/chat_flow_with_python_node_streaming_output/flow.dag.yaml new file mode 100644 index 00000000000..87696a0b459 --- /dev/null +++ b/src/promptflow/tests/test_configs/flows/chat_flow_with_python_node_streaming_output/flow.dag.yaml @@ -0,0 +1,21 @@ +inputs: + chat_history: + type: list + is_chat_history: true + question: + type: string + is_chat_input: true +outputs: + answer: + type: string + reference: ${stream.output.answer} + is_chat_output: true +nodes: +- name: stream + type: python + source: + type: code + path: stream.py + inputs: + chat_history: ${inputs.chat_history} + question: ${inputs.question} \ No newline at end of file diff --git a/src/promptflow/tests/test_configs/flows/chat_flow_with_python_node_streaming_output/stream.py b/src/promptflow/tests/test_configs/flows/chat_flow_with_python_node_streaming_output/stream.py new file mode 100644 index 00000000000..352f8ed6031 --- /dev/null +++ b/src/promptflow/tests/test_configs/flows/chat_flow_with_python_node_streaming_output/stream.py @@ -0,0 +1,12 @@ +from promptflow import tool +from typing import Generator + + +def stream(question: str) -> Generator[str, None, None]: + for word in question: + yield word + + +@tool +def my_python_tool(chat_history: list[dict], question: str) -> dict: + return {"answer": stream(question)} From 7a6a48799c2503ffe1cb353bd36ed24ffd1a15d5 Mon Sep 17 00:00:00 2001 From: Robben Wang <350053002@qq.com> Date: Sun, 8 Oct 2023 17:49:09 +0800 Subject: [PATCH 19/26] Resolve input type for exec_aggreation. (#678) # Description Resolve type for exec_aggreation's flow inputs. **Before:** Aggregation node's flow input is a list of strings. (Didn't honor the definition in yaml file) For example: the below flow input will be string "123", but not int 123 when default value is used. ![image](https://github.com/microsoft/promptflow/assets/17527303/b4359f3c-b1d1-496c-a6b0-f24655a8cc81) **After:** Aggregation node's flow input is a list of objects, whose type is specified in yaml file. Extract `_convert_input_by_type` to convert each item, then we could reuse the error message. # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [X] Pull request includes test coverage for the included changes. --------- Co-authored-by: Robben Wang --- .../promptflow/executor/flow_executor.py | 8 +- .../promptflow/executor/flow_validator.py | 83 ++++++++----- .../unittests/executor/test_flow_validator.py | 116 +++++++++++++++++- 3 files changed, 171 insertions(+), 36 deletions(-) diff --git a/src/promptflow/promptflow/executor/flow_executor.py b/src/promptflow/promptflow/executor/flow_executor.py index a029272cf67..43a61936b15 100644 --- a/src/promptflow/promptflow/executor/flow_executor.py +++ b/src/promptflow/promptflow/executor/flow_executor.py @@ -560,8 +560,14 @@ def exec_aggregation( self._flow.inputs, aggregated_flow_inputs, aggregation_inputs ) + # Resolve aggregated_flow_inputs from list of strings to list of objects, whose type is specified in yaml file. + # TODO: For now, we resolve type for batch run's aggregation input in _exec_aggregation_with_bulk_results. + # If we decide to merge the resolve logic into one place, remember to take care of index for batch run. + resolved_aggregated_flow_inputs = FlowValidator.resolve_aggregated_flow_inputs_type( + self._flow, aggregated_flow_inputs + ) with self._run_tracker.node_log_manager: - return self._exec_aggregation(aggregated_flow_inputs, aggregation_inputs, run_id) + return self._exec_aggregation(resolved_aggregated_flow_inputs, aggregation_inputs, run_id) @staticmethod def _apply_default_value_for_aggregation_input( diff --git a/src/promptflow/promptflow/executor/flow_validator.py b/src/promptflow/promptflow/executor/flow_validator.py index b92177bd6dc..c671674a52c 100644 --- a/src/promptflow/promptflow/executor/flow_validator.py +++ b/src/promptflow/promptflow/executor/flow_validator.py @@ -4,10 +4,11 @@ import copy from json import JSONDecodeError -from typing import Any, Mapping, Optional +from typing import Any, List, Mapping, Optional from promptflow._utils.logger_utils import logger from promptflow.contracts.flow import Flow, InputValueType, Node +from promptflow.contracts.tool import ValueType from promptflow.executor._errors import ( DuplicateNodeName, EmptyOutputReference, @@ -151,6 +152,52 @@ def _validate_nodes_topology(flow: Flow) -> Flow: ) return FlowValidator._ensure_nodes_order(flow) + @staticmethod + def _parse_input_value(input_key: str, input_value: Any, expected_type: ValueType, idx=None): + try: + return expected_type.parse(input_value) + except JSONDecodeError as e: + line_info = "" if idx is None else f" in line {idx} of input data" + flow_input_info = f"'{input_key}'{line_info}" + error_type_and_message = f"({e.__class__.__name__}) {e}" + + msg_format = ( + "Failed to parse the flow input. The value for flow input {flow_input_info} " + "was interpreted as JSON string since its type is '{value_type}'. However, the value " + "'{input_value}' is invalid for JSON parsing. Error details: {error_type_and_message}. " + "Please make sure your inputs are properly formatted." + ) + raise InputParseError( + message_format=msg_format, + flow_input_info=flow_input_info, + input_value=input_value, + value_type=expected_type, + error_type_and_message=error_type_and_message, + ) from e + except Exception as e: + line_info = "" if idx is None else f" in line {idx} of input data" + flow_input_info = f"'{input_key}'{line_info}" + msg_format = ( + "The input for flow is incorrect. The value for flow input {flow_input_info} " + "does not match the expected type '{expected_type}'. Please change flow input type " + "or adjust the input value in your input data." + ) + raise InputTypeError( + message_format=msg_format, flow_input_info=flow_input_info, expected_type=expected_type + ) from e + + @staticmethod + def resolve_aggregated_flow_inputs_type(flow: Flow, inputs: Mapping[str, List[Any]]) -> Mapping[str, Any]: + updated_inputs = {} + for input_key, input_def in flow.inputs.items(): + if input_key in inputs: + input_value_list = inputs[input_key] + updated_inputs[input_key] = [ + FlowValidator._parse_input_value(input_key, each_line_item, input_def.type, idx) + for idx, each_line_item in enumerate(input_value_list) + ] + return updated_inputs + @staticmethod def resolve_flow_inputs_type(flow: Flow, inputs: Mapping[str, Any], idx: Optional[int] = None) -> Mapping[str, Any]: """Resolve inputs by type if existing. Ignore missing inputs. @@ -169,38 +216,8 @@ def resolve_flow_inputs_type(flow: Flow, inputs: Mapping[str, Any], idx: Optiona """ updated_inputs = {k: v for k, v in inputs.items()} for k, v in flow.inputs.items(): - try: - if k in inputs: - updated_inputs[k] = v.type.parse(inputs[k]) - except JSONDecodeError as e: - line_info = "" if idx is None else f" in line {idx} of input data" - flow_input_info = f"'{k}'{line_info}" - error_type_and_message = f"({e.__class__.__name__}) {e}" - - msg_format = ( - "Failed to parse the flow input. The value for flow input {flow_input_info} " - "was interpreted as JSON string since its type is '{value_type}'. However, the value " - "'{input_value}' is invalid for JSON parsing. Error details: {error_type_and_message}. " - "Please make sure your inputs are properly formatted." - ) - raise InputParseError( - message_format=msg_format, - flow_input_info=flow_input_info, - input_value=inputs[k], - value_type=v.type, - error_type_and_message=error_type_and_message, - ) from e - except Exception as e: - line_info = "" if idx is None else f" in line {idx} of input data" - flow_input_info = f"'{k}'{line_info}" - msg_format = ( - "The input for flow is incorrect. The value for flow input {flow_input_info} " - "does not match the expected type '{expected_type}'. Please change flow input type " - "or adjust the input value in your input data." - ) - raise InputTypeError( - message_format=msg_format, flow_input_info=flow_input_info, expected_type=v.type - ) from e + if k in inputs: + updated_inputs[k] = FlowValidator._parse_input_value(k, inputs[k], v.type, idx) return updated_inputs @staticmethod diff --git a/src/promptflow/tests/executor/unittests/executor/test_flow_validator.py b/src/promptflow/tests/executor/unittests/executor/test_flow_validator.py index 54b422273a3..6db817b55aa 100644 --- a/src/promptflow/tests/executor/unittests/executor/test_flow_validator.py +++ b/src/promptflow/tests/executor/unittests/executor/test_flow_validator.py @@ -1,8 +1,9 @@ import pytest import yaml -from promptflow.contracts.flow import Flow -from promptflow.executor._errors import InputParseError, InvalidAggregationInput, InvalidFlowRequest +from promptflow.contracts.flow import Flow, FlowInputDefinition +from promptflow.contracts.tool import ValueType +from promptflow.executor._errors import InputParseError, InputTypeError, InvalidAggregationInput, InvalidFlowRequest from promptflow.executor.flow_validator import FlowValidator from ...utils import WRONG_FLOW_ROOT, get_yaml_file @@ -195,3 +196,114 @@ def test_resolve_flow_inputs_type_json_error_for_list_type( with pytest.raises(error_type) as exe_info: FlowValidator.resolve_flow_inputs_type(flow, inputs, idx=index) assert error_message == exe_info.value.message + + @pytest.mark.parametrize( + "inputs, expected_result", + [({"test_input": ["1", "2"]}, {"test_input": [1, 2]})], + ) + def test_resolve_aggregated_flow_inputs_type(self, inputs, expected_result): + flow = Flow( + id="fakeId", + name=None, + nodes=[], + inputs={"test_input": FlowInputDefinition(type=ValueType.INT)}, + outputs=None, + tools=[], + ) + result = FlowValidator.resolve_aggregated_flow_inputs_type(flow, inputs) + assert result == expected_result + + @pytest.mark.parametrize( + "inputs, expected_message", + [ + ( + {"test_input": ["1", "str"]}, + ( + "The input for flow is incorrect. The value for flow input 'test_input' in line 1 of input data " + "does not match the expected type 'int'. " + "Please change flow input type or adjust the input value in your input data." + ), + ) + ], + ) + def test_resolve_aggregated_flow_inputs_type_error(self, inputs, expected_message): + flow = Flow( + id="fakeId", + name=None, + nodes=[], + inputs={"test_input": FlowInputDefinition(type=ValueType.INT)}, + outputs=None, + tools=[], + ) + with pytest.raises(InputTypeError) as ex: + FlowValidator.resolve_aggregated_flow_inputs_type(flow, inputs) + + assert expected_message == str(ex.value) + + @pytest.mark.parametrize( + "input, type, expected_result", + [ + ("1", ValueType.INT, 1), + ('["1", "2"]', ValueType.LIST, ["1", "2"]), + ], + ) + def test_parse_input_value(self, input, type, expected_result): + input_key = "test_input" + result = FlowValidator._parse_input_value(input_key, input, type) + assert result == expected_result + + @pytest.mark.parametrize( + "input, type, index, error_type, expected_message", + [ + ( + "str", + ValueType.INT, + None, + InputTypeError, + ( + "The input for flow is incorrect. The value for flow input 'my_input' does not match the expected " + "type 'int'. Please change flow input type or adjust the input value in your input data." + ), + ), + ( + "['1', '2']", + ValueType.LIST, + None, + InputParseError, + ( + "Failed to parse the flow input. The value for flow input 'my_input' was interpreted as JSON " + "string since its type is 'list'. However, the value '['1', '2']' is invalid for JSON parsing. " + "Error details: (JSONDecodeError) Expecting value: line 1 column 2 (char 1). " + "Please make sure your inputs are properly formatted." + ), + ), + ( + "str", + ValueType.INT, + 10, + InputTypeError, + ( + "The input for flow is incorrect. The value for flow input 'my_input' in line 10 of " + "input data does not match the expected type 'int'. " + "Please change flow input type or adjust the input value in your input data." + ), + ), + ( + "['1', '2']", + ValueType.LIST, + 10, + InputParseError, + ( + "Failed to parse the flow input. The value for flow input 'my_input' in line 10 of input data " + "was interpreted as JSON string since its type is 'list'. However, the value '['1', '2']' is " + "invalid for JSON parsing. Error details: (JSONDecodeError) Expecting value: " + "line 1 column 2 (char 1). Please make sure your inputs are properly formatted." + ), + ), + ], + ) + def test_parse_input_value_error(self, input, type, index, error_type, expected_message): + input_key = "my_input" + with pytest.raises(error_type) as ex: + FlowValidator._parse_input_value(input_key, input, type, index) + assert expected_message == str(ex.value) From 16cf1767748d6e317422e67e81fb14cb86ee7aba Mon Sep 17 00:00:00 2001 From: Peiwen Gao <111329184+PeiwenGaoMS@users.noreply.github.com> Date: Sun, 8 Oct 2023 20:01:37 +0800 Subject: [PATCH 20/26] [Internal][Executor] Add unit tests for exception_utils (#595) # Description Add unit tests for exception_utils # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes]** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [X] Pull request includes test coverage for the included changes. --------- Co-authored-by: Peiwen Gao --- .../unittests/_utils/test_exception_utils.py | 206 +++++++++++++++--- 1 file changed, 177 insertions(+), 29 deletions(-) diff --git a/src/promptflow/tests/executor/unittests/_utils/test_exception_utils.py b/src/promptflow/tests/executor/unittests/_utils/test_exception_utils.py index 08515b9d698..79dc6e24481 100644 --- a/src/promptflow/tests/executor/unittests/_utils/test_exception_utils.py +++ b/src/promptflow/tests/executor/unittests/_utils/test_exception_utils.py @@ -1,5 +1,6 @@ import json import re +from traceback import TracebackException import pytest @@ -9,9 +10,17 @@ ErrorResponse, ExceptionPresenter, JsonSerializedPromptflowException, + get_tb_next, infer_error_code_from_class, + last_frame_info, +) +from promptflow.exceptions import ( + ErrorTarget, + PromptflowException, + SystemErrorException, + UserErrorException, + ValidationException, ) -from promptflow.exceptions import ErrorTarget, PromptflowException, SystemErrorException, UserErrorException def set_inner_exception_by_parameter(): @@ -44,6 +53,23 @@ def raise_user_error(): raise UserErrorException("run failed", target=ErrorTarget.TOOL) from e +def raise_context_exception(): + try: + code_with_bug() + except Exception as e: + raise CustomizedContextException(e) + + +class CustomizedContextException(Exception): + def __init__(self, inner_exception): + self.inner_exception = inner_exception + + @property + def message(self): + code_with_bug() + return "context exception" + + class CustomizedException(Exception): pass @@ -78,11 +104,17 @@ def raise_promptflow_exception_without_inner_exception(): raise PromptflowException("Promptflow exception") +TOOL_EXECUTION_ERROR_TRACEBACK = r"""Traceback \(most recent call last\): + File ".*test_exception_utils.py", line .*, in code_with_bug + 1 / 0 +ZeroDivisionError: division by zero +""" + TOOL_EXCEPTION_TRACEBACK = r""" The above exception was the direct cause of the following exception: Traceback \(most recent call last\): - File ".*test_exception_utils.py", line .*, in test_debug_info + File ".*test_exception_utils.py", line .*, in test_.* raise_tool_execution_error\(\) File ".*test_exception_utils.py", line .*, in raise_tool_execution_error raise ToolExecutionError\(node_name="MyTool"\) from e @@ -112,19 +144,55 @@ def raise_promptflow_exception_without_inner_exception(): 1 / 0 """ +CONTEXT_EXCEPTION_TRACEBACK = r""" +During handling of the above exception, another exception occurred: + +Traceback \(most recent call last\): + File ".*test_exception_utils.py", line .*, in test_debug_info_for_context_exception + raise_context_exception\(\) + File ".*test_exception_utils.py", line .*, in raise_context_exception + raise CustomizedContextException\(e\) +""" + +CONTEXT_EXCEPTION_INNER_TRACEBACK = r"""Traceback \(most recent call last\): + File ".*test_exception_utils.py", line .*, in raise_context_exception + code_with_bug\(\) + File ".*test_exception_utils.py", line .*, in code_with_bug + 1 / 0 +""" + @pytest.mark.unittest -@pytest.mark.parametrize( - "clz, expected", - [ - (UserErrorException, "UserError"), - (SystemErrorException, "SystemError"), - (ToolExecutionError, "ToolExecutionError"), - (ValueError, "ValueError"), - ], -) -def test_infer_error_code_from_class(clz, expected): - assert infer_error_code_from_class(clz) == expected +class TestExceptionUtilsCommonMethod: + def test_get_tb_next(self): + with pytest.raises(ToolExecutionError) as e: + raise_tool_execution_error() + tb_next = get_tb_next(e.value.__traceback__, 3) + te = TracebackException(type(e.value), e.value, tb_next) + formatted_tb = "".join(te.format()) + assert re.match(TOOL_EXCEPTION_INNER_TRACEBACK, formatted_tb) + + def test_last_frame_info(self): + with pytest.raises(ToolExecutionError) as e: + raise_tool_execution_error() + frame_info = last_frame_info(e.value) + assert "test_exception_utils.py" in frame_info.get("filename") + assert frame_info.get("lineno") > 0 + assert frame_info.get("name") == "raise_tool_execution_error" + assert last_frame_info(None) == {} + + @pytest.mark.parametrize( + "error_class, expected_error_code", + [ + (UserErrorException, "UserError"), + (SystemErrorException, "SystemError"), + (ValidationException, "ValidationError"), + (ToolExecutionError, "ToolExecutionError"), + (ValueError, "ValueError"), + ], + ) + def test_infer_error_code_from_class(self, error_class, expected_error_code): + assert infer_error_code_from_class(error_class) == expected_error_code @pytest.mark.unittest @@ -143,6 +211,18 @@ def test_debug_info(self): assert inner_exception["type"] == "ZeroDivisionError" assert re.match(TOOL_EXCEPTION_INNER_TRACEBACK, inner_exception["stackTrace"]) + def test_debug_info_for_context_exception(self): + with pytest.raises(CustomizedContextException) as e: + raise_context_exception() + presenter = ExceptionPresenter.create(e.value) + debug_info = presenter.debug_info + assert debug_info["type"] == "CustomizedContextException" + assert re.match(CONTEXT_EXCEPTION_TRACEBACK, debug_info["stackTrace"]) + + inner_exception = debug_info["innerException"] + assert inner_exception["type"] == "ZeroDivisionError" + assert re.match(CONTEXT_EXCEPTION_INNER_TRACEBACK, inner_exception["stackTrace"]) + def test_debug_info_for_general_exception(self): # Test General Exception with pytest.raises(CustomizedException) as e: @@ -162,7 +242,9 @@ def test_to_dict_for_general_exception(self): raise_general_exception() presenter = ExceptionPresenter.create(e.value) - dct = presenter.to_dict(include_debug_info=False) + dct = presenter.to_dict(include_debug_info=True) + assert "debugInfo" in dct + dct.pop("debugInfo") assert dct == { "code": "SystemError", "message": "General exception", @@ -212,6 +294,8 @@ def test_to_dict_for_tool_execution_error(self): raise_tool_execution_error() presenter = ExceptionPresenter.create(e.value) + assert re.search(TOOL_EXCEPTION_INNER_TRACEBACK, presenter.formatted_traceback) + assert re.search(TOOL_EXCEPTION_TRACEBACK, presenter.formatted_traceback) dct = presenter.to_dict(include_debug_info=False) assert dct.pop("additionalInfo") is not None assert dct == { @@ -255,6 +339,8 @@ def test_from_error_dict(self): } response = ErrorResponse.from_error_dict(error_dict) assert response.response_code == "400" + assert response.error_codes == ["UserError"] + assert response.message == "Flow run failed." response_dct = response.to_dict() assert response_dct["time"] is not None response_dct.pop("time") @@ -271,6 +357,17 @@ def test_from_error_dict(self): "location": None, } + def test_to_simplied_dict(self): + with pytest.raises(CustomizedException) as e: + raise_general_exception() + error_response = ErrorResponse.from_exception(e.value) + assert error_response.to_simplified_dict() == { + "error": { + "code": "SystemError", + "message": "General exception", + } + } + def test_from_exception(self): with pytest.raises(CustomizedException) as e: raise_general_exception() @@ -334,6 +431,65 @@ def test_innermost_error_code_with_code(self, error_dict, expected_innermost_err assert inner_error_code == expected_innermost_error_code + @pytest.mark.parametrize( + "error_dict, expected_additional_info", + [ + ({"code": "UserError"}, {}), + ( + { + "code": "UserError", + "additionalInfo": [ + { + "type": "test_additional_info", + "info": "This is additional info for testing.", + }, + "not_dict", + { + "type": "empty_info", + }, + { + "info": "Empty type", + }, + { + "test": "Invalid additional info", + }, + ], + }, + {"test_additional_info": "This is additional info for testing."}, + ), + ], + ) + def test_additional_info(self, error_dict, expected_additional_info): + error_response = ErrorResponse.from_error_dict(error_dict) + assert error_response.additional_info == expected_additional_info + assert all(error_response.get_additional_info(key) == value for key, value in expected_additional_info.items()) + + @pytest.mark.parametrize( + "raise_exception_func, error_class", + [ + (raise_general_exception, CustomizedException), + (raise_tool_execution_error, ToolExecutionError), + ], + ) + def test_get_user_execution_error_info(self, raise_exception_func, error_class): + with pytest.raises(error_class) as e: + raise_exception_func() + + error_repsonse = ErrorResponse.from_exception(e.value) + actual_error_info = error_repsonse.get_user_execution_error_info() + self.assert_user_execution_error_info(e.value, actual_error_info) + + def assert_user_execution_error_info(self, exception, error_info): + if isinstance(exception, ToolExecutionError): + assert error_info["type"] == "ZeroDivisionError" + assert error_info["message"] == "division by zero" + assert error_info["filename"].endswith("test_exception_utils.py") + assert error_info["lineno"] > 0 + assert error_info["name"] == "code_with_bug" + assert re.match(TOOL_EXECUTION_ERROR_TRACEBACK, error_info["traceback"]) + else: + assert error_info == {} + @pytest.mark.unittest class TestExceptions: @@ -495,14 +651,7 @@ def test_tool_execution_error(self): assert last_frame_info.get("lineno") > 0 assert last_frame_info.get("name") == "code_with_bug" - assert re.match( - r"Traceback \(most recent call last\):\n" - r' File ".*test_exception_utils.py", line .*, in code_with_bug\n' - r" 1 / 0\n" - r"(.*\n)?" # Python >= 3.11 add extra line here like a pointer. - r"ZeroDivisionError: division by zero\n", - e.value.tool_traceback, - ) + assert re.match(TOOL_EXECUTION_ERROR_TRACEBACK, e.value.tool_traceback) def test_code_hierarchy(self): with pytest.raises(ToolExecutionError) as e: @@ -547,13 +696,7 @@ def test_additional_info(self): assert re.match(r".*test_exception_utils.py", info_0_value["filename"]) assert info_0_value.get("lineno") > 0 assert info_0_value.get("name") == "code_with_bug" - assert re.match( - r"Traceback \(most recent call last\):\n" - r' File ".*test_exception_utils.py", line .*, in code_with_bug\n' - r" 1 / 0\n" - r"ZeroDivisionError: division by zero\n", - info_0_value.get("traceback"), - ) + assert re.match(TOOL_EXECUTION_ERROR_TRACEBACK, info_0_value.get("traceback")) def test_additional_info_for_empty_inner_error(self): ex = ToolExecutionError(node_name="Node1") @@ -634,7 +777,12 @@ def test_to_dict_for_JsonSerializedPromptflowException(self, include_debug_info) exception_dict = ExceptionPresenter.create(e.value).to_dict(include_debug_info=True) message = json.dumps(exception_dict) exception = JsonSerializedPromptflowException(message=message) + assert str(exception) == message + json_serialized_exception_dict = ExceptionPresenter.create(exception).to_dict( + include_debug_info=include_debug_info + ) error_dict = exception.to_dict(include_debug_info=include_debug_info) + assert error_dict == json_serialized_exception_dict if include_debug_info: assert "debugInfo" in error_dict From 6e56fe231edc41dc709560251b221c58e65d571d Mon Sep 17 00:00:00 2001 From: zhen Date: Mon, 9 Oct 2023 14:07:59 +0800 Subject: [PATCH 21/26] [Flow test] Fix chat-history was not consumed in testing (#675) # Description Please add an informative description that covers that changes made by the pull request and link all relevant issues. # All Promptflow Contribution checklist: - [ ] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [ ] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [ ] Title of the pull request is clear and informative. - [ ] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [ ] Pull request includes test coverage for the included changes. --- .../_sdk/operations/_flow_operations.py | 5 +-- .../_sdk/operations/_test_submitter.py | 10 ++++- .../tests/sdk_cli_test/e2etests/test_cli.py | 33 +++++++++++++++++ .../chat.jinja2 | 12 ++++++ .../flow.dag.yaml | 37 +++++++++++++++++++ 5 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 src/promptflow/tests/test_configs/flows/chat_flow_with_default_history/chat.jinja2 create mode 100644 src/promptflow/tests/test_configs/flows/chat_flow_with_default_history/flow.dag.yaml diff --git a/src/promptflow/promptflow/_sdk/operations/_flow_operations.py b/src/promptflow/promptflow/_sdk/operations/_flow_operations.py index 518dbadfe83..412537ac328 100644 --- a/src/promptflow/promptflow/_sdk/operations/_flow_operations.py +++ b/src/promptflow/promptflow/_sdk/operations/_flow_operations.py @@ -98,9 +98,8 @@ def _test( flow = load_flow(flow) with TestSubmitter(flow=flow, variant=variant).init() as submitter: is_chat_flow, chat_history_input_name, _ = self._is_chat_flow(submitter.dataplane_flow) - if is_chat_flow and not inputs.get(chat_history_input_name, None): - inputs[chat_history_input_name] = [] - flow_inputs, dependency_nodes_outputs = submitter._resolve_data(node_name=node, inputs=inputs) + flow_inputs, dependency_nodes_outputs = submitter._resolve_data( + node_name=node, inputs=inputs, chat_history_name=chat_history_input_name) if node: return submitter.node_test( diff --git a/src/promptflow/promptflow/_sdk/operations/_test_submitter.py b/src/promptflow/promptflow/_sdk/operations/_test_submitter.py index 3e5f1f4912a..95572041136 100644 --- a/src/promptflow/promptflow/_sdk/operations/_test_submitter.py +++ b/src/promptflow/promptflow/_sdk/operations/_test_submitter.py @@ -57,7 +57,7 @@ def init(self): self._tuning_node = None self._node_variant = None - def _resolve_data(self, node_name: str = None, inputs: dict = None): + def _resolve_data(self, node_name: str = None, inputs: dict = None, chat_history_name: str = None): """ Resolve input to flow/node test inputs. Raise user error when missing required inputs. And log warning when unknown inputs appeared. @@ -66,6 +66,8 @@ def _resolve_data(self, node_name: str = None, inputs: dict = None): :type node_name: str :param inputs: Inputs of flow/node test. :type inputs: dict + :param chat_history_name: Chat history name. + :type chat_history_name: str :return: Dict of flow inputs, Dict of reference node output. :rtype: dict, dict """ @@ -114,7 +116,11 @@ def _resolve_data(self, node_name: str = None, inputs: dict = None): merged_inputs[name] = flow_inputs[name] else: if value.default is None: - missing_inputs.append(name) + # When the flow is a chat flow and chat_history has no default value, set an empty list for it + if chat_history_name and name == chat_history_name: + flow_inputs[name] = [] + else: + missing_inputs.append(name) else: flow_inputs[name] = value.default merged_inputs[name] = flow_inputs[name] diff --git a/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py b/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py index 4b0fb992f6b..9b549abbcd4 100644 --- a/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py +++ b/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py @@ -847,6 +847,39 @@ def mock_input(*args, **kwargs): outerr = capsys.readouterr() assert "chat flow does not support multiple chat outputs" in outerr.out + def test_flow_test_with_default_chat_history(self): + run_pf_command( + "flow", + "test", + "--flow", + f"{FLOWS_DIR}/chat_flow_with_default_history", + ) + output_path = Path(FLOWS_DIR) / "chat_flow_with_default_history" / ".promptflow" / "flow.output.json" + assert output_path.exists() + detail_path = Path(FLOWS_DIR) / "chat_flow_with_default_history" / ".promptflow" / "flow.detail.json" + assert detail_path.exists() + with open(detail_path, "r") as f: + details = json.load(f) + expect_chat_history = [ + { + "inputs": { + "question": "hi" + }, + "outputs": { + "answer": "hi" + } + }, + { + "inputs": { + "question": "who are you" + }, + "outputs": { + "answer": "who are you" + } + } + ] + assert details["flow_runs"][0]["inputs"]["chat_history"] == expect_chat_history + def test_flow_test_with_user_defined_chat_history(self, monkeypatch, capsys): chat_list = ["hi", "what is chat gpt?"] diff --git a/src/promptflow/tests/test_configs/flows/chat_flow_with_default_history/chat.jinja2 b/src/promptflow/tests/test_configs/flows/chat_flow_with_default_history/chat.jinja2 new file mode 100644 index 00000000000..c5e811e1969 --- /dev/null +++ b/src/promptflow/tests/test_configs/flows/chat_flow_with_default_history/chat.jinja2 @@ -0,0 +1,12 @@ +system: +You are a helpful assistant. + +{% for item in chat_history %} +user: +{{item.inputs.question}} +assistant: +{{item.outputs.answer}} +{% endfor %} + +user: +{{question}} \ No newline at end of file diff --git a/src/promptflow/tests/test_configs/flows/chat_flow_with_default_history/flow.dag.yaml b/src/promptflow/tests/test_configs/flows/chat_flow_with_default_history/flow.dag.yaml new file mode 100644 index 00000000000..d4409e24e2a --- /dev/null +++ b/src/promptflow/tests/test_configs/flows/chat_flow_with_default_history/flow.dag.yaml @@ -0,0 +1,37 @@ +inputs: + chat_history: + type: list + is_chat_history: true + default: + - inputs: + question: hi + outputs: + answer: hi + - inputs: + question: who are you + outputs: + answer: who are you + question: + type: string + is_chat_input: true + default: What is ChatGPT? +outputs: + answer: + type: string + reference: ${chat_node.output} + is_chat_output: true +nodes: +- inputs: + deployment_name: gpt-35-turbo + max_tokens: "256" + temperature: "0.7" + chat_history: ${inputs.chat_history} + question: ${inputs.question} + name: chat_node + type: llm + source: + type: code + path: chat.jinja2 + api: chat + provider: AzureOpenAI + connection: azure_open_ai_connection \ No newline at end of file From 9724c4ae87993cf885c434511e68a9cc33e8585a Mon Sep 17 00:00:00 2001 From: Zhengfei Wang <38847871+zhengfeiwang@users.noreply.github.com> Date: Mon, 9 Oct 2023 14:10:56 +0800 Subject: [PATCH 22/26] [promptflow][Feature] Include flow path & output path in contract with visualization (#629) # Description Include run flow path and output path in contract with visualization. ![image](https://github.com/microsoft/promptflow/assets/38847871/c45434cb-e17d-4a1e-8cb5-d173eecf79c2) # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [x] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [ ] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [X] Pull request includes test coverage for the included changes. --- src/promptflow/CHANGELOG.md | 10 ++++++++++ src/promptflow/promptflow/_sdk/_service/run.py | 4 +++- .../promptflow/_sdk/operations/_run_operations.py | 3 +++ src/promptflow/promptflow/contracts/_run_management.py | 2 ++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/promptflow/CHANGELOG.md b/src/promptflow/CHANGELOG.md index 149470e0c43..6d7c2775270 100644 --- a/src/promptflow/CHANGELOG.md +++ b/src/promptflow/CHANGELOG.md @@ -1,5 +1,15 @@ # Release History +## 0.1.0b8 (Upcoming) + +### Features Added + +### Bugs Fixed + +### Improvements + +- [SDK/CLI] Include flow path & output path in `pf run visualize` page. + ## 0.1.0b7.post1 (2023.09.28) ### Bug Fixed diff --git a/src/promptflow/promptflow/_sdk/_service/run.py b/src/promptflow/promptflow/_sdk/_service/run.py index 3150a35e104..2f32f7fd03a 100644 --- a/src/promptflow/promptflow/_sdk/_service/run.py +++ b/src/promptflow/promptflow/_sdk/_service/run.py @@ -6,7 +6,7 @@ from flask import Blueprint, jsonify, request -from promptflow._sdk._constants import get_list_view_type +from promptflow._sdk._constants import FlowRunProperties, get_list_view_type from promptflow._sdk._service.utils import api_wrapper from promptflow._sdk.operations._local_storage_operations import LocalStorageOperations from promptflow._sdk.operations._run_operations import RunOperations @@ -53,6 +53,8 @@ def get_metadata(name: str): name=run.name, display_name=run.display_name, create_time=run.created_on, + flow_path=run.properties[FlowRunProperties.FLOW_PATH], + output_path=run.properties[FlowRunProperties.OUTPUT_PATH], tags=run.tags, lineage=run.run, metrics=local_storage_op.load_metrics(), diff --git a/src/promptflow/promptflow/_sdk/operations/_run_operations.py b/src/promptflow/promptflow/_sdk/operations/_run_operations.py index 80369528eed..935a6f36c3a 100644 --- a/src/promptflow/promptflow/_sdk/operations/_run_operations.py +++ b/src/promptflow/promptflow/_sdk/operations/_run_operations.py @@ -15,6 +15,7 @@ LOGGER_NAME, MAX_RUN_LIST_RESULTS, MAX_SHOW_DETAILS_RESULTS, + FlowRunProperties, ListViewType, RunStatus, ) @@ -268,6 +269,8 @@ def _visualize(self, runs: List[Run], html_path: Optional[str] = None) -> None: name=run.name, display_name=run.display_name, create_time=run.created_on, + flow_path=run.properties[FlowRunProperties.FLOW_PATH], + output_path=run.properties[FlowRunProperties.OUTPUT_PATH], tags=run.tags, lineage=run.run, metrics=self.get_metrics(name=run.name), diff --git a/src/promptflow/promptflow/contracts/_run_management.py b/src/promptflow/promptflow/contracts/_run_management.py index d2d974cffc5..509a2ea4b13 100644 --- a/src/promptflow/promptflow/contracts/_run_management.py +++ b/src/promptflow/promptflow/contracts/_run_management.py @@ -20,6 +20,8 @@ class RunMetadata: name: str display_name: str create_time: str + flow_path: str + output_path: str tags: Optional[List[Dict[str, str]]] lineage: Optional[str] metrics: Optional[Dict[str, Any]] From 0b9d778267dc44edf51a92f50ea0699b7468e8ec Mon Sep 17 00:00:00 2001 From: Yao <46446115+16oeahr@users.noreply.github.com> Date: Mon, 9 Oct 2023 15:07:14 +0800 Subject: [PATCH 23/26] Add lock to prevent concurrency issue when refreshing connections dir and enable custom strong type connection tests (#681) # Description This pull request does the following two things: 1. Bugfix. Add lock to prevent concurrency issue when refreshing connections dir. 2. Enable custom strong type connection tests that need custom tool package. --------- Co-authored-by: yalu4 --- src/promptflow/promptflow/_sdk/_constants.py | 1 + src/promptflow/promptflow/_sdk/_utils.py | 37 +++++++++++-------- src/promptflow/tests/conftest.py | 18 +++++---- .../unittests/_core/test_tools_manager.py | 3 +- .../tests/sdk_cli_test/e2etests/test_cli.py | 32 ++++++++-------- .../test_custom_strong_type_connection.py | 1 - .../sdk_cli_test/e2etests/test_flow_run.py | 8 +++- .../sdk_cli_test/e2etests/test_flow_test.py | 10 ++++- .../sdk_cli_test/unittests/test_utils.py | 15 ++++++++ 9 files changed, 80 insertions(+), 45 deletions(-) diff --git a/src/promptflow/promptflow/_sdk/_constants.py b/src/promptflow/promptflow/_sdk/_constants.py index 67792ebcd6f..f87c4a6cfd9 100644 --- a/src/promptflow/promptflow/_sdk/_constants.py +++ b/src/promptflow/promptflow/_sdk/_constants.py @@ -37,6 +37,7 @@ KEYRING_SYSTEM = "promptflow" KEYRING_ENCRYPTION_KEY_NAME = "encryption_key" KEYRING_ENCRYPTION_LOCK_PATH = (HOME_PROMPT_FLOW_DIR / "encryption_key.lock").resolve() +REFRESH_CONNECTIONS_DIR_LOCK_PATH = (HOME_PROMPT_FLOW_DIR / "refresh_connections_dir.lock").resolve() # Note: Use this only for show. Reading input should regard all '*' string as scrubbed, no matter the length. SCRUBBED_VALUE = "******" SCRUBBED_VALUE_NO_CHANGE = "" diff --git a/src/promptflow/promptflow/_sdk/_utils.py b/src/promptflow/promptflow/_sdk/_utils.py index 2b5e960765b..63b1aa2dd44 100644 --- a/src/promptflow/promptflow/_sdk/_utils.py +++ b/src/promptflow/promptflow/_sdk/_utils.py @@ -45,6 +45,7 @@ NODE_VARIANTS, NODES, PROMPT_FLOW_DIR_NAME, + REFRESH_CONNECTIONS_DIR_LOCK_PATH, USE_VARIANTS, VARIANTS, CommonYamlFields, @@ -788,21 +789,27 @@ def _generate_connections_dir(): return connections_dir +_refresh_connection_dir_lock = FileLock(REFRESH_CONNECTIONS_DIR_LOCK_PATH) + + # This function is used by extension to generate the connection files every time collect tools. def refresh_connections_dir(connection_spec_files, connection_template_yamls): connections_dir = _generate_connections_dir() - if os.path.isdir(connections_dir): - shutil.rmtree(connections_dir) - os.makedirs(connections_dir) - - if connection_spec_files and connection_template_yamls: - for connection_name, content in connection_spec_files.items(): - file_name = connection_name + ".spec.json" - with open(connections_dir / file_name, "w") as f: - json.dump(content, f, indent=2) - - for connection_name, content in connection_template_yamls.items(): - yaml_data = yaml.safe_load(content) - file_name = connection_name + ".template.yaml" - with open(connections_dir / file_name, "w") as f: - yaml.dump(yaml_data, f, sort_keys=False) + + # Use lock to prevent concurrent access + with _refresh_connection_dir_lock: + if os.path.isdir(connections_dir): + shutil.rmtree(connections_dir) + os.makedirs(connections_dir) + + if connection_spec_files and connection_template_yamls: + for connection_name, content in connection_spec_files.items(): + file_name = connection_name + ".spec.json" + with open(connections_dir / file_name, "w") as f: + json.dump(content, f, indent=2) + + for connection_name, content in connection_template_yamls.items(): + yaml_data = yaml.safe_load(content) + file_name = connection_name + ".template.yaml" + with open(connections_dir / file_name, "w") as f: + yaml.dump(yaml_data, f, sort_keys=False) diff --git a/src/promptflow/tests/conftest.py b/src/promptflow/tests/conftest.py index cceb1ed95d2..cc816ce6224 100644 --- a/src/promptflow/tests/conftest.py +++ b/src/promptflow/tests/conftest.py @@ -7,6 +7,7 @@ import pytest from _constants import CONNECTION_FILE, ENV_FILE from _pytest.monkeypatch import MonkeyPatch +from filelock import FileLock from pytest_mock import MockerFixture from promptflow._constants import PROMPTFLOW_CONNECTIONS @@ -109,13 +110,14 @@ def prepare_symbolic_flow() -> str: @pytest.fixture(scope="session") def install_custom_tool_pkg(): - # Leave the pkg installed since multiple tests rely on it and the tests may run concurrently - try: - import my_tool_package # noqa: F401 + # The tests could be running in parallel. Use a lock to prevent race conditions. + lock = FileLock("custom_tool_pkg_installation.lock") + with lock: + try: + import my_tool_package # noqa: F401 - except ImportError: - import subprocess - import sys + except ImportError: + import subprocess + import sys - subprocess.check_call([sys.executable, "-m", "pip", "install", "test-custom-tools==0.0.1"]) - yield + subprocess.check_call([sys.executable, "-m", "pip", "install", "test-custom-tools==0.0.1"]) diff --git a/src/promptflow/tests/executor/unittests/_core/test_tools_manager.py b/src/promptflow/tests/executor/unittests/_core/test_tools_manager.py index eb43c3bcc98..ede71401b83 100644 --- a/src/promptflow/tests/executor/unittests/_core/test_tools_manager.py +++ b/src/promptflow/tests/executor/unittests/_core/test_tools_manager.py @@ -136,9 +136,8 @@ def test_gen_tool_by_source_error(self, tool_source, tool_type, error_code, erro gen_tool_by_source("fake_name", tool_source, tool_type, working_dir), assert str(ex.value) == error_message - @pytest.mark.skip("TODO: need to fix random pacakge not found error") def test_collect_package_tools_and_connections(self, install_custom_tool_pkg): - # Need to reload pkg_resources to get the latest installed packages + # Need to reload pkg_resources to get the latest installed tools import importlib import pkg_resources diff --git a/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py b/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py index 9b549abbcd4..e3fa472b400 100644 --- a/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py +++ b/src/promptflow/tests/sdk_cli_test/e2etests/test_cli.py @@ -1067,22 +1067,22 @@ def get_node_settings(_flow_dag_path: Path): }, ("configs.key1", "new_value"), ), - # ( - # "custom_strong_type_connection.yaml", - # { - # "module": "promptflow.connections", - # "type": "custom", - # "configs": { - # "api_base": "This is my first connection.", - # "promptflow.connection.custom_type": "MyFirstConnection", - # "promptflow.connection.module": "my_tool_package.connections", - # "promptflow.connection.package": "test-custom-tools", - # "promptflow.connection.package_version": "0.0.1", - # }, - # "secrets": {"api_key": SCRUBBED_VALUE}, - # }, - # ("configs.api_base", "new_value"), - # ), + ( + "custom_strong_type_connection.yaml", + { + "module": "promptflow.connections", + "type": "custom", + "configs": { + "api_base": "This is my first connection.", + "promptflow.connection.custom_type": "MyFirstConnection", + "promptflow.connection.module": "my_tool_package.connections", + "promptflow.connection.package": "test-custom-tools", + "promptflow.connection.package_version": "0.0.1", + }, + "secrets": {"api_key": SCRUBBED_VALUE}, + }, + ("configs.api_base", "new_value"), + ), ], ) def test_connection_create_update( diff --git a/src/promptflow/tests/sdk_cli_test/e2etests/test_custom_strong_type_connection.py b/src/promptflow/tests/sdk_cli_test/e2etests/test_custom_strong_type_connection.py index 9f3670947b3..b9a70e2bb8a 100644 --- a/src/promptflow/tests/sdk_cli_test/e2etests/test_custom_strong_type_connection.py +++ b/src/promptflow/tests/sdk_cli_test/e2etests/test_custom_strong_type_connection.py @@ -136,7 +136,6 @@ def test_connection_get_and_update_with_key(self): assert converted_conn.api_base == "test2" assert converted_conn.configs["api_base"] == "test2" - @pytest.mark.skip("TODO: need to fix random pacakge not found error") @pytest.mark.parametrize( "file_name, expected_updated_item, expected_secret_item", [ diff --git a/src/promptflow/tests/sdk_cli_test/e2etests/test_flow_run.py b/src/promptflow/tests/sdk_cli_test/e2etests/test_flow_run.py index f06733c4d80..e53b7d4e9c8 100644 --- a/src/promptflow/tests/sdk_cli_test/e2etests/test_flow_run.py +++ b/src/promptflow/tests/sdk_cli_test/e2etests/test_flow_run.py @@ -247,8 +247,14 @@ def test_custom_connection_overwrite(self, local_client, local_custom_connection ) assert "Connection with name new_connection not found" in str(e.value) - @pytest.mark.skip("TODO: need to fix random pacakge not found error") def test_custom_strong_type_connection_basic_flow(self, install_custom_tool_pkg, local_client, pf): + # Need to reload pkg_resources to get the latest installed tools + import importlib + + import pkg_resources + + importlib.reload(pkg_resources) + result = pf.run( flow=f"{FLOWS_DIR}/custom_strong_type_connection_basic_flow", data=f"{FLOWS_DIR}/custom_strong_type_connection_basic_flow/data.jsonl", diff --git a/src/promptflow/tests/sdk_cli_test/e2etests/test_flow_test.py b/src/promptflow/tests/sdk_cli_test/e2etests/test_flow_test.py index 1c73eddc8c9..eadc28328b2 100644 --- a/src/promptflow/tests/sdk_cli_test/e2etests/test_flow_test.py +++ b/src/promptflow/tests/sdk_cli_test/e2etests/test_flow_test.py @@ -33,8 +33,14 @@ def test_pf_test_flow(self): result = _client.test(flow=f"{FLOWS_DIR}/web_classification") assert all([key in FLOW_RESULT_KEYS for key in result]) - @pytest.mark.skip("TODO: need to fix random pacakge not found error") def test_pf_test_flow_with_custom_strong_type_connection(self, install_custom_tool_pkg): + # Need to reload pkg_resources to get the latest installed tools + import importlib + + import pkg_resources + + importlib.reload(pkg_resources) + inputs = {"text": "Hello World!"} flow_path = Path(f"{FLOWS_DIR}/custom_strong_type_connection_basic_flow").absolute() @@ -43,7 +49,7 @@ def test_pf_test_flow_with_custom_strong_type_connection(self, install_custom_to assert result == {"out": "connection_value is MyFirstConnection: True"} # Test that connection - result = _client.test(flow=flow_path, inputs=inputs, node="My_Second_Tool_usi3") + result = _client.test(flow=flow_path, inputs={"input_text": "Hello World!"}, node="My_Second_Tool_usi3") assert result == "Hello World!This is my first custom connection." def test_pf_test_with_streaming_output(self): diff --git a/src/promptflow/tests/sdk_cli_test/unittests/test_utils.py b/src/promptflow/tests/sdk_cli_test/unittests/test_utils.py index 35e6f33a0c6..c3104b06330 100644 --- a/src/promptflow/tests/sdk_cli_test/unittests/test_utils.py +++ b/src/promptflow/tests/sdk_cli_test/unittests/test_utils.py @@ -7,6 +7,7 @@ import shutil import sys import tempfile +import threading from pathlib import Path from unittest.mock import patch @@ -27,6 +28,7 @@ decrypt_secret_value, encrypt_secret_value, generate_flow_tools_json, + refresh_connections_dir, resolve_connections_environment_variable_reference, snake_to_camel, ) @@ -131,6 +133,19 @@ def test_generate_connections_dir(self, python_path, env_hash): result = _generate_connections_dir() assert result == expected_result + @pytest.mark.parametrize("concurrent_count", [1, 2, 4, 8]) + def test_concurrent_execution_of_refresh_connections_dir(self, concurrent_count): + threads = [] + + # Create and start threads + for _ in range(concurrent_count): + thread = threading.Thread(target=refresh_connections_dir, args={None, None}) + thread.start() + threads.append(thread) + + for thread in threads: + thread.join() + @pytest.mark.unittest class TestCLIUtils: From 793794b9bafcfe2a43d12000f6640e8e34ef1dd2 Mon Sep 17 00:00:00 2001 From: Yao <46446115+16oeahr@users.noreply.github.com> Date: Mon, 9 Oct 2023 16:45:31 +0800 Subject: [PATCH 24/26] Refine type check for is_custom_strong_type (#676) # Description Refine the type check for is_custom_strong_type static method as a follow-up to this pull request: https://github.com/microsoft/promptflow/pull/649 For generic type annotations like list[str], tuple[str, int], dict[str, typing.Any] would be types.GenericAlias so return False. For other types that would be passed to issubclass to check if it is the subclass of CustomStrongTypeConnection. The try-except block is still kept since it cannot be confidently removed due to the uncertainty of TypeError that may occur. TypeError is not expected to happen, but if it does, we will log it for debugging and return False. Apart from ut, e2e flow test using below script can pass: ``` def test(self): from promptflow._sdk._pf_client import PFClient client = PFClient() client.flows.test(flow=r"D:\proj\github\ms\promptflow\examples\flows\standard\gen-docstring") ``` ![image](https://github.com/microsoft/promptflow/assets/46446115/dd47eb2a-f935-4793-b1a8-6159ccf07dae) --------- Co-authored-by: yalu4 --- src/promptflow/promptflow/contracts/tool.py | 27 ++++++++-- .../executor/unittests/contracts/test_tool.py | 54 +++++++++++++++++++ 2 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 src/promptflow/tests/executor/unittests/contracts/test_tool.py diff --git a/src/promptflow/promptflow/contracts/tool.py b/src/promptflow/promptflow/contracts/tool.py index 8ac80e5669b..f492136c77c 100644 --- a/src/promptflow/promptflow/contracts/tool.py +++ b/src/promptflow/promptflow/contracts/tool.py @@ -3,15 +3,18 @@ # --------------------------------------------------------- import json +import logging +import types from dataclasses import asdict, dataclass from enum import Enum from typing import Any, Dict, List, Optional, Type, TypeVar from promptflow._constants import CONNECTION_NAME_PROPERTY -from .types import FilePath, PromptTemplate, Secret from .multimedia import Image +from .types import FilePath, PromptTemplate, Secret +logger = logging.getLogger(__name__) T = TypeVar("T", bound="Enum") @@ -185,14 +188,28 @@ def is_connection_value(val: Any) -> bool: return val in connections.values() or ConnectionType.is_custom_strong_type(val) @staticmethod - def is_custom_strong_type(val): - """Check if the given value is a custom strong type connection.""" + def is_custom_strong_type(val: Any) -> bool: + """Check if the given value is a custom strong type connection. + + :param val: The value to check + :type val: Any + :return: Whether the given value is a custom strong type + :rtype: bool + """ + from promptflow._sdk.entities import CustomStrongTypeConnection - # TODO: replace the hotfix "try-except" with a more graceful solution." + val = type(val) if not isinstance(val, type) else val + # Check for instances of GenericAlias (for parameterized generic types like list[str]) + if isinstance(val, types.GenericAlias): + return False + try: return issubclass(val, CustomStrongTypeConnection) - except Exception: + except TypeError as e: + # TypeError is not expected to happen, but if it does, we will log it for debugging and return False. + # The try-except block cannot be confidently removed due to the uncertainty of TypeError that may occur. + logger.warning(f"Failed to check if {val} is a custom strong type: {e}") return False @staticmethod diff --git a/src/promptflow/tests/executor/unittests/contracts/test_tool.py b/src/promptflow/tests/executor/unittests/contracts/test_tool.py new file mode 100644 index 00000000000..815e2223bce --- /dev/null +++ b/src/promptflow/tests/executor/unittests/contracts/test_tool.py @@ -0,0 +1,54 @@ +from typing import Any, Callable, NewType, Optional, Tuple, TypeVar, Union + +import pytest + +from promptflow._sdk.entities import CustomStrongTypeConnection +from promptflow.contracts.tool import ConnectionType + + +class MyConnection(CustomStrongTypeConnection): + pass + + +my_connection = MyConnection(name="my_connection", secrets={"key": "value"}) + + +def some_function(): + pass + + +@pytest.mark.unittest +class TestToolContract: + @pytest.mark.parametrize( + "val, expected_res", + [ + (my_connection, True), + (MyConnection, True), + (list, False), + (list[str], False), + (list[int], False), + ([1, 2, 3], False), + (float, False), + (int, False), + (5, False), + (str, False), + (some_function, False), + (Union[str, int], False), + # ((int | str), False), # Python 3.10 + (tuple, False), + (tuple[str, int], False), + (Tuple[int, ...], False), + (dict[str, Any], False), + ({"test1": [1, 2, 3], "test2": [4, 5, 6], "test3": [7, 8, 9]}, False), + (Any, False), + (None, False), + (Optional[str], False), + (TypeVar("T"), False), + (TypeVar, False), + (Callable, False), + (Callable[..., Any], False), + (NewType("MyType", int), False), + ], + ) + def test_is_custom_strong_type(self, val, expected_res): + assert ConnectionType.is_custom_strong_type(val) == expected_res From c3899383c12336136a025a5b3288468e36ec37c9 Mon Sep 17 00:00:00 2001 From: Peiwen Gao <111329184+PeiwenGaoMS@users.noreply.github.com> Date: Tue, 10 Oct 2023 11:56:10 +0800 Subject: [PATCH 25/26] [Docs] Add doc for condition flow with activate (#277) # Description - cd `./scripts/docs` - run `.\doc_generation.ps1 -WithReferenceDoc -WarningAsError:$true` - check `./_build/how-to-guides/develop-a-flow/develop-conditional-flow.html` ## Document screenshot ![image](https://github.com/microsoft/promptflow/assets/111329184/8036be62-1973-4c88-8453-b084ddea82c9) ![image](https://github.com/microsoft/promptflow/assets/111329184/646e09fe-002b-49ad-b60d-52e91ff469d3) ![image](https://github.com/microsoft/promptflow/assets/111329184/59690fc0-d50e-4c58-9373-a76027a1ac00) ![image](https://github.com/microsoft/promptflow/assets/111329184/20209e64-8af4-4ad9-b3a5-05c81caeeecc) ![image](https://github.com/microsoft/promptflow/assets/111329184/963cd7ac-6002-41cc-8d3f-50b81f499fee) # All Promptflow Contribution checklist: - [x] **The pull request does not introduce [breaking changes]** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [x] **I have read the [contribution guidelines](../CONTRIBUTING.md).** ## General Guidelines and Best Practices - [x] Title of the pull request is clear and informative. - [x] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [x] Pull request includes test coverage for the included changes. --------- Co-authored-by: Peiwen Gao --- .../add-conditional-control-to-a-flow.md | 84 ++++++++++++++++++ docs/how-to-guides/index.md | 1 + docs/how-to-guides/init-and-test-a-flow.md | 2 +- docs/how-to-guides/quick-start.md | 7 +- docs/index.md | 7 +- .../activate_config.png | Bin 0 -> 23544 bytes .../activate_when_bypassed.png | Bin 0 -> 56674 bytes .../bypassed_nodes.png | Bin 0 -> 45279 bytes .../dependencies_bypassed.png | Bin 0 -> 49958 bytes .../output_bypassed.png | Bin 0 -> 38973 bytes .../provide_default_value.png | Bin 0 -> 52139 bytes .../visual_editor.png | Bin 0 -> 20053 bytes 12 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 docs/how-to-guides/add-conditional-control-to-a-flow.md create mode 100644 docs/media/how-to-guides/conditional-flow-with-activate/activate_config.png create mode 100644 docs/media/how-to-guides/conditional-flow-with-activate/activate_when_bypassed.png create mode 100644 docs/media/how-to-guides/conditional-flow-with-activate/bypassed_nodes.png create mode 100644 docs/media/how-to-guides/conditional-flow-with-activate/dependencies_bypassed.png create mode 100644 docs/media/how-to-guides/conditional-flow-with-activate/output_bypassed.png create mode 100644 docs/media/how-to-guides/conditional-flow-with-activate/provide_default_value.png create mode 100644 docs/media/how-to-guides/conditional-flow-with-activate/visual_editor.png diff --git a/docs/how-to-guides/add-conditional-control-to-a-flow.md b/docs/how-to-guides/add-conditional-control-to-a-flow.md new file mode 100644 index 00000000000..369a305dc19 --- /dev/null +++ b/docs/how-to-guides/add-conditional-control-to-a-flow.md @@ -0,0 +1,84 @@ +# Add conditional control to a flow + +:::{admonition} Experimental feature +This is an experimental feature, and may change at any time. Learn [more](faq.md#stable-vs-experimental). +::: + +In Prompt flow, we support control logic by activate config, like if-else, switch. Activate config enables conditional execution of nodes within your flow, ensuring that specific actions are taken only when the specified conditions are met. + +This guide will help you learn how to use activate config to add conditional control to your flow. + +## Prerequisites + +Please ensure that your promptflow version is greater than `0.1.0b5`. + +## Usage + +Each node in your flow can have an associated activate config, specifying when it should execute and when it should bypass. If a node has activate config, it will only be executed when the activate condition is met. The configuration consists of two essential components: +- `activate.when`: The condition that triggers the execution of the node. It can be based on the outputs of a previous node, or the inputs of the flow. +- `activate.is`: The condition's value, which can be a constant value of string, boolean, integer, double. + +You can manually change the flow.dag.yaml in the flow folder or use the visual editor in VS Code Extension to add activate config to nodes in the flow. + +::::{tab-set} +:::{tab-item} YAML +:sync: YAML + +You can add activate config in the node section of flow yaml. +```yaml +activate: + when: ${node.output} + is: true +``` + +::: + +:::{tab-item} VS Code Extension +:sync: VS Code Extension + +- Click `Visual editor` in the flow.dag.yaml to enter the flow interface. +![visual_editor](../media/how-to-guides/conditional-flow-with-activate/visual_editor.png) + +- Click on the `Activation config` section in the node you want to add and fill in the values for "when" and "is". +![activate_config](../media/how-to-guides/conditional-flow-with-activate/activate_config.png) + +::: + +:::: + +### Further details and important notes +1. If the node using the python tool has an input that references a node that may be bypassed, please provide a default value for this input. This helps prevent errors in the current node due to missing parameters. + + ![provide_default_value](../media/how-to-guides/conditional-flow-with-activate/provide_default_value.png) + +2. Please avoid directly connecting nodes that might be bypassed to the flow's outputs. This can lead to flow failures due to a lack of valid values on the flow output. + + ![output_bypassed](../media/how-to-guides/conditional-flow-with-activate/output_bypassed.png) + +3. In a conditional flow, if a node is bypassed, it status will be marked as `Bypassed`, as shown in the figure below. There are three situations in which the node will be bypassed. + ![bypassed_nodes](../media/how-to-guides/conditional-flow-with-activate/bypassed_nodes.png) + + + (1) If a node has activate config and the value of `activate.when` is equals to `activate.is`, it will be bypassed. + + (2) If a node has activate config and the node pointed to by `activate.when` is bypassed, it will be bypassed. + + ![activate_when_bypassed](../media/how-to-guides/conditional-flow-with-activate/activate_when_bypassed.png) + + (3) If a node does not have activate config but depends on other nodes that have been bypassed, it will be bypassed. + + ![dependencies_bypassed](../media/how-to-guides/conditional-flow-with-activate/dependencies_bypassed.png) + + + +## Example flow + +Let's illustrate how to use activate config with practical examples. + +- If-Else scenario: Learn how to develop a conditional flow for if-else scenarios. [View Example](https://github.com/microsoft/promptflow/tree/main/examples/flows/standard/conditional-flow-for-if-else) +- Switch scenario: Explore conditional flow for switch scenarios. [View Example](https://github.com/microsoft/promptflow/tree/main/examples/flows/standard/conditional-flow-for-switch) + + +## Next steps + +- [Run and evaluate a flow](./run-and-evaluate-a-flow.md) diff --git a/docs/how-to-guides/index.md b/docs/how-to-guides/index.md index 32cd01d1a67..81ae45bb1f6 100644 --- a/docs/how-to-guides/index.md +++ b/docs/how-to-guides/index.md @@ -7,6 +7,7 @@ Simple and short articles grouped by topics, each introduces a core feature of p develop-a-flow/index init-and-test-a-flow +add-conditional-control-to-a-flow run-and-evaluate-a-flow tune-prompts-with-variants deploy-a-flow/index diff --git a/docs/how-to-guides/init-and-test-a-flow.md b/docs/how-to-guides/init-and-test-a-flow.md index 4adb255a1ea..e5c5a751f04 100644 --- a/docs/how-to-guides/init-and-test-a-flow.md +++ b/docs/how-to-guides/init-and-test-a-flow.md @@ -294,4 +294,4 @@ Break points and debugging functionalities for the Python steps in your flow. Ju ## Next steps -- [Run and evaluate a flow](./run-and-evaluate-a-flow.md) \ No newline at end of file +- [Add conditional control to a flow](./add-conditional-control-to-a-flow.md) \ No newline at end of file diff --git a/docs/how-to-guides/quick-start.md b/docs/how-to-guides/quick-start.md index 40b06d0a9f6..cc8abecbc60 100644 --- a/docs/how-to-guides/quick-start.md +++ b/docs/how-to-guides/quick-start.md @@ -1,6 +1,6 @@ # Quick Start -This guide will walk you through the fist step using of prompt flow code-first experience. +This guide will walk you through the fist step using of prompt flow code-first experience. **Prerequisite** - To make the most of this tutorial, you'll need: @@ -87,12 +87,10 @@ _Note: Prompt flow VS Code Extension is highly recommended for flow development 3. Select python interpreter ![vscode](../media/how-to-guides/quick-start/vs_code_interpreter_0.png) - ![vscode](../media/how-to-guides/quick-start/vs_code_interpreter_1.png) 2. Open dag in vscode. You can open the `flow.dag.yaml` as yaml file, or you can also open it in `visual editor`. - ![vscode](../media/how-to-guides/quick-start/vs_code_dag_0.png) ## Develop and test your flow @@ -116,7 +114,7 @@ See more details of this topic in [Develop a flow](./develop-a-flow/index.md). The [`connection`](../concepts/concept-connections.md) helps securely store and manage secret keys or other sensitive credentials required for interacting with LLM and other external tools for example Azure Content Safety. -The sample flow [web-classification](https://github.com/microsoft/promptflow/tree/main/examples/flows/standard/web-classification) uses connection `open_ai_connection` inside, e.g. `classify_with_llm` node needs to talk to `llm` using the connection. +The sample flow [web-classification](https://github.com/microsoft/promptflow/tree/main/examples/flows/standard/web-classification) uses connection `open_ai_connection` inside, e.g. `classify_with_llm` node needs to talk to `llm` using the connection. We need to set up the connection if we haven't added it before. Once created, the connection will be stored in local db and can be used in any flow. @@ -286,6 +284,7 @@ See more details of this topic in [Initialize and test a flow](./init-and-test-a Learn more on how to: - [Develop a flow](./develop-a-flow/index.md): details on how to develop a flow by writing a flow yaml from scratch. - [Initialize and test a flow](./init-and-test-a-flow.md): details on how develop a flow from scratch or existing code. +- [Add conditional control to a flow](./add-conditional-control-to-a-flow.md): how to use activate config to add conditional control to a flow. - [Run and evaluate a flow](./run-and-evaluate-a-flow.md): run and evaluate the flow using multi line data file. - [Deploy a flow](./deploy-a-flow/index.md): how to deploy the flow as a web app. - [Manage connections](./manage-connections.md): how to manage the endpoints/secrets information to access external services including LLMs. diff --git a/docs/index.md b/docs/index.md index 7afeb5cd245..ecb6ea58449 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,11 +7,11 @@ html_theme.sidebar_secondary.remove: true # Prompt flow -[**Prompt flow**](https://github.com/microsoft/promptflow) is a suite of development tools designed to streamline the end-to-end development cycle of LLM-based AI applications, from ideation, prototyping, testing, evaluation to production deployment and monitoring. It makes prompt engineering much easier and enables you to build LLM apps with production quality. +[**Prompt flow**](https://github.com/microsoft/promptflow) is a suite of development tools designed to streamline the end-to-end development cycle of LLM-based AI applications, from ideation, prototyping, testing, evaluation to production deployment and monitoring. It makes prompt engineering much easier and enables you to build LLM apps with production quality. -With prompt flow, you will be able to: +With prompt flow, you will be able to: -- **Create [flows](./concepts/concept-flows.md)** that link [LLMs](./reference/tools-reference/llm-tool.md), [prompts](./reference/tools-reference/prompt-tool.md), [Python](./reference/tools-reference/python-tool.md) code and other [tools](./concepts/concept-tools.md) together in a executable workflow. +- **Create [flows](./concepts/concept-flows.md)** that link [LLMs](./reference/tools-reference/llm-tool.md), [prompts](./reference/tools-reference/prompt-tool.md), [Python](./reference/tools-reference/python-tool.md) code and other [tools](./concepts/concept-tools.md) together in a executable workflow. - **Debug and iterate your flows**, especially the interaction with LLMs with ease. - **Evaluate your flows**, calculate quality and performance metrics with larger datasets. - **Integrate the testing and evaluation into your CI/CD system** to ensure quality of your flow. @@ -40,6 +40,7 @@ This documentation site contains guides for prompt flow [sdk, cli](https://pypi. Articles guide user to complete a specific task in prompt flow.

- [Develop a flow](how-to-guides/develop-a-flow/index.md)
- [Initialize and test a flow](how-to-guides/init-and-test-a-flow.md)
+ - [Add conditional control to a flow](how-to-guides/add-conditional-control-to-a-flow.md)
- [Run and evaluate a flow](how-to-guides/run-and-evaluate-a-flow.md)
- [Tune prompts using variants](how-to-guides/tune-prompts-with-variants.md)
- [Deploy a flow](how-to-guides/deploy-a-flow/index.md)
diff --git a/docs/media/how-to-guides/conditional-flow-with-activate/activate_config.png b/docs/media/how-to-guides/conditional-flow-with-activate/activate_config.png new file mode 100644 index 0000000000000000000000000000000000000000..32967c5d5afb2f81ec9a10e5e1d858200feb6d1d GIT binary patch literal 23544 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�BHij)y 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 literal 0 HcmV?d00001 diff --git a/docs/media/how-to-guides/conditional-flow-with-activate/activate_when_bypassed.png b/docs/media/how-to-guides/conditional-flow-with-activate/activate_when_bypassed.png new file mode 100644 index 0000000000000000000000000000000000000000..797173f91a078e11448f62b4325844e6c137165b GIT binary patch literal 56674 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�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%0DHOYB{gv=;J~ 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 K>7;AZ{{A;)i@|;X literal 0 HcmV?d00001 diff --git a/docs/media/how-to-guides/conditional-flow-with-activate/dependencies_bypassed.png b/docs/media/how-to-guides/conditional-flow-with-activate/dependencies_bypassed.png new file mode 100644 index 0000000000000000000000000000000000000000..f30ec9e134356b7c908efaee2d89ec26a1cf3fab GIT binary patch literal 49958 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 literal 0 HcmV?d00001 diff --git a/docs/media/how-to-guides/conditional-flow-with-activate/output_bypassed.png b/docs/media/how-to-guides/conditional-flow-with-activate/output_bypassed.png new file mode 100644 index 0000000000000000000000000000000000000000..55aecc49bdd1af5459c1d678675bba57e9a16543 GIT binary patch literal 38973 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 d5fKqZ>Oa@e>XD Date: Tue, 10 Oct 2023 12:07:57 +0800 Subject: [PATCH 26/26] update promptflow-tools version to 0.1.0b7 (#694) # Description update promptflow-tools version to 0.1.0b7 # All Promptflow Contribution checklist: - [X] **The pull request does not introduce [breaking changes].** - [ ] **CHANGELOG is updated for new features, bug fixes or other significant changes.** - [X] **I have read the [contribution guidelines](../CONTRIBUTING.md).** - [X] **Create an issue and link to the pull request to get dedicated review from promptflow team. Learn more: [suggested workflow](../CONTRIBUTING.md#suggested-workflow).** ## General Guidelines and Best Practices - [X] Title of the pull request is clear and informative. - [X] There are a small number of commits, each of which have an informative message. This means that previously merged commits do not appear in the history of the PR. For more information on cleaning up the commits in your PR, [see this page](https://github.com/Azure/azure-powershell/blob/master/documentation/development-docs/cleaning-up-commits.md). ### Testing Guidelines - [X] Pull request includes test coverage for the included changes. --- src/promptflow-tools/promptflow/version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/promptflow-tools/promptflow/version.txt b/src/promptflow-tools/promptflow/version.txt index e3c3372d4a2..1b6f892c694 100644 --- a/src/promptflow-tools/promptflow/version.txt +++ b/src/promptflow-tools/promptflow/version.txt @@ -1 +1 @@ -VERSION = "0.1.0b6" \ No newline at end of file +VERSION = "0.1.0b7" \ No newline at end of file