chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,386 @@
|
||||
# Copyright (c) Microsoft. All rights reserved.
|
||||
|
||||
import copy
|
||||
import os
|
||||
from collections.abc import Awaitable, Callable
|
||||
from typing import Any
|
||||
|
||||
import pytest
|
||||
from pytest import mark, param
|
||||
|
||||
from samples.concepts.auto_function_calling.chat_completion_with_auto_function_calling import (
|
||||
main as chat_completion_with_function_calling,
|
||||
)
|
||||
from samples.concepts.auto_function_calling.functions_defined_in_json_prompt import (
|
||||
main as function_defined_in_json_prompt,
|
||||
)
|
||||
from samples.concepts.auto_function_calling.functions_defined_in_yaml_prompt import (
|
||||
main as function_defined_in_yaml_prompt,
|
||||
)
|
||||
from samples.concepts.caching.semantic_caching import main as semantic_caching
|
||||
from samples.concepts.chat_completion.simple_chatbot import main as simple_chatbot
|
||||
from samples.concepts.chat_completion.simple_chatbot_kernel_function import main as simple_chatbot_kernel_function
|
||||
from samples.concepts.chat_completion.simple_chatbot_logit_bias import main as simple_chatbot_logit_bias
|
||||
from samples.concepts.chat_completion.simple_chatbot_streaming import main as simple_chatbot_streaming
|
||||
from samples.concepts.chat_completion.simple_chatbot_with_image import main as simple_chatbot_with_image
|
||||
from samples.concepts.embedding.text_embedding_generation import main as text_embedding_generation
|
||||
from samples.concepts.filtering.auto_function_invoke_filters import main as auto_function_invoke_filters
|
||||
from samples.concepts.filtering.function_invocation_filters import main as function_invocation_filters
|
||||
from samples.concepts.filtering.function_invocation_filters_stream import main as function_invocation_filters_stream
|
||||
from samples.concepts.filtering.prompt_filters import main as prompt_filters
|
||||
from samples.concepts.filtering.retry_with_different_model import main as retry_with_different_model
|
||||
from samples.concepts.functions.kernel_arguments import main as kernel_arguments
|
||||
from samples.concepts.grounding.grounded import main as grounded
|
||||
from samples.concepts.images.image_generation import main as image_generation
|
||||
from samples.concepts.local_models.lm_studio_chat_completion import main as lm_studio_chat_completion
|
||||
from samples.concepts.local_models.lm_studio_text_embedding import main as lm_studio_text_embedding
|
||||
from samples.concepts.local_models.ollama_chat_completion import main as ollama_chat_completion
|
||||
from samples.concepts.mcp.agent_with_mcp_agent import main as agent_with_mcp_agent
|
||||
from samples.concepts.memory.simple_memory import main as simple_memory
|
||||
from samples.concepts.plugins.openai_function_calling_with_custom_plugin import (
|
||||
main as openai_function_calling_with_custom_plugin,
|
||||
)
|
||||
from samples.concepts.plugins.plugins_from_dir import main as plugins_from_dir
|
||||
from samples.concepts.prompt_templates.azure_chat_gpt_api_handlebars import main as azure_chat_gpt_api_handlebars
|
||||
from samples.concepts.prompt_templates.azure_chat_gpt_api_jinja2 import main as azure_chat_gpt_api_jinja2
|
||||
from samples.concepts.prompt_templates.configuring_prompts import main as configuring_prompts
|
||||
from samples.concepts.prompt_templates.load_yaml_prompt import main as load_yaml_prompt
|
||||
from samples.concepts.prompt_templates.template_language import main as template_language
|
||||
from samples.concepts.rag.rag_with_vector_collection import main as rag_with_vector_collection
|
||||
from samples.concepts.service_selector.custom_service_selector import main as custom_service_selector
|
||||
from samples.concepts.text_completion.text_completion import main as text_completion
|
||||
from samples.getting_started_with_agents.chat_completion.step01_chat_completion_agent_simple import (
|
||||
main as step1_chat_completion_agent_simple,
|
||||
)
|
||||
from samples.getting_started_with_agents.chat_completion.step03_chat_completion_agent_with_kernel import (
|
||||
main as step2_chat_completion_agent_with_kernel,
|
||||
)
|
||||
from samples.getting_started_with_agents.chat_completion.step04_chat_completion_agent_plugin_simple import (
|
||||
main as step3_chat_completion_agent_plugin_simple,
|
||||
)
|
||||
from samples.getting_started_with_agents.chat_completion.step05_chat_completion_agent_plugin_with_kernel import (
|
||||
main as step4_chat_completion_agent_plugin_with_kernel,
|
||||
)
|
||||
from samples.getting_started_with_agents.chat_completion.step06_chat_completion_agent_group_chat import (
|
||||
main as step5_chat_completion_agent_group_chat,
|
||||
)
|
||||
from samples.getting_started_with_agents.openai_assistant.step1_assistant import main as step1_openai_assistant
|
||||
from tests.utils import retry
|
||||
|
||||
# These environment variable names are used to control which samples are run during integration testing.
|
||||
# This has to do with the setup of the tests and the services they depend on.
|
||||
COMPLETIONS_CONCEPT_SAMPLE = "COMPLETIONS_CONCEPT_SAMPLE"
|
||||
MEMORY_CONCEPT_SAMPLE = "MEMORY_CONCEPT_SAMPLE"
|
||||
|
||||
concepts = [
|
||||
param(
|
||||
semantic_caching,
|
||||
[],
|
||||
id="semantic_caching",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
simple_chatbot,
|
||||
["Why is the sky blue in one sentence?", "exit"],
|
||||
id="simple_chatbot",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
simple_chatbot_streaming,
|
||||
["Why is the sky blue in one sentence?", "exit"],
|
||||
id="simple_chatbot_streaming",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
simple_chatbot_with_image,
|
||||
["exit"],
|
||||
id="simple_chatbot_with_image",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
simple_chatbot_logit_bias,
|
||||
["Who has the most career points in NBA history?", "exit"],
|
||||
id="simple_chatbot_logit_bias",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
simple_chatbot_kernel_function,
|
||||
["Why is the sky blue in one sentence?", "exit"],
|
||||
id="simple_chatbot_kernel_function",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
chat_completion_with_function_calling,
|
||||
["What is 3+3?", "exit"],
|
||||
id="chat_completion_with_function_calling",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
auto_function_invoke_filters,
|
||||
["What is 3+3?", "exit"],
|
||||
id="auto_function_invoke_filters",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
function_invocation_filters,
|
||||
["What is 3+3?", "exit"],
|
||||
id="function_invocation_filters",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
function_invocation_filters_stream,
|
||||
["What is 3+3?", "exit"],
|
||||
id="function_invocation_filters_stream",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
prompt_filters,
|
||||
["What is the fastest animal?", "exit"],
|
||||
id="prompt_filters",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
retry_with_different_model,
|
||||
[],
|
||||
id="retry_with_different_model",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None,
|
||||
reason="Not running completion samples.",
|
||||
),
|
||||
),
|
||||
param(
|
||||
kernel_arguments,
|
||||
[],
|
||||
id="kernel_arguments",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
grounded,
|
||||
[],
|
||||
id="grounded",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
openai_function_calling_with_custom_plugin,
|
||||
[],
|
||||
id="openai_function_calling_with_custom_plugin",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
plugins_from_dir,
|
||||
[],
|
||||
id="plugins_from_dir",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
azure_chat_gpt_api_handlebars,
|
||||
["What is 3+3?", "exit"],
|
||||
id="azure_chat_gpt_api_handlebars",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
azure_chat_gpt_api_jinja2,
|
||||
["What is 3+3?", "exit"],
|
||||
id="azure_chat_gpt_api_jinja2",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
agent_with_mcp_agent,
|
||||
["what restaurants can I choose from?", "the farm sounds nice, what are the specials there?", "exit"],
|
||||
id="agent_with_mcp_agent",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
configuring_prompts,
|
||||
["What is my name?", "exit"],
|
||||
id="configuring_prompts",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
load_yaml_prompt,
|
||||
[],
|
||||
id="load_yaml_prompt",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
template_language,
|
||||
[],
|
||||
id="template_language",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
simple_memory,
|
||||
[],
|
||||
id="simple_memory",
|
||||
marks=pytest.mark.skipif(os.getenv(MEMORY_CONCEPT_SAMPLE, None) is None, reason="Not running memory samples."),
|
||||
),
|
||||
param(rag_with_vector_collection, [], id="rag_with_vector_collection"),
|
||||
param(
|
||||
custom_service_selector,
|
||||
[],
|
||||
id="custom_service_selector",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
function_defined_in_json_prompt,
|
||||
["What is 3+3?", "exit"],
|
||||
id="function_defined_in_json_prompt",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
function_defined_in_yaml_prompt,
|
||||
["What is 3+3?", "exit"],
|
||||
id="function_defined_in_yaml_prompt",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
step1_chat_completion_agent_simple,
|
||||
[],
|
||||
id="step1_chat_completion_agent_simple",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
step2_chat_completion_agent_with_kernel,
|
||||
[],
|
||||
id="step2_chat_completion_agent_with_kernel",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
step3_chat_completion_agent_plugin_simple,
|
||||
[],
|
||||
id="step3_chat_completion_agent_plugin_simple",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
step4_chat_completion_agent_plugin_with_kernel,
|
||||
[],
|
||||
id="step4_chat_completion_agent_plugin_with_kernel",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
step5_chat_completion_agent_group_chat,
|
||||
[],
|
||||
id="step5_chat_completion_agent_group_chat",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
step1_openai_assistant,
|
||||
[],
|
||||
id="step1_openai_assistant",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
ollama_chat_completion,
|
||||
["Why is the sky blue?", "exit"],
|
||||
id="ollama_chat_completion",
|
||||
marks=pytest.mark.skip(reason="Need to set up Ollama locally. Check out the module for more details."),
|
||||
),
|
||||
param(
|
||||
lm_studio_chat_completion,
|
||||
["Why is the sky blue?", "exit"],
|
||||
id="lm_studio_chat_completion",
|
||||
marks=pytest.mark.skip(reason="Need to set up LM Studio locally. Check out the module for more details."),
|
||||
),
|
||||
param(
|
||||
lm_studio_text_embedding,
|
||||
[],
|
||||
id="lm_studio_text_embedding",
|
||||
marks=pytest.mark.skip(reason="Need to set up LM Studio locally. Check out the module for more details."),
|
||||
),
|
||||
param(
|
||||
image_generation,
|
||||
[],
|
||||
id="image_generation",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
text_completion,
|
||||
[],
|
||||
id="text_completion",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
param(
|
||||
text_embedding_generation,
|
||||
[],
|
||||
id="text_embedding_generation",
|
||||
marks=pytest.mark.skipif(
|
||||
os.getenv(COMPLETIONS_CONCEPT_SAMPLE, None) is None, reason="Not running completion samples."
|
||||
),
|
||||
),
|
||||
]
|
||||
|
||||
|
||||
@mark.parametrize("sample, responses", concepts)
|
||||
async def test_concepts(sample: Callable[..., Awaitable[Any]], responses: list[str], monkeypatch):
|
||||
saved_responses = copy.deepcopy(responses)
|
||||
|
||||
def reset():
|
||||
responses.clear()
|
||||
responses.extend(saved_responses)
|
||||
|
||||
monkeypatch.setattr("builtins.input", lambda _: responses.pop(0))
|
||||
await retry(sample, retries=3, reset=reset)
|
||||
Reference in New Issue
Block a user