File size: 2,001 Bytes
c976bfb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
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
# Load environment variables from .env file
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:
# Save the original user request
request = context["input"]
context["original_request"] = request
# Define plugins directory
pluginsDirectory = "./functions/SK/plugins"
self._kernel.import_semantic_skill_from_directory(pluginsDirectory, "SQLskill")
## Semantic Functions
CreateSQLQuery = self._kernel.skills.get_function("SQLskill", "CreateSQLQuery")
CreateSQLResponse = self._kernel.skills.get_function("SQLskill", "CreateResponse")
## Native Functions
self._kernel.import_skill(SQLGetQuery(self._kernel), skill_name="SQLGetQuery")
GetSQLResult = self._kernel.skills.get_function("SQLGetQuery", "dbQuery")
# Run the functions in a pipeline
output = await self._kernel.run_async(
CreateSQLQuery,
GetSQLResult,
CreateSQLResponse,
input_context=context,
)
return output["input"].replace("\n\n", "\n") |