|
|
import os |
|
|
from semantic_kernel import Kernel |
|
|
from semantic_kernel.orchestration.sk_context import SKContext |
|
|
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion |
|
|
from semantic_kernel.utils.settings import openai_settings_from_dot_env |
|
|
from semantic_kernel.skill_definition import sk_function, sk_function_context_parameter |
|
|
from .SQLFunctions import SQLGetQuery |
|
|
|
|
|
|
|
|
from dotenv import load_dotenv |
|
|
load_dotenv() |
|
|
|
|
|
class SQLskill: |
|
|
def __init__(self): |
|
|
self._kernel = Kernel() |
|
|
api_key, org_id = os.environ['OPENAI_API_KEY'], "" |
|
|
self._kernel.add_text_completion_service( |
|
|
"dv", OpenAIChatCompletion(os.environ['OPENAI_MODEL_NAME'], api_key, org_id) |
|
|
) |
|
|
@sk_function( |
|
|
description="Routes the request to the appropriate function", |
|
|
name="sql_request", |
|
|
) |
|
|
@sk_function_context_parameter(name="input", description="The raw question for querying") |
|
|
async def RouteRequest(self, context: SKContext) -> str: |
|
|
|
|
|
request = context["input"] |
|
|
context["original_request"] = request |
|
|
|
|
|
|
|
|
pluginsDirectory = "./functions/SK/plugins" |
|
|
self._kernel.import_semantic_skill_from_directory(pluginsDirectory, "SQLskill") |
|
|
|
|
|
CreateSQLQuery = self._kernel.skills.get_function("SQLskill", "CreateSQLQuery") |
|
|
CreateSQLResponse = self._kernel.skills.get_function("SQLskill", "CreateResponse") |
|
|
|
|
|
self._kernel.import_skill(SQLGetQuery(self._kernel), skill_name="SQLGetQuery") |
|
|
GetSQLResult = self._kernel.skills.get_function("SQLGetQuery", "dbQuery") |
|
|
|
|
|
|
|
|
output = await self._kernel.run_async( |
|
|
CreateSQLQuery, |
|
|
GetSQLResult, |
|
|
CreateSQLResponse, |
|
|
input_context=context, |
|
|
) |
|
|
return output["input"].replace("\n\n", "\n") |