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")