Files
wehub-resource-sync e768098d0e
tools_continuous_delivery / Private PyPI non-main branch release (push) Has been skipped
tools_continuous_delivery / Private PyPI main branch release (push) Failing after 2m42s
Publish Promptflow Doc / Build (push) Has been cancelled
Publish Promptflow Doc / Deploy (push) Has been cancelled
Flake8 Lint / flake8 (push) Has been cancelled
Spell check CI / Spell_Check (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:52 +08:00

114 lines
3.7 KiB
Python

import unittest
import traceback
import os
import promptflow.azure as azure
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
import promptflow
class BaseTest(unittest.TestCase):
def setUp(self) -> None:
root = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../")
self.flow_path = os.path.join(root, "named-entity-recognition")
self.data_path = os.path.join(self.flow_path, "data.jsonl")
self.eval_match_rate_flow_path = os.path.join(root, "../evaluation/eval-entity-match-rate")
self.all_runs_generated = []
return super().setUp()
def tearDown(self):
for run in self.all_runs_generated:
try:
self.pf.runs.archive(run.name)
except Exception as e:
print(e)
traceback.print_exc()
return super().setUp()
def check_run_basics(self, run, name):
self.assertTrue(run is not None)
self.assertEqual(run.display_name, name)
self.assertEqual(run.tags["unittest"], "true")
class TestEvalAzure(BaseTest):
def setUp(self) -> None:
try:
credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")
except Exception:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
credential = InteractiveBrowserCredential()
self.pf = azure.PFClient.from_config(credential=credential)
return super().setUp()
def test_bulk_run_and_eval(self):
run = self.pf.run(
flow=self.flow_path,
data=self.data_path,
column_mapping={
"text": "${data.text}",
"entity_type": "${data.entity_type}"
},
connections={"NER_LLM": {"connection": "open_ai_connection"}},
display_name="ner_bulk_run",
tags={"unittest": "true"},
stream=True)
self.all_runs_generated.append(run)
self.check_run_basics(run, "ner_bulk_run")
eval = self.pf.run(
flow=self.eval_match_rate_flow_path,
run=run,
data=self.data_path,
column_mapping={
"entities": "${run.outputs.entities}",
"ground_truth": "${data.results}"
},
display_name="eval_match_rate",
tags={"unittest": "true"},
stream=True)
self.all_runs_generated.append(eval)
self.check_run_basics(eval, "eval_match_rate")
return eval
class TestEval(BaseTest):
def setUp(self) -> None:
self.pf = promptflow.PFClient()
return super().setUp()
def test_bulk_run_and_eval(self):
run = self.pf.run(
flow=self.flow_path,
data=self.data_path,
column_mapping={
"text": "${data.text}",
"entity_type": "${data.entity_type}"
},
display_name="ner_bulk_run",
tags={"unittest": "true"},
stream=True)
self.all_runs_generated.append(run)
self.check_run_basics(run, "ner_bulk_run")
eval = self.pf.run(
flow=self.eval_match_rate_flow_path,
run=run,
data=self.data_path,
column_mapping={
"entities": "${run.outputs.entities}",
"ground_truth": "${data.results}"
},
display_name="eval_match_rate",
tags={"unittest": "true"},
stream=True)
self.all_runs_generated.append(eval)
self.check_run_basics(eval, "eval_match_rate")
return eval