azure-ai-evaluation 1.0.1__py3-none-any.whl → 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of azure-ai-evaluation might be problematic. Click here for more details.
- azure/ai/evaluation/_azure/__init__.py +3 -0
- azure/ai/evaluation/_azure/_clients.py +188 -0
- azure/ai/evaluation/_azure/_models.py +227 -0
- azure/ai/evaluation/_azure/_token_manager.py +118 -0
- azure/ai/evaluation/_common/rai_service.py +30 -21
- azure/ai/evaluation/_constants.py +1 -0
- azure/ai/evaluation/_evaluate/_batch_run/target_run_context.py +1 -1
- azure/ai/evaluation/_evaluate/_eval_run.py +14 -43
- azure/ai/evaluation/_evaluate/_evaluate.py +9 -34
- azure/ai/evaluation/_evaluate/_utils.py +66 -34
- azure/ai/evaluation/_evaluators/_common/_base_eval.py +71 -1
- azure/ai/evaluation/_evaluators/_common/_base_prompty_eval.py +12 -1
- azure/ai/evaluation/_evaluators/_common/_base_rai_svc_eval.py +33 -1
- azure/ai/evaluation/_evaluators/_content_safety/_content_safety.py +3 -3
- azure/ai/evaluation/_evaluators/_similarity/_similarity.py +1 -1
- azure/ai/evaluation/_http_utils.py +6 -4
- azure/ai/evaluation/_vendor/rouge_score/rouge_scorer.py +0 -4
- azure/ai/evaluation/_vendor/rouge_score/scoring.py +0 -4
- azure/ai/evaluation/_vendor/rouge_score/tokenize.py +0 -4
- azure/ai/evaluation/_version.py +1 -1
- azure/ai/evaluation/simulator/_adversarial_scenario.py +2 -0
- azure/ai/evaluation/simulator/_adversarial_simulator.py +35 -16
- azure/ai/evaluation/simulator/_conversation/__init__.py +128 -7
- azure/ai/evaluation/simulator/_conversation/_conversation.py +0 -1
- azure/ai/evaluation/simulator/_indirect_attack_simulator.py +1 -0
- azure/ai/evaluation/simulator/_model_tools/_rai_client.py +40 -0
- azure/ai/evaluation/simulator/_model_tools/_template_handler.py +1 -0
- azure/ai/evaluation/simulator/_simulator.py +3 -0
- {azure_ai_evaluation-1.0.1.dist-info → azure_ai_evaluation-1.1.0.dist-info}/METADATA +15 -10
- {azure_ai_evaluation-1.0.1.dist-info → azure_ai_evaluation-1.1.0.dist-info}/RECORD +33 -29
- {azure_ai_evaluation-1.0.1.dist-info → azure_ai_evaluation-1.1.0.dist-info}/NOTICE.txt +0 -0
- {azure_ai_evaluation-1.0.1.dist-info → azure_ai_evaluation-1.1.0.dist-info}/WHEEL +0 -0
- {azure_ai_evaluation-1.0.1.dist-info → azure_ai_evaluation-1.1.0.dist-info}/top_level.txt +0 -0
azure/ai/evaluation/_version.py
CHANGED
|
@@ -6,8 +6,7 @@
|
|
|
6
6
|
import asyncio
|
|
7
7
|
import logging
|
|
8
8
|
import random
|
|
9
|
-
from typing import Any, Callable, Dict, List,
|
|
10
|
-
from itertools import zip_longest
|
|
9
|
+
from typing import Any, Callable, Dict, List, Optional, Union, cast
|
|
11
10
|
|
|
12
11
|
from tqdm import tqdm
|
|
13
12
|
|
|
@@ -16,13 +15,19 @@ from azure.ai.evaluation._common.utils import validate_azure_ai_project
|
|
|
16
15
|
from azure.ai.evaluation._exceptions import ErrorBlame, ErrorCategory, ErrorTarget, EvaluationException
|
|
17
16
|
from azure.ai.evaluation._http_utils import get_async_http_client
|
|
18
17
|
from azure.ai.evaluation._model_configurations import AzureAIProject
|
|
19
|
-
from azure.ai.evaluation.simulator import AdversarialScenario
|
|
18
|
+
from azure.ai.evaluation.simulator import AdversarialScenario, AdversarialScenarioJailbreak
|
|
20
19
|
from azure.ai.evaluation.simulator._adversarial_scenario import _UnstableAdversarialScenario
|
|
21
20
|
from azure.core.credentials import TokenCredential
|
|
22
21
|
from azure.core.pipeline.policies import AsyncRetryPolicy, RetryMode
|
|
23
22
|
|
|
24
23
|
from ._constants import SupportedLanguages
|
|
25
|
-
from ._conversation import
|
|
24
|
+
from ._conversation import (
|
|
25
|
+
CallbackConversationBot,
|
|
26
|
+
MultiModalConversationBot,
|
|
27
|
+
ConversationBot,
|
|
28
|
+
ConversationRole,
|
|
29
|
+
ConversationTurn,
|
|
30
|
+
)
|
|
26
31
|
from ._conversation._conversation import simulate_conversation
|
|
27
32
|
from ._model_tools import (
|
|
28
33
|
AdversarialTemplateHandler,
|
|
@@ -205,7 +210,6 @@ class AdversarialSimulator:
|
|
|
205
210
|
ncols=100,
|
|
206
211
|
unit="simulations",
|
|
207
212
|
)
|
|
208
|
-
|
|
209
213
|
if randomize_order:
|
|
210
214
|
# The template parameter lists are persistent across sim runs within a session,
|
|
211
215
|
# So randomize a the selection instead of the parameter list directly,
|
|
@@ -214,11 +218,11 @@ class AdversarialSimulator:
|
|
|
214
218
|
random.seed(randomization_seed)
|
|
215
219
|
random.shuffle(templates)
|
|
216
220
|
parameter_lists = [t.template_parameters for t in templates]
|
|
217
|
-
zipped_parameters = list(
|
|
221
|
+
zipped_parameters = list(zip(*parameter_lists))
|
|
218
222
|
for param_group in zipped_parameters:
|
|
219
223
|
for template, parameter in zip(templates, param_group):
|
|
220
224
|
if _jailbreak_type == "upia":
|
|
221
|
-
parameter = self.
|
|
225
|
+
parameter = self._add_jailbreak_parameter(parameter, random.choice(jailbreak_dataset))
|
|
222
226
|
tasks.append(
|
|
223
227
|
asyncio.create_task(
|
|
224
228
|
self._simulate_async(
|
|
@@ -231,6 +235,7 @@ class AdversarialSimulator:
|
|
|
231
235
|
api_call_delay_sec=api_call_delay_sec,
|
|
232
236
|
language=language,
|
|
233
237
|
semaphore=semaphore,
|
|
238
|
+
scenario=scenario,
|
|
234
239
|
)
|
|
235
240
|
)
|
|
236
241
|
)
|
|
@@ -292,10 +297,13 @@ class AdversarialSimulator:
|
|
|
292
297
|
api_call_delay_sec: int,
|
|
293
298
|
language: SupportedLanguages,
|
|
294
299
|
semaphore: asyncio.Semaphore,
|
|
300
|
+
scenario: Union[AdversarialScenario, AdversarialScenarioJailbreak],
|
|
295
301
|
) -> List[Dict]:
|
|
296
|
-
user_bot = self._setup_bot(
|
|
302
|
+
user_bot = self._setup_bot(
|
|
303
|
+
role=ConversationRole.USER, template=template, parameters=parameters, scenario=scenario
|
|
304
|
+
)
|
|
297
305
|
system_bot = self._setup_bot(
|
|
298
|
-
target=target, role=ConversationRole.ASSISTANT, template=template, parameters=parameters
|
|
306
|
+
target=target, role=ConversationRole.ASSISTANT, template=template, parameters=parameters, scenario=scenario
|
|
299
307
|
)
|
|
300
308
|
bots = [user_bot, system_bot]
|
|
301
309
|
session = get_async_http_client().with_policies(
|
|
@@ -341,6 +349,7 @@ class AdversarialSimulator:
|
|
|
341
349
|
template: AdversarialTemplate,
|
|
342
350
|
parameters: TemplateParameters,
|
|
343
351
|
target: Optional[Callable] = None,
|
|
352
|
+
scenario: Union[AdversarialScenario, AdversarialScenarioJailbreak],
|
|
344
353
|
) -> ConversationBot:
|
|
345
354
|
if role is ConversationRole.USER:
|
|
346
355
|
model = self._get_user_proxy_completion_model(
|
|
@@ -372,6 +381,21 @@ class AdversarialSimulator:
|
|
|
372
381
|
def __call__(self) -> None:
|
|
373
382
|
pass
|
|
374
383
|
|
|
384
|
+
if scenario in [
|
|
385
|
+
_UnstableAdversarialScenario.ADVERSARIAL_IMAGE_GEN,
|
|
386
|
+
_UnstableAdversarialScenario.ADVERSARIAL_IMAGE_MULTIMODAL,
|
|
387
|
+
]:
|
|
388
|
+
return MultiModalConversationBot(
|
|
389
|
+
callback=target,
|
|
390
|
+
role=role,
|
|
391
|
+
model=DummyModel(),
|
|
392
|
+
user_template=str(template),
|
|
393
|
+
user_template_parameters=parameters,
|
|
394
|
+
rai_client=self.rai_client,
|
|
395
|
+
conversation_template="",
|
|
396
|
+
instantiation_parameters={},
|
|
397
|
+
)
|
|
398
|
+
|
|
375
399
|
return CallbackConversationBot(
|
|
376
400
|
callback=target,
|
|
377
401
|
role=role,
|
|
@@ -391,13 +415,8 @@ class AdversarialSimulator:
|
|
|
391
415
|
blame=ErrorBlame.SYSTEM_ERROR,
|
|
392
416
|
)
|
|
393
417
|
|
|
394
|
-
def
|
|
395
|
-
|
|
396
|
-
if key in parameters.keys():
|
|
397
|
-
parameters[key] = f"{to_join} {parameters[key]}"
|
|
398
|
-
else:
|
|
399
|
-
parameters[key] = to_join
|
|
400
|
-
|
|
418
|
+
def _add_jailbreak_parameter(self, parameters: TemplateParameters, to_join: str) -> TemplateParameters:
|
|
419
|
+
parameters["jailbreak_string"] = to_join
|
|
401
420
|
return parameters
|
|
402
421
|
|
|
403
422
|
def call_sync(
|
|
@@ -9,12 +9,12 @@ import time
|
|
|
9
9
|
from dataclasses import dataclass
|
|
10
10
|
from typing import Any, Callable, Dict, List, Optional, Tuple, Union, cast
|
|
11
11
|
|
|
12
|
+
import re
|
|
12
13
|
import jinja2
|
|
13
14
|
|
|
14
15
|
from azure.ai.evaluation._exceptions import ErrorBlame, ErrorCategory, ErrorTarget, EvaluationException
|
|
15
16
|
from azure.ai.evaluation._http_utils import AsyncHttpPipeline
|
|
16
|
-
|
|
17
|
-
from .._model_tools import LLMBase, OpenAIChatCompletionsModel
|
|
17
|
+
from .._model_tools import LLMBase, OpenAIChatCompletionsModel, RAIClient
|
|
18
18
|
from .._model_tools._template_handler import TemplateParameters
|
|
19
19
|
from .constants import ConversationRole
|
|
20
20
|
|
|
@@ -128,15 +128,19 @@ class ConversationBot:
|
|
|
128
128
|
self.conversation_starter: Optional[Union[str, jinja2.Template, Dict]] = None
|
|
129
129
|
if role == ConversationRole.USER:
|
|
130
130
|
if "conversation_starter" in self.persona_template_args:
|
|
131
|
+
print(self.persona_template_args)
|
|
131
132
|
conversation_starter_content = self.persona_template_args["conversation_starter"]
|
|
132
133
|
if isinstance(conversation_starter_content, dict):
|
|
133
134
|
self.conversation_starter = conversation_starter_content
|
|
135
|
+
print(f"Conversation starter content: {conversation_starter_content}")
|
|
134
136
|
else:
|
|
135
137
|
try:
|
|
136
138
|
self.conversation_starter = jinja2.Template(
|
|
137
139
|
conversation_starter_content, undefined=jinja2.StrictUndefined
|
|
138
140
|
)
|
|
139
|
-
|
|
141
|
+
print("Successfully created a Jinja2 template for the conversation starter.")
|
|
142
|
+
except jinja2.exceptions.TemplateSyntaxError as e: # noqa: F841
|
|
143
|
+
print(f"Template syntax error: {e}. Using raw content.")
|
|
140
144
|
self.conversation_starter = conversation_starter_content
|
|
141
145
|
else:
|
|
142
146
|
self.logger.info(
|
|
@@ -175,6 +179,9 @@ class ConversationBot:
|
|
|
175
179
|
samples = [self.conversation_starter.render(**self.persona_template_args)]
|
|
176
180
|
else:
|
|
177
181
|
samples = [self.conversation_starter]
|
|
182
|
+
jailbreak_string = self.persona_template_args.get("jailbreak_string", None)
|
|
183
|
+
if jailbreak_string:
|
|
184
|
+
samples = [f"{jailbreak_string} {samples[0]}"]
|
|
178
185
|
time_taken = 0
|
|
179
186
|
|
|
180
187
|
finish_reason = ["stop"]
|
|
@@ -271,8 +278,6 @@ class CallbackConversationBot(ConversationBot):
|
|
|
271
278
|
"id": None,
|
|
272
279
|
"template_parameters": {},
|
|
273
280
|
}
|
|
274
|
-
self.logger.info("Using user provided callback returning response.")
|
|
275
|
-
|
|
276
281
|
time_taken = end_time - start_time
|
|
277
282
|
try:
|
|
278
283
|
response = {
|
|
@@ -290,8 +295,6 @@ class CallbackConversationBot(ConversationBot):
|
|
|
290
295
|
blame=ErrorBlame.USER_ERROR,
|
|
291
296
|
) from exc
|
|
292
297
|
|
|
293
|
-
self.logger.info("Parsed callback response")
|
|
294
|
-
|
|
295
298
|
return response, {}, time_taken, result
|
|
296
299
|
|
|
297
300
|
# Bug 3354264: template is unused in the method - is this intentional?
|
|
@@ -308,9 +311,127 @@ class CallbackConversationBot(ConversationBot):
|
|
|
308
311
|
}
|
|
309
312
|
|
|
310
313
|
|
|
314
|
+
class MultiModalConversationBot(ConversationBot):
|
|
315
|
+
"""MultiModal Conversation bot that uses a user provided callback to generate responses.
|
|
316
|
+
|
|
317
|
+
:param callback: The callback function to use to generate responses.
|
|
318
|
+
:type callback: Callable
|
|
319
|
+
:param user_template: The template to use for the request.
|
|
320
|
+
:type user_template: str
|
|
321
|
+
:param user_template_parameters: The template parameters to use for the request.
|
|
322
|
+
:type user_template_parameters: Dict
|
|
323
|
+
:param args: Optional arguments to pass to the parent class.
|
|
324
|
+
:type args: Any
|
|
325
|
+
:param kwargs: Optional keyword arguments to pass to the parent class.
|
|
326
|
+
:type kwargs: Any
|
|
327
|
+
"""
|
|
328
|
+
|
|
329
|
+
def __init__(
|
|
330
|
+
self,
|
|
331
|
+
callback: Callable,
|
|
332
|
+
user_template: str,
|
|
333
|
+
user_template_parameters: TemplateParameters,
|
|
334
|
+
rai_client: RAIClient,
|
|
335
|
+
*args,
|
|
336
|
+
**kwargs,
|
|
337
|
+
) -> None:
|
|
338
|
+
self.callback = callback
|
|
339
|
+
self.user_template = user_template
|
|
340
|
+
self.user_template_parameters = user_template_parameters
|
|
341
|
+
self.rai_client = rai_client
|
|
342
|
+
|
|
343
|
+
super().__init__(*args, **kwargs)
|
|
344
|
+
|
|
345
|
+
async def generate_response(
|
|
346
|
+
self,
|
|
347
|
+
session: AsyncHttpPipeline,
|
|
348
|
+
conversation_history: List[Any],
|
|
349
|
+
max_history: int,
|
|
350
|
+
turn_number: int = 0,
|
|
351
|
+
) -> Tuple[dict, dict, float, dict]:
|
|
352
|
+
previous_prompt = conversation_history[-1]
|
|
353
|
+
chat_protocol_message = await self._to_chat_protocol(conversation_history, self.user_template_parameters)
|
|
354
|
+
|
|
355
|
+
# replace prompt with {image.jpg} tags with image content data.
|
|
356
|
+
conversation_history.pop()
|
|
357
|
+
conversation_history.append(
|
|
358
|
+
ConversationTurn(
|
|
359
|
+
role=previous_prompt.role,
|
|
360
|
+
name=previous_prompt.name,
|
|
361
|
+
message=chat_protocol_message["messages"][0]["content"],
|
|
362
|
+
full_response=previous_prompt.full_response,
|
|
363
|
+
request=chat_protocol_message,
|
|
364
|
+
)
|
|
365
|
+
)
|
|
366
|
+
msg_copy = copy.deepcopy(chat_protocol_message)
|
|
367
|
+
result = {}
|
|
368
|
+
start_time = time.time()
|
|
369
|
+
result = await self.callback(msg_copy)
|
|
370
|
+
end_time = time.time()
|
|
371
|
+
if not result:
|
|
372
|
+
result = {
|
|
373
|
+
"messages": [{"content": "Callback did not return a response.", "role": "assistant"}],
|
|
374
|
+
"finish_reason": ["stop"],
|
|
375
|
+
"id": None,
|
|
376
|
+
"template_parameters": {},
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
time_taken = end_time - start_time
|
|
380
|
+
try:
|
|
381
|
+
response = {
|
|
382
|
+
"samples": [result["messages"][-1]["content"]],
|
|
383
|
+
"finish_reason": ["stop"],
|
|
384
|
+
"id": None,
|
|
385
|
+
}
|
|
386
|
+
except Exception as exc:
|
|
387
|
+
msg = "User provided callback does not conform to chat protocol standard."
|
|
388
|
+
raise EvaluationException(
|
|
389
|
+
message=msg,
|
|
390
|
+
internal_message=msg,
|
|
391
|
+
target=ErrorTarget.CALLBACK_CONVERSATION_BOT,
|
|
392
|
+
category=ErrorCategory.INVALID_VALUE,
|
|
393
|
+
blame=ErrorBlame.USER_ERROR,
|
|
394
|
+
) from exc
|
|
395
|
+
|
|
396
|
+
return response, chat_protocol_message, time_taken, result
|
|
397
|
+
|
|
398
|
+
async def _to_chat_protocol(self, conversation_history, template_parameters): # pylint: disable=unused-argument
|
|
399
|
+
messages = []
|
|
400
|
+
|
|
401
|
+
for _, m in enumerate(conversation_history):
|
|
402
|
+
if "image:" in m.message:
|
|
403
|
+
content = await self._to_multi_modal_content(m.message)
|
|
404
|
+
messages.append({"content": content, "role": m.role.value})
|
|
405
|
+
else:
|
|
406
|
+
messages.append({"content": m.message, "role": m.role.value})
|
|
407
|
+
|
|
408
|
+
return {
|
|
409
|
+
"template_parameters": template_parameters,
|
|
410
|
+
"messages": messages,
|
|
411
|
+
"$schema": "http://azureml/sdk-2-0/ChatConversation.json",
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
async def _to_multi_modal_content(self, text: str) -> list:
|
|
415
|
+
split_text = re.findall(r"[^{}]+|\{[^{}]*\}", text)
|
|
416
|
+
messages = [
|
|
417
|
+
text.strip("{}").replace("image:", "").strip() if text.startswith("{") else text for text in split_text
|
|
418
|
+
]
|
|
419
|
+
contents = []
|
|
420
|
+
for msg in messages:
|
|
421
|
+
if msg.startswith("image_understanding/"):
|
|
422
|
+
encoded_image = await self.rai_client.get_image_data(msg)
|
|
423
|
+
contents.append(
|
|
424
|
+
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{encoded_image}"}},
|
|
425
|
+
)
|
|
426
|
+
else:
|
|
427
|
+
contents.append({"type": "text", "text": msg})
|
|
428
|
+
return contents
|
|
429
|
+
|
|
430
|
+
|
|
311
431
|
__all__ = [
|
|
312
432
|
"ConversationRole",
|
|
313
433
|
"ConversationBot",
|
|
314
434
|
"CallbackConversationBot",
|
|
435
|
+
"MultiModalConversationBot",
|
|
315
436
|
"ConversationTurn",
|
|
316
437
|
]
|
|
@@ -9,7 +9,6 @@ from typing import Callable, Dict, List, Optional, Tuple, Union
|
|
|
9
9
|
from azure.ai.evaluation._exceptions import ErrorBlame, ErrorCategory, ErrorTarget, EvaluationException
|
|
10
10
|
from azure.ai.evaluation.simulator._constants import SupportedLanguages
|
|
11
11
|
from azure.ai.evaluation.simulator._helpers._language_suffix_mapping import SUPPORTED_LANGUAGES_MAPPING
|
|
12
|
-
|
|
13
12
|
from ..._http_utils import AsyncHttpPipeline
|
|
14
13
|
from . import ConversationBot, ConversationTurn
|
|
15
14
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import os
|
|
5
5
|
from typing import Any
|
|
6
6
|
from urllib.parse import urljoin, urlparse
|
|
7
|
+
import base64
|
|
7
8
|
|
|
8
9
|
from azure.ai.evaluation._exceptions import ErrorBlame, ErrorCategory, ErrorTarget, EvaluationException
|
|
9
10
|
from azure.ai.evaluation._http_utils import AsyncHttpPipeline, get_async_http_client, get_http_client
|
|
@@ -57,6 +58,7 @@ class RAIClient: # pylint: disable=client-accepts-api-version-keyword
|
|
|
57
58
|
# add a "/" at the end of the url
|
|
58
59
|
self.api_url = self.api_url.rstrip("/") + "/"
|
|
59
60
|
self.parameter_json_endpoint = urljoin(self.api_url, "simulation/template/parameters")
|
|
61
|
+
self.parameter_image_endpoint = urljoin(self.api_url, "simulation/template/parameters/image")
|
|
60
62
|
self.jailbreaks_json_endpoint = urljoin(self.api_url, "simulation/jailbreak")
|
|
61
63
|
self.simulation_submit_endpoint = urljoin(self.api_url, "simulation/chat/completions/submit")
|
|
62
64
|
self.xpia_jailbreaks_json_endpoint = urljoin(self.api_url, "simulation/jailbreak/xpia")
|
|
@@ -166,3 +168,41 @@ class RAIClient: # pylint: disable=client-accepts-api-version-keyword
|
|
|
166
168
|
category=ErrorCategory.UNKNOWN,
|
|
167
169
|
blame=ErrorBlame.USER_ERROR,
|
|
168
170
|
)
|
|
171
|
+
|
|
172
|
+
async def get_image_data(self, path: str) -> Any:
|
|
173
|
+
"""Make a GET Image request to the given url
|
|
174
|
+
|
|
175
|
+
:param path: The url of the image
|
|
176
|
+
:type path: str
|
|
177
|
+
:raises EvaluationException: If the Azure safety evaluation service is not available in the current region
|
|
178
|
+
:return: The response
|
|
179
|
+
:rtype: Any
|
|
180
|
+
"""
|
|
181
|
+
token = self.token_manager.get_token()
|
|
182
|
+
headers = {
|
|
183
|
+
"Authorization": f"Bearer {token}",
|
|
184
|
+
"Content-Type": "application/json",
|
|
185
|
+
"User-Agent": USER_AGENT,
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
session = self._create_async_client()
|
|
189
|
+
params = {"path": path}
|
|
190
|
+
async with session:
|
|
191
|
+
response = await session.get(
|
|
192
|
+
url=self.parameter_image_endpoint, params=params, headers=headers
|
|
193
|
+
) # pylint: disable=unexpected-keyword-arg
|
|
194
|
+
|
|
195
|
+
if response.status_code == 200:
|
|
196
|
+
return base64.b64encode(response.content).decode("utf-8")
|
|
197
|
+
|
|
198
|
+
msg = (
|
|
199
|
+
"Azure safety evaluation service is not available in your current region, "
|
|
200
|
+
+ "please go to https://aka.ms/azureaistudiosafetyeval to see which regions are supported"
|
|
201
|
+
)
|
|
202
|
+
raise EvaluationException(
|
|
203
|
+
message=msg,
|
|
204
|
+
internal_message=msg,
|
|
205
|
+
target=ErrorTarget.RAI_CLIENT,
|
|
206
|
+
category=ErrorCategory.UNKNOWN,
|
|
207
|
+
blame=ErrorBlame.USER_ERROR,
|
|
208
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: azure-ai-evaluation
|
|
3
|
-
Version: 1.0
|
|
3
|
+
Version: 1.1.0
|
|
4
4
|
Summary: Microsoft Azure Evaluation Library for Python
|
|
5
5
|
Home-page: https://github.com/Azure/azure-sdk-for-python
|
|
6
6
|
Author: Microsoft Corporation
|
|
@@ -28,8 +28,7 @@ Requires-Dist: pyjwt >=2.8.0
|
|
|
28
28
|
Requires-Dist: azure-identity >=1.16.0
|
|
29
29
|
Requires-Dist: azure-core >=1.30.2
|
|
30
30
|
Requires-Dist: nltk >=3.9.1
|
|
31
|
-
|
|
32
|
-
Requires-Dist: promptflow-azure <2.0.0,>=1.15.0 ; extra == 'remote'
|
|
31
|
+
Requires-Dist: azure-storage-blob >=12.10.0
|
|
33
32
|
|
|
34
33
|
# Azure AI Evaluation client library for Python
|
|
35
34
|
|
|
@@ -359,13 +358,13 @@ This project has adopted the [Microsoft Open Source Code of Conduct][code_of_con
|
|
|
359
358
|
[evaluate_dataset]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/evaluate-sdk#evaluate-on-test-dataset-using-evaluate
|
|
360
359
|
[evaluators]: https://learn.microsoft.com/python/api/azure-ai-evaluation/azure.ai.evaluation?view=azure-python-preview
|
|
361
360
|
[evaluate_api]: https://learn.microsoft.com/python/api/azure-ai-evaluation/azure.ai.evaluation?view=azure-python-preview#azure-ai-evaluation-evaluate
|
|
362
|
-
[evaluate_app]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/
|
|
361
|
+
[evaluate_app]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/Supported_Evaluation_Targets/Evaluate_App_Endpoint
|
|
363
362
|
[evaluation_tsg]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/evaluation/azure-ai-evaluation/TROUBLESHOOTING.md
|
|
364
363
|
[ai_studio]: https://learn.microsoft.com/azure/ai-studio/what-is-ai-studio
|
|
365
364
|
[ai_project]: https://learn.microsoft.com/azure/ai-studio/how-to/create-projects?tabs=ai-studio
|
|
366
365
|
[azure_openai]: https://learn.microsoft.com/azure/ai-services/openai/
|
|
367
|
-
[evaluate_models]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/
|
|
368
|
-
[custom_evaluators]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/
|
|
366
|
+
[evaluate_models]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/Supported_Evaluation_Targets/Evaluate_Base_Model_Endpoint
|
|
367
|
+
[custom_evaluators]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/Supported_Evaluation_Metrics/Custom_Evaluators
|
|
369
368
|
[evaluate_samples]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate
|
|
370
369
|
[evaluation_metrics]: https://learn.microsoft.com/azure/ai-studio/concepts/evaluation-metrics-built-in
|
|
371
370
|
[performance_and_quality_evaluators]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/evaluate-sdk#performance-and-quality-evaluators
|
|
@@ -373,18 +372,23 @@ This project has adopted the [Microsoft Open Source Code of Conduct][code_of_con
|
|
|
373
372
|
[composite_evaluators]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/evaluate-sdk#composite-evaluators
|
|
374
373
|
[adversarial_simulation_docs]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/simulator-interaction-data#generate-adversarial-simulations-for-safety-evaluation
|
|
375
374
|
[adversarial_simulation_scenarios]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/simulator-interaction-data#supported-adversarial-simulation-scenarios
|
|
376
|
-
[adversarial_simulation]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/
|
|
377
|
-
[simulate_with_conversation_starter]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/
|
|
375
|
+
[adversarial_simulation]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/Simulators/Simulate_Adversarial_Data
|
|
376
|
+
[simulate_with_conversation_starter]: https://github.com/Azure-Samples/azureai-samples/tree/main/scenarios/evaluate/Simulators/Simulate_Context-Relevant_Data/Simulate_From_Conversation_Starter
|
|
378
377
|
[adversarial_jailbreak]: https://learn.microsoft.com/azure/ai-studio/how-to/develop/simulator-interaction-data#simulating-jailbreak-attacks
|
|
379
378
|
|
|
380
|
-
|
|
381
379
|
# Release History
|
|
382
380
|
|
|
381
|
+
## 1.1.0 (2024-12-12)
|
|
382
|
+
|
|
383
|
+
### Bugs Fixed
|
|
384
|
+
- Removed `[remote]` extra. This is no longer needed when tracking results in Azure AI Studio.
|
|
385
|
+
- Fixed `AttributeError: 'NoneType' object has no attribute 'get'` while running simulator with 1000+ results
|
|
386
|
+
|
|
383
387
|
## 1.0.1 (2024-11-15)
|
|
384
388
|
|
|
385
389
|
### Bugs Fixed
|
|
386
|
-
- Fixed `[remote]` extra to be needed only when tracking results in Azure AI Studio.
|
|
387
390
|
- Removing `azure-ai-inference` as dependency.
|
|
391
|
+
- Fixed `AttributeError: 'NoneType' object has no attribute 'get'` while running simulator with 1000+ results
|
|
388
392
|
|
|
389
393
|
## 1.0.0 (2024-11-13)
|
|
390
394
|
|
|
@@ -396,6 +400,7 @@ This project has adopted the [Microsoft Open Source Code of Conduct][code_of_con
|
|
|
396
400
|
- Fixed an issue where the `output_path` parameter in the `evaluate` API did not support relative path.
|
|
397
401
|
- Output of adversarial simulators are of type `JsonLineList` and the helper function `to_eval_qr_json_lines` now outputs context from both user and assistant turns along with `category` if it exists in the conversation
|
|
398
402
|
- Fixed an issue where during long-running simulations, API token expires causing "Forbidden" error. Instead, users can now set an environment variable `AZURE_TOKEN_REFRESH_INTERVAL` to refresh the token more frequently to prevent expiration and ensure continuous operation of the simulation.
|
|
403
|
+
- Fixed an issue with the `ContentSafetyEvaluator` that caused parallel execution of sub-evaluators to fail. Parallel execution is now enabled by default again, but can still be disabled via the '_parallel' boolean keyword argument during class initialization.
|
|
399
404
|
- Fix `evaluate` function not producing aggregated metrics if ANY values to be aggregated were None, NaN, or
|
|
400
405
|
otherwise difficult to process. Such values are ignored fully, so the aggregated metric of `[1, 2, 3, NaN]`
|
|
401
406
|
would be 2, not 1.5.
|
|
@@ -1,26 +1,30 @@
|
|
|
1
1
|
azure/ai/evaluation/__init__.py,sha256=MFxJRoKfSsP_Qlfq0FwynxNf4csNAfTYPQX7jdXc9RU,2757
|
|
2
|
-
azure/ai/evaluation/_constants.py,sha256=
|
|
2
|
+
azure/ai/evaluation/_constants.py,sha256=d41rQb-w2GmCMHOwiyDD1ieJB1U6JyPPl6APZSJbKzg,2036
|
|
3
3
|
azure/ai/evaluation/_exceptions.py,sha256=MsTbgsPGYPzIxs7MyLKzSeiVKEoCxYkVjONzNfv2tXA,5162
|
|
4
|
-
azure/ai/evaluation/_http_utils.py,sha256=
|
|
4
|
+
azure/ai/evaluation/_http_utils.py,sha256=1bGce6pKAL-vmaUGRPxVX7DVO05XVQ8YPIwIQ3q7mfA,17221
|
|
5
5
|
azure/ai/evaluation/_model_configurations.py,sha256=MNN6cQlz7P9vNfHmfEKsUcly3j1FEOEFsA8WV7GPuKQ,4043
|
|
6
6
|
azure/ai/evaluation/_user_agent.py,sha256=O2y-QPBAcw7w7qQ6M2aRPC3Vy3TKd789u5lcs2yuFaI,290
|
|
7
|
-
azure/ai/evaluation/_version.py,sha256=
|
|
7
|
+
azure/ai/evaluation/_version.py,sha256=LzMvSuUB6pmU-LfCPzoYuCoTF0BAqE7ljPjk6r8YaMw,199
|
|
8
8
|
azure/ai/evaluation/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
azure/ai/evaluation/_azure/__init__.py,sha256=Yx1Iq2GNKQ5lYxTotvPwkPL4u0cm6YVxUe-iVbu1clI,180
|
|
10
|
+
azure/ai/evaluation/_azure/_clients.py,sha256=1mFRSxt-Ld5UBn-m3DJkKc-VPP9CbXQHrqLNdLs9RF0,8201
|
|
11
|
+
azure/ai/evaluation/_azure/_models.py,sha256=tKpxjb5Ou476UasjXPCiuvsxTjLTrnoVnSXy5Bfa51M,12483
|
|
12
|
+
azure/ai/evaluation/_azure/_token_manager.py,sha256=1NZHwgEc9BMXWPz5Ear_J5-oYjouD77crLHHqNLldEw,5193
|
|
9
13
|
azure/ai/evaluation/_common/__init__.py,sha256=LHTkf6dMLLxikrGNgbUuREBVQcs4ORHR6Eryo4bm9M8,586
|
|
10
14
|
azure/ai/evaluation/_common/_experimental.py,sha256=GVtSn9r1CeR_yEa578dJVNDJ3P24eqe8WYdH7llbiQY,5694
|
|
11
15
|
azure/ai/evaluation/_common/constants.py,sha256=OsExttFGLnTAyZa26jnY5_PCDTb7uJNFqtE2qsRZ1mg,1957
|
|
12
16
|
azure/ai/evaluation/_common/math.py,sha256=d4bwWe35_RWDIZNcbV1BTBbHNx2QHQ4-I3EofDyyNE0,2863
|
|
13
|
-
azure/ai/evaluation/_common/rai_service.py,sha256=
|
|
17
|
+
azure/ai/evaluation/_common/rai_service.py,sha256=DcakzdOour9qNdMXU-8UFfvLb12oexAoiJXG8XFTRBs,26462
|
|
14
18
|
azure/ai/evaluation/_common/utils.py,sha256=MQIZs95gH5je1L-S3twa_WQi071zRu0Dv54lzCI7ZgU,17642
|
|
15
19
|
azure/ai/evaluation/_evaluate/__init__.py,sha256=Yx1Iq2GNKQ5lYxTotvPwkPL4u0cm6YVxUe-iVbu1clI,180
|
|
16
|
-
azure/ai/evaluation/_evaluate/_eval_run.py,sha256=
|
|
17
|
-
azure/ai/evaluation/_evaluate/_evaluate.py,sha256=
|
|
18
|
-
azure/ai/evaluation/_evaluate/_utils.py,sha256=
|
|
20
|
+
azure/ai/evaluation/_evaluate/_eval_run.py,sha256=het3cxjK4J-_hT19dT5a0mC2Cdnk93gM3ONQMJb9bxQ,21923
|
|
21
|
+
azure/ai/evaluation/_evaluate/_evaluate.py,sha256=P5aL70eUBKZT9CVRM9RVSfD0DkuljQyc5ECte37Ycmo,36225
|
|
22
|
+
azure/ai/evaluation/_evaluate/_utils.py,sha256=S4LUUDUBo9JNA41ojSezMC-PZzkWcihhhNdyZwZrpr0,13428
|
|
19
23
|
azure/ai/evaluation/_evaluate/_batch_run/__init__.py,sha256=G8McpeLxAS_gFhNShX52_YWvE-arhJn-bVpAfzjWG3Q,427
|
|
20
24
|
azure/ai/evaluation/_evaluate/_batch_run/code_client.py,sha256=XQLaXfswF6ReHLpQthHLuLLa65Pts8uawGp7kRqmMDs,8260
|
|
21
25
|
azure/ai/evaluation/_evaluate/_batch_run/eval_run_context.py,sha256=p3Bsg_shGs5RXvysOlvo0CQb4Te5herSvX1OP6ylFUQ,3543
|
|
22
26
|
azure/ai/evaluation/_evaluate/_batch_run/proxy_client.py,sha256=T_QRHScDMBM4O6ejkkKdBmHPjH2NOF6owW48aVUYF6k,3775
|
|
23
|
-
azure/ai/evaluation/_evaluate/_batch_run/target_run_context.py,sha256=
|
|
27
|
+
azure/ai/evaluation/_evaluate/_batch_run/target_run_context.py,sha256=SMos3bVmD73pK6gpIaL4iZZS3-Zda3V4N89Jg0J9sss,1636
|
|
24
28
|
azure/ai/evaluation/_evaluate/_telemetry/__init__.py,sha256=fhLqE41qxdjfBOGi23cpk6QgUe-s1Fw2xhAAUjNESF0,7045
|
|
25
29
|
azure/ai/evaluation/_evaluators/__init__.py,sha256=Yx1Iq2GNKQ5lYxTotvPwkPL4u0cm6YVxUe-iVbu1clI,180
|
|
26
30
|
azure/ai/evaluation/_evaluators/_bleu/__init__.py,sha256=quKKO0kvOSkky5hcoNBvgBuMeeVRFCE9GSv70mAdGP4,260
|
|
@@ -29,11 +33,11 @@ azure/ai/evaluation/_evaluators/_coherence/__init__.py,sha256=GRqcSCQse02Spyki0U
|
|
|
29
33
|
azure/ai/evaluation/_evaluators/_coherence/_coherence.py,sha256=uG9hX2XWkMREKfMAWRoosjicoI4Lg3ptR3UcLEgKd0c,4643
|
|
30
34
|
azure/ai/evaluation/_evaluators/_coherence/coherence.prompty,sha256=ANvh9mDFW7KMejrgdWqBLjj4SIqEO5WW9gg5pE0RLJk,6798
|
|
31
35
|
azure/ai/evaluation/_evaluators/_common/__init__.py,sha256=_hPqTkAla_O6s4ebVtTaBrVLEW3KSdDz66WwxjK50cI,423
|
|
32
|
-
azure/ai/evaluation/_evaluators/_common/_base_eval.py,sha256=
|
|
33
|
-
azure/ai/evaluation/_evaluators/_common/_base_prompty_eval.py,sha256=
|
|
34
|
-
azure/ai/evaluation/_evaluators/_common/_base_rai_svc_eval.py,sha256=
|
|
36
|
+
azure/ai/evaluation/_evaluators/_common/_base_eval.py,sha256=n6qldJr8d8H0DnS7IwkQPH9Ep9PdZnVeVtSxQiunADc,19424
|
|
37
|
+
azure/ai/evaluation/_evaluators/_common/_base_prompty_eval.py,sha256=hvJD7jR2ESePkRPN17ytoFhFiS0iTotOfeqmTwG2IMs,4531
|
|
38
|
+
azure/ai/evaluation/_evaluators/_common/_base_rai_svc_eval.py,sha256=czyn1MfaxOmrvvFgdeblf6FaauKgKolgPFsP5f7K29w,7331
|
|
35
39
|
azure/ai/evaluation/_evaluators/_content_safety/__init__.py,sha256=PEYMIybfP64f7byhuTaiq4RiqsYbjqejpW1JsJIG1jA,556
|
|
36
|
-
azure/ai/evaluation/_evaluators/_content_safety/_content_safety.py,sha256=
|
|
40
|
+
azure/ai/evaluation/_evaluators/_content_safety/_content_safety.py,sha256=CIGfBLNOTVXrlF5HIc2UpuDDG5BfzjD7ubJ23CbvobQ,6341
|
|
37
41
|
azure/ai/evaluation/_evaluators/_content_safety/_hate_unfairness.py,sha256=sjw8FfwxC1f0K1J4TkeA8wkfq88aebiNbaKzS-8DWzk,5919
|
|
38
42
|
azure/ai/evaluation/_evaluators/_content_safety/_self_harm.py,sha256=0zaB-JKm8FU6yoxD1nqoYvxp3gvjuZfcQjb-xhSHoQ0,5156
|
|
39
43
|
azure/ai/evaluation/_evaluators/_content_safety/_sexual.py,sha256=q9bEMu6Dp1wxDlH3h2iTayrWv4ux-izLB0kGkxrgEhM,5396
|
|
@@ -76,27 +80,27 @@ azure/ai/evaluation/_evaluators/_rouge/_rouge.py,sha256=SV5rESLVARQqh1n0Pf6EMvJo
|
|
|
76
80
|
azure/ai/evaluation/_evaluators/_service_groundedness/__init__.py,sha256=0DODUGTOgaYyFbO9_zxuwifixDL3SIm3EkwP1sdwn6M,288
|
|
77
81
|
azure/ai/evaluation/_evaluators/_service_groundedness/_service_groundedness.py,sha256=GPvufAgTnoQ2HYs6Xnnpmh23n5E3XxnUV0NGuwjDyU0,6648
|
|
78
82
|
azure/ai/evaluation/_evaluators/_similarity/__init__.py,sha256=V2Mspog99_WBltxTkRHG5NpN5s9XoiTSN4I8POWEkLA,268
|
|
79
|
-
azure/ai/evaluation/_evaluators/_similarity/_similarity.py,sha256=
|
|
83
|
+
azure/ai/evaluation/_evaluators/_similarity/_similarity.py,sha256=UVBIa1xIlOIJtPctCu-UCOWvXzE4ysaK_XFdokajCuA,5669
|
|
80
84
|
azure/ai/evaluation/_evaluators/_similarity/similarity.prompty,sha256=eoludASychZoGL625bFCaZai-OY7DIAg90ZLax_o4XE,4594
|
|
81
85
|
azure/ai/evaluation/_evaluators/_xpia/__init__.py,sha256=VMEL8WrpJQeh4sQiOLzP7hRFPnjzsvwfvTzaGCVJPCM,88
|
|
82
86
|
azure/ai/evaluation/_evaluators/_xpia/xpia.py,sha256=Nv14lU7jN0yXKbHgHRXMHEy6pn1rXmesBOYI2Ge9ewk,5849
|
|
83
87
|
azure/ai/evaluation/_vendor/__init__.py,sha256=Yx1Iq2GNKQ5lYxTotvPwkPL4u0cm6YVxUe-iVbu1clI,180
|
|
84
88
|
azure/ai/evaluation/_vendor/rouge_score/__init__.py,sha256=03OkyfS_UmzRnHv6-z9juTaJ6OXJoEJM989hgifIZbc,607
|
|
85
|
-
azure/ai/evaluation/_vendor/rouge_score/rouge_scorer.py,sha256=
|
|
86
|
-
azure/ai/evaluation/_vendor/rouge_score/scoring.py,sha256=
|
|
87
|
-
azure/ai/evaluation/_vendor/rouge_score/tokenize.py,sha256=
|
|
89
|
+
azure/ai/evaluation/_vendor/rouge_score/rouge_scorer.py,sha256=DtNSeshHipzc6vFnvx7kbs5viXe4LNq-ZrgllFvfR4U,11299
|
|
90
|
+
azure/ai/evaluation/_vendor/rouge_score/scoring.py,sha256=0sqdiNE-4R_EmTTqyWL9_DAOgl54250H5004tZDGxEE,1878
|
|
91
|
+
azure/ai/evaluation/_vendor/rouge_score/tokenize.py,sha256=IyHVsWY6IFFZdB23cLiJs8iBZ0DXk1mQlWE1xtdjuuk,1826
|
|
88
92
|
azure/ai/evaluation/_vendor/rouge_score/tokenizers.py,sha256=3_-y1TyvyluHuERhSJ5CdXSwnpcMA7aAKU6PCz9wH_Q,1745
|
|
89
93
|
azure/ai/evaluation/simulator/__init__.py,sha256=JbrPZ8pvTBalyX94SvZ9btHNoovX8rbZV03KmzxxWys,552
|
|
90
|
-
azure/ai/evaluation/simulator/_adversarial_scenario.py,sha256=
|
|
91
|
-
azure/ai/evaluation/simulator/_adversarial_simulator.py,sha256=
|
|
94
|
+
azure/ai/evaluation/simulator/_adversarial_scenario.py,sha256=9rpAPz594tYjxzM3XMeDq6CZSc2yvf5YaNaGC7nzYhM,1710
|
|
95
|
+
azure/ai/evaluation/simulator/_adversarial_simulator.py,sha256=FPZ3OdpGuwCHDVoOZW-f_j7pyK71PfDN3JPh205tW0c,21706
|
|
92
96
|
azure/ai/evaluation/simulator/_constants.py,sha256=nCL7_1BnYh6k0XvxudxsDVMbiG9MMEvYw5wO9FZHHZ8,857
|
|
93
97
|
azure/ai/evaluation/simulator/_direct_attack_simulator.py,sha256=FTtWf655dHJF5FLJi0xGSBgIlGWNiVWyqaLDJSud9XA,10199
|
|
94
|
-
azure/ai/evaluation/simulator/_indirect_attack_simulator.py,sha256=
|
|
95
|
-
azure/ai/evaluation/simulator/_simulator.py,sha256=
|
|
98
|
+
azure/ai/evaluation/simulator/_indirect_attack_simulator.py,sha256=nweIU_AkUIR50qLQpjmljf_OkpsCPth2Ebf4vusygCA,10226
|
|
99
|
+
azure/ai/evaluation/simulator/_simulator.py,sha256=pWxVfy9ll6gmOyGEk6Ie7Y48X21wJ5DebqY8Re0SIOk,36213
|
|
96
100
|
azure/ai/evaluation/simulator/_tracing.py,sha256=frZ4-usrzINast9F4-ONRzEGGox71y8bYw0UHNufL1Y,3069
|
|
97
101
|
azure/ai/evaluation/simulator/_utils.py,sha256=16NltlywpbMtoFtULwTKqeURguIS1kSKSo3g8uKV8TA,5181
|
|
98
|
-
azure/ai/evaluation/simulator/_conversation/__init__.py,sha256=
|
|
99
|
-
azure/ai/evaluation/simulator/_conversation/_conversation.py,sha256=
|
|
102
|
+
azure/ai/evaluation/simulator/_conversation/__init__.py,sha256=s8djzJ58_-CiIA8xHB-SbgeZaq1F7ftrc3qJbpUpUdg,17853
|
|
103
|
+
azure/ai/evaluation/simulator/_conversation/_conversation.py,sha256=qdzGMtCPYMxeGpR91NZTEmmz2RtADTvQGj6C-3EUTw4,7402
|
|
100
104
|
azure/ai/evaluation/simulator/_conversation/constants.py,sha256=3v7zkjPwJAPbSpJYIK6VOZZy70bJXMo_QTVqSFGlq9A,984
|
|
101
105
|
azure/ai/evaluation/simulator/_data_sources/__init__.py,sha256=Yx1Iq2GNKQ5lYxTotvPwkPL4u0cm6YVxUe-iVbu1clI,180
|
|
102
106
|
azure/ai/evaluation/simulator/_data_sources/grounding.json,sha256=jqdqHrCgS7hN7K2kXSEcPCmzFjV4cv_qcCSR-Hutwx4,1257075
|
|
@@ -106,14 +110,14 @@ azure/ai/evaluation/simulator/_helpers/_simulator_data_classes.py,sha256=BOttMTe
|
|
|
106
110
|
azure/ai/evaluation/simulator/_model_tools/__init__.py,sha256=aMv5apb7uVjuhMF9ohhA5kQmo652hrGIJlhdl3y2R1I,835
|
|
107
111
|
azure/ai/evaluation/simulator/_model_tools/_identity_manager.py,sha256=-hptp2vpJIcfjvtd0E2c7ry00LVh23LxuYGevsNFfgs,6385
|
|
108
112
|
azure/ai/evaluation/simulator/_model_tools/_proxy_completion_model.py,sha256=Zg_SzqjCGJ3Wt8hktxz6Y1JEJCcV0V5jBC9N06jQP3k,8984
|
|
109
|
-
azure/ai/evaluation/simulator/_model_tools/_rai_client.py,sha256=
|
|
110
|
-
azure/ai/evaluation/simulator/_model_tools/_template_handler.py,sha256=
|
|
113
|
+
azure/ai/evaluation/simulator/_model_tools/_rai_client.py,sha256=40MGzIXGv7oVshWH7AbOPLCigI4HlMrqbF2Rq5jFMGo,8755
|
|
114
|
+
azure/ai/evaluation/simulator/_model_tools/_template_handler.py,sha256=NQWqjE7csSzkhb2XdW82AoCA-DxixpTrfBxAnOt2Wlc,7075
|
|
111
115
|
azure/ai/evaluation/simulator/_model_tools/models.py,sha256=bfVm0PV3vfH_8DkdmTMZqYVN-G51hZ6Y0TOO-NiysJY,21811
|
|
112
116
|
azure/ai/evaluation/simulator/_prompty/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
113
117
|
azure/ai/evaluation/simulator/_prompty/task_query_response.prompty,sha256=2BzSqDDYilDushvR56vMRDmqFIaIYAewdUlUZg_elMg,2182
|
|
114
118
|
azure/ai/evaluation/simulator/_prompty/task_simulate.prompty,sha256=NE6lH4bfmibgMn4NgJtm9_l3PMoHSFrfjjosDJEKM0g,939
|
|
115
|
-
azure_ai_evaluation-1.0.
|
|
116
|
-
azure_ai_evaluation-1.0.
|
|
117
|
-
azure_ai_evaluation-1.0.
|
|
118
|
-
azure_ai_evaluation-1.0.
|
|
119
|
-
azure_ai_evaluation-1.0.
|
|
119
|
+
azure_ai_evaluation-1.1.0.dist-info/METADATA,sha256=zusuZTIcO7487bWQK5V7XZ-Pbqugm7HFzvcCV5yfTmk,28751
|
|
120
|
+
azure_ai_evaluation-1.1.0.dist-info/NOTICE.txt,sha256=4tzi_Yq4-eBGhBvveobWHCgUIVF-ZeouGN0m7hVq5Mk,3592
|
|
121
|
+
azure_ai_evaluation-1.1.0.dist-info/WHEEL,sha256=pL8R0wFFS65tNSRnaOVrsw9EOkOqxLrlUPenUYnJKNo,91
|
|
122
|
+
azure_ai_evaluation-1.1.0.dist-info/top_level.txt,sha256=S7DhWV9m80TBzAhOFjxDUiNbKszzoThbnrSz5MpbHSQ,6
|
|
123
|
+
azure_ai_evaluation-1.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|