167 lines
5.5 KiB
Python
167 lines
5.5 KiB
Python
import openai
|
|
from semantic_kernel import Kernel
|
|
from semantic_kernel.agents import ChatCompletionAgent
|
|
from semantic_kernel.connectors.ai.open_ai import (
|
|
OpenAIChatCompletion,
|
|
OpenAITextCompletion,
|
|
OpenAITextEmbedding,
|
|
)
|
|
from semantic_kernel.contents import ChatHistory
|
|
from semantic_kernel.functions import KernelArguments
|
|
|
|
from tests.tracing.helper import reset_autolog_state # noqa: F401
|
|
|
|
|
|
async def _create_and_invoke_kernel_simple(mock_openai):
|
|
openai_client = openai.AsyncOpenAI(api_key="test", base_url=mock_openai)
|
|
|
|
kernel = Kernel()
|
|
kernel.add_service(
|
|
OpenAIChatCompletion(
|
|
service_id="chat-gpt",
|
|
ai_model_id="gpt-4o-mini",
|
|
async_client=openai_client,
|
|
)
|
|
)
|
|
return await kernel.invoke_prompt("Is sushi the best food ever?")
|
|
|
|
|
|
async def _create_and_invoke_kernel_complex(mock_openai):
|
|
from semantic_kernel.prompt_template import PromptTemplateConfig
|
|
|
|
openai_client = openai.AsyncOpenAI(api_key="test", base_url=mock_openai)
|
|
kernel = Kernel()
|
|
kernel.add_service(
|
|
OpenAIChatCompletion(
|
|
service_id="chat-gpt",
|
|
ai_model_id="gpt-4o-mini",
|
|
async_client=openai_client,
|
|
)
|
|
)
|
|
|
|
settings = kernel.get_prompt_execution_settings_from_service_id("chat-gpt")
|
|
settings.max_tokens = 100
|
|
settings.temperature = 0.7
|
|
settings.top_p = 0.8
|
|
|
|
prompt_template_config = PromptTemplateConfig(
|
|
template="{{$chat_history}}{{$user_input}}", allow_dangerously_set_content=True
|
|
)
|
|
|
|
chat_function = kernel.add_function(
|
|
plugin_name="ChatBot",
|
|
function_name="Chat",
|
|
prompt_template_config=prompt_template_config,
|
|
template_format="semantic-kernel",
|
|
prompt_execution_settings=settings,
|
|
)
|
|
|
|
chat_history = ChatHistory(
|
|
system_message=(
|
|
"You are a chat bot named Mosscap, dedicated to figuring out what people need."
|
|
)
|
|
)
|
|
chat_history.add_user_message("Hi there, who are you?")
|
|
chat_history.add_assistant_message(
|
|
"I am Mosscap, a chat bot. I'm trying to figure out what people need."
|
|
)
|
|
user_input = "I want to find a hotel in Seattle with free wifi and a pool."
|
|
|
|
return await kernel.invoke(
|
|
chat_function,
|
|
KernelArguments(
|
|
user_input=user_input,
|
|
chat_history=chat_history,
|
|
),
|
|
allow_dangerously_set_content=True,
|
|
)
|
|
|
|
|
|
async def _create_and_invoke_chat_agent(mock_openai):
|
|
openai_client = openai.AsyncOpenAI(api_key="test", base_url=mock_openai)
|
|
service = OpenAIChatCompletion(
|
|
service_id="chat-gpt",
|
|
ai_model_id="gpt-4o-mini",
|
|
async_client=openai_client,
|
|
)
|
|
agent = ChatCompletionAgent(
|
|
service=service,
|
|
name="sushi_agent",
|
|
instructions="You are a master at all things sushi. But, you are not very smart.",
|
|
)
|
|
return await agent.get_response(messages="How do I make sushi?")
|
|
|
|
|
|
async def _create_and_invoke_text_completion(mock_openai):
|
|
"""Test text completion methods - parser extracts {"prompt": "..."}"""
|
|
openai_client = openai.AsyncOpenAI(api_key="test", base_url=mock_openai)
|
|
kernel = Kernel()
|
|
kernel.add_service(
|
|
OpenAITextCompletion(
|
|
service_id="text-davinci",
|
|
ai_model_id="text-davinci-003",
|
|
async_client=openai_client,
|
|
)
|
|
)
|
|
text_service = kernel.get_service("text-davinci")
|
|
settings = kernel.get_prompt_execution_settings_from_service_id("text-davinci")
|
|
return await text_service.get_text_content("Complete this: The sky is", settings)
|
|
|
|
|
|
async def _create_and_invoke_embeddings(mock_openai):
|
|
"""Test embedding methods - parser extracts {"texts": [...]}"""
|
|
openai_client = openai.AsyncOpenAI(api_key="test", base_url=mock_openai)
|
|
embedding_service = OpenAITextEmbedding(
|
|
service_id="embedding",
|
|
ai_model_id="text-embedding-ada-002",
|
|
async_client=openai_client,
|
|
)
|
|
texts = ["Hello world", "Semantic kernel", "MLflow tracing"]
|
|
return await embedding_service.generate_embeddings(texts)
|
|
|
|
|
|
async def _create_and_invoke_chat_completion_direct(mock_openai):
|
|
"""Test direct chat completion - parser extracts {"messages": [...]}"""
|
|
openai_client = openai.AsyncOpenAI(api_key="test", base_url=mock_openai)
|
|
kernel = Kernel()
|
|
kernel.add_service(
|
|
OpenAIChatCompletion(
|
|
service_id="chat",
|
|
ai_model_id="gpt-4o-mini",
|
|
async_client=openai_client,
|
|
)
|
|
)
|
|
|
|
chat_history = ChatHistory()
|
|
chat_history.add_user_message("What is semantic kernel?")
|
|
chat_history.add_assistant_message("Semantic Kernel is an AI orchestration framework.")
|
|
chat_history.add_user_message("Tell me more about it.")
|
|
|
|
chat_service = kernel.get_service("chat")
|
|
settings = kernel.get_prompt_execution_settings_from_service_id("chat")
|
|
return await chat_service.get_chat_message_content(chat_history, settings)
|
|
|
|
|
|
async def _create_and_invoke_kernel_function_object(mock_openai):
|
|
"""
|
|
Test kernel.invoke with function object and arguments
|
|
"""
|
|
openai_client = openai.AsyncOpenAI(api_key="test", base_url=mock_openai)
|
|
kernel = Kernel()
|
|
kernel.add_service(
|
|
OpenAIChatCompletion(
|
|
service_id="chat",
|
|
ai_model_id="gpt-4o-mini",
|
|
async_client=openai_client,
|
|
)
|
|
)
|
|
|
|
function = kernel.add_function(
|
|
plugin_name="MathPlugin",
|
|
function_name="Add",
|
|
prompt="Add {{$num1}} and {{$num2}}",
|
|
template_format="semantic-kernel",
|
|
)
|
|
|
|
return await kernel.invoke(function, KernelArguments(num1=5, num2=3))
|