Skip to content
Open

949 #969

Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 25 additions & 75 deletions src/sempy_labs/tom/_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -4660,7 +4660,7 @@ def remove_changed_property(self, object, property: str):
def generate_measure_descriptions(
self,
measure_name: Optional[str | List[str]] = None,
max_batch_size: Optional[int] = 5,
max_batch_size: Optional[int] = 1,
) -> pd.DataFrame:
"""
Auto-generates descriptions for measures using an LLM. This function requires a paid F-sku (Fabric) of F64 or higher.
Expand All @@ -4672,8 +4672,8 @@ def generate_measure_descriptions(
measure_name : str | List[str], default=None
The measure name (or a list of measure names).
Defaults to None which generates descriptions for all measures in the semantic model.
max_batch_size : int, default=5
Sets the max batch size for each API call.
max_batch_size : int, default=1
Sets the max batch size for each API call. This parameter has been decomissioned.

Returns
-------
Expand All @@ -4698,45 +4698,30 @@ def generate_measure_descriptions(
if isinstance(measure_name, str):
measure_name = [measure_name]

if len(measure_name) > max_batch_size:
measure_lists = [
measure_name[i : i + max_batch_size]
for i in range(0, len(measure_name), max_batch_size)
]
else:
measure_lists = [measure_name]

# Each API call can have a max of 5 measures
for measure_list in measure_lists:
payload = {
"scenarioDefinition": {
"generateModelItemDescriptions": {
"modelItems": [],
},
payload = {
"scenarioDefinition": {
"generateModelItemDescriptions": {
"modelItems": [],
},
"workspaceId": self._workspace_id,
"artifactInfo": {"artifactType": "SemanticModel"},
}
for m_name in measure_list:
expr, t_name = next(
(ms.Expression, ms.Parent.Name)
for ms in self.all_measures()
if ms.Name == m_name
)
if t_name is None:
raise ValueError(
f"{icons.red_dot} The '{m_name}' measure does not exist in the '{self._dataset_name}' semantic model within the '{self._workspace_name}' workspace."
)
},
"workspaceId": self._workspace_id,
"artifactInfo": {"artifactType": "SemanticModel"},
}

new_item = {
"urn": m_name,
"type": 1,
"name": m_name,
"expression": expr,
}
payload["scenarioDefinition"]["generateModelItemDescriptions"][
"modelItems"
].append(new_item)
for m in measure_name:
(table_name, expr) = next(
(ms.Parent.Name, ms.Expression)
for ms in self.all_measures()
if ms.Name == m
)
payload["scenarioDefinition"]["generateModelItemDescriptions"][
"modelItems"
] = {
"urn": m,
"type": 1,
"name": m,
"expression": expr,
}

token = notebookutils.credentials.getToken("pbi")
headers = {"Authorization": f"Bearer {token}"}
Expand Down Expand Up @@ -4775,41 +4760,6 @@ def generate_measure_descriptions(

return df

# def process_measure(m):
# table_name = m.Parent.Name
# m_name = m.Name
# m_name_fixed = "1"
# expr = m.Expression
# if measure_name is None or m_name in measure_name:
# payload = {
# "scenarioDefinition": {
# "generateModelItemDescriptions": {
# "modelItems": [
# {
# "urn": f"modelobject://Table/{table_name}/Measure/{m_name_fixed}",
# "type": 1,
# "name": m_name,
# "expression": expr,
# }
# ]
# }
# },
# "workspaceId": workspace_id,
# "artifactInfo": {"artifactType": "SemanticModel"},
# }

# response = client.post(
# "/explore/v202304/nl2nl/completions", json=payload
# )
# if response.status_code != 200:
# raise FabricHTTPException(response)

# desc = response.json()["modelItems"][0]["description"]
# m.Description = desc

# with concurrent.futures.ThreadPoolExecutor() as executor:
# executor.map(process_measure, self.all_measures())

def set_value_filter_behavior(self, value_filter_behavior: str = "Automatic"):
"""
Sets the `Value Filter Behavior <https://learn.microsoft.com/power-bi/transform-model/value-filter-behavior>`_ property for the semantic model.
Expand Down
Loading